![通过 ping 测试 MTU 时超时](https://linux22.com/image/1304737/%E9%80%9A%E8%BF%87%20ping%20%E6%B5%8B%E8%AF%95%20MTU%20%E6%97%B6%E8%B6%85%E6%97%B6.png)
我在 Windows 7 和 Ubuntu 11.10 上以 MTU 大小 1500B 对其进行了测试。
- IP 数据包 - 20B
- ICMP 数据包 - 8B
1500-28=1472
因此,我可以 ping 的最大数据包(无碎片)是 1472B,这是正确的,因为当我尝试设置更高的值时,它表明需要碎片。但是 ping 成功时的最大值在两个系统上都是 1448。当我尝试 1449 - 1472 字节之间的值时,我会超时。为什么会这样?
答案1
有几种可能性:
- ping 目标会忽略超过一定大小的 ping。
- ping 数据包在传输过程中的某处被分割成碎片,并且目标系统(或防火墙之间的某些系统)不会响应分割的 ping 请求。
您可以通过设置“不分段”选项来 ping 来测试后者(在 ubuntu 上:添加一个-M do
选项),但这并不是万无一失的,因为有些路由器在丢弃过大的数据包时不会正确返回错误。
答案2
您使用的是 ADSL 连接吗?在这种情况下,MTU 不应是 1500,而应是 1492。