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