IP层对UDP分片的原因
由于应用层数据有的时候会超过MTU,超过了链路层的最大运输能力,需要对数据进行分片传输。
TCP协议有着自己的分片规则,UDP没有实现对应的分片,每次都是按照报文传输,不论报文多大。
这就苦了IP层,IP层会对UDP数据包进行分片传输。
IP分片详解
我们看IP是怎么对数据包分片,每个分片都带有IP头信息。
IP数据包头部有三个字段来进行分片:
1、16位标识
16位标识用来唯一标识一个UDP数据包,标志着这个分片属于哪个UDP数据包。
同一个UDP数据包的不同分片对应的16位标识都是一样的。
2、3位标志
分别有三个标志位:
A、 R 保留未使用
B、 DF (Don’t Fragment),不让IP包在路由转发的过程中再次分片,为1表示不能再次分片。
C、 MF (More Fragment ), 后面是否还有其他分片,为1表示还有其他分片,为0表示是最后一个分片
3、13位片偏移
分片在整个UDP数据包中的偏移位置
组装
当分片到达目的主机IP层的时候,会对分片就行重组。
分片可能会乱序的到达主机,仍然可以正确的重组,依据就是16位标识、MF和13位片偏移信息来组装。
由于UDP是不可靠的,当有分片丢失的时候,UDP也不会重传数据包。