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

我将ip link set eth0 mtu 1000为链路eth0上的MTU大小为1000。 我使用ethtool -K gro off通用接收卸载(gro)(因为这可能导致tcpdump中的“假”帧长度( 请参阅此处 ))但是,如果我现在用tcpdump捕获,我仍然会得到大于1000的数据包, 1500字节。

我做错了什么?

在MTU设置为1000的接收端:

eth0:mtu 1000

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

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

RFC 1191说:

…当一个IP主机有大量数据发送到另一个主机时,数据以一系列IP数据报传输。 这些数据报通常最好是最大的,不需要在从源到目的地的path上的任何地方进行分段。 (有关分片的情况,请参见[5]。)该数据报大小称为pathMTU(Path MTU,PMTU),等于path中每跳的MTU的最小值。 目前互联网协议套件的缺点是缺乏主机发现任意path的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)...