分片机制有两点不足: - 加重路由器的处理性能;
- 在分片传输中,一旦某个分片丢失,会造成整个 IP 数据包作废。
为了解决这个问题,要使用路径 MTU 发现( Path MTU Discovery )技术。路径 MTU 是指从发送端主机到接收端主机之间不需要分片时最大 MTU 值。即路径中存在的所有数据链路中最小的 MTU 。路径 MTU 发现是从发送主机按照路径 MTU 的值将数据报分片后进行发送,避免在中途的路由器上进行分片处理。
路径 MTU 发现的工作原理如下: - 发送端主机发送 IP 数据包时将其头部的分片禁止标志位设置为 1 。根据这个标志位,途中的路由器即使收到需要分片的大包,也不会分片,而是直接将包丢弃。之后通过一个 ICMP 不可达消息将数据链路上 MTU 值给发送端主机。
- 发送端主机根据收到的 MTU 值对数据包进行分片处理,再把 IP 数据包发送给相同的目的主机。如此重复,直到数据包被发送到目标主机为止没有再收到任何 ICMP ,就认为最后一次 ICMP 所通知的 MTU 即是一个合适的 MTU 值。 MTU 值至少可以缓存约 10 分钟,在这 10 分钟内使用刚得到的 MTU ,过了 10 分钟后就重新做一次路径 MTU 发现。
上面的例子是 UDP ,如果是在 TCP 的情况下,根据路径 MTU 的大小计算出最大段长度( MSS ),然后再根据这些信息进行数据包的发送。因此,在 TCP 中如果使用路径 MTU 发现, IP 层则不会再分片。
|