在我的无线网络中,我可以在 Ubuntu Linux 12.04 上使用 1500 的 MTU 跟踪路径到 Mac。
(由于某种原因,Mac MTU 设置为 1470,但回复帧不是那么大,所以这并不重要)
当我跟踪我的 HP 打印机时,它从不响应任何长度为 1514 字节的帧:MTU(1500) + Ethernet(14) (SRC(6) + DST(6) + type(2)) = 1514
但是,如果我将 MTU 设置为 1498,我的打印机就会响应。MTU 为 1499 也会失败。
注意:在我的 Mac 上将 MTU 设置为 1500 也会导致打印失败,所以我怀疑这与计算机或路由器无关。
更新:如果我跟踪路径到 google.com,我可以看到我的路由器(在其 WAN 链路上)使用 ICMP 数据包回复,指出需要分片并且后续帧 MTU 需要为 1474。
tracepath 会更改帧大小以匹配此大小并继续。这意味着它现在发送长度为 1488 字节的帧。
对于我的打印机,它不会发回任何 ICMP 数据包,表明它无法处理 1500 字节的有效负载。就好像它对大于 1512 字节的帧进行了黑洞处理。
更新:较新的 Mac 使用 1500,打印效果很好。当我查看发生了什么时,我的 Mac 会先尝试 1500,如果失败,它会将 MTU 降至 1470(从内存中) - 这是 Apple 的一个有趣的解决方法。
答案1
实际上 MTU包括的28 字节标头。根据您的描述,您的打印机似乎配置了 MTU 1498,这是合理的。
如果您将计算机的 MTU 设置为 1500,那么它将发送总大小最多为 1500 字节的数据包(而不是您所描述的 1514)。
确定路径或特定主机的 MTU 的另一种方法是使用 ping 命令:
-f sets the Do Not Fragment bit
-l configures the data size (remember to add 28 bytes for the header)
因此,要测试 host.example.com 的 MTU 为 1500,您可以使用
ping -f -l 1472 host.example.com。