MTU 9000和1500不一致为什么会慢

举报
132807 发表于 2026/10/29 09:22:57 2026/10/29
【摘要】 MTU 就是一个数据包在链路上一次能装下的最大尺寸,单位是字节。平时家用和公网最常见的 MTU 是 1500,这是以太网的标准值;而很多云厂商的内网会把网卡默认设成 9000,也就是常说的巨型帧。单看数字,9000 好像更能装、效率更高,但只要这台机器要走公网,9000 和 1500 不一致就会变成慢的根源。先说正常情况。一个 9000 字节的大包要从内网走到公网,中间只要有一段链路只支持 ...

MTU 就是一个数据包在链路上一次能装下的最大尺寸,单位是字节。平时家用和公网最常见的 MTU 是 1500,这是以太网的标准值;而很多云厂商的内网会把网卡默认设成 9000,也就是常说的巨型帧。单看数字,9000 好像更能装、效率更高,但只要这台机器要走公网,9000 和 1500 不一致就会变成慢的根源。

先说正常情况。一个 9000 字节的大包要从内网走到公网,中间只要有一段链路只支持 1500,这个大包就必须被拆开,也就是分片。分片本身不免费:发送方、中间设备、接收方都要多做一份拆包和组包的工作,任何一个分片丢了,整包都得重传。更麻烦的是,现在很多数据包都带了“不许分片”标志,中间设备拆不了,只能把包丢掉,再回一个“包太大、请改小”的 ICMP 报文。如果这条 ICMP 报文在半路被防火墙拦住,发送方就永远等不到提醒,只能一次次超时重发,这就是常说的黑洞问题。表面上看网络是通的,实际上大包全卡住,小包却能过去,于是出现时快时慢、有的网站能开、有的下载一动不动的怪现象。

TCP 也会跟着受影响。TCP 握手时会根据 MTU 算出一个合适的报文段大小,MTU 不一致会让这个协商结果失真,发送方按大尺寸发,中间又被拆、被丢,重传一多,拥塞控制就会把发送窗口压下来,速度自然上不去。晚高峰本来就挤,再加上重传,延迟和抖动都会被放大。

怎么判断是不是 MTU 的问题,有两个简单的办法。一是看本机网卡的 MTU,用 ip link 就能看到当前值;二是拿 ping 做探测,带上不许分片的参数,从大到小试,看多大的包开始不通,就能大致摸到路径上最小的那一段 MTU。注意要分清“内网能通”和“公网能通”是两回事,内网 9000 通,不代表公网 9000 通。

解决思路也很直接:要走公网的网卡,MTU 改成 1500,让它和公网链路保持一致。改的时候要分清临时和永久,命令行改完当时生效,重启就没了;想长期生效,要写到系统的网络配置文件里,改完再确认一次当前值和配置文件里的值是一致的,否则重启后又会回到 9000,问题隔段时间又复发。只在确定全程都支持巨型帧的纯内网链路上,才适合保留 9000。

一句话总结:MTU 不是越大越好,而是要和整条路径上最小的那一段保持一致。公网环境下把出口网卡统一成 1500,往往比折腾别的调优参数更见效。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。