最准确的方法是用 ethtool 查看网卡 PHY 芯片真实协商结果;需先确认网卡名(如 ens1f0),再执行 sudo ethtool ens1f0,重点关注 Speed、Duplex、Link detected 和 Auto-negotiation 四项。

直接用 ethtool 查看最准确,它读取的是网卡 PHY 芯片的真实协商结果,不是配置值,也不是上层统计值。
确认网卡名称并运行 ethtool
先查出物理网卡名(常见如 enp0s3、ens1f0、eth0):
-
ip -br link | grep LOWER_UP—— 找已连通的有线网卡 -
ls /sys/class/net/—— 列出所有接口,排除 lo、docker0、veth* 等虚拟设备
再对目标网卡执行:
-
sudo ethtool ens1f0(替换为你的网卡名) - 重点关注四行:
Speed: 当前协商速率(如1000Mb/s表示千兆,10000Mb/s表示万兆)
Duplex: 应为Full;若为Half,极易丢包
Link detected: 必须是yes,否则物理链路未通
Auto-negotiation: 推荐为on;若为off,说明速率/双工是手动设定的,易与对端不一致
快速验证链路是否真正连通
仅看 Speed 不够,需结合物理层状态判断:
-
ip link show ens1f0 | grep "state\|LOWER_UP"—— 出现LOWER_UP才表示网线已插好且 PHY 检测到信号 - 若输出只有
UP但无LOWER_UP,说明接口启用但链路未建立(可能是网线松动、交换机断电、光模块异常等) - 也可直接看
/sys/class/net/ens1f0/carrier:值为1表示链路通,0表示断开
备用方法:从内核接口文件读取速率
适用于脚本调用或权限受限场景(无需 root):
-
cat /sys/class/net/ens1f0/speed—— 输出纯数字,单位 Mbps(如1000) - 注意:该文件仅在链路建立后才有效,否则报错或显示
N/A - 配合
cat /sys/class/net/ens1f0/operstate可确认当前操作状态(up或down)
排查常见异常
如果速率明显偏低(如万兆卡只显示 1000Mb/s),或反复变化:
- 检查对端设备(如交换机端口)是否也协商出相同 Speed 和 Duplex
- 运行
ethtool -S ens1f0 | grep -E "(err|fail|drop)",关注rx_errors、link_failures是否持续增长 - 查看内核日志:
dmesg | grep -i "ens1f0\|phy\|link",留意autoneg failed、link down等提示


















