1. 链路训练基础:它到底是什么?
很多刚接触千兆以太网的朋友,一碰到丢包就往网线、交换机端口上找原因。但我跟你说,真正藏在背后的“隐形杀手”,往往是链路训练(Link Training)。
链路训练是啥?说白了,它是千兆以太网物理层(PHY)在正式传数据之前,做的一次“握手校准”。IEEE 802.3ab 标准里明文要求:两端 PHY 必须通过训练序列,把发送电平、接收均衡、时钟恢复这些参数调妥,才能保证 1000BASE-T 的稳定通信。
举个例子——你想想看,两栋楼之间拉了一根 Cat5e 线,距离快 100 米了。信号到了对面已经衰减变形。链路训练就是让两端 PHY “互相帮对方调 EQ”,把歪歪扭扭的波形重新拉正。
1.1 链路训练的定义
用标准的话讲:链路训练是千兆以太网 PHY 之间,通过交换特定的训练帧(Training Frames),动态调整发送预加重/去加重、接收均衡器、时钟恢复环路等参数的过程。
我记得多年前有个数据中心项目,上下行流量总掉 0.1% 的包。查了两天,最后发现是一台服务器网卡的 PHY 在训练阶段没收敛好——它一直用默认参数,而交换机那头是另一个厂商的 PHY,两边的均衡曲线对不上。
所以,链路训练本质上是一种“自适应均衡协议”。它不传用户数据,只传训练符号。一旦收敛,PHY 会进入数据模式。
1.2 工作原理
千兆以太网用的是四对差分线(4 对双绞线),每对线同时收发。链路训练的主要工作,分这么几步:
- 发起训练:主端(Master)先发连续的训练帧,里面包含已知的伪随机序列(PRBS)。
- 接收端分析:从端(Slave)收到信号后,测量眼图张开度、ISI(码间串扰)大小。它知道“理想信号长什么样”,于是算出差值。
- 调整参数:从端通过反馈通道(也是在同一条线上,用不同时间片)告诉主端:你的预加重加多还是加少?我这边再调整接收均衡器的系数。
- 迭代收敛:双方来回交换几个回合(通常几十到几百微秒),直到误码率低于某个阈值,链路训练完成。
| 维度 | 自动协商 | 链路训练 |
|---|---|---|
| 目的 | 确定速率、双工、流控 | 优化模拟信号完整性 |
| 发生时机 | 链路建立初期 | 自动协商成功后立即开始 |
| 交换内容 | NLP、FLP 脉冲 | 训练帧(PRBS + 控制字段) |
| 失败后果 | 链路降速或断开 | 链路看似 up,但误码丢包 |
1.3 在千兆以太网中的角色
没有链路训练,千兆信号在超过 30 米的线缆上几乎不可用。你猜为什么?因为 1000BASE-T 的速率是 125 MHz(四对线各 250 Mbps),信号频率高,趋肤效应、介质损耗会让眼图完全闭合。
链路训练扮演了三个关键角色:
- 动态补偿:针对线缆长度、温度变化、插接老化等,实时修正信号。
- 分离串扰:四对线之间存在近端串扰(NEXT)。训练时 PHY 会用回声消除技术分离出干扰,然后做预补偿。
- 保证低误码率:千兆以太网的误码率目标通常是 10⁻¹² 以下。没有训练,误码率可能高达 10⁻⁶。
我曾经处理过一个奇葩案例:某机柜的服务器换了根 15 米的跳线,ping 就偶尔超时。抓包发现 TCP 重传堆成了山。但链路一直没 down。最后用 PHY 寄存器读出来,发现链路训练的“均衡系数”在跳线换掉后没被重新触发——老参数在新的线缆特性下根本不好使。
1.4 链路训练流程图
下面这张图总结了整个训练流程,我也经常把它贴在工位上对照排查。
1.5 避坑指南
- 不要迷信“链路 up 了就没问题”——很多 PHY 的寄存器里专门有个“训练状态”位,我建议你查一下是否真的 Training Complete。
- 换网线后一定要重新触发链路训练。怎么触发?拔插网线或者手动 down/up 接口。简单但有效。
- 我曾经在一台老交换机上发现,它的 PHY 默认不开启“长线缆训练模式”,导致 80 米以上链路天天丢包。改了一个寄存器值后问题消失。
- 千兆以太网的链路训练通常在几十毫秒内完成。如果观察 int 口状态一直 “training” 超过 3 秒,基本可以断定硬件有问题。
- 确认自动协商已完成(两端 speed/duplex 一致)
- 通过 ethtool 或厂商 CLI 查看 PHY 的“链路训练状态”
- 用长 ping + 小包看是否丢包——训练有问题往往小包先丢
- 对比正常链路的眼图张开度(如果你有示波器)
好了,第一章的核心就这些。链路训练这个基础概念搞清楚之后,后面再讲“训练失败导致丢包的根因”,你就能理解为什么一个微弱信号能让整个网络瘫痪。嗯,到这儿我建议你先把刚才那张流程图记牢——排查的时候它就是你的地图。