1. Auto-Negotiation 概述与基本原理
1.1 什么是自动协商?
自动协商,说白了就是让两个以太网接口在连接建立时,自动商量出一个双方都能接受的“最佳”工作模式。
我刚开始做网络运维那会儿,遇到过一台交换机死活连不上服务器。换了线,换了端口,折腾半天。后来发现是手动把端口改成了百兆全双工,而服务器网卡只支持千兆——两个设备根本“聊不到一块去”。自那以后,我对自动协商就特别上心。
自动协商(Auto-Negotiation)是 IEEE 802.3 标准定义的一套底层协议。它通过脉冲信号(FLP Burst)在链路初始化期间交换能力信息,最终达成速度(10/100/1000 Mbps)和双工模式(半双工/全双工)的一致。
1.2 为什么需要它?
你想想看,没有自动协商会怎样?
- 人工配置太累:成百上千个端口,一个一个改双工、改速度,不现实。
- 容易配错:我见过最惨的案例,一个数据中心里网管把核心端口全配成了强制全双工,结果上游设备是自动协商——两端不匹配,丢包率飙到 30%。
- 不同设备混搭:老旧 10M 集线器、百兆交换机、千兆服务器混在一起,自动协商能让它们找到最大公约数。
核心价值:自动协商实现了“即插即用”,减少了人为配置错误,也降低了运维成本。
1.3 双工与速度协商的核心概念
1.3.1 双工模式
双工很简单:
- 半双工(Half Duplex):同一时刻只能发送或接收,就像对讲机。
- 全双工(Full Duplex):可以同时发送和接收,就像打电话。
现在主流网络几乎全用全双工,但早期共享式以太网只能用半双工。
1.3.2 速度等级
常见速度递进:10 Mbps → 100 Mbps → 1000 Mbps → 2.5 Gbps → 5 Gbps → 10 Gbps。自动协商只能协调到两端都支持的最高速度。
1.3.3 协商过程(敲黑板)
我习惯把自动协商拆成三步:
- 发送能力声明:两端各自发出 FLP(Fast Link Pulse)脉冲串,里面包含自己支持的速度与双工组合。
- 接收并比较:一端收到对方的 FLP 后,对照自己的能力列表,按优先级选出一个共同支持的“最优”组合。
- 锁定并链接:两端确认选择一致,链路建立。如果中间有冲突或超时,协商失败,链路不亮。
避坑指南:我曾经碰到一个诡异现象——网线太长(超过 100 米),FLP 脉冲衰减太厉害,自动协商一直失败。换短网线后当场解决。所以排查链路问题时,先看看物理层有没有问题。
1.4 协商优先级与能力表
自动协商不是随便选,而是有严格优先级:速度优先,同等速度下全双工优先于半双工。具体能力编码可参考下表(我简化了,只列常见组合):
| 能力位(4位) | 组合描述 | 优先级排名 |
|---|---|---|
| 1000BASE-T Full Duplex | 千兆全双工 | 1(最高) |
| 1000BASE-T Half Duplex | 千兆半双工 | 2 |
| 100BASE-TX Full Duplex | 百兆全双工 | 3 |
| 100BASE-TX Half Duplex | 百兆半双工 | 4 |
| 10BASE-T Full Duplex | 十兆全双工 | 5 |
| 10BASE-T Half Duplex | 十兆半双工 | 6(最低) |
举个例子:A端支持千兆全双工、百兆全双工;B端支持千兆半双工、百兆全双工。两者共同支持的最高优先级组合是千兆全双工(A端有,B端没有)?不对,B端没有千兆全双工,所以共同支持的最高优先级是百兆全双工(两者都有且排名 3)。最终协商锁定在百兆全双工。
警告:强制一端、自动另一端是故障重灾区。我调试过无数案例,结果发现是有人把交换机端口设成了“强制百兆全双工”,而对端网卡是“自动协商”。强制端不会发 FLP,自动端以为没信号,胡乱降速或根本不通。切记:要么两边都 auto,要么两边都强制且一致。
1.5 自动协商知识体系图
我的小习惯:每次做网络改造,我都会把关键链路的协商结果用 show interfaces status 或 ethtool 记下来,当做基线。这样出了问题,一对比就知道是协商变了还是别的毛病。
1.6 实际场景中的自动协商行为
有些工程师觉得自动协商“看不见摸不着”,其实它每时每刻都在底层运行。常用命令检查协商状态:
# Cisco 交换机
Switch> show interfaces gigabitethernet 0/1 | include Negotiation
Auto-negotiation: on
Duplex: Full
Speed: 1000
# Linux 网卡
$ ethtool eth0
Speed: 1000Mb/s
Duplex: Full
Auto-negotiation: on
如果显示 Auto-negotiation: off,就要注意了。我排查过一个线上丢包问题,发现服务器网卡被 BIOS 强制关了自动协商,跑到 10M 半双工,而交换机是自动协商且没收到 FLP,就僵在那边了。
记住:自动协商不是万能的,但你把它关了就是给自己埋雷。除非两端设备明确要求强制(比如某些光纤直连场景),否则我建议一律开自动协商。