MTU 与分片问题
跨专线、VPN 或容器 overlay 网络时,路径 MTU 可能小于常规的 1500 字节:未适配的环境里大包会被分片甚至直接丢弃,表现为重传增多、吞吐下降,而小请求完全正常。探测方式是发送设置了不分片(DF)位的 ping 包,逐步调整包大小找到路径能通过的上限。
基本信息
| 探测方式 | Linux 用 ping -M do -s 大小;Windows 用 ping -f -l 大小 |
|---|---|
| 判断依据 | 大包不通小包通,重传明显增多 |
| 典型场景 | 跨专线、VPN、隧道与容器 overlay 网络 |
| 适配手段 | 调整接口 MTU,或通过 MSS 钳制间接生效 |
| 常见现场 | 同一应用在容器内慢、在宿主机正常 |
典型使用场景
- 跨专线访问:链路 MTU 小于 1500 时大响应频繁分片
- 隧道环境:封装开销占用字节,可用载荷被压缩
- 容器网络:overlay 封装让可用 MTU 变小,容器内往往不感知
- 吞吐异常排查:小包正常而大包慢时,先测路径 MTU
- 迁移后验证:新环境网络配置不同,上线前重新探测一次
探测与核查
探测与核查
ping -M do -s 1472 remote-host # 1472 加 28 字节头部等于 1500,禁分片探测
ping -M do -s 1400 remote-host # 不通就逐步减小,找到可通过的上限
ping -f -l 1472 remote-host # Windows 对应写法
ip link show # 查看各接口当前 MTU
sysctl net.ipv4.tcp_mtu_probing # 确认是否启用 MTU 探测现象对照
| 现象 | 可能原因 | 验证方式 |
|---|---|---|
| 小包通大包不通 | 路径 MTU 小于发送端假设 | 用 DF 位 ping 探测 |
| 重传率高吞吐低 | 分片丢失或两侧 MTU 不一致 | 对比两侧 mtu 与重传统计 |
| 容器内慢宿主机正常 | overlay 封装缩小可用 MTU | 容器内探测路径 MTU |
| 只有大响应超时 | 响应分片被中间设备丢弃 | 按包大小分档测试 |
容器 overlay 网络是 MTU 问题的常见现场:宿主机看起来一切正常,容器里的应用却频繁超时,检查容器网络接口的 MTU 通常能找到线索。
MTU 改错会让小包正常、大包全丢:这类故障表现时好时坏,先改回原值恢复业务,再按探测结果逐步调整。