Auto-Negotiation 能力宣告:FLP 如何交换能力
咱们接着聊。上一节讲了 Auto-Neg 的握手流程,其中最关键的一步就是「能力宣告」。说白了,就是两个设备互相亮底牌:我能跑多快、我能用什么双工模式、我支不支持流控。你亮完我亮,达成一致就开工。这个过程全靠一种叫 FLP 的脉冲包来完成。
FLP 是什么?
FLP 的全称是 Fast Link Pulse,快速链路脉冲。别被名字吓到,它就是一组特定频率和宽度的脉冲串。工作的时候,设备以 16 ms ± 8 ms 的间隔,不停地往外发这种脉冲串。没协商起来之前,端口就靠这个来「打招呼」。
我在一些老交换机上见过 FLP 波形,用示波器一看,每个爆发包里有 33 个脉冲位置,其中 17 个是固定的时钟脉冲,剩下 16 个是数据脉冲。数据脉冲的排列方式,直接决定了设备宣告的能力有哪些。
FLP Burst 的结构
每个 FLP Burst 持续约 2 ms,内部包含 33 个脉冲槽位。时钟脉冲每隔一个就出现,数据脉冲则落在两个时钟脉冲之间。简单记:时钟脉冲告诉对方「我在发数据了」,数据脉冲携带具体的能力信息。
| 脉冲编号 | 作用 | 说明 |
|---|---|---|
| 1, 3, 5, …, 33 | 时钟脉冲 | 固定 17 个,保证双方同步 |
| 2, 4, 6, …, 32 | 数据脉冲 | 16 个,按位编码能力 |
数据脉冲的每一位对应一个能力。比如 D0(第 2 个槽位)如果为 1,就表示设备支持 10BASE-T 半双工。你想想看,16 个 bit 就能把速度、双工、流控、对称/非对称全包进来了。这种设计很紧凑,我喜欢。
能力位定义(802.3 Clause 28)
标准里把这些位安排得明明白白。我手边常备一张速查表,各位也最好记一下。注意:位编号从 0 开始,对应数据脉冲 D0 ~ D15。
| 数据位 | 能力 | 备注 |
|---|---|---|
| D0 | 10BASE-T 半双工 | 最古老的能力 |
| D1 | 10BASE-T 全双工 | |
| D2 | 100BASE-TX 半双工 | |
| D3 | 100BASE-TX 全双工 | |
| D4 | 100BASE-T4 | 几乎绝迹,别纠结 |
| D5 | Pause 流控 | 对称暂停帧 |
| D6 | 不对称流控 | 一端发暂停,另一端不发 |
| D7 | 保留(以前是远程故障) | 现在用于 1000BASE-T 扩展 |
| D8 | 确认(Ack) | 收到对方 FLP 后设置 |
| D9 ~ D15 | 下一页能力 | 用于千兆、多速率扩展 |
你可能注意到了,千兆和 2.5G/5G 的能力不在这些位里,它们靠「下一页」机制传递。不过咱们日常排障 10/100/1000M 的时候,大多数情况就看 D0~D3 就够了。
能力交换流程
- 上电或连接变化:链路一开始是断的,设备开启 FLP 发送(每隔 16 ms 一个 Burst)。
- 持续宣告:每个 Burst 里是自己的能力位图,比如 100M 全双工 + 10M 半双工。对方收到后,解析并记录。
- 检测并回传:一旦收到 3 个连续的、有效的 FLP Burst,设备设置自己的 Ack 位(D8=1),并继续发 FLP,告诉对方「我收到了」。同时,自身也要在接下来的 Burst 中宣告自己的能力。
- 完成协商:双方都确认收到对方的能力后,进入优先级裁决,确定最终速度和双工模式。裁决算法是「谁快谁高」,全双工优先级高于半双工。
流控宣告:Pause 和 Asymmetric
流控能力通过 D5 和 D6 来宣告。D5=1 表示支持对称暂停帧(两边都能收发暂停帧)。D6=1 表示支持不对称流控,即自己可以发送暂停帧但不强求对方也发。实际部署中,很多交换机默认开启流控,但接入 PC 可能关掉。我曾经在数据中心遇到一台服务器网卡因为流控不匹配导致丢包,排查半天才发现是服务器没宣告 D5,交换机却坚持要流控。解决办法:要么关掉交换机端的流控,要么给网卡驱动加上流控能力。
上一页(Next Page)机制
当需要传递超过 16 个 bit 的能力时(千兆、多速率、EEE 等),设备会使用 Next Page。Base Page 里的 D9~D15 用来指示后续还有更多页。每页同样 16 个数据位,可以反复传,直到双方发完最后标记。这个机制很灵活,但也容易出问题:比如某些老型号网卡不支持 Next Page,千兆协商就会失败。我记得有一回排障,发现两个千兆交换机只能协商到 100M,一查代码,一个交换机固件把 Next Page 的标记位搞反了。
本章知识结构
下面这张图概括了 FLP 如何传递能力、双方如何进行位图交换并最终决定速度与双工模式(注意:这是全章唯一的 SVG 图,放心看)。
常见能力宣告故障一览
| 现象 | 可能原因 | 诊断方向 |
|---|---|---|
| 只有一侧亮灯 | 对端没开 Auto-Neg 或 FLP 被阻断 | 检查对端配置,测线缆连续性 |
| 协商到 10M 半双工 | 能力位丢失,或者干扰导致位翻转 | 抓 FLP 看 D0~D3 位图是否符合预期 |
| 流量单向丢包 | 流控能力不匹配(D5/D6 问题) | 对比两端流控宣告,强制关闭流控或统一 |
| 千兆协商不到 | Next Page 未正确发送或接收 | 检查千兆扩展位(D9~D15),查看下一页面内容 |
掌握了 FLP 的位图结构和交换流程,你就能在排障时一眼看出核心问题。能力宣告就像两家公司的谈判,把自己的底牌亮出来,再复述对方的条件。一旦哪个位没对齐,链路就谈崩。嗯,这段话我说了好多遍,但确实管用。