我知道如果IP有效载荷>然后MTU通常将路由器分段IP数据包。最后,使用字段IP-ID,IP片段偏移和分段标志在目的地组装所有分段的分组。 IP有效负载的最大长度为64K。因此,L4交付64K的有效载荷非常合理。如果L2协议是以太网(通常是这种情况),则MTU将大约为1600字节。因此,IP数据包将在源主机本身被分段。 然而,快速搜索Linux中的IP实现告诉我,在最近的内核中,L4协议是片段友好的,即他们尝试通过移交大小接近MTU的缓冲区来保存IP的碎片工作
考虑到这两个事实,我想知道IP数据包在源主机本身碎片化的频率。 它有时/很少/从不发生吗? 有没有人知道linux内核中的碎片规则是否有例外(即L4协议是否有片段友好的情况)? 如何在Windows等其他常见操作系统中处理? 一般来说,IP数据包的碎片频率是多少?
答案 0 :(得分:4)
虽然从技术上讲,不应该有任何协议没有正确处理IP碎片,但有一些(例如NFS)benefit greatly from lack of fragmentation。
您看到碎片数据包的频率很大程度上取决于您的网络环境。 VPN的数据包封装,设计不当或实现的UDP协议,以及将端到端MTU降低到端点值以下的L1 / L2协议都会导致IP碎片化。
大多数现代主机实施PTMUD,automatically将检测MTU大小,除非涉及non-compliant devices or over-paranoid firewalls。在Ethernet Everywhere的这些日子里,我不认为它们在互联网上特别普遍。