STP根桥选举异常排障

参考:H3C 生成树保护机制配置指导 + Cisco STP Root Guard Configuration Guide


开头(真实故障场景)

某物流公司IT群里,每周二下午两点半准时炸一次:

“VPN断了!” “仓库WMS系统登不上!” “又是那个5分钟!”

IT运维老王查了一个月:交换机没坏,线路没问题,UPS供电正常。最诡异的是——只在周二下午两点半,准时断5分钟,然后自动恢复。

他查日志、查配置、查巡检记录,终于在第4周的周二下午,趁断网的5分钟里敲了一条命令:

<HUAWEI> display stp brief

一眼看到——核心交换机的端口角色全变了。原本应该是 DESI(指定端口)的上行口变成了 ROOT(根端口),而根桥不在核心交换机上了。

根桥跑到哪去了?跑到一台接入层的小交换机上了。

为什么每周二下午准时发生?因为每周二下午两点半,核心机房做例行巡检,巡检时重启了一次核心交换机——重启的30秒里,STP重新选举根桥,而那台接入层交换机的优先级碰巧比核心交换机高,根桥就漂过去了。核心交换机重启完成后,STP又要30秒收敛,业务在这期间中断。

断网的根因不是设备故障,是STP根桥选举配置不当。

今天这篇排障日记,就带你从现象到根因,用华为交换机的原生命令,完整排查一次STP根桥选举异常。


一、先搞懂STP根桥选举:网络里的"班长"是怎么选的

STP(生成树协议)的核心思路是:在网络中选一个"班长"(根桥),所有交换机到班长的最短路径就是活跃路径,其余冗余链路被阻塞——这样既防环路,又保留备份。

根桥的选举规则很简单——比"桥ID"(Bridge ID),谁小谁当班长。

桥ID = 优先级 + MAC地址,两部分拼在一起比较。先比优先级(越小越优),优先级相同再比MAC地址(越小越优)。

华为交换机默认优先级是 32768。如果你不手动指定,STP就自动按MAC地址选根桥——谁的MAC地址最小,谁就是根桥。

问题来了:MAC地址小不代表它适合当根桥。一台老旧的接入层交换机可能MAC地址特别小,但它性能差、位置偏——如果它当选根桥,所有流量都要绕道经过它,这就是"次优路径",轻则延迟增大,重则带宽打满、业务中断。

一句话记住:根桥必须在核心交换机上,不能让STP自己选——必须手动指定。


二、排查四步法:从"谁在当班长"到"为什么会换班长"

第一步:查当前根桥是谁——确认"班长有没有被换"

<HUAWEI> display stp

重点看这几个字段:

-------[CIST Global Info][Mode MSTP]-------
CIST Bridge         :32768.0819-xxxx-xxxx
CIST Root/ERPC      :0.000f-xxxx-yyyy / 200200
CIST RegRoot/IRPC   :32768.0819-xxxx-xxxx / 0
CIST RootPortId     :128.25

关键判断:

  • CIST Root:这是当前网络的根桥。看前面的数字——如果是 0 开头,说明有人优先级设成了0;如果是 32768 开头,说明默认优先级。
  • CIST Bridge:这是本机自己的桥ID。
  • CIST RootPortId:如果这个值不是 0.0,说明本机不是根桥——根桥的RootPortId一定是 0.0(因为它不需要根端口)。

排障第一步:如果核心交换机的 CIST RootPortId 不是 0.0,根桥就不在核心交换机上——这就是问题所在。

更直观的命令:

<HUAWEI> display stp brief
MSTID  Port                    Role    STP State       Protection
0      GigabitEthernet0/0/1    ROOT    FORWARDING      NONE
0      GigabitEthernet0/0/2    DESI    FORWARDING      NONE
0      GigabitEthernet0/0/3    ALTE    DISCARDING      NONE

核心交换机如果有端口角色是 ROOT(根端口),说明它在向别的交换机"学习"根桥信息——它自己不是根桥。正常情况下,核心交换机的所有端口都应该是 DESI(指定端口)。

第二步:对比根桥ID——找出"新班长"是谁

知道根桥不在核心交换机上后,需要找出它到底在哪。

<HUAWEI> display stp

CIST Root 字段的值,比如 4096.0478-aaaa-bbbb。其中:

  • 4096 是根桥的优先级——说明这个设备的优先级被设成了4096
  • 0478-aaaa-bbbb 是根桥的MAC地址

拿着这个MAC地址,去全网交换机上逐一排查:

<HUAWEI> display stp

在每台交换机上对比 CIST Bridge 字段的MAC地址,跟根桥MAC一致的那台,就是"新班长"。

实际工程中更高效的方式:直接登录各接入层交换机,看谁的 CIST RootPortId0.0,那台就是根桥。

第三步:查STP历史变更——看"换班长"是什么时候发生的

华为交换机支持查看STP拓扑变更历史:

<HUAWEI> display stp history

输出会列出最近的拓扑变更事件,包括变更时间和原因。如果你看到某个时间点有拓扑变更记录,跟业务中断的时间吻合——就找到了触发时间点。

更直接的,看日志:

<HUAWEI> display logbuffer | include STP

查找类似以下的告警:

%%01MSTP/4/TOPOCHANGE(l)[x]:MSTP process 0 has a topology change.

每次拓扑变更都会产生这条日志。如果变更时间跟"每周二下午两点半"吻合——锁定。

第四步:查异常端口——确认保护机制有没有生效

<HUAWEI> display stp abnormal-interface
MSTID  Interface              Status       Reason
0      GigabitEthernet0/0/2   DISCARDING   ROOT-Protected
0      GigabitEthernet0/0/5   DISCARDING   LOOP-Protected

Reason列的含义:

Reason 含义 触发场景
ROOT-Protected 根保护生效 端口收到优先级更高的BPDU,根桥地位受威胁
LOOP-Protected 环路保护生效 端口长时间没收到BPDU,可能单向链路
LOOP-Detected 环路检测生效 端口收到自己发出的BPDU,本机成环
BPDU-Protected BPDU保护生效 边缘端口收到BPDU,有非法设备接入

如果 ROOT-Protected 出现在核心交换机的端口上——说明已经配了根保护,根桥确实受到了"篡位"威胁,但被保护机制挡住了。如果没有配置根保护,根桥就直接被抢走了,你连这条日志都看不到。


三、根因分析:根桥为什么会被抢走

根桥被"篡位"的场景,在工程中非常常见,通常有以下几种原因:

原因一:核心交换机重启,STP重新选举

这是本案例的根因。核心交换机每周二例行巡检重启,重启的30秒内,STP失去根桥,全网重新选举。如果接入层某台交换机的默认优先级碰巧比核心交换机低(MAC地址更小),它就被选为新根桥。核心交换机重启完成后,STP又要约30秒收敛(从Listening到Learning到Forwarding),业务在这期间中断。

原因二:新设备接入,优先级配置不当

运维人员在网络中临时接入了一台交换机(比如从别的项目借来的),这台设备的优先级被设成了0或4096——比核心交换机高。接入后,STP感知到更优的BPDU,根桥自动迁移到这台临时设备上。临时设备撤走后,根桥又迁移回来——整个过程网络中断两次。

原因三:优先级忘记配置,让STP自动选举

有些工程师只开了 stp enable,没指定根桥优先级,让STP按MAC地址自动选举。如果某天更换了一台MAC地址更小的交换机,根桥就不知不觉漂移了。

原因四:多实例MSTP中实例根桥配置遗漏

MSTP模式下,不同VLAN可以映射到不同实例,每个实例有自己的根桥。如果只配了实例0的根桥,其他实例的根桥可能漂移到非核心设备上——表现为部分VLAN正常、部分VLAN卡顿。

一句话总结:所有根桥漂移问题的根源都是同一个——没有手动指定根桥,或者指定了但没有保护机制。


四、解决方案:三步根治根桥漂移

第一步:手动指定核心交换机为根桥

在核心交换机上:

<HUAWEI> system-view
[HUAWEI] stp mode rstp          # 建议用RSTP,收敛更快
[HUAWEI] stp enable
[HUAWEI] stp root primary       # 直接指定为主根桥,优先级自动设为0

在备份核心交换机(如果有双核心冗余)上:

[HUAWEI-BACKUP] stp root secondary    # 指定为备份根桥,优先级自动设为4096

stp root primary 等价于 stp priority 0,但语义更明确。配置后优先级不能再用 stp priority 修改,需要先 undo stp root 去使能。

验证根桥:

<HUAWEI> display stp

确认 CIST RootCIST Bridge 的MAC地址一致——说明本机就是根桥。

第二步:开启根保护,防止"篡位"

在核心交换机所有下行端口(连接接入层交换机的端口)上配置根保护:

[HUAWEI] interface GigabitEthernet0/0/1
[HUAWEI-GigabitEthernet0/0/1] stp root-protection
[HUAWEI-GigabitEthernet0/0/1] quit
[HUAWEI] interface GigabitEthernet0/0/2
[HUAWEI-GigabitEthernet0/0/2] stp root-protection
[HUAWEI-GigabitEthernet0/0/2] quit

根保护的原理:配置后,端口只能保持"指定端口"角色。如果收到优先级更高的BPDU(有人想抢班长),端口立即进入 DISCARDING 状态,拒绝接受新根桥——直到对方不再发送更优BPDU,端口才恢复转发。

根保护只在"指定端口"上生效。在根端口或备用端口上配置不生效。根保护和环路保护互斥,同一端口不能同时配。

第三步:开启BPDU保护,防止接入层接入交换机

在全局配置BPDU保护(针对所有边缘端口):

[HUAWEI] stp bpdu-protection

然后确保所有接入终端的端口配置为边缘端口:

[HUAWEI] interface GigabitEthernet0/0/10
[HUAWEI-GigabitEthernet0/0/10] stp edged-port enable
[HUAWEI-GigabitEthernet0/0/10] quit

BPDU保护的原理:边缘端口正常情况下不应该收到BPDU。如果收到BPDU,说明有人把交换机插到了办公口上——端口立即 shutdown,防止非法设备参与STP计算。

配置自动恢复(避免需要手动重启端口):

[HUAWEI] error-down auto-recovery cause bpdu-protection interval 300

300秒后自动恢复。如果对方设备还在,端口会再次被shutdown——这正好提醒你有人接了不该接的设备。


五、多厂商命令对比:华为/H3C/锐捷/思科STP根桥配置

操作 华为 H3C 锐捷 思科
开启STP stp enable stp enable spanning-tree spanning-tree mode rapid-pvst
设置STP模式 stp mode rstp stp mode rstp spanning-tree mode rstp spanning-tree mode rapid-pvst
指定主根桥 stp root primary stp instance 0 root primary spanning-tree root primary spanning-tree vlan 1 root primary
指定备份根桥 stp root secondary stp instance 0 root secondary spanning-tree root secondary spanning-tree vlan 1 root secondary
手动设优先级 stp priority 4096 stp instance 0 priority 4096 spanning-tree priority 4096 spanning-tree vlan 1 priority 4096
根保护(接口) stp root-protection stp root-protection spanning-tree rootguard spanning-tree guard root
BPDU保护(全局) stp bpdu-protection stp bpdu-protection spanning-tree bpduguard enable spanning-tree portfast bpduguard default
边缘端口(接口) stp edged-port enable stp edged-port spanning-tree portfast spanning-tree portfast
查看STP摘要 display stp brief display stp brief show spanning-tree summary show spanning-tree summary
查看异常端口 display stp abnormal-interface display stp abnormal-port show spanning-tree inconsistentports show spanning-tree inconsistentports

关键差异:华为直接 stp root primary;H3C需带 instance 0;锐捷和思科用 spanning-tree 前缀。查看命令华为H3C用 display,锐捷思科用 show。根保护华为H3C叫 root-protection,锐捷叫 rootguard,思科叫 guard root——同一个功能四种叫法。


六、预防措施:STP规划规范

根桥漂移治好了,怎么防止下次再犯?做好以下规划:

规范一:根桥必须手动指定,不让STP自动选举

  • 主根桥:核心交换机,优先级设为0(stp root primary
  • 备份根桥:备份核心交换机,优先级设为4096(stp root secondary
  • 其他交换机:保持默认优先级32768,明确不允许设为0

规范二:所有核心交换机下行端口配根保护

根保护确保即使接入层有高优先级设备接入,核心交换机的根桥地位也不会被抢走。

规范三:所有接入端口配边缘端口+BPDU保护

边缘端口跳过STP状态机,终端秒级上线。BPDU保护防止有人把交换机插到办公口上参与STP计算。

规范四:STP模式全网统一

  • 全网统一用 RSTPMSTP
  • 不要混用STP和RSTP——STP收敛慢(30秒+),RSTP收敛快(1-3秒)
  • 如果用MSTP,确保域名、修订号、VLAN映射在全网一致

规范五:开启TC保护,防止TC-BPDU攻击

[HUAWEI] stp tc-protection
[HUAWEI] stp tc-protection threshold 10

TC-BPDU(拓扑变更通知)会触发交换机快速刷新MAC地址表。如果有人恶意发送大量TC-BPDU,交换机会不断刷新MAC表导致丢包。TC保护限制每单位时间处理的TC-BPDU数量。

规范六:重启前先检查STP状态

核心交换机重启前,确认它是根桥。重启后立即检查根桥是否恢复——如果30秒内没恢复,说明根桥优先级配置有问题。


七、排障速查表(贴在机柜上)

现象 可能原因 排查命令 处置
定时断网(重启后) 根桥在非核心设备上,重启触发重新选举 display stp(看CIST RootPortId是否为0.0) stp root primary 指定核心为根桥
网络延迟突然增大 根桥漂移到接入层,流量走次优路径 display stp brief(核心端口角色变成ROOT) 查找新根桥→修改其优先级→恢复核心为根桥
部分VLAN正常部分卡 MSTP多实例根桥配置遗漏 display stp instance 1(看每个实例根桥) 为每个实例手动指定根桥
端口频繁DISCARDING/FORWARDING 根保护反复触发,有设备持续发送高优先级BPDU display stp abnormal-interface(Reason: ROOT-Protected) 找到发送高优BPDU的设备→修改优先级或断开
新设备接入后断网 新设备优先级高,抢了根桥 display stp(对比CIST Root变化) 断开新设备→修改优先级→重新接入
边缘端口被shutdown 有人把交换机插到办公口 display stp abnormal-interface(Reason: BPDU-Protected) 找到接入设备→拔掉→端口自动恢复

八、网络稳了,数据丢了怎么办?

STP根桥漂移修好了,网络不再定时断线了——但IT老手都知道另一句话:网络稳了不代表数据安全了。

网络中断5分钟能被发现、被修复、被追责。但数据层面的安全问题——文件没备份、权限没管控、勒索病毒潜伏——可能默默存在几个月,直到出事才暴露。就像这次根桥漂移,其实在断网之前,STP拓扑变更已经发生了好几次,只是没人看日志。

我们建议企业在做STP排障的同时,顺手检查三件事:

1. 文件存储有没有集中管理? 网络中断5分钟,文件传不了。但如果没有集中存储,硬盘坏了——文件直接没了。一套信创云盘(纯软件部署在你自己的服务器上),让所有文件集中存储、统一管控、随时可恢复。网络断了文件还在,硬盘坏了从备份恢复。

2. 权限管控有没有跟上? STP保护机制防止非法设备接入网络。同样的逻辑——文件权限如果没有保护机制,离职员工带走图纸、只读权限被绕过下载,这些"权限漏洞"比网络漏洞危害更大。32维权限模型+文件不落地+水印追溯+离职联动自动回收——从制度到工具,一个都不能少。

3. 备份策略做了没有? 网络中断5分钟,损失有限。但勒索病毒加密了所有文件、核心交换机配置丢失没有备份——这种损失不可逆。3-2-1-1-0备份法则(3份数据/2种介质/1份异地/1份离线/0错误验证)不是选择题,是必答题。

更多企业 IT 实战经验,请浏览本站技术博客,或联系我们获取方案支持。