核心是避免路径MTU不匹配导致PMTUD失效和数据包静默丢弃,而非简单调大或调小;仅在卫星/LTE/隧道等特殊场景且实测路径MTU<576时,才需启用PMTU黑洞检测或谨慎设接口MTU。

新手配置服务器 MTU 值防切片攻击引发的崩溃,核心不是“调大”或“调小”,而是避免路径中出现过小 MTU 导致 TCP 分片异常、ICMP 误判和连接中断。真正引发崩溃的,往往是 MTU 限制(如强制设为 576)与真实链路 MTU 不匹配,叠加 PMTUD 失效时的“黑洞”行为——数据包被静默丢弃,TCP 反复重传却无响应,最终超时断连甚至服务假死。
先确认你是否真需要改 MTU
绝大多数局域网、云服务器(阿里云/腾讯云/AWS 默认走 1500)、光纤宽带都不需要手动调 MTU。只有以下情形才需干预:
- 使用卫星链路、部分 LTE/5G 模组、老旧 DSL 设备,实测路径 MTU
- 启用 PPTP/GRE/IPsec 隧道后,访问特定网站失败、SSH 卡顿、HTTPS 握手超时
- 抓包看到大量 “ICMP Destination Unreachable (Fragmentation Needed)” 且附带 “Next-Hop MTU: XXX”(XXX
- 系统日志频繁出现 “TCP: too many retries on route” 或 “path MTU discovery failed”
优先启用 PMTU 黑洞检测(比硬调 MTU 更安全)
这是微软和 Linux 内核都推荐的软性修复方式,不降低吞吐,只对探测到问题的流动态降 MSS。Windows 和 Linux 都支持:
-
Linux(推荐):执行命令启用主动探测
echo 2 > /proc/sys/net/ipv4/tcp_mtu_probing
永久生效:在 /etc/sysctl.conf 中添加
net.ipv4.tcp_mtu_probing = 2 -
Windows:打开注册表
定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新建 DWORD 值 EnablePMTUBlackholeDetect,设为 1
仅当黑洞检测无效时,再谨慎调低接口 MTU
这不是通用优化,而是针对性兜底。调得太低会显著增加包数量和头部开销,反而拖慢速度:
- 先用 ping -M do -s 1400 目标IP(Linux) 或 ping -f -l 1400 目标IP(Windows) 测出实际路径 MTU(成功返回即 MTU ≥ 数据+28)
- 若测得值为 500,则设接口 MTU = 500(不是 576);若测得 552,就设 552
- Linux 临时设置:ip link set dev eth0 mtu 552
Ubuntu/Debian 永久设置:在 /etc/network/interfaces 的 iface 段加 mtu 552
CentOS/RHEL:在 /etc/sysconfig/network-scripts/ifcfg-eth0 加 MTU=552
务必禁用可能干扰 PMTUD 的操作
很多“优化教程”教人关防火墙 ICMP、删默认路由、强制 MSS clamp,这些反而会破坏路径探测:
- 不要在 iptables/nftables 中 DROP 或 REJECT “fragmentation-needed” 类型的 ICMPv4 Type 3 Code 4
- 不要全局设置 net.ipv4.ip_no_pmtu_disc = 1(这等于关掉 PMTUD)
- 不要在路由器或云平台侧盲目开启 “TCP MSS Clamping” 到固定值(如 1360),它会覆盖内核自适应逻辑

















