网卡当前是百兆还是千兆运行取决于ethtool输出中的speed行:speed: 1000mb/s表示千兆,speed: 100mb/s表示百兆,该值为实时协商结果,受对端设备、网线质量及自动协商状态共同影响。

直接看 Speed 行,不是看“Supported link modes”里有没有 1000baseT,而是看当前协商的实际速率。
ethtool 输出里哪一行决定网卡当前是百兆还是千兆
运行 ethtool eth0 后,关键信息在 Speed 这一行:
Speed: 1000Mb/s Duplex: Full Link detected: yes
这表示当前链路已协商为千兆全双工。如果显示 Speed: 100Mb/s 或 Speed: 10Mb/s,那就是百兆或十兆。
-
Speed是实时协商结果,受对端设备(交换机/路由器)、网线质量、自动协商开关状态共同影响 -
Supported link modes只说明网卡硬件能力,不代表当前启用的速率 - 即使网卡支持 1000baseT,但若对端只开百兆、或用了劣质五类线、或禁用了 auto-negotiation,
Speed仍会降为 100Mb/s
为什么有时 ethtool 显示 “Speed: Unknown!”
常见于以下几种情况:
- 网线没插、物理链路断开(
Link detected: no) - 网卡驱动未正确加载,或处于 down 状态(先确认
ip link show eth0中状态为UP) - 某些老旧或虚拟网卡(如部分 virtio-net 模式)不报告速率
- 使用了
mii-tool兼容模式的网卡,但ethtool无法读取 PHY 寄存器(此时可尝试mii-tool -v eth0看negotiated字段)
注意:ethtool -s eth0 autoneg off speed 1000 duplex full 强制设速后,若对端不匹配,Link detected 很可能变 no,Speed 就会退成 Unknown!。
lspci 和 ifconfig 能不能替代 ethtool 判断速率
不能直接替代,但可辅助验证:
-
lspci -vv | grep -A 5 -B 5 Ethernet看到的是网卡芯片型号和理论规格(如BCM5709 Gigabit Ethernet),属于硬件设计能力,不反映当前链路状态 -
ifconfig eth0或ip -s link show eth0完全不显示速率,只有收发包计数、MTU、状态标志(RUNNING、LOWER_UP)等 -
mii-tool eth0在老内核或某些驱动下仍可用,输出类似negotiated 100baseTx-FD,其中100baseTx= 百兆,1000baseT不会出现(它不支持千兆识别)
所以,依赖 lspci 判断“是不是千兆卡”可以,但判断“现在跑没跑千兆”,必须靠 ethtool 的 Speed 行。
常见误判点:auto-negotiation 关闭时的陷阱
当手动关闭自动协商(ethtool -s eth0 autoneg off)并指定速率后,容易忽略对端是否同步配置:
- 本端设
speed 1000 duplex full,对端仍是 auto-negotiation 模式 → 大概率 link fail - 本端和对端都关 auto-neg,但一端设 1000,另一端设 100 → 物理层无法建立连接,
Link detected: no - 某些交换机端口默认开启 flow control 或 pause frame,而网卡未适配,也可能导致协商失败、速率回落
真正稳定跑千兆,优先保持 Auto-negotiation: on,让两端自己谈;只有排障或特殊场景才关它。
最易被忽略的一点:网线。Cat5e 是千兆底线,但实际布线中接头氧化、线序错、过长(超100米)、捆扎过紧,都会让 ethtool 显示 Speed: 100Mb/s —— 此时换根线,Speed 可能立刻跳回 1000Mb/s。











