服务器发送大于 MTU 的数据包

服务器发送大于 MTU 的数据包

我有一台服务器,我正在从它传输数据。我们遇到了一些问题,这些问题可以追溯到服务器发送巨型帧,尽管报告的ifconfigMTU 是 1500。这怎么可能呢?该机器运行的是 CentOs 5,这是通过 ipv4 发生的。

我如何告诉服务器停止发送大小大于 1500 的数据包?

答案1

禁用 Large Send Offload 可能会解决此问题。我见过 15k 甚至 30k 的数据包,无论 MTU 如何。

答案2

服务器会将数据包分段,使其分成 1500 字节的块,可能是网络内其他地方的 MTU 小于 1500,这可能是导致问题的原因。您能 ping 大小为 1500 的另一端吗?

ping -s 1500 <ip>

您还应该能够发送更大尺寸的数据包。如果您、远程端或介于两者之间的任何东西正在过滤 ICMP 数据包,那么它很可能正在阻止MTU 发现数据包。
您需要允许 ICMP Fragmentation Needed (Type 3, Code 4) 数据包通过防火墙

答案3

如果您在服务器上捕获数据包,那么您可能会看到 TCP 发送的数据包大于 MTU。但是,线路上的数据包将仅为 MTU 大小。您可以通过在网络设备(交换机)等上捕获数据包来验证这一点。或者,在远程(客户端)计算机上捕获数据包将显示每个数据包 <= MTU。

这种行为是由于启用 TSO/GSO 后,TCP 段会被 NIC 硬件分割成 MTU 大小的数据包。由于 tcpdump 在软件层进行捕获,因此它会看到大于 MTU 的段被发送到 NIC 卡进行进一步传输。

如果您禁用 NIC 的 tso/gso,那么您将看到所有传出的数据包都 <= MTU 大小(更可能是 pMTU 大小)。

相关内容