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 数据包分段的频率如何?

4

1 回答 1

4

尽管从技术上讲,不应该有任何协议不能正确处理 IP 分片,但有一些协议(例如 NFS)从缺乏分片中受益匪浅

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

大多数现代主机都实现了 PTMUD,它将自动检测 MTU 大小,除非涉及不兼容的设备或过度偏执的防火墙。在以太网无处不在的这些日子里,我不希望它们在整个互联网上特别普遍。

于 2009-03-08T18:58:12.417 回答