最靠谱的办法是用ip link show,因为MTU属于链路层参数,而ifconfig已经被弃用,ip addr show可能会省略mtu字段。查看单个接口就用ip link show dev eth0 | grep mtu,查看所有接口则用ip link show | grep -E '^[0-9]+:|mtu',要注意lo的65536是个特例,不能参考物理网卡哦。

最可靠的方式是用 ip link show,不是 ifconfig,也不是 ip addr show —— 后两者要么已弃用,要么可能不显示 MTU。
为什么 ip link show 是唯一稳的查法
由于MTU属于链路层(Layer 2)参数,所以由ip link专门负责管理这一层;而ip addr主要用于输出IP层(Layer 3)的配置信息,在某些精简环境或容器中,可能会直接省略mtu字段。在大多数现代发行版(如Ubuntu 22.04+、RHEL 8+、统信UOS、麒麟KOS等)中,ifconfig已被标记为废弃,甚至在部分内核编译时就不再包含它了。
- 查单个网卡(比如
eth0):ip link show dev eth0 | grep mtu - 查所有网卡并快速定位:
ip link show | grep -E '^[0-9]+:|mtu'(第一行是接口名,下一行含mtu的就是它的值) - 注意回环口
lo的mtu 65536是特例,不能代表物理网卡能力
ip addr show 有时没显示 mtu 怎么办
这不是 bug,是设计行为:ip addr 默认只输出与地址相关的字段,MTU 不在必显列表里。有些系统(如某些 Alpine 容器、cloud-init 初始化的云主机)会彻底省略它。
- 别靠肉眼扫
ip addr show输出找mtu,容易漏看或误判 - 如果非要用
ip addr,加-d(debug 模式):ip -d addr show dev eth0,这时通常会强制打出mtu - 但依然推荐回归
ip link show—— 它不依赖调试开关,输出稳定
看到 state DOWN 的接口,mtu 值还有效吗
有效,但不可用。MTU 是接口的静态属性,只要设备存在,这个值就一直存着;但它只在 state UP 时参与实际收发逻辑。
ip link show dev eth0输出里若含state DOWN,说明该接口当前不转发任何包,改 MTU 或 ping 测试都无意义- 想验证 MTU 修改是否生效,必须先确保状态是
UP:sudo ip link set dev eth0 up - 某些虚拟化平台(如 QEMU/KVM)在接口 down 状态下允许设 MTU,但重启后可能重置 —— 所以别跳过状态检查
真正容易被忽略的是:你看到的 MTU 值只是本地设置,不代表整条网络路径能撑住这个大小。路径 MTU(PMTUD)得用 ping -M do -s 实测,否则调再大也白搭。