FIBERIOT / 基础知识
两台工业交换机用千兆光纤连起来,拔掉下面的业务网线,光口的 Link 灯仍亮着。此时抓包可以一帧也看不到,但光纤并没有因为没业务就停止传输。在正常建立的 1000BASE-X 链路上,发送端在两帧之间仍会送出有规定格式的空闲码组。对端靠这些持续到来的信号保持接收时钟和码组边界,下一帧来时就能接着读。
01先分清三处接口看到的是什么
以飞畅工业轨式网管交换机的千兆 SFP 光上联为例,官网规格列出 1000BASE-SX 和 1000BASE-LX 介质。本文讨论这类 1000BASE-X 接口进入正常数据传输后的行为。光模块外壳同样写着 SFP,不能据此认定其编码、速率和适用协议相同,换件时仍要以两端的端口工作模式和适配模块为准。
交换机内部往光口发送一帧,先由 MAC 层提供帧字节,再交给 PCS,也就是物理编码子层。PCS 把数据或控制含义映射成串行链路可用的码组。串行电信号经模块变成光,到对端再转回电信号。对端要先从串行信号里恢复采样时钟,再划分和解码码组,最后把接收到的帧交给自己的 MAC。图中的职责分区用来理解信号路径,实际硬件可能把多个环节集成在同一芯片。
这也解释了为什么抓包和光功率计不能互相替代。光功率计测的是一段时间内收到多少光。普通网卡抓包通常只能看到接收端已经交给上层的帧。两者中间还隔着码组能否正确识别这一关。业务没有报文,不等于线路没有信号,光功率有读数也不等于对端已经正确读懂信号。

02为什么一字节要用十位来表示
8b/10b 的意思是把八位数据映射为十位线路码组。十位不会简单地由原来的八位再拼两位组成。编码器在规定的映射中选码,限制连续同值位的长度,并控制长期的高低电平偏差。前者提供有规律的跳变,帮助接收电路找到取样节拍。后者让高低电平的长期占用不过度偏向一侧,减轻接收端基线漂移。
可以用每秒位数算清两处速率的差别。在不计帧结构和空闲开销的编码换算中,传输八个数据位需要占用十个线路位时,1 Gb/s 的数据位速率对应 1.25 Gb/s 的串行线路位速率。在这里每个二电平线路符号携带一位,所以也可写作 1.25 GBd。用普通网卡做吞吐测试时还要扣除帧头、帧间隔和上层协议开销,不能把 1.25 当成应用能跑到的吞吐值。
编码器还要跟踪运行差异,也就是沿线路已经发送的 1 与 0 的累计偏向。某些字符有正、负两种编码形式,编码器按当前偏向选用合规形式。有的码组自身 1、0 数目相等,但仍须遵守编码规则。接收端发现不存在的码组或不合规的偏向,可以报告物理编码错误。由于干扰也可能把一码组变成另一个有效码组,帧层仍需要 FCS,也就是帧校验序列,检查接收到的整帧。
03空闲不是零,而是接收器能认出的控制序列
如果连续发送全零,接收器很长时间见不到电平跳变,就难以从数据本身判断采样节拍。同时,拿到一长串位也不知道该从哪一位开始每十位切一组。1000BASE-X 使用的空闲有序集由两个合法码组组成。一个典型的空闲有序集 /I2/ 先送控制字符 K28.5,再送数据字符 D16.2。另一种 /I1/ 则跟 D5.6。它们在编码中承担不同的运行差异作用。
以 K28.5 的一种形式 0011111010 为例,前七位 0011111 是逗号模式。接收器可用这一特征确定码组边界,再看后一个码组及后续合法性,完成同步判定。这里有两个不同问题。恢复时钟回答何时取样,逗号对齐回答从哪个位开始把采样结果按组解释。若取样时点错了,后续搜索到的边界就不可靠。如果时钟锁住但边界切错,连续十位也未必能还原为正确字符。
下一帧到来时,PCS 用起始控制字符标记边界。数据结束后用终止控制字符标记,再返回适用的空闲序列。普通业务接收方不会把这些物理层控制码当作以太网帧。本文示意的是已经进入正常传输后的空闲,建立链路时可能出现配置有序集,不能拿 /I2/ 概括每一个无业务时段。

04在现场怎样用三个观察点验证
设一套隔离台架,两端都明确选定匹配的千兆光模块和端口模式,使用短跳线建立稳定链路。第一步让设备保持连接但不主动发送测试帧。记录 Link 状态和接收光功率,如果模块和整机能读出 DDM 数字诊断,可记录同一时刻的读数。没有 DDM 就按现场规程使用合适量程的仪表。普通端口计数器不应把空闲码组记成业务帧,设备自己的管理报文仍可能出现。
第二步只从 A 端发送少量带序号的测试帧。对照发送端和 B 端的增量,把捕获到的序号与两侧的收发计数对上。测试停止后,如果业务帧计数不再增长而链路仍稳定,这一观察符合 PCS 持续发送空闲的工作方式。要直接证明收到的是哪一种有序集,须在受控台架使用支持 1000BASE-X 的 PCS 或串行测试能力,普通网卡不能给出这个结论。
第三步遇到偶发丢帧时,按同一时间窗读取接收光功率、链路变化和设备可提供的错误计数。如果光功率下降伴随失锁或链路反复断开,应先核对连接器、光纤方向、模块和端口速率。若光功率稳定但物理编码错误增加,应再核对模块类型、链路质量及端口设置。若链路与编码计数稳定而帧校验或丢弃计数增加,进一步分清接收错误和出口丢弃,并检查错误究竟在哪个入口出现。计数器含义和支持范围以实际型号文件为准,缺少某项统计不能推断对应环节没有问题。

05把测试结果写成可复查的记录
以图中的第 17 号测试帧为例,记录表至少有发送时刻、发送帧序号、接收帧序号和两端端口状态。启动采样时先记一次基线,发完再记一次差值,避免把设备过去累计的错误混进这轮试验。如果 A 端应用显示已经发送,但光上联的发送帧计数没有相应变化,应先检查测试帧是否进了预期端口、是否被转发到预期上联。若 A 端上联的发送统计与测试相符,B 端却没收到,再比较 B 端入口计数和上层抓包。上层看不到一帧,丢失也可能发生在网卡之后的过滤环节。
更换模块时一次只改一个变量。先保留端口模式和跳线,换上已知匹配的模块并重复同一组测试。再按需要调整下一项。这样既能区分两端模块不匹配与链路本身质量不稳,也能保留导致变化的证据。试验中的第 17 帧和图中的时序都是为说明方法而设定,并非指定型号的实测或承诺。
06最容易混淆的两种边界
1000BASE-T 的千兆铜口和本文的千兆光口使用不同的物理层机制。多速率或外形相同的模块也可能对应不同接口模式。设备有收到光的读数、面板亮灯、接收端 PCS 已同步、业务帧正确到达,是四类不同证据。工程记录把它们分列,再记录模块标识、端口模式和测试帧序号。这样在更换光模块或重新走纤后,可以复核究竟恢复了哪一层,而不必凭单个指示灯猜测整个链路。
技术资料
AMD/Xilinx PG047 — 1000BASE-X (Appendix C) · IEEE 802.3 — K28.5 · 飞畅千兆光口工业交换机
现场常见问题
没有业务帧时光口会停止发送吗?
正常运行的1000BASE-X链路仍发送规定的空闲有序集。
K28.5的逗号有什么用?
接收端识别特定比特模式,找到十位码组的边界。
网卡抓包能直接看到空闲码组吗?
通常不能。需要支持1000BASE-X的物理层测量工具或PCS诊断。
适用边界与延伸阅读
本文讨论正常运行的1000BASE-X链路。端口模式与模块支持以设备资料为准。


