应使用ethtool查看网卡实际协商速率和双工模式,speed显示当前链路速率(如1000mb/s),duplex必须为full,link detected须为yes,auto-negotiation建议为on,且需与对端设备完全一致。

直接用 ethtool 查看真实协商结果,而不是只看网卡型号或配置,是定位这类问题最准、最快的方式。性能低下往往不是软件配置错了,而是物理链路两端“没谈拢”。
确认本机网卡实际协商状态
先找出目标网卡名:
- ip -br link | grep LOWER_UP —— 找出已连通的物理接口(如 ens1f0、enp3s0f1)
再执行:
- ethtool ens1f0
重点关注这四行:
- Speed:当前协商速率(如 10Mb/s、100Mb/s、1000Mb/s),不是网卡标称最大值
- Duplex:必须为 Full;若显示 Half,极易引发冲突重传和丢包
- Link detected:必须为 yes,否则物理链路未建立
- Auto-negotiation:建议为 on;若为 off,说明是手动强制设置,易与对端不一致
必须核对对端设备的协商结果
单看本机毫无意义。交换机、路由器或另一台服务器的对应端口,必须和本机完全一致:
- 华为/华三交换机:display interface gigabitethernet 1/0/5
- Cisco交换机:show interfaces gi1/0/5 status
- Linux 对端服务器:ethtool eth0
常见不匹配场景:
- 本机 autoneg on,对端 speed 1000 duplex full autoneg off → 可能协商成 100Mb/s Half
- 一端是千兆口,另一端是百兆口(老旧交换机或路由器LAN口)→ 只能降级到百兆
- 光纤链路中光模块型号不兼容或收发光功率异常 → Link detected: no 或速率反复跳变
排查协商失败或隐性降速线索
如果协商速率明显偏低(比如2.5G网卡只跑出1G),继续深挖:
- 查错误计数:ethtool -S ens1f0 | grep -E "(error|drop|fail)",特别关注 rx_errors、negotiation_failures 是否非零
- 查内核日志:dmesg | grep -i "ens1f0\|link\|phy",留意 "autoneg failed"、"link down"、"PHY reset"
- 临时测试:关闭自协商并手动设参(仅用于验证)
sudo ethtool -s ens1f0 speed 1000 duplex full autoneg off
若稳定且速率恢复,说明自协商过程受干扰(如线缆质量差、中间有老式集线器)
避开典型误判陷阱
很多“性能低”其实和协商无关,别被带偏:
- 网线不是“能通就行”:超五类线(Cat5e)老化、水晶头氧化、八芯未全通,都会导致千兆协商失败,自动降为百兆甚至十兆
- 主板网卡本身是百兆规格:设备管理器或 lspci -k | grep -A2 Ethernet 显示驱动为 r8169 且无 1000baseT 支持,说明硬件上限就是100Mbps
- Realtek RTL8125/8168 类网卡易被内核错误识别:lspci -vv -s $(lspci | grep -i realtek | head -1 | cut -d' ' -f1) 看 Subsystem ID,再比对官方芯片手册,确认是否需换用 r8168 驱动











