双工不匹配的症状
一端固定为全双工、另一端处于自动协商时,协商可能失败并退化为半双工。半双工侧发送前要检测冲突,于是出现「小流量正常、大流量极慢且丢包」的典型表现:延迟上升、吞吐上不去、偶尔丢包,但链路状态始终显示为 up。判据在两端都能找到——半双工侧的碰撞相关计数会持续增长。
基本信息
| 适用平台 | Linux(ethtool 查看与设置协商模式) |
|---|---|
| 关键字段 | ethtool 输出中的 Speed 与 Duplex;Duplex 为 Half 即需警觉 |
| 错误计数 | ethtool -S 中的 collision、late collisions、carrier、deferred |
| 标准依据 | IEEE 802.3 自协商(Clause 28/37) |
| 推荐做法 | 两端都保持自协商;必须固定时两端固定为完全相同的速率与双工 |
典型使用场景
- 服务器吞吐远低于网卡规格:先查双工与协商速率是否正常
- 小文件传输正常、大文件极慢:典型的半双工碰撞特征
- 更换网线或交换机端口后性能下降:确认协商结果是否发生变化
- 老旧设备或工业设备对接:老设备固定半双工时需要评估影响
- 光纤转电口模块场景:确认模块与对端协商是否一致
两端取证
两端取证
ethtool eth0 # 看 Speed 与 Duplex,出现 Half 就要警觉
ethtool -S eth0 | grep -iE 'collision|late|carrier|deferred' # 碰撞类计数是否增长
ethtool eth0 | grep -E 'Speed|Duplex|Auto-negotiation|Link detected'
# 连续两次读计数,比较增量才能判断是否正在发生碰撞
ethtool -S eth0 | grep -i collision; sleep 30; ethtool -S eth0 | grep -i collision
# 查看网卡实际支持的速率与模式
ethtool eth0 | grep -A6 'Supported link modes'修复原则
修复原则
推荐:两端都使用自协商(默认行为)
次选:两端都强制为相同的速率 + 全双工(必须两端一起改)
错误做法:一端强制 1000M/Full,另一端保持 auto
错误做法:只在一台设备上强制,另一端仍在自协商
# 千兆及以上链路强制半双工基本必然故障,不存在可用场景协商组合与结果
| A 端设置 | B 端设置 | 结果 |
|---|---|---|
| 自协商 | 自协商 | 正常,双方协商到最高共同能力 |
| 强制全双工 | 自协商 | 常见故障:B 端退化半双工,碰撞增多 |
| 强制全双工 | 强制全双工(同速率) | 可用,但失去线缆质量自检能力 |
| 强制全双工 | 强制半双工 | 必然故障,双向通信严重异常 |
| 强制速率不同 | 自协商 | 协商失败或降速,性能受限 |
千兆以太网下强制一端为半双工基本必然故障;两端都强制为相同值虽然可用,但会失去线缆质量自检能力,能不强制就不强制。