有的网站打不开,别的都正常,ping也通,是MTU问题吗?

公司网络访问大多数网站都正常,唯独个别网站(常见于银行、税务、某些企业门户)一直转圈打不开,换浏览器、清缓存都没用。奇怪的是 ping 该域名是通的。这种"小包通、大包不通",十有八九是 MTU 问题。

原理一分钟

ping 默认发的是小数据包,而网页走 TCP 时会尽量发满尺寸的大包(MSS 1460 字节)。如果链路上某一跳的 MTU(最大传输单元)偏小,又没有正确传递"需要分片"的信息,大包就会被静默丢弃——小包能过、大包过不去,表现就是:ping 通,但网页打不开或只出一部分。

常见诱因

  1. PPPoE 拨号叠加隧道:宽带拨号、VPN 隧道封装都要占掉几十字节,MTU 从 1500 缩到 1492 甚至更低,没相应调小就会出问题。
  2. 出口设备 MTU 配置不当:路由器 WAN 口沿用默认 1500。
  3. 个别路径节点 MTU 黑洞:中间设备不回送 ICMP 差错报文(被防火墙拦了),发送端不知道该减小包,就一直丢。

分步排查

第一步:确认症状特征。 打不开的网站 ping 域名 通、tracert 也基本正常,但 HTTPS 握手后页面出不来/极慢,且全公司多台电脑同样表现——基本锁定链路层问题而非终端。

第二步:大包测试(核心验证)。 Windows 命令行执行:

ping www.目标站点.com -f -l 1472

-f 禁止分片,-l 1472 是载荷大小(1472+28 字节头=1500)。提示"需要拆分数据包但是设置了 DF"说明路径 MTU 小于 1500;逐步减小数值(如 1464、1452、1400)直到通过,通过的值+28 就是路径 MTU。

第三步:调整出口 MTU。 登录路由器把 WAN 口(PPPoE 拨号口)MTU 从 1500 改为 1492,仍不行的继续下调到 1480/1472(部分线路需要更低),保存后重连测试。改的是路由器,全网终端都受益。

第四步:VPN 场景单独调。 通过 VPN 访问的资源打不开,在 VPN 网关两侧把隧道 MTU/MSS 调小(如 MTU 1400、MSS 1360),华为设备可在接口配置 tcp mss 值。

第五步:验证恢复。 用之前打不开的网站逐一验证,浏览器无痕模式排除缓存干扰;确认后把 MTU 值写进网络文档。

预防

  • PPPoE 拨号线路出口 MTU 固定设 1492 而非默认 1500;
  • 新上 VPN/隧道时同步核对两端 MTU/MSS;
  • 出口防火墙别把 ICMP 差错报文全拦掉,那是 MTU 协商的信使。 这种"就个别网站打不开"的怪病,诚鑫致达科技排查时都用 -f -l 1472 大包一把钥匙开锁:五分钟定位是 MTU 还是 DNS,不用全网乱改配置。

来源:https://zhiliao.h3c.com/questions/dispcontcont/323093 、https://www.guokeyun.com/news/technology/detail/1614.html 、https://zhuanlan.zhihu.com/p/1916450950232647428