第3章 常见协商失败的场景分析

做网络这行,最怕的就是设备明明连着线,数据就是不通。我这些年排查过的自协商问题,十有八九都逃不出下面这四种坑:不匹配、超时、降级和链路抖动。今天咱们把这四种场景掰开揉碎了讲,每个场景我都会说说我实际踩过的坑。

核心观点:自协商失败不是单一原因,90%的故障都出在物理层配置或线缆质量上。优先检查双工模式、MDI/MDIX和时钟同步。

3.1 不匹配——最经典的「一边千兆一边百兆」

不匹配的场景,说白了就是两端协商出来的参数不一样。最常见的是双工不匹配,比如一端是全双工,另一端是半双工。因为自协商是用FLP脉冲交换能力信息,如果其中一端被人为强制了速度和双工模式,那另一边就可能误判。

  • 现象:链路能通,但丢包率奇高,延迟抖动大,TCP重传频繁。
  • 原因:人为强制配置(如switchport nonegotiate)、老旧设备不支持自协商、介质转换器(如光转电)未透传FLP。
  • 排查方法:
    • 两边同时看 show interfaces status 或 ethtool eth0
    • 对比 Negotiated 双工模式是否一致
    • 检查是否有 Auto-negotiation: off 或 Speed/Duplex: 1000/Full 但实际线缆只支持百兆

我在项目中遇到过一回,客户端强制百兆全双工,交换机侧开了自协商。结果链路显示up,但传大文件时速度只有几百KB。我抓包一看,大量CRC错误和碰撞。

避坑指南:我曾经帮客户排查数据中心链路,发现所有服务器都开了自协商,但唯独一台思科交换机的端口打了speed 1000和duplex full。结果这台交换机跟其他厂商的设备死活协商不起来。我的建议是:要么两边都强制,要么两边都自协商,千万别混用。

3.2 超时——设备「想太多」导致链路起不来

自协商有个时间窗口,叫协商超时。正常情况下一对设备交换几次FLP脉冲就能确定能力,一般1~2秒。但如果物理层信号不稳定、光模块接收灵敏度不够,或者线缆长度超90米,就会反复尝试,最终超时失败。

  • 现象:链路指示灯频繁闪烁后熄灭,接口状态显示 down/down,日志里出现 autoneg failed 或 link flap。
  • 常见触发点:
    1. 劣质网线或网线接头氧化
    2. STP(生成树)和自协商同时进行,RSTP收敛时间与协商超时冲突
    3. 光模块接收功率在临界值(比如-23dBm)附近
常见超时场景与排查方向
场景典型日志排查重点
线缆质量差MDI_X / MDI_C 冲突更换网线、测线仪检查
光模块性能不足rx loss of signal检查光功率、清洁光纤接口
交换机负载高CPU 100%导致LLDP协商被延迟检查设备CPU,必要时关闭LLDP
电缆过长retry limit exceeded测线缆长度,超过100米需加中继

我记得有一次排查园区网故障,用户有线网络每隔半小时断一次。我上去一看,交换机端口日志里全是 autoneg timeout – link is down。后来发现是那根网线在弱电井里被老鼠咬过,线芯接触不良,FLP脉冲偶尔传不过去。

3.3 降级——明明能跑千兆,却只协商出百兆

降级是最容易被忽略的故障。设备之间明明支持千兆甚至万兆,但最后只协商出百兆甚至十兆。原因往往是线缆或距离不达标。

举个例子:六类线跑千兆,如果中间有一段是五类线,或者水晶头只打了4根芯,自协商就会自动降低一个档次。这是向下兼容机制——设备感知到物理层异常,主动退回到更稳定的低速模式。

排查时我习惯用 ethtool eth0 看两行:

# 左边是设备支持能力,右边是当前协商结果
Supported ports: [ TP ]
Supported link modes:   10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Full 
                        10000baseT/Full
Advertised link modes:  10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Full  
Current link mode: 100baseT/Full       ← 明显降级了

如果看到Current link mode比Supported中的最高档低,就说明降级发生了。这时候别急着怀疑设备,先检查物理介质:

  • 线缆是否为屏蔽线?非屏蔽线在强干扰环境下容易降级
  • 网线长度是否超过100米?超了的话会回退到100M
  • RJ45接口是否氧化?用酒精擦拭水晶头触点

注意:有些交换机会在降级后依然保持 Link Up 状态,但实际带宽只有100M。我曾经因为忽略这一点,让客户白白采购了一套千兆设备,最后发现是楼内线缆只有四对芯中的两对通。嗯,遇到降级第一件事就是拿测线仪测线。

3.4 链路抖动——时好时坏最折磨人

链路抖动,就是端口状态在up和down之间反复跳变。自协商层面的抖动一般源于电气噪声或阻抗不匹配。

我总结过三个最容易引发抖动的场景:

  1. 网线两端水晶头接法不一致:一端A类一端B类,但距离短时还能通,信号反射会导致FLP识别失败。
  2. 电源干扰:网线跟强电电缆走同一个线槽,电磁干扰破坏脉冲时序。
  3. 交换机散热不良:温度过高导致PHY芯片工作不稳定,协商脉冲相位偏移。

排查链路抖动时我有个习惯——先看接口计数器:

# 用思科命令举例
Switch#show interfaces gigabitEthernet 0/1
  Hardware is Gigabit Ethernet, address is 00e0.fc12.3456
  5 minute input rate 1000 bits/sec, 0 packets/sec
  5 minute output rate 2000 bits/sec, 1 packets/sec
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  30 second input rate 1000 bits/sec, 0 packets/sec
  30 second output rate 2000 bits/sec, 1 packets/sec
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
  0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
  0 output errors, 0 collisions, 1 interface resets
  0 unknown protocol drops
  Output queue: 0/40 (size/max)
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never

如果看到 interface resets 数量持续增长,基本就是链路在抖动。这时候可以临时关闭自协商,强制固定速率,看是否还抖动——如果还抖,说明问题出在物理层硬件或线缆上。

个人经验:我曾在机房遇到过一整排端口都在抖动,排查了三天发现是机柜接地不良,导致网线屏蔽层累积了静电,放电瞬间干扰了PHY。后来把所有设备重新接地,抖动立刻消失。

自协商失败四大典型场景关系图 自协商失败 不匹配 超时 降级 链路抖动 🔴 不匹配 • 双工模式冲突 • 强制 vs 自协商 • 介质转换器问题 🟠 超时 • 线缆/光模块质量 • STP与自协商竞争 • 接收功率临界值 🟢 降级 • 线缆阻抗/距离不达标 • 触点数不足(4芯) • 自动向下兼容 🟣 链路抖动 • 电气噪声/接地 • 水晶头接法混乱 • 电源干扰/温度 排查顺序:先看双工模式和协商结果 → 再用ethtool检查降级 → 最后排查物理层抖动

总结一下我的经验:碰到自协商故障,别一头扎进配置里。先看物理层——线缆、光模块、接地、距离。这四个场景里,不匹配和降级占了七成以上,超时和抖动往往和线缆质量强相关。记住一句话:自协商本质上是对物理层能力的对话,对话失败要么是语言不通(不匹配),要么是对方听不见(超时),要么是说了谎(降级),要么是环境太吵(抖动)。

实战关联:建议你在做自协商诊断时,手里常备一根已知正常的六类跳线和一台具有ethtool或者show interfaces命令的终端。绕开所有中间跳线,直连测试——这招帮我排除了至少一半的物理层误报。