TCP/UDP初识

TCP是面向连接的、可靠的、基于字节流的传输层协议。

面向连接:一定是一对一连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息

可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;

基于字节流的:TCP 协议在传输数据时,并不关心数据的边界。它将数据视为一连串的字节,而不是消息或数据包。这意味着 TCP 不会保留消息边界,它只是负责将字节流从发送端传输到接收端。不会保留发送数据时的任何消息边界。发送方发送的数据可能被 TCP 分割成多个段,也可能将多个消息合并成一个段发送。接收方需要根据应用层协议来识别和重组消息。

TCP格式:

源端口号和目的端口号:与源ip地址和目的ip地址构成四元组

序列号:TCP协议中用于确保数据传输有序性的一种机制。在建立连接时,由计算机生成一个随机数作为初始序列号,并通过SYN包发送给接收端主机。每发送一次数据,序列号就会累加这次发送的数据字节数的大小。

确认应答号:TCP协议中用于确保数据传输可靠性的一种机制,主要作用是解决丢包问题。它指的是接收端期望下一次收到的数据的序列号。当发送端收到接收端发来的确认应答后,可以认为所有在这个序号以前的数据都已经被接收端正常接收。

ACK:除了最初建立连接的SYN包以外,都要设置成1,

RST:当RST位设置为1时,表示TCP连接中出现异常,需要强制断开连接。

SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。

FIN: 当FIN位设置为1时,表示发送端已经完成数据发送,希望断开当前的TCP连接。通信双方在结束数据传输后,可以通过交换FIN位为1的TCP段来关闭连接。FIN位用于优雅地结束一个TCP会话。

首部长度:因为选项是可变长,所以要记录首部长度。udp首部长度固定8个字节,无需记录。

为什么要有tcp?

IP层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。TCP保证网络数据包可靠性。

因为 TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。

连接:用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口大小称为连接。

一个 IP 的服务端监听了一个端口,它的 TCP 的最大连接数是多少?

对于服务端来说,目的 IP 地址是固定的(即服务端的 IP 地址),目的端口号也是固定的(即服务端监听的端口)。因此,变量是源 IP 地址和源端口号。

对于 IPv4,一个 IP 地址由 32 位组成,因此可能的 IP 地址总数是 2^32。

一个端口号由 16 位组成,因此可能的端口号总数是 2^16

最大 TCP 连接数 = 2^32×2^16=2^48

文件描述符限制

每个TCP连接在Linux系统中都被视为一个文件,因此受到文件描述符的限制。存在三种级别的限制:

系统级:整个系统可打开的最大文件描述符数量,可以通过查看 /proc/sys/fs/file-max 来获取。

用户级:特定用户可打开的最大文件描述符数量,可以通过查看 /etc/security/limits.conf 来获取。

进程级:单个进程可打开的最大文件描述符数量,可以通过查看 /proc/sys/fs/nr_open 来获取

存限制

操作系统的内存是有限的,如果内存资源耗尽,可能会导致 "Out of Memory"(OOM)错误。每个TCP连接都需要占用一定的内存资源。

简洁的UDP:

UDP(用户数据报协议,User Datagram Protocol)是一种无连接的、简单的传输层协议。头部只有8个字节。

TCP和UDP的区别:

  1. 连接

    • TCP面向连接,需要在数据传输前建立连接。
    • UDP无连接,可以直接发送数据。
  2. 服务对象

    • TCP提供一对一的通信服务。
    • UDP支持多种通信模式,包括一对一、一对多、多对多。
  3. 可靠性

    • TCP提供可靠交付,确保数据无差错、不丢失、不重复、按序到达。
    • UDP尽力交付,但不保证数据的可靠传输。
  4. 拥塞控制和流量控制

    • TCP具有拥塞控制和流量控制机制。
    • UDP没有这些机制,即使网络拥堵也保持发送速率。
  5. 首部开销

    • TCP首部较长,通常至少20字节,可能更长如果包含选项。
    • UDP首部固定8字节,开销较小。
  6. 传输方式

    • TCP是流式传输,无边界,保证数据顺序和可靠性。
    • UDP基于数据报文传输,有边界,可能会丢包和乱序。
  7. 分片

    • TCP在数据大于MSS时在传输层进行分片,接收端在传输层组装。
    • UDP在数据大于MTU时在IP层进行分片,接收端在IP层组装后传给传输层。

TCP和UDP的应用场景:

数据长度大小:

TCP数据长度=IP总长度-IP首部长度-TCP首部长度

TCP和UDP可以共用端口号吗?

           在数据链路层中,通过 MAC地址来寻找局域网中的主机。在网际层中,通过IP 地址来寻找网络中互连的主机或路由器。在传输层中,需要通过端口进行寻址,来识别同一计算机中同时通信的不同应用程序。
所以,传输层的「端口号」的作用,是为了区分同一个主机上不同应用程序的数据包。
传输层有两个传输协议分别是 TCP 和 UDP,在内核中是两个完全独立的软件模块。
当主机收到数据包后,可以在 IP 包头的「协议号」字段知道该数据包是 TCP/UDP,所以可以根据这个信息确定送给哪个模块(TCP/UDP)处理,送给 TCP/UDP 模块的报文根据「端口号」确定送给哪个应用程序处理。

  • TCP

    适用于需要可靠数据传输的应用,如:远程登录(SSH/Telnet),邮件传输(SMTP),文件传输(FTP),Web浏览(HTTP)
  • UDP

    适用于对实时性要求高的应用,如:某些类型的网络监控工具,DNS查询,在线游戏,实时视频和音频传输(流媒体)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1553343.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙harmonyos next flutter混合开发之开发package

​​​​​​ 创建 package flutter create --templatepackage mypackage package代码如下: 创建hello_world.dart ///HelloWorld返回hello world 拼接param class HelloWorld {String helloWorld(String param) > "hello world ${param}"…

Java的学习(语法相关)

字符串存储的问题 char 和字符串都是字符的集合,它们之间的确有相似性,但在 Java 中它们有着不同的存储机制和处理方式。让我从 char 和 String 的本质区别入手来解释。 1. char 和 String 的区别 char 是基本类型:char 是 Java 中的基本数据…

现在别买理想L7/L8,问界M8要来暴揍友商了

文 | AUTO芯球 作者 | 雷慢 问界又一重磅炸弹要来了, 它就是问界M8, 来看,M8刚又曝光了大量谍照。 现在我打听的消息是这样的, 11月广州车展亮相预售, 12月底正式上市,25年春节前后开始交付&#xff…

TS(type,属性修饰符,抽象类,interface)一次性全部总结

目录 1.type 1.基本用法 2.联合类型 3.交叉类型 2.属性修饰符 1.public 属性修饰符 属性的简写形式 2.proteced 属性修饰符 3.private 属性修饰符 4.readonly 属性修饰符 3.抽象类 4.interface 1.定义类结构 2.定义对象结构 3.定义函数结构 4.接口之间的继…

客厅落地台灯怎么摆放?五款客厅落地台灯款式分享

客厅落地台灯怎么摆放?客厅落地台灯是提升光线环境在室内光线质量的关键设备。但如果不慎购买到低质量的客厅落地台灯,可能会导致光线效果不佳,进而影响视力健康。因此,挑选一个可靠的品牌至关重要。那么,客厅落地台灯…

数据治理006-数据标准的管理

元数据的分类和标准有哪些? 一、元数据的分类 元数据可以根据其描述的对象和属性不同,被分为不同的类型。以下是几种常见的元数据分类方法: 基于数据的类型:根据数据的类型,元数据可以被分为结构化元数据、非结构化元…

软件测试——Python和UnitTest框架

文章目录 一、软件测试1.测试计划和测试方案1.测试计划(管理类型文档)2.测试方案(技术型文档) 2.非功能测试设计3.测试报告1.核心内容 4.处理测试过程中出现不可复现的bug 二、Python1.常用语法1.切片2.字符串查找方法:find()3.字符串替换方法:replace()…

构建应用层(TCP)自定义协议:深入理解序列化与反序列化技术

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 网络版计算器序列化 和 反序列化重新理解 read、write、recv、send 和 tcp 为什么支持全双工自定义协议期望的报文格式 模板方法模式…

开源大数据框架-Ambari+Bigtop如何写metainfo.xml文件

1.如何一键编译?一键安装?你没看错。 👉👉👉 https://gitee.com/tt-bigdata/ambari-env 你以为跟你闹着玩?人狠话不多🙍‍♂️🙍‍♂️🙍‍♂️,直接上图&a…

国庆普及模拟2总结

目录 题目链接: 官方题解: 概述: 总结反思: 题目 T1: 题目分析: 错误代码: 错因: AC代码: T2: 题目分析: 赛时代码&#xf…

Centos Stream 9备份与恢复、实体小主机安装PVE系统、PVE安装Centos Stream 9

最近折腾小主机,搭建项目环境,记录相关步骤 数据无价,丢失难复 1. Centos Stream 9备份与恢复 1.1 系统备份 root权限用户执行进入根目录: cd /第一种方式备份命令: tar cvpzf backup.tgz / --exclude/proc --exclu…

CSS基础-常见属性

6、CSS三大特性 6.1 层叠性 如果样式发生冲突,则按照优先级进行覆盖。 6.2 继承性 元素自动继承其父元素、祖先元素所设置的某些元素,优先继承较近的元素。 6.3 优先级 6.3.1 简单分级 1、内联样式2、ID选择器3、类选择器/属性选择器4、标签名选择器/…

若无向图G(V,E)中含7个顶点,为保证图G在任何情况下都是连通的,则需要的边数最少是多少?

这乍一看是不是可抽象(迷糊)了,butttt待我小翻译一下。 先举少一点的例子,假如我们有三个点,我给你两条边,那是不是不管咋连都一定一定是连通的。 那我们再进一步,假如四个点呢?我给…

大厂进阶之CSS死磕牢记的7大知识点

本文主要讨论7大CSS知识点,个个都是金刚附体,干货满满: 1、移动端样式适配 2、回流和重绘 3、flex布局 4、BFC 5、CSS垂直居中方法 6、CSS两栏、三栏自适应布局 7、CSS单行、多行文本溢出省略号格式 一、如何做到移动端样式适配 1、媒体查询…

CloudCompare插件编写

预置环境:Windows10GitCMake3.23.3VS2019Qt5.14.2 编译CloudCompare工程 首先克隆CloudCompare工程,注意必须加上--recursive否则无法下载完整代码编译会失败: git clone --recursive https://github.com/CloudCompare/CloudCompare.git这…

鸢尾花书实践和知识记录[编程1-11二维和三维可视化]

作者空间 文章目录 思维导图函数使用 二维可视化方案平面散点图散点图的示例代码1:绘制鸢尾花的散点图代码2Plotly绘制散点图 数据类型和绘图工具的对应 平面等高线代码3生成等高线网格数据 plotly.express关键的绘图函数 Plotly的另一个模块代码4 Plotly生成的 热图…

李宏毅深度学习-梯度下降和Normalization归一化

Gradient Descent梯度下降 ▽ -> 梯度gradient -> vector向量 -> 下图中的红色箭头(loss等高线的法线方向) Tip1: Tuning your learning rates Adaptive Learning Rates自适应 通常lr会越来越小 Adaptive Learning Rates中每个参数都给它不同…

如何使用MethodChannel通信

文章目录 1 概念介绍2 实现方法3 经验总结我们在上一章回中介绍了Visibility组件相关的内容,本章回中将介绍Flutter与原生平台通信相关的内容.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在移动开发领域以Android和IOS SDK开发出的应用程序叫原生开发,开发同一个程序…

Redis: Sentinel工作原理和故障迁移流程

Sentinel 哨兵几个核心概念 1 ) 定时任务 Sentinel 它是如何工作的,是如何感知到其他的 Sentinel 节点以及 Master/Slave节点的就是通过它的一系列定时任务来做到的,它内部有三个定时任务 第一个就是每一秒每个 Sentinel 对其他 Sentinel 和 Redis 节点…

【Canvas与徽章】金圈蓝底国庆75周年徽章

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>金边黑盾75周年</title><style type"text/css"&g…