MTU 是什么
MTU 是一个接口一次能承载的最大报文长度,以太网默认 1500 字节,其中 IPv4 可用载荷约 1472 字节,其余被 IP 与 TCP 头占用。它是「能连不能传」类故障的常客:小包交互正常,一旦传大文件或做数据库同步就卡死。原因通常是路径上某一段的 MTU 更小(隧道与虚拟化封装会额外占头部),而大包既没有被正确分片,路径探测的差错报文又被中途丢弃。
基本信息
| 以太网默认 | 1500 字节;IPv4 有效载荷约 1472,其余为协议头 |
|---|---|
| 常见叠加开销 | VXLAN 类封装约减 50,IPsec 约减 50 至 73,PPPoE 减 8 |
| IPv6 底线 | 链路 MTU 最小 1280,且中间设备不做分片 |
| 查看方式 | ip link 看接口 MTU,同时注意隧道与虚拟接口会再叠加开销 |
| 验证方式 | 用带禁止分片的探测逐步加大包长,找到能通的临界值 |
典型使用场景
- 页面能打开但上传或下载大文件失败,怀疑路径 MTU 不匹配
- 跨云或跨机房隧道打通后部分业务异常,需核算封装开销
- 容器网络内大包不通,检查容器接口 MTU 与宿主机是否一致
- 数据库主从同步或备份传输卡住,排查大包被静默丢弃
- 调整 MTU 前后做同一组大包测试,验证整改效果
查看与验证
查看与验证
ip link show eth0 | grep -o 'mtu [0-9]*' # 当前接口 MTU
ip -d link show | grep -E 'mtu|vlan|tun|vxlan' # 虚拟接口会再叠加开销
cat /sys/class/net/eth0/mtu # 直接读内核值
ping -M do -s 1472 -c 2 <目标> # 1472+28=1500,能通说明路径可承载
ping -M do -s 1400 -c 2 <目标> # 逐级下调,找临界包长
ping -M do -s 1472 -c 2 <目标> > /dev/null; echo "rc=$?" # 退出码非零即不通
ip link set dev eth0 mtu 1400 # 临时调整,重启后失效包长与含义
| 写法 | 含义 | 说明 |
|---|---|---|
| -s 1472 | 载荷 1472,加 28 字节头正好 1500 | 标准以太网路径的上限探测 |
| -s 1400 | 载荷 1400 | 覆盖常见隧道与封装开销后的保守值 |
| -M do | 禁止分片 | 只有不分片才能真正测出路径能否承载 |
| -M dont | 允许分片 | 大包会被分片,测不出路径限制 |
只改一端的 MTU 往往加剧问题:两端接口与路径上的设备都要能容纳新值。调整前先确认整条路径(含云网络与隧道封装)的最小限制,改完用同一组大包测试复验。
容器与隧道环境的默认 MTU 常低于物理口的 1500,容器内看到的值与宿主机不一致时,大包问题会表现为「本机正常、跨节点失败」。核对时要把每一层的接口值都列出来。