转发基础:VLAN、LAG、生成树与路由
光模块问题从不会以"光模块问题"的面目出现。它表现为生成树拓扑变化、LAG 成员被挂起、OSPF 邻居反复震荡、VXLAN 隧道闪断,或者"一半用户变慢"。要把这些现象读回物理层,需要掌握转发层的词汇:交换机如何学习 MAC 地址、VLAN 和 trunk 是什么、链路聚合如何对流量做哈希、生成树为什么阻塞端口,以及链路闪断时路由协议会做什么。本页就是这套词汇,只保留根因可能是脏连接器时用得上的部分。
二层:MAC 学习与 VLAN
| 概念 | 发生了什么 | 光模块视角 |
|---|
| MAC 学习 | 每个帧的源 MAC 被记录到入接口;未知目的地址被泛洪 | 端口闪断会清空并重新学习表项——每次闪断后都有短暂泛洪 |
| 老化 | 表项过期(默认 300 秒) | — |
| VLAN(802.1Q) | 一个广播域;帧在 trunk 上携带 12 位标签(1–4094) | — |
| Access 端口 | 一个未打标签的 VLAN | — |
| Trunk 端口 | 多个打标签的 VLAN,一个未打标签的 native VLAN | 上行链路两端 native VLAN 不一致表现为部分连通,而不是链路故障 |
| MTU / 巨帧 | 默认 1500 字节,巨帧 9000–9216 字节 | 上行链路两端 MTU 不一致时小包能通过、大包被丢弃——看起来像间歇性光模块故障 |
| 风暴控制、BPDU guard、端口安全 | 关闭端口的保护特性 | 由此产生的 errdisable 端口看起来像模块失效(现象索引) |
生成树
| 变体 | 收敛时间 | 说明 |
|---|
| STP(802.1D) | 30–50 秒 | 传统协议 |
| RSTP(802.1w) | < 1–3 秒 | 大多数设备的默认协议 |
| MSTP(802.1s) | 与 RSTP 相同,按实例 | 按 VLAN 分组 |
| PVST+/Rapid-PVST+ | 按 VLAN | Cisco |
生成树会阻塞冗余的二层路径。一个有问题的光模块会对它造成以下影响:
- 上行链路闪断会产生拓扑变化通知(TCN);每次 TCN 都会在全网范围内清空 MAC 表并引发数秒的泛洪——每次闪断用户都会感到卡顿(链路闪断);
- 单向链路(一根光纤断开,Tx 正常、Rx 不通)如果导致 BPDU 停止到达,可能形成环路——UDLD、 loop guard 和 bridge assurance 正是为此而设(无链路);
- 冗余链路上出现阻塞端口指示灯(琥珀色)属于正常现象,不是故障(端口命名与指示灯)。
Leaf-spine 架构通过让每条链路都走路由来避免使用 STP。
链路聚合(LAG、port-channel、bond)
| 项目 | 规则 |
|---|
| 协议 | LACP(802.1AX / 802.3ad):成员交换 PDU,协商成员关系;静态 LAG 没有保护机制 |
| 成员 | 速率、双工、MTU 必须相同;大多数 NOS 还要求 FEC 和介质类型一致——4 × 25G 光模块或 4 × 25G DAC,不能混用 |
| 哈希 | 按 MAC/IP/端口字段的哈希分配流量;单条流量永远不会超过一个成员的速率 |
| 有错误的成员 | 只要 PDU 能通过,LACP 就会把它留在捆绑内;某个成员上的 CRC 错误会破坏哈希到它的流量——"部分会话变慢,其他正常"是典型特征(VDM 与 FEC 指标) |
| 最小链路数 | 如果 up 的成员少于 N 个,整个捆绑就会断开——防止在单条劣化链路上继续运行 |
| 名称 | 各 NOS 的叫法为 Port-channel、ae、Eth-Trunk、bond、PortChannel |
| 跨两台交换机 | MLAG/vPC/VLT(堆叠与 MLAG) |
实践建议:当 LAG"能用但很慢"时,检查每个成员的计数器和 DDM,而不是检查捆绑本身。
三层:交换机上的路由
| 概念 | 含义 | 光模块视角 |
|---|
| SVI / 路由端口 | VLAN 上或物理端口上的 IP 接口 | 路由上行链路没有 STP;闪断是一次路由事件 |
| 静态 / OSPF / IS-IS / BGP | 路由协议;数据中心架构使用 BGP(每条链路一个 eBGP)或 OSPF | 邻居 up/down 日志能精确定位哪条链路何时闪断 |
| ECMP | 在 N 条上行链路上的等价多路径;流量哈希方式与 LAG 类似 | 一条劣化上行链路会影响 1/N 的流量;BFD(50–300 毫秒)比协议自身的计时器更快发现故障 |
| 抑制(Dampening) | 抑制反复闪断的接口发布路由 | 闪断的光模块最终被抑制——链路"up"但流量不被路由 |
| VRF | 独立的路由表(注意管理 VRF!) | 通过错误的 VRF ping 交换机看起来像链路故障 |
| 首跳冗余(HSRP/VRRP) | 两台交换机间的虚拟网关 | 闪断会引发网关切换 |
Overlay
| 叠加网络 | 应用场景 | 光模块视角 |
|---|
| VXLAN / EVPN | 数据中心架构:三层之上的二层 | 隧道走 ECMP;某条 spine 链路故障会随机地、而非确定性地影响隧道 |
| MPLS / SR | 运营商网络 | 快速重路由(< 50 毫秒)会掩盖闪断——需要检查底层(underlay)计数器 |
| EVPN 多归属(ESI-LAG) | 替代 MLAG | 成员链路连到不同的 leaf,规则与 LAG 成员相同 |
流控与无损分类
| 机制 | 目的 | 光模块视角 |
|---|
| 802.3x pause | 让邻居暂停发送 | 很少使用;全局 pause 会掩盖拥塞 |
| PFC(802.1Qbb) | 面向 RoCE/FCoE 的按优先级 pause | 存在 CRC 错误的链路触发的是重传而非 pause——但闪断端口引发的 pause 风暴会导致无损分类在全网范围内停滞(无损以太网) |
| ECN | 标记拥塞 | — |
把转发层现象读回物理层
| 转发层现象 | 需要检查的物理原因 |
|---|
| 每隔几分钟出现 STP TCN,日志中有 MAC 闪断 | 某条上行链路闪断——DDM Rx 功率接近灵敏度、连接器脏污 |
| LACP 成员处于 "suspended" / "individual" | 该成员 FEC 或速率不匹配;模块未被识别 |
| OSPF/BGP 邻居在某条链路上反复重置 | 光模块闪断,或模块达到温度极限 |
| ECMP:部分流量变慢或丢包 | 某条上行链路存在 FEC 不可纠正错误 / CRC 错误 |
| 巨帧失败,ping 正常 | MTU 问题——与光模块无关 |
| 光纤维修后出现环路或广播风暴 | 单向链路、MPO 极性接反、缺少 UDLD |
| 软件升级后流量中断 | 新版本拒绝第三方光模块(兼容性矩阵与固件) |
| 服务器看到链路 up,但没有流量 | VLAN 错误/native 不匹配,或交换机侧配了 LAG 而服务器侧没配 |
每一行对应的物理层排查步骤:现象索引、 在交换机上验证光模块。
在 CodingBox 中
转发层的现象指向一个端口;端口指向一个模块;模块的 DDM、身份信息和阈值——无论是在交换机上读取还是在工作台上读取——才能真正结案。在代码数据库中为每个模块保留记录,能把"LAG 又变慢了"变成"成员 3,序列号 X,Rx −17 dBm,已更换"。