1. 链路训练基础:它到底是什么?

很多刚接触千兆以太网的朋友,一碰到丢包就往网线、交换机端口上找原因。但我跟你说,真正藏在背后的“隐形杀手”,往往是链路训练(Link Training)。

链路训练是啥?说白了,它是千兆以太网物理层(PHY)在正式传数据之前,做的一次“握手校准”。IEEE 802.3ab 标准里明文要求:两端 PHY 必须通过训练序列,把发送电平、接收均衡、时钟恢复这些参数调妥,才能保证 1000BASE-T 的稳定通信。

举个例子——你想想看,两栋楼之间拉了一根 Cat5e 线,距离快 100 米了。信号到了对面已经衰减变形。链路训练就是让两端 PHY “互相帮对方调 EQ”,把歪歪扭扭的波形重新拉正。

⚠ 注意:很多人误以为“自动协商(Auto-Negotiation)成功就万事大吉”。其实自动协商只确定速度、双工模式。真正让信号能跑通的,是后续的链路训练。协商通过,训练失败,一样丢包!

1.1 链路训练的定义

用标准的话讲:链路训练是千兆以太网 PHY 之间,通过交换特定的训练帧(Training Frames),动态调整发送预加重/去加重、接收均衡器、时钟恢复环路等参数的过程。

我记得多年前有个数据中心项目,上下行流量总掉 0.1% 的包。查了两天,最后发现是一台服务器网卡的 PHY 在训练阶段没收敛好——它一直用默认参数,而交换机那头是另一个厂商的 PHY,两边的均衡曲线对不上。

所以,链路训练本质上是一种“自适应均衡协议”。它不传用户数据,只传训练符号。一旦收敛,PHY 会进入数据模式。

1.2 工作原理

千兆以太网用的是四对差分线(4 对双绞线),每对线同时收发。链路训练的主要工作,分这么几步:

  1. 发起训练:主端(Master)先发连续的训练帧,里面包含已知的伪随机序列(PRBS)。
  2. 接收端分析:从端(Slave)收到信号后,测量眼图张开度、ISI(码间串扰)大小。它知道“理想信号长什么样”,于是算出差值。
  3. 调整参数:从端通过反馈通道(也是在同一条线上,用不同时间片)告诉主端:你的预加重加多还是加少?我这边再调整接收均衡器的系数。
  4. 迭代收敛:双方来回交换几个回合(通常几十到几百微秒),直到误码率低于某个阈值,链路训练完成。
💡 小技巧:我排查丢包时,习惯先用示波器看 PHY 输出的训练帧是否连续、电压是否合规。如果训练帧断断续续,多半是 PHY 供电或时钟有问题。
链路训练与自动协商的核心区别
维度 自动协商 链路训练
目的 确定速率、双工、流控 优化模拟信号完整性
发生时机 链路建立初期 自动协商成功后立即开始
交换内容 NLP、FLP 脉冲 训练帧(PRBS + 控制字段)
失败后果 链路降速或断开 链路看似 up,但误码丢包

1.3 在千兆以太网中的角色

没有链路训练,千兆信号在超过 30 米的线缆上几乎不可用。你猜为什么?因为 1000BASE-T 的速率是 125 MHz(四对线各 250 Mbps),信号频率高,趋肤效应、介质损耗会让眼图完全闭合。

链路训练扮演了三个关键角色:

  • 动态补偿:针对线缆长度、温度变化、插接老化等,实时修正信号。
  • 分离串扰:四对线之间存在近端串扰(NEXT)。训练时 PHY 会用回声消除技术分离出干扰,然后做预补偿。
  • 保证低误码率:千兆以太网的误码率目标通常是 10⁻¹² 以下。没有训练,误码率可能高达 10⁻⁶。

我曾经处理过一个奇葩案例:某机柜的服务器换了根 15 米的跳线,ping 就偶尔超时。抓包发现 TCP 重传堆成了山。但链路一直没 down。最后用 PHY 寄存器读出来,发现链路训练的“均衡系数”在跳线换掉后没被重新触发——老参数在新的线缆特性下根本不好使。

🔑 核心观点:链路训练是千兆以太网从“可以连接”到“可靠传输”之间最后一道关卡。它不成功,一切上层协议都是白搭。

1.4 链路训练流程图

下面这张图总结了整个训练流程,我也经常把它贴在工位上对照排查。

链路训练核心流程(千兆以太网 PHY) 链路启动 自动协商完成 主端发送训练帧 从端分析眼图 & 调整 EQ 反馈调整预加重/去加重 迭代收敛? 进入数据模式 失败重试 收敛条件 误码率 < 10⁻¹² 均衡系数误差 < 1%
🔧 实战提示:如果链路训练一直卡在“迭代收敛”循环里,通常是因为线缆质量太差或者两端 PHY 芯片存在兼容性 bug。我遇到过博通和 Marvell 的 PHY 互训时,需要手动设置一个寄存器位才能强制收敛。

1.5 避坑指南

  • 不要迷信“链路 up 了就没问题”——很多 PHY 的寄存器里专门有个“训练状态”位,我建议你查一下是否真的 Training Complete。
  • 换网线后一定要重新触发链路训练。怎么触发?拔插网线或者手动 down/up 接口。简单但有效。
  • 我曾经在一台老交换机上发现,它的 PHY 默认不开启“长线缆训练模式”,导致 80 米以上链路天天丢包。改了一个寄存器值后问题消失。
  • 千兆以太网的链路训练通常在几十毫秒内完成。如果观察 int 口状态一直 “training” 超过 3 秒,基本可以断定硬件有问题。
✅ 自我检查清单:
  1. 确认自动协商已完成(两端 speed/duplex 一致)
  2. 通过 ethtool 或厂商 CLI 查看 PHY 的“链路训练状态”
  3. 用长 ping + 小包看是否丢包——训练有问题往往小包先丢
  4. 对比正常链路的眼图张开度(如果你有示波器)

好了,第一章的核心就这些。链路训练这个基础概念搞清楚之后,后面再讲“训练失败导致丢包的根因”,你就能理解为什么一个微弱信号能让整个网络瘫痪。嗯,到这儿我建议你先把刚才那张流程图记牢——排查的时候它就是你的地图。