最准方法是用 ethtool 查 link detected: yes,表示网线插稳、对端上电且物理链路连通;辅以 /sys/class/net/eth0/carrier 读取为 1 确认载波存在,二者结合可排除驱动或抽象层干扰。

怎么看网卡物理链路通没通(最准方法)
ethtool 是唯一能直接读取 PHY 层信号的工具,link detected: yes 才算真正“插好了”。其他命令都可能骗人——比如 ip link show 显示 UP 但 NO-CARRIER,说明网卡被启用了,可网线根本没信号。
- 运行
sudo ethtool eth0(把eth0换成你的实际网卡名,如enp0s3或eno1) - 关键三行必须一起看:
-
Link detected: yes→ 物理连通(网线插稳、对端上电、交换机端口没 shutdown) -
Speed: 1000Mb/s→ 协商速率,若为unknown!或10Mb/s,大概率是线材/端口/驱动兼容问题 -
Duplex: Full→ 全双工才正常,Half往往伴随丢包或性能下降
-
注意:ethtool 需要 root 权限读取硬件寄存器,普通用户执行会报错 No such device 或返回空值。
怎么用内核接口快速验证 carrier 状态(免安装)
/sys/class/net/eth0/carrier 是内核暴露的原始物理信号标志,值为 1 才代表真实 link up。它比 operstate 更底层、更可靠。
查 carrier:
cat /sys/class/net/eth0/carrier
返回1→ 有载波(网线通、光模块亮)
返回0→ 物理断开(拔线、对端关机、端口 down)查 operstate:
cat /sys/class/net/eth0/operstate
返回up表示驱动已就绪,但不保证 carrier 存在
返回down或unknown通常意味着驱动未加载或设备异常
组合判断更稳妥:operstate=up 且 carrier=1 才是“软硬都 OK”;operstate=up 但 carrier=0 就是典型“网线没插”。
为什么 ip link show 不能单独信任
ip link show eth0 输出里 LOWER_UP 看似直观,但它依赖驱动是否正确上报 carrier 信息。某些老旧网卡(如部分 Realtek RTL8169 变种)或虚拟化环境(如 QEMU 默认网卡)根本不支持 carrier detect,LOWER_UP 会恒为 false 或永远 true。
正常输出片段:
2: eth0: <broadcast> ... state UP ...</broadcast>
有LOWER_UP+state UP→ 大概率物理正常异常输出片段:
2: eth0: <no-carrier> ... state DOWN ...</no-carrier>NO-CARRIER是明确的物理层失败信号,比state DOWN更早暴露问题
如果看到 NO-CARRIER,别急着重启 NetworkManager——先拔插网线、换端口、查对端设备,这才是根因。
nmcli 能不能查物理链路
nmcli device status 和 nmcli device show eth0 都只反映 NetworkManager 的逻辑管理状态,不是物理链路。它可能显示 connected,但 ethtool 已报 Link detected: no。
- 真正能从 nmcli 获取物理信号的只有这个字段:
nmcli -g WIRED-PROPERTIES.CARRIER device show eth0
输出on→ carrier=1,等价于cat /sys/class/net/eth0/carrier
输出off→ 物理断开
注意:该字段仅对有线网卡有效,Wi-Fi 或 bond 设备不提供
别被 GENERAL.STATE: 100 (connected) 迷惑——那是 NM 认为自己连上了,跟网线插没插没关系。真要排障,得绕过所有抽象层,直奔 ethtool 和 /sys/class/net/*/carrier。











