UDP与IP分片
一、引言

UDP是简单的面向数据报的运输层协议。UDP不提供可靠性:它负责把应用程序传给IP层的数据发送出去,不保证能导到目的地。
二、UDP首部

端口号表示发送进程和接受进程。由于IP层已经把IP数据报分配给了TCP和UDP,因此TCP和UDP端口号是相互独立的。
UDP长度字段指的是UDP首部和UDP数据的自己长度。
三、IP分片
由于物理网络层一般要限制每次发送数据帧的最大长度,因此当IP数据报的长度大于MTU时,就会发送IP分片。
- 分片可以发生在原始发送端主机上,也可以发生在中间路由器上。
- 已经分片过的数据报可能会再次进行分片(可能不止一次)
- IP数据报被分片以后,只有到达目的地才进行由目的端的IP层进行组装。

IP首部的16位标识、3位标志及13位片偏移用户分片过程。
- 16位标识可以唯一确定一份IP数据报
- 标志字段用一个比特来表示“更多的片”,除了最后一片外,其他每片都把该位置为1
- 标志字段有一个比特称为“不分片”位。若为1,IP不对数据报进行分片,而是将数据报丢弃并发送一个ICMP差错报文给起始端
- 片偏移字段指的是该片偏移原始数据报开始处的位置
- 分片以后,每片的总长度值要修改为该片的长度值
- 分片以后,任何传输层的首部都只出现在第一片数据中

四、ICMP不可达差错(需要分片)
当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片标志比特,路由器会发送ICMP不可达差错给源端。
可以利用这一特性来判断到达目的端的路途中的最小MTU。