一个意外收获:原来的网线居然只协商到百兆
迁移完成后,另一个问题浮出水面:原来的直连链路明明接在"千兆"交换机端口上, 为什么速度一直不理想?
利用 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 的 协商速率读数。
五组证据,为什么根因仍未定案

| # | 检查 | 结果 | 能说明什么 |
|---|---|---|---|
| 1 | ethtool eno1 | 100 Mb/s、Full、自协商 on | 网卡能宣告千兆能力,但对端/链路只给到 100M |
| 2 | ethtool --show-eee eno1 | Operation not supported | 查询能力限制,并非 EEE 故障证据 |
| 3 | ethtool --cable-test eno1 | 同样不支持 | 不能据此断言线缆完好或损坏 |
| 4 | ethtool -S eno1 | grep -Ei 'crc|error|drop' | CRC/帧错误为零,少量丢弃 | 不能单独说明物理层故障 |
| 5 | 简易测线仪 | 8 芯均通 | 只证明通断,见下 |
关键在第 5 条:简易测线仪证明的是通断和基础线序,不能完整证明每对线的高频性能、 接头接触质量、串扰和回波损耗。原理上也解释了为什么"八芯全通 + 百兆"不矛盾: 100BASE-TX 只用两对线,而 1000BASE-T 需要四对线同时满足规范——任何一对的高频 性能不达标,千兆就退到百兆。
交给网管的核查清单
截至本文写作时,百兆根因仍未定案。应由网络维护人员进一步核查:
- 上游交换机端口是否被固定为 100M(最常见);
- 两侧是否都在自动协商;
- 端口是否有 CRC/FCS 错误计数;
- 是否有线缆认证测试仪的诊断报告。
若策略允许,用一条经过验证的短千兆网线做单变量对照替换当前链路。不要在不确定 上游配置的情况下盲目强制千兆协商。
三条可复用的结论
- 链路速率、带宽上限、真实应用速度是三回事。
ethtool读的是直连物理口的协商 速率,不能跨路由器"透视"另一个端口;curl测的是端到端应用吞吐,不保证等于 物理口速率。 - 8 芯亮灯绝不是千兆验收报告。100M 协商、零 CRC、八芯通断可以同时成立,根因 仍可能藏在上游配置、端接质量与线缆高频性能里。
journalctl -k是免费的历史协商记录仪。NIC Link is Up ...一行行留着每次 链路训练的结果,比任何一次性读数更能说明"这条链路一直是什么状态"。
三篇系列至此完结。这次折腾最有价值的并不是多装了一台路由器,而是把"只有一个上游 IP、 只有一根网线"变成了清晰可回退的服务迁移方案,顺便找出了多年潜伏的百兆链路疑点。
