源主机IP数据包有多频繁被分片?

4
我知道如果IP负载 > MTU,则路由器通常会分段IP数据包。最后,使用IP-ID、IP片偏移和分段标志字段在目标处组装所有分段的数据包。IP负载的最大长度为64K。因此,L4很可能交付64K的负载。如果L2协议是以太网,这通常是情况,那么MTU将约为1600字节。因此,IP数据包将在源主机本身分段。 然而,对Linux中IP实现的快速搜索告诉我,在最近的内核中,L4协议是分段友好的,即它们试图通过交付接近MTU大小的缓冲区来保存IP的分段工作。
考虑到这两个事实,我想知道IP数据包在源主机本身被分段的频率有多高。 它是否偶尔/很少/从不发生? 是否有人知道在Linux内核中是否有例外情况(即是否存在L4协议不友好的情况)? 其他常见操作系统如Windows如何处理这种情况? 一般来说,IP数据包有多频繁地被分段?
1个回答

4

虽然从技术上讲,不应该有任何不正确处理IP分段的协议,但有一些协议(如NFS)受益于缺乏分段

您看到分段数据包的频率在很大程度上取决于您的网络环境。 VPN的数据包封装、设计不良或实现不当的UDP协议以及将端点值降低到端对端MTU以下的L1 / L2协议都可能导致IP分段。

大多数现代主机实现了PTMUD,除非涉及不符合规定的设备或过于谨慎的防火墙,否则会自动检测MTU大小。在这个到处都是以太网的时代,我不指望它们在互联网上普遍存在。


NFS通过UDP传输时对我来说分片相当多,但分片似乎仅限于读写操作。 - jdizzle
即使使用TCP,分段也是极不可取的,因为一个丢失的片段会迫使目标放弃整个数据包。然而,正如您所说的,路径MTU发现通常可以避免在源端进行分段。+1。 - nimrodm
关于TCP的观点很好,我在MTU大小和滑动窗口方面有些混淆,进行了编辑。 - HUAGHAGUAH
1
感谢您的回答。为了澄清,我的问题是关于L4的片段友好性。我认为您所说的是L3的工作,即MTU发现和将缓冲区分割成MTU大小的数据包。我想知道的是L4本身是否会处理<= MTU的缓冲区,以便L3不必在片段化方面投入更多的周期。 - Methos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接