为什么我能接收大于当前 MTU 大小的以太网帧?

为什么我能接收大于当前 MTU 大小的以太网帧?

我在链路 eth0 上将 MTU 大小配置为 1000。ip link set eth0 mtu 1000我禁用了通用接收卸载 (gro) ethtool -K gro off(因为这会导致 tcpdump 中的帧长度为“错误” (看这里)) 但是如果我现在用 tcpdump 捕获,我仍然会得到大于 1000 的数据包,例如 1500 字节。

我做错了什么?

在接收端,MTU 设置为 1000:

eth0:mtu 1000

14:27:38.361168 IP XXXXXX > YYYYYY:ICMP echo > 请求,id 3273,序号 1,长度 1480 14:27:38.361495 IP YYYYYY > XXXXXX:ICMP 回显答复,ID 3273,序列号 1,长度 976

答案1

MTU 是可以传输的最大数据包大小发送通过接口。MTU 不限制可接收的最大数据包大小。

RFC 1191说:

... 当一个 IP 主机有大量数据要发送到另一个主机时,数据将作为一系列 IP 数据报传输。通常,这些数据报最好是最大的,这样从源到目标的路径上任何地方都不需要分段。(有关反对分段的情况,请参阅 [5]。)此数据报大小称为路径 MTU (PMTU),它等于路径中每个跳的 MTU 的最小值。当前 Internet 协议套件的一个缺点是缺乏主机发现任意路径的 PMTU 的标准机制。

      Note: The Path MTU is what in [1] is called the "Effective MTU
      for sending" (EMTU_S).  A PMTU is associated with a path,
      which is a particular combination of IP source and destination
      address and perhaps a Type-of-service (TOS)...

相关内容