我在链路 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)...