我一直在试图弄清楚为什么访问我网站的人中有些人(极少数人)会随机出现速度减慢和错误页面(“无法加载页面”)。我和大多数访问我网站的人从未遇到过随机速度减慢和错误页面。该网站是负载平衡的(这解释了“随机”的原因),出于某种原因,我认为降低 MTU 可能会有所帮助(我不记得我是从哪里得到这个想法的)。
然后我想看看从我的办公室到网站的最佳 MTU 是多少。这时事情变得奇怪了。使用“ping www.example.com -f -l xxxx”:
MTU of 1500: Packet needs to be fragmented but DF set (ok)
MTU of 1490: Packet needs to be fragmented but DF set (ok)
MTU of 1480: Packet needs to be fragmented but DF set (ok)
MTU of 1470: Request timed out (hu?)
MTU of 1475: Packet needs to be fragmented but DF set (ok)
MTU of 1474: Packet needs to be fragmented but DF set (ok)
MTU of 1473: Packet needs to be fragmented but DF set (ok)
MTU of 1472: Request timed out (???)
MTU of 1400: Request timed out (???)
MTU of 1300: Request timed out (???)
MTU of 1200: Request timed out (???)
MTU of 1100: Request timed out (???)
MTU of 1000: Packet needs to be fragmented but DF set (ok)
MTU of 1024: Packet needs to be fragmented but DF set (ok)
MTU of 1025: Request timed out (???)
因此,如果 MTU 小于 1473 或大于 1024,我的网站似乎就没有响应。它难道不应该响应“数据包需要分片但是......”吗???
这是实际问题吗?还是应该如此?可能是硬件故障或软件设置不正确导致的?
答案1
对于 1473 及更大的数据包,以太网的响应“数据包需要分段但设置了 DF”是正常的,所以据我所知,这些都没什么可担心的。只要路径中的每一跳都支持该 MTU,任何 1472 或更低的数据包都应该通过。对于小于 1472 的数据包,您得到的随机“数据包需要分段但设置了 DF”让我认为 ping 正在采用多条路径,并且其中一条或多条路径的 MTU 小于出现分段消息的数据包(1000 和 1024)。除非(正如 gregaskew 提到的)路径中的某些东西阻止了 ICMP,否则“请求超时”没有意义。
尝试从您的办公室到您的 Web 服务器使用此实用程序,看看是否可以获得任何见解:
答案2
MTU 为 1500 意味着最大的 ping 有效负载将为 1472(MTU 减去 ip 报头的 20 字节和 ICMP 报头的 8 字节)。
请求超时可能只是意味着 ICMP 没有被转发到某个地方,或者被防火墙阻止。
答案3
您可以将网络接口的 MTU 设置为 1400,就像一些著名的 WEB 服务器所做的那样(或曾经做过)。
或者,关闭路径 MTU 发现,这样您的服务器的回复就不会被 DF 标记。