4. 二层转发故障诊断

二层转发故障是园区网中最常见、也最容易被误判为“链路不通”的一类问题。它的根源往往不在物理层,而在 VLAN 归属、Trunk 允许列表、生成树状态或 EtherChannel 成员协商这几个环节。与三层故障不同,二层故障的典型表现是:接口 up/up、链路灯正常,但主机拿不到地址、跨交换机同 VLAN 不通、或出现间歇性丢包与环路告警。诊断的核心思路是沿着“接入端口 → Trunk 链路 → STP 拓扑 → 链路聚合”这条转发路径逐段确认,用 show vlan、show spanning-tree、show etherchannel 三条命令把抽象的二层状态变成可判断的证据。

一、VLAN 层故障:端口归属与活动状态

VLAN 故障的第一类场景是端口没有加入正确的 VLAN,或 VLAN 本身不存在。接入端口默认属于 VLAN 1,如果管理员忘记执行 switchport access vlan 20,主机会被放进 VLAN 1,表现为“能通但通错网段”。第二类场景是 VLAN 未在 VLAN 数据库中创建,端口配置了 switchport access vlan 30 却显示 inactive,因为该 VLAN 不存在。第三类场景是 VLAN 被 shutdown 或从数据库中删除,导致所有成员端口失效。

排查时先看端口状态与归属:

Switch# show vlan brief

VLAN Name        Status    Ports
---- ----------- --------- -------------------------------
1    default     active    Gi0/1, Gi0/2
10   Sales       active    Gi0/5, Gi0/6
20   Finance     active
30   Guest       active    Gi0/9

如果 Gi0/7 配置为 VLAN 20 却未出现在任何 VLAN 的 Ports 列中,说明该端口未处于 access 模式或 VLAN 不存在。此时用 show interfaces Gi0/7 switchport 确认 Administrative Mode 与 Access Mode VLAN,再用 show vlan id 20 确认 VLAN 是否 active。修复动作通常是补建 VLAN 或修正端口模式。需要特别注意的是,VLAN 1 无法删除也无法 shutdown,因此“VLAN 1 不通”往往不是 VLAN 层问题,而应转向 Trunk 或 STP 排查。

二、Trunk 层故障:允许列表与封装协商

Trunk 故障最隐蔽的形式是“链路 up、VLAN 1 能通、业务 VLAN 不通”。原因通常是 Trunk 两端允许的 VLAN 列表不一致,或一端配置了 switchport trunk allowed vlan 而另一端为默认全部。默认情况下 Trunk 允许 VLAN 1–4094,一旦某端被收窄为只允许 VLAN 10,那么 VLAN 20 的流量会在该链路上被静默丢弃,且不会产生明显的接口错误计数。

诊断命令是:

Switch# show interfaces trunk

Port   Mode   Encapsulation Status  Native vlan
Gi0/1  on     802.1q        trunking 1

Port   Vlans allowed on trunk
Gi0/1  10,20,30

Port   Vlans allowed and active in management domain
Gi0/1  10,20

这里要重点看两行:Vlans allowed on trunk 是配置允许列表,Vlans allowed and active 是“允许且已激活”的交集。如果 VLAN 30 出现在第一行却不在第二行,说明 VLAN 30 未创建或未激活,问题回到 VLAN 层;如果 VLAN 30 根本不在第一行,则是 Trunk 允许列表缺失。修复用 switchport trunk allowed vlan add 30,而不是直接覆盖整条列表,避免误删其它 VLAN。此外,封装不匹配(一端 dot1q、一端 ISL)或 native VLAN 不一致也会造成流量错位,前者导致 Trunk 无法建立,后者会把未打标签流量注入错误 VLAN,可用 show interfaces trunk 的 Native vlan 列比对两端。

三、STP 层故障:阻塞、根桥与拓扑震荡

STP 故障的典型表现是“链路正常但某个 VLAN 完全不通”,因为该 VLAN 的转发端口被阻塞,或根桥位置异常导致次优路径。排查入口是:

Switch# show spanning-tree vlan 20

VLAN0020
  Spanning tree enabled protocol rstp
  Root ID    Priority    32788
             Address     0011.2233.4455
             This bridge is the root
             Hello Time 2 sec  Max Age 20 sec  Forward Delay 15 sec

  Interface  Role Sts Cost      Prio.Nbr Type
  ---------- ---- --- --------- -------- ----
  Gi0/1      Root FWD 4         128.1    P2p
  Gi0/2      Desg FWD 4         128.2    P2p
  Gi0/3      Altn BLK 4         128.3    P2p

判断要点有三:第一,看 This bridge is the root 是否出现在预期之外的交换机上,若接入层交换机意外成为根桥,说明优先级未规划,流量路径被拉长;第二,看关键上行口是否处于 BLK,若业务 VLAN 的唯一下行口被阻塞,需检查是否存在环路或 BPDU 异常;第三,看拓扑是否频繁变化,用 show spanning-tree detail 观察 topology change 计数是否持续增长,这通常意味着端口 flapping 或单向链路。修复手段包括:为根桥和备份根桥显式设置 spanning-tree vlan 20 priority 4096、在接入端口启用 spanning-tree portfast 与 bpduguard、以及排查物理层的间歇性抖动。

四、EtherChannel 层故障:成员协商与负载分布

EtherChannel 故障常表现为“聚合口 up 但带宽没有叠加”或“部分成员口被挂起”。核心原因是成员口的速率、双工、VLAN 模式、Trunk 允许列表或 STP 状态不一致,导致协商失败。诊断命令是:

Switch# show etherchannel summary

Flags:  D - down        P - bundled in port-channel
        I - stand-alone s - suspended
        H - Hot-standby (LACP only)
        R - Layer3      S - Layer2
        U - in use      f - failed to allocate aggregator

Group  Port-channel  Protocol   Ports
------+-------------+---------+--------------------------------
1      Po1(SU)       LACP      Gi0/1(P)  Gi0/2(P)  Gi0/3(s)

看到 (s) 即 suspended,说明该成员口未通过协商。常见原因包括:一端是 LACP 主动模式而另一端是静态 on、成员口速率不一致、或成员口上存在不同的 Trunk 允许列表。修复顺序是先统一两端协议模式(推荐 LACP active/active),再逐口比对 show interfaces Gi0/3 switchport 与 show etherchannel 1 port-channel,确认 VLAN 与 Trunk 配置完全一致。若聚合口本身处于 STP 阻塞,则需回到 STP 层排查,因为 EtherChannel 在 STP 中视为单一逻辑端口。

二层转发故障诊断路径:VLAN → Trunk → STP → EtherChannel ① VLAN 层 端口归属 / VLAN 存在性 show vlan brief show vlan id 20 症状:端口 inactive / 通错网段 ② Trunk 层 允许列表 / 封装 / native show interfaces trunk allowed vs active 交集 症状:VLAN 1 通、业务 VLAN 不通 ③ STP 层 根桥 / 阻塞 / 拓扑变化 show spanning-tree vlan 20 show spanning-tree detail 症状:单 VLAN 不通 / 间歇丢包 ④ EtherChannel 成员协商 / 挂起 show etherchannel summary (P) 捆绑 / (s) 挂起 症状:带宽不叠加 / 成员口 down 二层转发路径:接入端口 → Trunk 链路 → STP 转发端口 → 聚合逻辑口 任一环节状态异常,都会表现为“链路 up 但业务不通” 常见故障场景 • 端口未加入目标 VLAN • VLAN 未创建 / 被删除 • Trunk 允许列表两端不一致 • native VLAN 不匹配 • 接入层意外成为根桥 • EtherChannel 成员口 suspended • 单向链路导致 STP 震荡 关键诊断命令 show vlan brief show interfaces trunk show spanning-tree vlan 20 show spanning-tree detail show etherchannel summary show interfaces Gi0/3 switchport show interfaces Gi0/1 counters errors 修复与验证要点 switchport access vlan 20 switchport trunk allowed vlan add 30 spanning-tree vlan 20 priority 4096 spanning-tree portfast bpduguard default channel-protocol lacp channel-group 1 mode active 验证:ping + show 命令复查 诊断顺序建议:先确认 VLAN 归属,再核对 Trunk 允许列表,然后检查 STP 转发状态,最后验证 EtherChannel 成员协商

五、诊断顺序与结果判读

面对“二层不通”的报障,建议按 VLAN → Trunk → STP → EtherChannel 的顺序推进,因为后一层的问题常常被前一层掩盖。例如 EtherChannel 成员口 suspended,可能只是因为该口所在 VLAN 未在 Trunk 允许列表中激活。每一步都要形成“命令输出 → 判断依据 → 修复动作 → 复验结果”的闭环:用 show vlan brief 确认端口归属后,用 show interfaces trunk 核对允许列表,再用 show spanning-tree vlan X 确认转发端口,最后用 show etherchannel summary 确认所有成员口为 (P)。修复后不要只看接口状态,应实际从同 VLAN 主机发起 ping 或查看 MAC 地址表 show mac address-table vlan 20,确认流量确实沿预期路径转发。只有命令输出与业务验证同时通过,才能判定故障真正闭环。