linux
网卡工作模式可通过ethtool工具调整,1.临时修改使用命令sudo ethtool -s eth0 speed 100 duplex full autoneg off;2.永久修改需在配置文件中添加ethtool_opts或ethtool_opts参数;3.排查
网络问题
时应检查网线、端口、驱动及系统日志,并确保两端设备协商一致。
Linux网卡工作模式的设置,简单来说,就是调整网卡是“你说一句我回一句”的半双工模式,还是“你说你的我说我的”全双工模式。通常情况下,全双工效率更高,但有时候半双工在特定环境下反而更稳定。
解决方案
调整Linux网卡工作模式,主要通过
这个工具。如果你的系统里没有它,先安装一下:
(Debian/Ubuntu) 或者
(CentOS/RHEL)。
查看当前网卡工作模式:
(假设你的网卡是eth0,用
或者
命令可以查看网卡名称)。 找到“Duplex”这一行,会显示Full或者Half。
临时修改网卡工作模式:
。 这条命令将eth0网卡设置为100Mbps全双工,并且关闭自动协商。
可以是 10, 100, 1000 (Mbps),
可以是
或者
。
是关闭自动协商,如果开启自动协商,可以设置为
。
注意:
临时修改重启后失效。
永久修改网卡工作模式:
这个稍微麻烦点,需要修改网卡配置文件。不同的Linux发行版配置文件位置可能不一样。
Debian/Ubuntu:
编辑
文件。 找到你的网卡配置段,添加或者修改
选项。 例如:
然后重启网络服务:
Trae linux
Trae Linux 官方版本现已全面上线,开发者可直接访问 Trae 官网(trae.cn 国内版或 trae.ai 国际版)获取专属安装包。该版本完美适配主流 Linux 发行版,提供 .deb(适配 Ubuntu/Debian)、.rpm(适配 RHEL/Fedora)以及通用 .tar.gz 格式,并全面支持 x64 与 ARM64 架构。
下载
CentOS/RHEL:
编辑
文件 (假设你的网卡是eth0)。 添加以下内容:
然后重启网络服务:
注意:
永久修改需要根据你的发行版和网络配置工具进行调整。
关于自动协商 (Autonegotiation):
通常情况下,保持自动协商开启 (
) 是最佳选择,网卡会自动和对端设备协商最佳的工作模式。 只有在遇到兼容性问题或者需要强制指定工作模式时,才需要关闭自动协商。 关闭自动协商需要确保两端设备的工作模式一致,否则可能导致网络问题。
为什么我的网卡速度只有10Mbps?
这可能有很多原因,但最常见的是:
网线问题:
劣质网线或者网线损坏可能导致速度降低。 尝试更换一根质量好的网线(Cat5e或者Cat6)。
网卡或交换机端口限制:
检查网卡和交换机端口是否支持更高的速度。有些老旧的设备可能只支持10Mbps或者100Mbps。
驱动问题:
某些
网卡驱动
可能存在问题,导致速度受限。 尝试更新网卡驱动。
自动协商问题:
自动协商失败可能导致网卡降速到最低速率。尝试手动设置网卡工作模式,关闭自动协商,并确保两端设备的工作模式一致。
如何排查网卡工作模式导致的网络问题?
首先,使用
命令查看网卡当前的工作模式和协商状态。 如果发现协商失败或者工作模式不正确,可以尝试以下步骤:
检查网线和端口:
确保网线质量良好,并且网卡和交换机端口都支持期望的速度。
尝试手动设置工作模式:
关闭自动协商,手动设置网卡工作模式,并确保两端设备的工作模式一致。
检查驱动:
确保网卡驱动是最新的,并且没有已知的问题。
测试不同设备:
将网卡连接到不同的交换机端口或者不同的设备上,以排除设备兼容性问题。
查看系统日志:
系统日志 (例如
或者
) 可能包含有关网卡工作模式协商失败或者其他网络问题的错误信息。
自动协商开启后,为什么网卡还是工作在半双工模式?
自动协商的目标是找到双方都支持的最佳工作模式。 如果网卡最终工作在半双工模式,可能是以下原因:
对端设备不支持全双工:
如果连接的交换机或者其他设备只支持半双工模式,那么网卡也只能工作在半双工模式。
自动协商失败:
自动协商过程中可能出现错误,导致网卡降级到半双工模式。 可以尝试重启网卡或者交换机,重新进行自动协商。
线缆问题:
质量差的网线可能影响自动协商的结果,导致协商失败。
总之,排查这类问题需要仔细检查网络连接的各个环节,从网线、端口到设备配置和驱动,逐步排除故障。
ethtoolsudo apt-get install ethtoolsudo yum install ethtoolethtool eth0ip addrifconfigsudo ethtool -s eth0 speed 100 duplex full autoneg offspeedduplexfullhalfautoneg offautoneg on/etc/network/interfacesethtool_optsauto eth0
iface eth0 inet dhcp
ethtool_opts "-s eth0 speed 100 duplex full autoneg off"sudo systemctl restart networking/etc/sysconfig/network-scripts/ifcfg-eth0ETHTOOL_OPTS="speed 100 duplex full autoneg off"sudo systemctl restart networkautoneg onethtool eth0/var/log/syslog/var/log/messages