我一直在Linux上试验ping实用程序。我在路由器上设置了500个字节的mtu。现在,当我切换到外部主机时,我得到了以下输出:
ping -c 3 -s 1300 10.0.2.1
PING 10.0.2.1 (10.0.2.1) 1300(1328) bytes of data.
From 10.0.1.254 icmp_seq=1 Frag needed and DF set (mtu = 500)
1308 bytes from 10.0.2.1: icmp_seq=2 ttl=62 time=1.12 ms
1308 bytes from 10.0.2.1: icmp_seq=3 ttl=62 time=1.14 ms
--- 10.0.2.1 ping statistics --- 3 packets transmitted, 2 received, +1 errors, 33% packet loss, time 2000ms rtt min/avg/max/mdev = 1.123/1.134/1.146/0.035 ms因此,第一条消息被路由器丢弃,因为超过了接口的mtu。这是预期的,因为DF标志是默认设置的。因此,他不能碎片和错误发生,到目前为止还不错。但另外两个包裹呢?他们为什么要通过?我可以想象,ping工具在得到ICMP错误后,不会在进一步的数据包中设置DF标志,这样它们就可以被分割。是那么回事吗?我在哪里可以找到这方面的“官方”解释?
非常感谢!
解决方案:它是PMTUD协议的一部分。http://www.cisco.com/c/en/us/support/docs/ip/generic-routing-encapsulation-gre/25885-pmtud-ipfrag.html#t4
发布于 2014-05-11 16:20:13
当路由器收到带有DF标志集的IP数据报时,它会将ICMP (类型应该分段但DF设置)发送给源。然后源调整MTU并再次发送数据报。这就是PMTUD的工作原理。
这里发生的事情是,在收到来自路由器的ICMP之后,将路径的MTU调整为500,以便您发送的下面的Ping请求具有DF标志集,但它们在源上是分段的(这意味着您的机器正在几个数据报中发送Ping请求)。
https://networkengineering.stackexchange.com/questions/7853
复制相似问题