第20篇:生成树故障案例——某企业网络环路导致全网瘫痪

一、写在前面

前面的文章我们学了 STP/RSTP/MSTP的工作原理。理论很丰满,但现实很骨感——现网中 STP 相关的故障是最常见的网络事故之一

STP 配错、BPDU 保护没开、新设备接入触发生成树重构——这些都会导致网络中断。

本文用三个真实故障案例,带你看看 STP 在实际网络中有多"脆弱",以及如何从现象反推原因。


二、案例一:边缘端口误接交换机,全网上不了网

2.1 背景

某企业办公网,核心-SW1(RSTP 模式)下连 5 台接入交换机,接入交换机连 PC。

2.2 故障现象

  • 某天下午 3:00,全公司网络中断约 40 秒
  • 然后恢复正常
  • 但某个区域的 PC 频繁断连,每次断 30~50 秒

2.3 排查过程

第 1 步:登录核心交换机

<Core-SW> display stp topology-change
Number of topology changes : 247   ← 正常网络一天应该只有几次,这里 247 次!
Time since last topology change : 0 days 0h:2m:15s

拓扑变更次数异常多,说明网络在频繁重构。

第 2 步:查看拓扑变更源头

<Core-SW> display stp tc-bpdu statistics
------------------------------------------------------------------
Port                      TC-Received   TC-Send
------------------------------------------------------------------
GigabitEthernet0/0/1      0             0
GigabitEthernet0/0/2      0             23    ← 不断发送 TC
GigabitEthernet0/0/3      212           0      ← 不断收到 TC
...

GE0/0/3 不断收到 TC BPDU,说明接在这端口上的交换机在"搞事"。

第 3 步:检查该端口

<Core-SW> display stp interface gigabitethernet 0/0/3
Port Edged : Enable     ← 配置成了边缘端口!

找到问题了——GE0/0/3 配置了 stp edged-port enable,但实际接的是另一台交换机

2.4 根因分析

正常情况:
  边缘端口接 PC → PC 不发送 BPDU → 正常工作
  边缘端口不会参与 STP 选举 → 不会影响拓扑

问题:
  核心交换机的 GE0/0/3 配成了边缘端口
  但该端口实际连接的是一台接入交换机
  接入交换机发送 BPDU
  → 核心交换机 GE0/0/3 收到 BPDU
  → 边缘端口失效,回退为普通 STP 端口
  → 触发 STP 重新选举
  → 每次重新选举,整个网络断 30~50 秒
  → 反复触发,网络反复中断

2.5 解决方案

# 方案 1:去掉边缘端口配置
[Core-SW-GigabitEthernet0/0/3] undo stp edged-port enable

# 方案 2:开启 BPDU 保护(推荐)
# 全局配置:收到 BPDU 的边缘端口直接 error-down
[Core-SW] stp bpdu-protection

开启 BPDU 保护后,如果边缘端口收到 BPDU,交换机会立即将该端口 shutdown(error-down),而不是触发全网络重构。虽然这个端口不能用,但比全网瘫痪好得多

2.6 教训

边缘端口一定要开启 BPDU 保护。边缘端口只应连接终端设备,不是交换机。


三、案例二:STP 优先级未规划,次优交换机成根桥

3.1 背景

某数据中心网络,由核心交换机 Core-A、Core-B 和 20 台接入交换机组成。

3.2 故障现象

  • 网络性能不稳定,时快时慢
  • 某些服务器间的流量延迟很高
  • 监控系统发现 Core-B 的 CPU 偏高

3.3 排查过程

第 1 步:查看根桥

<Core-A> display stp
-------[CIST Global Info]-------
Bridge ID    : 32768.00e0-fc00-0001
Root Bridge  : 32768.00e0-fc12-3456   ← 根桥不是 Core-A!

<Core-B> display stp
-------[CIST Global Info]-------
Bridge ID    : 32768.00e0-fc12-3456
Root Bridge  : 32768.00e0-fc12-3456   ← Core-B 自己是根桥!

第 2 步:发现 Core-A 和 Core-B 优先级相同

Core-A: Bridge ID = 32768.00e0-fc00-0001    ← 优先级默认 32768
Core-B: Bridge ID = 32768.00e0-fc12-3456    ← 优先级默认 32768

因为优先级相同(32768),比较 MAC 地址: - Core-A MAC: 00e0-fc00-0001 - Core-B MAC: 00e0-fc12-3456

Core-B 的 MAC 更大 → 但实际上 Core-B 更老,性能更差,却成了根桥!

3.4 影响分析

Core-B 是根桥:
  所有接入交换机的流量都要经过 Core-B
  但 Core-B 处理能力不如 Core-A
  → 瓶颈在 Core-B
  → 即使 Core-A 闲着,流量也不走 Core-A

3.5 解决方案

# 让 Core-A 成为主根桥(优先级设为 4096)
[Core-A] stp priority 4096

# Core-B 做备用根桥(优先级设为 8192)
[Core-B] stp priority 8192

修正后:

Core-A: 桥 ID = 4096.00e0-fc00-0001    ← 最小,成为根桥
Core-B: 桥 ID = 8192.00e0-fc12-3456    ← 次小,备用根桥

3.6 教训

核心层交换机必须配置为根桥,优先级要显式设置。永远不要依赖默认优先级,更不要依赖 MAC 地址比较。否则性能差的交换机可能意外成为根桥。


四、案例三:新增交换机不兼容 MSTP,实例映射错乱

4.1 背景

某企业 MSTP 网络,原有 10 台交换机,MST region 配置完善。新增了一台接入交换机。

4.2 故障现象

  • 新增交换机上线后,新增 VLAN 网络不通
  • 部分已有的 VLAN 间歇性中断

4.3 排查过程

第 1 步:查看 MST region 配置

<New-SW> display stp region-configuration
Region Name       : (空)          ← 没配 region name!
Revision Level    : 0
Instance 0 VLANS  : 1-4094       ← 所有 VLAN 都在实例 0
Instance 1 VLANS  :
Instance 2 VLANS  :

第 2 步:对比老交换机

<Old-SW> display stp region-configuration
Region Name       : GTS-BEIJING
Revision Level    : 1
Instance 1 VLANS  : 10-20
Instance 2 VLANS  : 30-40

新交换机的 region-name 为空 → 与原有 Region 不匹配 → 被视为不同 Region

4.4 根因分析

新交换机未配置 region-name → 属于"独立 Region"
不同 Region 之间的 MSTI 互不可见
→ 新交换机的 VLAN 映射在老 Region 中不生效
→ VLAN 间通信异常
→ 整体 CIST 重构导致间歇性中断

4.5 解决方案

[New-SW] stp region-configuration
[New-SW-mst-region] region-name GTS-BEIJING
[New-SW-mst-region] revision-level 1
[New-SW-mst-region] instance 1 vlan 10 20
[New-SW-mst-region] instance 2 vlan 30 40
[New-SW-mst-region] active region-configuration

4.6 教训

新增交换机到已有 MSTP 网络中,MST region 配置三项(region-name、revision-level、VLAN 映射)必须与网络中现有配置完全一致。最好从现有交换机上 display current-configuration 把配置拷贝过来。


五、STP 故障排查三步法

5.1 一看拓扑变更次数

display stp topology-change
  • 正常:每天几次到几十次
  • 异常:几分钟就几十次 → 网络不稳定

5.2 二看根桥是谁

display stp | include Root Bridge
  • 根桥必须是规划中的核心交换机
  • 如果不是 → 优先级没配好

5.3 三看端口角色和状态

display stp brief
  • Root Port、Designated Port 应该在正确的位置
  • 不应该出现大量端口在 Blocking/Discarding
  • 边缘端口上不能出现非终端设备

六、STP 运维最佳实践清单

序号 实践 命令/操作
1 核心交换机设为主根桥 stp root primarystp priority 4096
2 汇聚交换机设为备份根桥 stp root secondarystp priority 8192
3 使用 MSTP 代替 STP/RSTP stp mode mstp
4 所有接入端口配边缘端口 stp edged-port enable
5 边缘端口开启 BPDU 保护 stp bpdu-protection
6 新设备加入前检查 MSTP 配置 三要素完全一致
7 定期检查拓扑变更次数 display stp topology-change
8 交换机互联端口配好后检查角色 display stp brief
9 启用了环路检测的交换机确认检测正常 display loop-detection
10 编写 STP 规划文档 根桥、备份根桥、实例映射归档

七、思考

  1. 边缘端口收到了 BPDU 会怎样?开启 BPDU 保护后又会怎样?
  2. 案例二中,为什么 Core-B 成了根桥?有什么影响?
  3. 案例三中,新交换机没有配置 region name,MSTP 会怎么处理?两个不同的 MST Region 之间怎么通信?
  4. 你公司的网络里,如果接入交换机成了根桥,会有哪些后果?
  5. 写出 STP 最需要关注的三个运维监控指标。
  6. 如果你值班时发现 display stp topology-change 显示拓扑变更次数在 10 分钟内从 3 暴涨到 500,你的第一步操作是什么?

下篇预告:第21篇《链路聚合EthTrunk_手工模式与LACP模式》——理解链路聚合EthTrunk的原理,掌握手工和LACP模式的配置。