MTU 不一致导致的怪现象
一个经典现象:ping 通,ssh 能登录,但 scp 一个大文件传到一半就卡死;或者 HTTPS 页面能打开,下载大文件失败。
这通常是路径 MTU 小于接口 MTU,而中间设备把 ICMP fragmentation needed 丢了(PMTUD 黑洞)。小包能过,大包被静默丢弃。
验证:
ping -M do -s 1472 1.2.3.4 # 1472+28=1500
从 1472 往下试,找到能通的最大值,加 28 就是实际 MTU。常见值是 1400(PPPoE)、1420(WireGuard)、1450(某些隧道)。
修法:把接口 MTU 调到实测值,或者开 tcp_mtu_probing=1 让内核自己探测。后者更省事,但只在建立连接时生效。