什么是 Auto-Negotiation?

简单说,Auto-Negotiation 就是让两个以太网设备在插上线之后,自动商量出一个双方都能跑的“最高档位”。

为什么需要这个机制?我举个亲身体会。几年前处理过一个数据中心的上架项目,两台交换机明明都是千兆口,接上后链路始终只跑 100M。排查了整整两个小时,最后发现是其中一台的端口被硬编码成了 100M 全双工。你想想看,要是当初有 Auto-Negotiation 自动协调,这问题根本不会出现。

以太网诞生初期,所有设备都跑在 10M 半双工,那时候确实不需要协商。后来 100M、1000M 甚至更高速度出现,如果两台设备一端支持 1000M,另一端只支持 100M,硬接上去轻则降速,重则丢包断连。Auto-Negotiation 就是来解决这个“鸡同鸭讲”的问题的。

核心作用一句话:自动协商出两端都支持的最优速度和双工模式,确保物理链路稳定、高效地工作。

Auto-Negotiation 的工作流程

我习惯把它的工作流程拆成三步,这样看比较清晰。

  1. 链路初始化阶段:设备上电或网线插入后,物理层芯片开始发送“FLP 脉冲信号”(Fast Link Pulse,快速链路脉冲)。这套信号包含了本端支持的速度和双工能力。
  2. 能力交换阶段:两端通过 FLP 脉冲互相“打招呼”,交换各自的参数列表。这个过程通常耗时几百毫秒到一两秒。
  3. 协商决策阶段:双方根据收到的能力信息,按照优先规则确定最终速度和双工模式。速度优先级:1000M > 100M > 10M;双工模式:全双工优先于半双工。

嗯,这里要注意一个细节:如果某端关闭了 Auto-Negotiation,FLP 信号不会发送。这就好比明明在同一个房间里,对方却把耳朵捂上了——这就是我们常说的“协商失败”。

FLP 脉冲到底是什么?

FLP 脉冲其实就是一系列精心编排的电平变化。我打个比方:它像摩尔斯电码,设备通过脉冲的间隔和数量,告诉对方自己会哪些“技能”。

每一组 FLP 包含 17 个脉冲位置,其中奇数位置是固定的时钟脉冲,偶数位置携带具体的能力信息——我们叫它“能力选择字段”(Base Page,基础能力页)。

脉冲位置 含义
时钟脉冲(奇数位) 同步信号,告诉对方“我开始发了”
能力选择(偶数位) 标识本端支持的速率和双工模式
扩展位 表示后续还有更多能力页(例如 1000M 能力)

曾经有个现场工程师跟我抱怨,说链路频繁断开重连。我到现场抓包分析 FLP,发现脉冲间隔不稳定。后来确认是网线质量太差,信号衰减严重导致协商反复失败。换了根 Cat6 跳线,问题立刻消失。

双工模式的优先级规则

Auto-Negotiation 的决策不是随机的,它遵循一套完整的优先级矩阵。我个人习惯把这套规则记成一张对照表,现场排查时直接读,不绕弯子。

本端能力 对端能力 协商结果
1000M 全双工 1000M 全双工 1000M 全双工
1000M 全双工 100M 全双工 100M 全双工
100M 全双工 100M 半双工 100M 半双工
100M 全双工 10M 全双工 10M 全双工
100M 半双工 10M 半双工 10M 半双工

关键点:速度优先级永远高于双工模式。两端都支持 1000M 时才允许协商 1000M;如果对端只支持 100M,即使本端是全双工,也只能降到 100M 半双工或 100M 全双工(取决于对端提供的具体能力)。

特别注意:当一端开启 Auto-Negotiation,另一端强制固定为 100M 全双工时,协商可能失败。此时 Auto-Negotiation 端会降级到 100M 半双工,双工不匹配导致大量 CRC 错误和重传。这是生产环境中最常见的故障模式之一。

为什么 Auto-Negotiation 不可或缺?

说白了,它解决的是物理层“握手”的问题。如果没有它,每台设备都需要人工配置端口速度和双工模式,只要配置稍有偏差,链路就会出现各种奇怪问题。

  • 兼容性:新老设备混合部署时,靠协商保证互通。
  • 易维护:换设备、换网线、换模块后自动调整,不用登到机房改配置。
  • 自恢复:链路因干扰降速后,干扰消失能自动恢复到最佳参数。

我经常跟团队说,好的网络设计不是不出现故障,而是故障出现时能自动降级、自动恢复。Auto-Negotiation 正是这种设计哲学的基石。

Auto-Negotiation 工作流程总图

下面这张图把整个流程串了起来,从网线插入到链路建立成功,每一步的关系一目了然。

Auto-Negotiation 工作流程 链路空闲状态 发送 FLP 脉冲 能力信息交换 协商决策 速度 / 双工选取 链路建立 FLP 中包含 Base Page 能力选择字段 协商超时 / 失败 自动降级 尝试低速度 / 半双工 重新发送 FLP 重试协商流程 链路断开 故障排查关键点 FLP 信号是否正常发送?  |  Base Page 能力字段是否完整?  |  双工模式是否匹配?

从上图可以看到,正常的协商走的是上方绿/蓝/紫路线,走通之后链路就建好。如果某一步卡住,就会进入下方的红色降级循环——这也是为什么很多故障现场表现为“链路时断时续”。实际排查时,我一般先用命令查看端口协商状态,如果显示的不对,再抓 FLP 看脉冲是否正常。这一步能把问题范围缩小到本端、对端还是线缆。

经验之谈:我个人非常建议在设备上线前先用打流仪或抓包工具确认协商结果。这不是浪费时间,相反,它能提前暴露出线缆质量、模块兼容性、两端固件差异这些隐形坑。我曾在一个机房连续排查四块网卡的间歇性断流,最后发现是某批次模块兼容性不够好,导致 1000M 协商不稳定。如果在安装时统一验证过,后来根本不会出这种生产事故。

小结一下

Auto-Negotiation 是物理层实现互操作的核心机制。它通过 FLP 脉冲交换能力信息,根据优先级规则确定最终速度和双工模式。这个过程正常情况下是自动完成的,但一旦环境中有干扰、线缆劣化或单侧强制配置,协商就可能失败。理解这些基本盘,后续我们再来聊具体的故障诊断套路和修复方案,心里就有底了。