ethtool是唯一能直接读取phy寄存器、反映真实双工与速率的工具;speed:1000mb/s表示当前链路千兆,duplex:full才正常,link detected:yes是前提,auto-negotiation:on必须开启。

ethtool 是唯一能直接读取 PHY 寄存器、反映真实双工与速率的工具;ifconfig 或 ip link 输出里根本没有 Duplex 和 Speed 字段,别被过时教程误导。
用 ethtool 查当前双工和速率
运行 ethtool 后输出中的 Duplex 和 Speed 行才是真实协商结果,不是网卡标称能力:
-
Speed: 1000Mb/s表示当前链路速率为千兆,不是“支持千兆” -
Duplex: Full才正常;若为Half,基本可断定对端(如交换机口)强制设了半双工或自协商失败 -
Link detected: yes是物理连通前提,为no时Speed/Duplex无意义 -
Auto-negotiation: on必须开启;若为off,说明速率/双工是手动硬设的,极易与对端不匹配
为什么 ifconfig 显示不了 Duplex 和 Speed
ifconfig 工作在 OSI 第二层(数据链路层)之上,只管 MAC 和 IP 层配置,完全不接触 PHY 芯片。它输出里的 ether 行只是 MAC 地址,MTU 是最大传输单元,跟物理速率无关。
- 某些旧版
ifconfig在 banner 行末尾显示类似1000baseT/Full的字样,那是驱动主动填充的提示信息,不可靠,且现代内核已移除该行为 -
ip link show输出中LOWER_UP只表示内核认为链路就绪,不等于物理层协商成功 - 真正要定位丢包、延迟高、吞吐上不去的问题,必须看
ethtool的rx_errors、tx_errors、negotiation_failures
查不到 Speed 或 Duplex 显示 Unknown! 怎么办
这通常不是命令没输对,而是物理层已中断或驱动未正确初始化:
-
Link detected: no时,Speed和Duplex必然为Unknown!—— 先插好线、检查交换机端口指示灯、确认光模块收发光正常 - 部分 USB 网卡或虚拟化场景(如 KVM virtio-net)不支持 PHY 寄存器读取,
ethtool会回退到驱动上报值,可能为空或错误 - 驱动版本太老或固件损坏时,
ethtool -i eth0中的driver和firmware-version字段可能为空,需更新驱动 - 运行
dmesg | grep -i "eth\|link\|phy",重点找link down、autoneg failed、PHY reset这类日志
真实链路瓶颈永远藏在两端协商结果是否一致里——单看本机 ethtool 输出只是起点,必须同步登录交换机核对对应端口的 show interface 结果。哪怕只差一个 Full vs Half,都可能让 TCP 重传率飙升。











