一个意外收获:原来的网线居然只协商到百兆

迁移完成后,另一个问题浮出水面:原来的直连链路明明接在"千兆"交换机端口上, 为什么速度一直不理想?

利用 Linux 历史内核日志:

sudo journalctl -k | grep ixgbe

发现迁移前 eno2 多次报出 NIC Link is Up 100 Mbps;而改插 R5408 LAN 后,eno2 的日志出现了 NIC Link is Up 1 Gbps。这揭示了一个此前被忽略的事实:旧上游直连链路 曾经多次仅以 100Mbps 连接;但不能因此自动断定 R5408 WAN 现在也是百兆。

随后用另一块 X550 网卡 eno1 做辅助诊断(注意:不要和路由器 WAN 在同一上游网段 同时使用同一个 IP)。在有权限的检测链路上:

$ networkctl status eno1
Speed: 100Mbps
Duplex: full

$ ethtool eno1
...
Speed: 100Mb/s
Auto-negotiation: on

网卡本身支持 100M / 1G / 多千兆档位。

协商速率与下载速度的区别

还做过清华镜像下载观测:某次平均约 9.1 MB/s(≈73 Mb/s),另一次过程偏慢。这些数字 受校园出口、镜像站拥塞和其他业务影响,只能当作应用层吞吐观测,不能当成 WAN 的 协商速率读数。

五组证据,为什么根因仍未定案

百兆故障排查路径

#检查结果能说明什么
1ethtool eno1100 Mb/s、Full、自协商 on网卡能宣告千兆能力,但对端/链路只给到 100M
2ethtool --show-eee eno1Operation not supported查询能力限制,并非 EEE 故障证据
3ethtool --cable-test eno1同样不支持不能据此断言线缆完好或损坏
4ethtool -S eno1 | grep -Ei 'crc|error|drop'CRC/帧错误为零,少量丢弃不能单独说明物理层故障
5简易测线仪8 芯均通只证明通断,见下

关键在第 5 条:简易测线仪证明的是通断和基础线序,不能完整证明每对线的高频性能、 接头接触质量、串扰和回波损耗。原理上也解释了为什么"八芯全通 + 百兆"不矛盾: 100BASE-TX 只用两对线,而 1000BASE-T 需要四对线同时满足规范——任何一对的高频 性能不达标,千兆就退到百兆。

交给网管的核查清单

截至本文写作时,百兆根因仍未定案。应由网络维护人员进一步核查:

  1. 上游交换机端口是否被固定为 100M(最常见);
  2. 两侧是否都在自动协商;
  3. 端口是否有 CRC/FCS 错误计数;
  4. 是否有线缆认证测试仪的诊断报告。

若策略允许,用一条经过验证的短千兆网线做单变量对照替换当前链路。不要在不确定 上游配置的情况下盲目强制千兆协商。

三条可复用的结论

  1. 链路速率、带宽上限、真实应用速度是三回事。ethtool 读的是直连物理口的协商 速率,不能跨路由器"透视"另一个端口;curl 测的是端到端应用吞吐,不保证等于 物理口速率。
  2. 8 芯亮灯绝不是千兆验收报告。100M 协商、零 CRC、八芯通断可以同时成立,根因 仍可能藏在上游配置、端接质量与线缆高频性能里。
  3. journalctl -k 是免费的历史协商记录仪。NIC Link is Up ... 一行行留着每次 链路训练的结果,比任何一次性读数更能说明"这条链路一直是什么状态"。

三篇系列至此完结。这次折腾最有价值的并不是多装了一台路由器,而是把"只有一个上游 IP、 只有一根网线"变成了清晰可回退的服务迁移方案,顺便找出了多年潜伏的百兆链路疑点。