UDP ,你要耗子喂汁呀!(三)

简介: 欢迎阅读「程序员cxuan」 的文章,从今往后,你就是我的读者了。你可以加个星标,及时阅读最新文章哦!

UDP 报文结构

下面来一起看一下 UDP 的报文结构,每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长(2 字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。

微信图片_20220416141057.png

  • 源端口号(Source Port) :这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选项,有时不会设置源端口号。没有源端口号就默认为 0 ,通常用于不需要返回消息的通信中。
  • 目标端口号(Destination Port): 表示接收端端口,字段长为 16 位
  • 长度(Length): 该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8,最大长度为 65535 字节。
  • 校验和(Checksum):UDP 使用校验和来保证数据安全性,UDP 的校验和也提供了差错检测功能,差错检测用于校验报文段从源到目标主机的过程中,数据的完整性是否发生了改变。发送方的 UDP 对报文段中的 16 比特字的和进行反码运算,求和时遇到的位溢出都会被忽略,比如下面这个例子,三个 16 比特的数字进行相加

微信图片_20220416141100.png


这些 16 比特的前两个和是

微信图片_20220416141104.png

然后再将上面的结果和第三个 16 比特的数进行相加

微信图片_20220416141107.png

最后一次相加的位会进行溢出,溢出位 1 要被舍弃,然后进行反码运算,反码运算就是将所有的 1 变为 0 ,0 变为 1。因此 1000 0100 1001 0101 的反码就是 0111 1011 0110 1010,这就是校验和,如果在接收方,数据没有出现差错,那么全部的 4 个 16 比特的数值进行运算,同时也包括校验和,如果最后结果的值不是 1111 1111 1111 1111 的话,那么就表示传输过程中的数据出现了差错。

下面来想一个问题,为什么 UDP 会提供差错检测的功能?

这其实是一种 端到端 的设计原则,这个原则说的是要让传输中各种错误发生的概率降低到一个可以接受的水平

文件从主机A传到主机B,也就是说AB主机要通信,需要经过三个环节:首先是主机A从磁盘上读取文件并将数据分组成一个个数据包packet,,然后数据包通过连接主机A和主机B的网络传输到主机B,最后是主机B收到数据包并将数据包写入磁盘。在这个看似简单其实很复杂的过程中可能会由于某些原因而影响正常通信。比如:磁盘上文件读写错误、缓冲溢出、内存出错、网络拥挤等等这些因素都有可能导致数据包的出错或者丢失,由此可见用于通信的网络是不可靠的。

由于实现通信只要经过上述三个环节,那么我们就想是否在其中某个环节上增加一个检错纠错机制来用于对信息进行把关呢?

网络层肯定不能做这件事,因为网络层的最主要目的是增大数据传输的速率,网络层不需要考虑数据的完整性,数据的完整性和正确性交给端系统去检测就行了,因此在数据传输中,对于网络层只能要求其提供尽可能好的数据传输服务,而不可能寄希望于网络层提供数据完整性的服务。

UDP 不可靠的原因是它虽然提供差错检测的功能,但是对于差错没有恢复能力更不会有重传机制

相关文章
|
3月前
|
网络协议 安全
TCP连接和断连夺命6连问
这篇文章详细解答了TCP协议中三次握手建立连接和四次挥手断开连接过程中的六个常见疑问,包括为什么需要三次而不是二次握手、初始化序列号为何每次都要不一样、为何断开连接需要四次而不是三次握手、TIME_WAIT状态的原因和作用,以及TIME_WAIT等待2MSL时间的原因。
61 1
|
3月前
|
网络协议 安全
揭秘TCP背后的秘密:为何三次握手是连接的灵魂,四次挥手是告别的艺术,让数据传输稳如老狗!
【8月更文挑战第4天】TCP为何需三次握手和四次挥手?三次握手确保连接建立时双方均准备好并确认序列号,过程包括:客户端发SYN包;服务器回应SYN+ACK;客户端再回ACK确认,确保可靠通信。四次挥手则确保连接终止时双方能安全、有序地结束数据传输,包括客户端发FIN包;服务器回应ACK并可能继续发送数据;完成后发FIN包;客户端最终确认,确保无数据丢失或状态不一致。
69 9
|
6月前
|
网络协议
【掰开揉碎】WebSocket与TCP/IP
【掰开揉碎】WebSocket与TCP/IP
|
消息中间件 网络协议 JavaScript
面试官:一台服务器最大能支持多少条 TCP 连接?问倒一大片。。。
面试官:一台服务器最大能支持多少条 TCP 连接?问倒一大片。。。
|
网络协议 网络性能优化
重新认识 TCP 三次握⼿ 和 四次挥⼿
重新认识 TCP 三次握⼿ 和 四次挥⼿
63 0
|
网络协议 算法 安全
长篇tcp 网络,汇集大小厂经典问题
还在等什么,快来一起讨论关注吧,公众号【八点半技术站】,欢迎加入社群
长篇tcp 网络,汇集大小厂经典问题
|
网络协议 安全 Linux
《我要进大厂》- 计算机网络夺命连环23问,你能坚持到第几问?(TCP 三次握手、四次挥手
《我要进大厂》- 计算机网络夺命连环23问,你能坚持到第几问?(TCP 三次握手、四次挥手
《我要进大厂》- 计算机网络夺命连环23问,你能坚持到第几问?(TCP 三次握手、四次挥手
|
缓存 网络协议 Java
TCP学习笔记(二) 相识篇
TCP学习笔记(二) 相识篇
TCP学习笔记(二) 相识篇
|
网络协议
TCP:一个悲伤的故事
TCP:一个悲伤的故事
|
网络协议 程序员 API
UDP ,你要耗子喂汁呀!(一)
欢迎阅读「程序员cxuan」 的文章,从今往后,你就是我的读者了。你可以加个星标,及时阅读最新文章哦!
UDP ,你要耗子喂汁呀!(一)