我最近发现了一个无法连接到我们的某个服务器的 Windows 7 客户端。结果发现问题在于服务器的 MTU 设置为 1514,而客户端的 MTU 设置为 1504。
服务器运行 CentOS,但grep -i MTU /etc/sysconfig/network-scripts/ifcfg*
什么都没显示。非公共接口eth1
仍为 1500。服务器端的其他机器的 MTU 都不是 1500 以外的值。
在客户端,还有另外一台 Windows 7 机器也安装了 1504。将这些机器移出现场后,它们又可以正常工作(但我不知道那是否是尽管如果 MTU 不正确,或者新位置导致 Windows 选择有效位置),但恢复后失败。
是什么原因导致这两台 Windows 计算机具有此非标准 MTU 设置?Windows 如何确定 MTU 设置?
为什么
eth0
MTU 设置为 1514?Linux 如何确定 MTU 设置?MTU=1500
从现在起,我是否应该在所有文件中都进行硬编码,ifcfg
以免其他因素将其推得更高?什么可以覆盖默认值 1500?
答案1
客户端可以执行路径 MTU 发现,即两台设备之间完整路径上的最小 MTU,然后减小 MTU 以匹配。这对于不应分片的流量(例如 IPSec)尤其必要。
正如 Shane Madden 在上面的评论中提到的,路径中丢弃的 ICMP 数据包将破坏这一点。我怀疑市场上有些交换机默认阻止所有 ICMP,所以我会检查是否引入了任何新交换机或路由器,以及它们是否需要启用 ICMP 流量。