判断物理链路通断应以ethtool输出的link detected: yes为黄金指标,表示网线插好、对端上电且phy协商成功;speed和duplex字段则反映协商结果是否正常。

ethtool 输出里哪些字段真正反映物理链路通断
判断网线是否插好、交换机端口是否上电、PHY 层是否协商成功,ethtool 是唯一能直接读取网卡物理层(PHY)寄存器的工具。其他命令如 ip link 只能告诉你“内核认为链路如何”,而 ethtool 告诉你“硬件实际看到什么”。
执行 sudo ethtool eth0 后,重点盯住这三行:
-
Link detected: yes—— 这是黄金指标。只要它是yes,说明网线两端电气连通、对端设备 PHY 已激活、自动协商完成;no就意味着物理层根本没信号,和 IP 配置、服务状态完全无关 -
Speed: 1000Mb/s(或100Mb/s、unknown!)—— 若为unknown!,99% 是因为Link detected: no导致无法读取协商结果;若显示速率但网络不通,可能是双工不匹配或线缆质量差 -
Duplex: Full—— 现代交换机和网卡默认全双工,如果这里显示Half,大概率是协商失败或对端强制设为半双工,容易引发冲突和丢包
/sys/class/net/eth0/operstate 和 ip link 的区别在哪
/sys/class/net/eth0/operstate 是内核暴露的操作状态文件,读出来是 up 或 down。它比 ip link show eth0 更轻量,不需要额外工具,但含义有陷阱:
-
cat /sys/class/net/eth0/operstate返回up≠ 物理连通 —— 它只表示接口已启用且内核尝试过启动链路,哪怕网线没插也会返回up -
ip link show eth0中的LOWER_UP标志才是关键:它由内核根据底层驱动上报的 PHY 状态设置,和ethtool的Link detected: yes基本一致;没有LOWER_UP却有UP,说明接口启用了但物理层无响应 - 如果看到
NO-CARRIER字样,不用再查,这就是内核明确告诉你:“我发不出去,也收不到任何载波信号”
为什么 nmcli device status 不能代替 ethtool
nmcli device status 显示的是 NetworkManager 对连接的**高层语义判断**,不是底层事实。它依赖 ethtool 或 ip link 提供的状态做决策,但会叠加策略逻辑:
- 当
ethtool eth0显示Link detected: no,nmcli很可能显示unavailable—— 这是对的 - 但如果网线插着、
Link detected: yes,而 DHCP 没拿到地址,nmcli可能显示disconnected,让你误以为物理坏了 - 更隐蔽的是:NetworkManager 有时会缓存状态,重启服务前
nmcli device reapply eth0才能刷新;而ethtool每次都是实时读寄存器
排查时最容易忽略的权限和硬件细节
很多问题卡在第一步就失败,不是命令不会用,而是没意识到这些硬性前提:
-
ethtool必须用sudo—— 普通用户无权访问 PHY 寄存器,直接运行会报错No such device或静默返回空结果 - 某些 USB 转以太网适配器(如 ASIX AX88179)或虚拟网卡(
veth、docker0)不支持ethtool查询物理链路,运行会提示No data available;这时只能靠ip link和operstate - 老式网卡(如 Realtek RTL8139)可能不支持现代
ethtool的全部字段,Link detected行可能压根不出现,得看speed是否为0或Unknown来间接判断
物理链路状态不是“有没有 IP”或“能不能 ping”,它只回答一个问题:网线那头,有没有电、有没有回应。所有上层故障,都该先确认这个答案。











