CentOS如何永久设置网卡MTU值并让其重启后生效?

在网络管理中,最大传输单元是一个至关重要的参数,它定义了网络层一次可以传输的数据包的最大尺寸,通常以字节为单位,默认情况下,大多数以太网设备的MTU值被设置为1500字节,在某些特定场景下,如配置VPN、使用特定的网络存储或进行网络性能优化时,调整MTU值是必要的,本文将详细介绍在CentOS系统中检查、临时和永久设置网卡MTU值的方法。

CentOS如何永久设置网卡MTU值并让其重启后生效?

理解MTU及其影响

将网络数据传输想象成用卡车运送货物,MTU就好比是每辆卡车的最大载重量,如果一批货物(一个完整的数据包)超过了卡车的载重,就必须将其拆分成多个小批次(分片)进行运输,到达目的地后再重新组装,这个过程会增加网络设备的处理负担,并可能导致延迟增加或数据包丢失,反之,如果MTU设置得过小,虽然不会发生分片,但因为需要运输的“车次”变多,同样会降低传输效率,找到一个合适的MTU值对于网络性能至关重要。

检查当前MTU设置

在进行任何更改之前,首先需要了解当前网卡的MTU设置,CentOS提供了多种命令来查看这一信息。

使用 ip 命令(推荐)

ip 命令是现代Linux发行版中用于网络配置和显示的标准工具,功能强大。

ip addr show

或者更简洁地,只查看特定网卡(eth0):

ip addr show eth0

在输出结果中,您会看到类似 mtu 1500 的字段,这表明该网卡当前的MTU值为1500。

使用 ifconfig 命令

ifconfig 是一个较为传统的工具,虽然在较新的系统中逐渐被 ip 命令取代,但因其简洁的输出,仍被广泛使用。

ifconfig

输出结果中同样会包含 MTU:1500 这样的信息。

临时设置MTU

临时设置MTU主要用于测试目的,该设置在系统重启后会失效,这对于验证某个MTU值是否能解决网络问题非常有用。

使用 ip 命令可以轻松地临时修改MTU,语法如下:

CentOS如何永久设置网卡MTU值并让其重启后生效?

ip link set dev [网卡名称] mtu [数值]

要将网卡 eth0 的MTU临时设置为1400,可以执行:

sudo ip link set dev eth0 mtu 1400

执行后,可以再次使用 ip addr show eth0 命令来确认MTU值是否已经更改,这个更改是临时的,重启网络服务或重启系统后,MTU会恢复到原来的值。

永久设置MTU

为了让MTU设置在系统重启后依然生效,需要修改网络配置文件,根据CentOS版本的不同,配置方法有所区别。

适用于 CentOS 7/8 (NetworkManager)

现代的CentOS版本普遍使用NetworkManager来管理网络,推荐使用其命令行工具nmcli进行配置,这是最稳定和标准的方法。

  1. 查看网络连接的名称:

    nmcli connection show

    您会看到一个连接列表,找到您要修改的网卡对应的连接名称(System eth0Wired connection 1)。

  2. 修改连接的MTU设置:
    假设连接名称为 System eth0,要将MTU设置为1400,执行以下命令,通常需要同时设置IPv4和IPv6的MTU。

    sudo nmcli connection modify "System eth0" ipv4.mtu 1400
    sudo nmcli connection modify "System eth0" ipv6.mtu 1400
  3. 重新激活网络连接以应用更改:

    sudo nmcli connection up "System eth0"

完成以上步骤后,MTU设置将被永久保存。

适用于 CentOS 6/7 (编辑网络脚本)

对于不使用NetworkManager或采用传统网络配置方式的系统,可以直接编辑网卡配置文件。

  1. 找到并编辑配置文件:
    配置文件位于 /etc/sysconfig/network-scripts/ 目录下,文件名通常为 ifcfg-[网卡名称],对于 eth0 网卡,文件是 ifcfg-eth0

    CentOS如何永久设置网卡MTU值并让其重启后生效?

    sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
  2. 在文件中添加或修改MTU参数:
    在文件末尾或适当位置添加以下行:

    MTU=1400
  3. 保存并退出编辑器,然后重启网络服务:

    • 在 CentOS 7 上:
      sudo systemctl restart network
    • 在 CentOS 6 上:
      sudo service network restart

最佳实践与测试

设置完MTU后,进行有效的测试是必不可少的。ping 命令是一个绝佳的测试工具,它可以指定数据包大小并禁止分片。

测试MTU是否为1500的命令如下:

ping -M do -s 1472 [目标IP或域名]

这里需要解释一下参数:

  • -M do:表示禁止分片,如果数据包大小超过了路径上某个设备的MTU,ping会失败并显示“Message too long”。
  • -s 1472:指定发送的ICMP数据包大小为1472字节。
  • 为什么是1472?因为IP头(20字节) + ICMP头(8字节) = 28字节,数据包大小 + 28 = 总的IP包大小。1472 + 28 = 1500

如果这个命令能成功通,说明路径MTU至少是1500,如果失败,可以逐步减小 -s 后的数值,直到找到能成功通过的最大值,然后加上28,就是您当前网络路径的有效MTU值。


相关问答FAQs

问题1:为什么我在修改MTU后,访问某些网站变得很慢或者无法访问,但其他网站正常?
解答: 这种现象通常是“路径MTU发现”机制出现了问题,当您本地设备的MTU设置得过大,而通往某个特定服务器的网络路径中存在一个MTU较小的设备(如VPN网关或某些路由器)时,您发送的大数据包会被该设备丢弃,正常情况下,该设备会返回一个ICMP“需要分片”的报文,您的系统收到后会自动调整后续数据包的大小,这就是PMTUD,但如果中间的防火墙阻止了这种ICMP报文,PMTUD就会失败,导致连接超时或性能急剧下降,解决方法是:1)将本地MTU设置为一个保守的值(如1400);2)检查并放行ICMP Type 3 Code 4的报文。


解答: ifconfig 来自于较旧的 net-tools 软件包,而 ip addr 来自于功能更强大的 iproute2 软件包,在显示MTU方面,两者都能提供基本的信息。iproute2 是当前Linux网络配置的未来和标准,它支持更多现代网络功能(如策略路由、网络命名空间等),并且其输出信息更为详细和精确,强烈建议在日常管理和脚本编写中优先使用 ip 命令族,以确保更好的兼容性和功能完整性。ifconfig 在很多现代发行版中已不再是默认安装项。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-12 05:19
下一篇 2025-10-12 05:22

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信