众所周知,当IP包的长度大于接口的MTU时,从这个接口上发出去的包需要被分片。这样的分片会产生一些问题。首先,在这些分片包经过的路由器中是不适合将它们重组的。因为存在多条路径时,不能保证所有的分片包都会经过这个路由器。因此在路由器上做重组是不合适的。
当不能在路由器上重组时可能产生以下问题无法解决:PC1 和 PC2会经过网关RT1和PC3进行通信。如果PC1和PC2发送的IP分片包的IP层的ID相同,那么经过RT1的源地址伪装后,运气好的话,PC3不能组装信息成功的话。如果运气不好,分片包组装成功了,就造成会使上层有效信息被损毁,这对某些应用来说显然是一个灾难。
因此尽量不使用IP层的分片会是比较好的选择。可以通过探测,获取路径上最小MTU,发包时使用此MTU就可以保证路径中不会产生IP分片。探测路径最小MTU也很简单。只需要发送探测IP包,在包头中设置不可分片,然后通过是否受到ICMP消息即可确定路径MTU(因为路径中的路由设备在需要分片时不可分片会返回相应ICMP包)。