【网络编程】UDP协议和TCP协议1

news2025/2/25 17:30:20

UDP协议格式

在这里插入图片描述
UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。

UDP协议如何将报头和有效载荷分离

UDP报头是一种定长报头,长度为8个字节。UDP在读取报文时,首先读取这8个字节的报头,剩下的部分就是有效载荷。

特点

1.无连接:知道两端的ip和端口即可直接传输
2.不可靠:没有确认机制,没有重传,因为网络故障无法发送到对方,UDP协议层也不会返回任何错误信息。
3.面向数据报:应用层交给UDP多长的报文,UDP原样发送,既不拆分也不合并。(如果发送端调用一次sendto发送100个字节,接收端必须调用一次recvfrom接收100个字节;而不能循环调用10次每次10个)

UDP的缓冲区

UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;
UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;

TCP协议格式

在这里插入图片描述
应用层对数据处理,调用write,sendto等接口将数据从用户缓冲区发送到传输层TCP的发送缓冲区,由TCP协议决定数据怎么发,发错了怎么办。接收缓冲区收到数据,由read,recv等接口读到用户级缓冲区。

窗口大小

16位窗口大小是自己的接收缓冲区剩余大小,用于流量控制。
接收端在对发送端发送过来的数据进行响应时,可以通过 TCP 的报头中的 16 位窗口大小来告知发送端自己当前接收缓冲区剩余空间的大小。此时,发送端就可以根据这个窗口大小来调整自己发送数据的速度。

窗口大小字段越大,说明接收端处理数据的能力越强,发送端可以适当地提高数据的发送速度。
窗口大小字段越小,说明接收端处理数据的能力越弱,发送端需要适当地降低数据的发送速度。 当窗口大小字段等于 0
时,说明接收端的接收缓冲区已经没有剩余空间了,发送端应该停止发送数据直到接收端处理完一些数据,接收缓冲区中有空间剩余。 通过 16 位窗口大小告知对方自己的接收能力,这样就可以做到流量控制了。

  • 在进行套接字编程时,我们调用 write / send函数向套接字中写入数据时,可能会因为套接字的发送缓冲区已经被写满而被阻塞住了,其本质就是 TCP 中的发送缓冲区已经被写满了,所以write / send 函数就需要阻塞到发送缓冲区有足够的空间来存储数据。
  • 我们调用 read / recv 函数从套接字中读取数据时,可能会因为套接字中的接收缓冲区中没有数据而被阻塞住了,其本质就是 TCP 中的接收缓冲区中没有数据,所以read / recv 就需要阻塞到接收缓冲区中有一定数量的数据。
  • 调用 write / send 和 read / recv函数会被阻塞注,本质就是生产者消费者模型中的临界资源没有就绪,需要阻塞等待直到条件满足。

如何将报头和有效载荷分离?

固定长度+自描述字段

读取报文的前20个字节:当TCP获取到一个报文后,首先会读取报文的前20个字节。这20个字节包含了TCP报头的基本信息,如源端口号、目的端口号、序列号、确认号等。
提取首部长度字段:在这20个字节中,TCP会提取出4位的首部长度字段。这个字段表示的是TCP报头的总长度,单位是4字节。因此,通过读取这个字段,TCP就可以知道报头的实际大小(size)。
判断是否存在选项字段:如果首部长度字段表示的大小(size)大于20字节,那么就说明TCP报头中还包含了选项字段。选项字段是可选的,它包含了一些用于控制TCP连接行为的参数。
读取选项字段:如果存在选项字段,TCP就需要继续从报文中读取size -20字节的数据。这部分数据就是TCP报头中的选项字段。选项字段的长度可以是0到40字节之间(因为TCP报头的最大长度是60字节,基本报头长度是20字节)。
分离有效载荷:读取完TCP的基本报头和选项字段后,剩下的部分就是有效载荷了。有效载荷是TCP报文的实际数据部分,它承载了应用层要传输的信息。

理解确认应答机制

发送方首先进行序列号分配,将数据分成tcp段的较小单元,并为每一个分段分配一个唯一的序列号,发送给接收方同时也会启动一个计时器,接收方接收到数据会回复一个ACK(确认序号),采用累计确认的方式即可以接收到多个数据包再发送一个累计的ACK。

重传机制:如果在计时器规定的时间内没有发送方没有收到应答便会重传数据包。
滑动窗口:允许接收方在发送一个ACK之前接收多个数据包,而不仅仅是接收一个数据包就发送一个ACK。
选择性确认(SACK):虽然TCP主要使用累积确认,但还支持一种称为选择性确认(SACK)的扩展。使用SACK,接收方可以明确地告诉发送方哪些数据包已经成功接收,哪些数据包丢失了,从而允许发送方只重传丢失的数据包,而不是整个数据流。
快速重传和快速恢复:当接收方收到一个乱序的数据包时,它会立即发送一个重复的ACK,这个重复的ACK的确认号仍然指向期望接收的下一个字节的序号。如果发送方收到三个或更多的重复ACK,它会触发快速重传机制,即立即重传缺失的数据包,而不需要等待重传超时。快速恢复是与快速重传一起使用的机制,它允许发送方在重传数据包之后立即回到之前的传输状态,而不是像正常重传那样进入慢启动阶段。

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

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

相关文章

数控六面钻适用场景-不止家具制造

在快节奏的现代生活中,家具作为我们生活的重要组成部分,其美观度和实用性日益受到人们的关注。而在这背后,一个不可或缺的“工匠”正默默地发挥着它的作用——那就是数控六面钻。 数控六面钻,顾名思义,是一种高度自动…

深入理解Java HashSet类及其实现原理

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

JavaScript数字(Number)个数学(Math)对象

目录 前言: Number(数字)对象 前言: nfinity(正负无穷大): NaN(非数字): Number的属性 Number的方法 构造函数 静态方法 实例方法 Math(数学)对象…

【hackmyvm】 Animetronic靶机

靶机测试 arp-scanporturl枚举exiftool套中套passwordsudo 提权 arp-scan arp-scan 检测局域网中活动的主机 192.168.9.203 靶机IP地址port 通过nmap扫描,获取目标主机的端口信息 ┌──(root㉿kali)-[/usr/share/seclists] └─# nmap -sT -sV -O 192.16…

Java入门基础学习笔记12——变量详解

变量详解: 变量里的数据在计算机中的存储原理。 二进制: 只有0和1, 按照逢2进1的方式表示数据。 十进制转二进制的算法: 除二取余法。 6是110 13是1101 计算机中表示数据的最小单元:一个字节(byte&…

今日arXiv最热NLP大模型论文:NAACL24实锤语言学对大模型“负优化”,抽象语义表示+思维链有损表现

大语言模型正以势不可挡的姿态席卷自然语言处理领域。在这个语言模型大显神威的时代,很多任务都转变为了端到端的文本生成任务。那么,在此之前我们苦心孤诣研究了几十年的语义表示,例如 AMR(抽象意义表示),在这个时代里还能派上用…

docker部署seata与客户端整合seata

微服务和seata的版本关系 1:docker pull seataio/seata-server拉取镜像 [root@WFWCS ~]# docker search seata NAME DESCRIPTION STARS OFFICIAL apache/seata-server Apach…

目前市面上堡垒机厂家有哪些?会帮忙部署吗?

随着大家对于网络安全的重视,越来越多的企业准备采购堡垒机了。不少企业在问,目前市面上堡垒机厂家有哪些?会帮忙部署吗?这里我们小编就来简单为大家回答一下,仅供参考哈! 目前市面上堡垒机厂家有哪些&…

【17-Ⅱ】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础,通过阅读Java廖雪峰网站,简单速成了java,但对其中一些入门概念有所疏漏,阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

《十二》Qt各种对话框之FileDialog文件对话框及QMessageBox 消息对话框

QFileDialog 对话框 选择打开一个文件 若要打开一个文件,可调用静态函数 QFileDialog::getOpenFileName(),“打开一个文件”按钮的响应代码如下: void Dialog::on_btnOpen_clicked() { //选择单个文件QString curPathQDir::currentPath()…

安卓通信方式简介

目录 一、Binder二、Socket三、Binder与Socket四、Handler 一、Binder Binder作为Android系统提供的一种IPC机制,无论从系统开发还是应用开发,都是Android系统中最重要的组成。 二、Socket Socket通信方式也是C/S架构,比Binder简单很多。在…

Veeam - 数据保护和管理解决方案_Windows平台部署备份还原VMware手册

Veeam - - 数据保护和管理解决方案 Veeam Backup & Replication Console Veeam Data Platform Veeam Backup & Replication是一款强大的虚拟机备份、恢复和复制解决方案 安全备份、干净恢复和数据弹性 — 即时交付 在混合云中随时随地管理、控制、备份和恢复您的所有数…

debian testing (预计13版本)wps字体无法正常显示

背 景 本人使用debian办公,原来使用的是debian 12,由于“生命不息,折腾不止“,终于将稳定版的debian 12升级为testing. 结果发现,debian 12能够正常使用的wps存在部分字体无法正常显示,经研究发现,原来是w…

论文《Deep graph tensor learning for temporal link prediction》阅读

论文《Deep graph tensor learning for temporal link prediction》阅读 论文概况IntroductionRelated work动态图表示学习图张量表示 Preliminary张量生成建模 深度图张量学习模型A.基于图紧凑的空间表示B.时间模式表示C.时空特征聚合D.损失函数 实验消融实验 总结 论文概况 …

【C++】学习笔记——string_5

文章目录 六、string类7. string类的模拟实现8. string类的模拟实现的完整代码string.h头文件test.c源文件 9. string收尾写时拷贝 未完待续 六、string类 7. string类的模拟实现 我们之前讲了实现 insert ,但是那个插入函数仅仅是在 pos 位置插入一个字符而且&am…

提取网页元数据的Python库之lassie使用详解

概要 Lassie是一个用于提取网页元数据的Python库,它能够智能地抓取网页的标题、描述、关键图像等内容。Lassie的设计目的是为了简化从各种类型的网页中提取关键信息的过程,适用于需要预览链接内容的应用场景。 安装 安装Lassie非常简单,可以通过Python的包管理器pip进行安…

多目标跟踪入门介绍

多目标跟踪算法 我们也可以称之为 Multi-Target-Tracking (MTT)。 那么多目标跟踪是什么? 不难看出,跟踪算法同时会为每个目标分配一个特定的 id 。 由此得出了目标跟踪与目标检测的区别(似乎都是用方框来框出目标捏…

PLC设备通过智能网关采用HTTP协议JSON文件对接MES等系统平台

智能网关IGT-DSER集成了多种PLC的原厂协议,方便实现各种PLC、智能仪表通过HTTP协议与MES等各种系统平台通讯对接。PLC内不用编写程序,设备不用停机,通过网关的参数配置软件(下载地址)配置JSON文件的字段与PLC寄存器地址等参数即可。 智能网关…

小程序如何确定会员身份并批量设置会员积分或余额

因为一些原因,商家需要从其它系统里面批量导入会员,确定会员身份,然后给他们设置对应的账户余额。下面,就具体介绍如何进行这种操作。 一、客户进入小程序并绑定手机号 进入小程序:客户打开小程序,系统会自…

利用AI提高内容生产效率的五个方案

目录 如何利用AI提高内容生产效率? ​编辑方向一:自动化内容生成 方向二:内容分发与推广 方向三:内容分析与优化 方向四:图像和音频处理 方向五:自动编辑和校对 如何利用AI提高内容生产效率? 简介&#xff1a…