华为 CE6800 的 100GE 上联口用 SR4 光模块接 Profitap XX-3200G,链路始终起不来
在给客户把原有的汇聚层设备换成 CloudEngine,唯一起不来的一条链路是接到他们分光器(packet broker)的那条 100GE。交换机上其他一切都顺利上线了。
- 华为 CloudEngine 6800,100GE 端口
- 100GBASE-SR4 QSFP28 模块,华为原厂,两端各一个
- 对端是 Profitap XX-3200G 分光器
两端都能看到对方的模块。交换机日志里除了我重新插拔时产生的收发器插入/拔出记录,没有任何告警,接口就是一直 down:
<CE6800> display interface 100GE1/0/1
...
FEC : RS-FEC
已经试过:
- 把两个模块都换成备用件,清洁了 MPO 端面,没有变化;
- 把链路换到交换机上另一个 100GE 端口;
- 检查了分光器那一侧,它能检测到自己的模块,也没有报任何问题。
所以两端的光模块都被识别了,谁都没有报错,但就是没有链路。在 CloudEngine 的 100GE 端口和第三方设备之间起链路,除了这些之外还有什么必须匹配的?
Comments 3
这是 FEC 不匹配。CloudEngine 在配 SR4 光模块的 100GE 端口上默认开启 RS-FEC,而分光器那边根本没有 FEC 设置,所以是关着跑的,两端 FEC 不一致就永远完不成协商训练。因为没出什么故障,所以也没什么可记录的,这就是为什么日志里只有你插拔时产生的那些消息。
在交换机上关掉它,在接口视图下:
undo fec mode效果一样。关键是第二行。CE 是两阶段配置,一个没有 commit 的fec mode none,你回读配置的时候看着完全正确,但端口还是和之前一样 down。我见过一个客户案例就因为这个多耗了一天,所有人都以为 FEC 早就关掉了。commit 之后,
display interface应该显示 FEC: NONE,端口也应该能训练起来。如果对端以后真的加了 FEC 设置,更好的做法是在那边开 RS-FEC,交换机这边保持默认,因为在 100G 上你其实是想要这个纠错的。在两个不同厂商之间,我会在两侧都显式设置 FEC,而不是指望它们自动协商出一致结果。
分光器那边关于 FEC 是怎么说的,如果它有说的话?你自己其实已经贴出了有意思的那一半:交换机端口在跑 RS-FEC。华为明确说明 100GE 链路两端必须用相同的 FEC 模式,否则接口永远起不来,而这种故障看起来就跟你的一模一样——两个模块都健康、没有告警、没有日志、端口 down。
我打过交道的大多数分光器和分路器根本没有 FEC 这个选项,也就是说它们是关着跑的,该让步的是交换机这一侧。先确认这一点,再动一处设置。
值得补充的是,CloudEngine 的默认值不是一个固定值,而是取决于模块类型。QSFP28-100G-LR4 和 QSFP28-100G-LR1 按照 IEEE 802.3 默认是关闭 FEC 的,而其他所有 QSFP28 类型默认是开启的。所以「直接关掉」这个建议放在 LR4 链路上就是错的——那种情况下交换机这边本来就是关着的,不匹配出在对端。
还有两条同一章节里的规则,我自己踩过坑:
所以先用
display transceiver interface 100GE1/0/1 verbose确认自己手上到底是哪种模块,再决定该往哪个方向调 FEC,而且不管哪种情况都别忘了 commit。