什么是 MTU?为什么改错会让网络变慢?

2025.7.2 杂七杂八 1909
33BLOG智能摘要
MTU(Maximum Transmission Unit)是网络通信中规定的单个数据包最大大小,默认以太网为1500字节。某次错误将 MTU 调整为 1400 以适配一个 IPSec 设备,导致服务器下载速度从 25MB/s 急降至 300KB/s,引发用户投诉。原因是路径 MTU 发现机制(PMTUD)被破坏,ICMP 报错增多,TCP 重传频繁,从而严重影响网络性能。正确的做法是在需要更改 MTU 时先测试,如用 ping 命令探测,并关注封装开销,不建议随意改动默认值。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

MTU 那点事儿:一次改错值引发的网络龟速历险记

什么是 MTU?为什么改错会让网络变慢?

上周排查一个诡异的网络问题时,我又被 MTU 这个老朋友上了一课。今天就跟大家聊聊这个经常被忽视却又至关重要的网络参数——顺便分享下我是怎么把 200M 带宽活生生改成 56K 拨号速度的翻车现场。

MTU 到底是什么?

简单来说,MTU(Maximum Transmission Unit)就像快递包裹的尺寸限制。想象你买了个超大号懒人沙发,快递小哥看了看说:”抱歉,我们货车每次最多只能运 1500mm 的货”——这就是 MTU 在干的事。

技术定义上,MTU 指的是单个网络数据包能传输的最大字节数,包括 IP 头、TCP/UDP 头和实际数据。以太网默认是 1500 字节,这个数字可不是随便定的:

# 查看网卡 MTU 值
ifconfig eth0 | grep mtu
# eth0: flags=... mtu 1500

为什么乱改 MTU 会翻车?

故事要从我配置 VPN 说起。当时为了适配某个奇葩的 IPSec 设备,我随手把 MTU 改成了 1400:

# 错误示范!不要学!
ifconfig eth0 mtu 1400

结果第二天就接到投诉:”服务器下载速度从 25MB/s 暴跌到 300KB/s!” 抓包发现大量这样的提示:

[TCP Out-of-Order] [TCP Previous segment not captured]

MTU 引发的蝴蝶效应

问题出在路径 MTU 发现机制(PMTUD)上。当我强制降低 MTU 后:

  1. 大包被拆分成更多小包,增加处理开销
  2. 某些设备会丢弃 DF(Don’t Fragment)标记的包
  3. TCP 需要不断重传,触发拥塞控制

用 tcpdump 抓包时,我看到了大量这样的 ICMP 报错:

ICMP 3 (Destination Unreachable), code 4 (Fragmentation Needed)

正确的 MTU 调优姿势

经过这次教训,我总结出几个原则:

  • 不要随便改默认值:1500 是经过几十年验证的黄金标准
  • 需要改时先测试:可以用 ping 探测最大 MTU:
    ping -M do -s 1472 example.com  # 1472+28(包头)=1500
  • 注意封装开销:VPN/GRE 等隧道协议需要额外头空间

最后分享个实用命令,查看系统当前的 MTU 配置:

ip link show | grep mtu

记住:网络调优就像老中医开药,剂量不对反而会要命。下次再遇到网速异常时,不妨先检查下这个隐藏参数——说不定你也在经历我当年的”56K 怀旧之旅”呢!

评论

  • 看完文章终于明白上次公司VPN为啥那么卡了,原来MTU设置不对!

  • 作者这个快递包裹的比喻太形象了,一下子就懂了MTU是啥 👍

  • 所以默认1500是最佳值吗?那为什么有些VPN要调低MTU呢?

  • 笑死,56K拨号速度这个形容太真实了,经历过的人都懂 🤣

  • 技术小白表示看不太懂,有没有更简单的解释啊?

  • 感谢分享!正好遇到类似问题,明天去公司试试ping命令检测MTU

  • 之前也踩过这个坑,改完MTU后视频会议卡成PPT,血泪教训啊

  • 想问下作者,如果网络设备不支持PMTUD怎么办?

  • 老中医开药这个比喻绝了,网络调优确实要谨慎