TCP/IP详解卷一 十一章 UDP

描述

面向数据报的运输层协议。由RFC768正是规范
数据报封装
在这里插入图片描述
UDP不提供可靠性,只负责发不保证能发送到
如果数据包超过MTU,那么就要对数据进行分片

UDP首部

在这里插入图片描述
端口号:表示发送进程和接受进程
长度:指的是首部和数据的字节长度,最小值为8字节。数据部分0字节也可以发送。
IP数据报指的是数据报全长,所以可以将全长减去IP首部长度来获得UDP数据报长度
UDP检验和: 包含首部和数据报的检验和,检验和是可选项(TCP数据报必选),长度可以是奇数字节,在必要时会在尾部加0填充

UDP包含12字节的伪首部,为了计算检验和而设置的。包含IP首部的部分字段。让UDP2次检查数据是在否已正确到达目的地
在这里插入图片描述
图中的例子是奇数字节长度的数据报。尾部用0填充
如果检验和的计算结果为 0,则存入的值为全 1(6 5 5 3 5),这在二进制反码计算中是等效
的。如果传送的检验和为 0,说明发送端没有计算检验和。
如果发送端没有计算检验和而接收端检测到检验和有差错,那么 U D P数据报就要被悄悄
地丢弃。不产生任何差错报文(当 I P层检测到I P首部检验和有差错时也这样做)。
但是,许多系统没有遵守这一点,只是在出口检验和选项被打开时才验证
接收到的检验和。

IP分片

ip层收到一份要发送的数据报时,会判断向本地哪个接口发送数据,然后查询此接口的MTU,然后将IP数据报长度与MTU进行比较,如果超过则需要分片。分片可以发生在主机上也可以发生在路由器上。然后到达目的地再组装起来,组装的工作由IP层完成。
分片可以再分片
IP数据报:
在这里插入图片描述

IP首部的标识字段都包含一个唯一的值,该值会保存在每个分片中
标志字段用1个比特来表示有更多的分片,其值是1,除了最后1个分片。因为他是最后一片,没有更多的了。标志字段中还有1个比特位是用来表示是否需要分片。如果值是1,则表示不分片。如果数据报太长而需要分片但是,分片字段设置为0则会被丢弃,并且发送ICMP差错报文
偏移字段:表示偏移原始数据报开始时的位置。
数据报分片后,每片的总长度值为该片的长度值。

IP分片都有自己的首部,在路由选择时各自独立。所以到达目的地址时可能会失序,但是IP首部的信息能够保证他们能正确组装起来。
IP分片哪怕丢失一片就得整个数据报重转,而IP层本身没有重转机制。需要靠更高层的协议来处理重转机制。
并且 如果数据报是在中间路由器发出的时候被分片,而发送端更不知道是如何进行划分的了。所以 尽量避免分片

UDP数据报分片图例
在这里插入图片描述

ICMP 不可达差错报文

当路由器收到1分需要分片的数据报,但是数据报的IP首部的标志位却设置了不分片,那么就会产生ICMP报文。如果某个程序需要判断到达目的端的MTU(路径MTU发现机制),那么这个差错就会被该程序使用
在这里插入图片描述
如果路由器没提供这种格式的报文,那就需要将下一站网络的MTU设为0

最大的UDP数据报长度

IP最大长度是65535字节,去掉IP首部(20字节)和UDP首部(8字节),UDP数据报的最大长度是65507字节,但是一般的实现不会这么大。
大部分默认的最大长度为8192字节

ICMP源站抑制差错

UDP可以产生ICMP源站抑制差错
当1个系统(路由器或主机)接收数据报的速度比其处理速度更快时,就有可能产生此差错报文
在这里插入图片描述
人们对此差错报文的态度是不支持,原因是会消耗网络带宽

发布了239 篇原创文章 · 获赞 31 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/soulwyb/article/details/103309067
今日推荐