为什么我可以接收比我当前 MTU 大小更大的以太网帧?

der*_*lle 7 linux mtu

ip link set eth0 mtu 1000在链接 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 > request,id 3273,seq 1,长度 1480 14:27:38.361495 IP YYYYYY > XXXXXX:ICMP echo 回复,id 3273,长度 seq 6 1

Ra_*_*Ra_ 6

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)...
Run Code Online (Sandbox Code Playgroud)