3. 二层环路排查:STP/RSTP状态异常导致广播风暴

大家好,我是老张。今天咱们聊聊二层环路里最让人头疼的一种情况——STP或RSTP状态异常引发的广播风暴。

说实话,干网络这么多年,广播风暴我见过不少。但最让我印象深刻的,是有一回在某数据中心,半夜三点被值班电话叫醒。说整个二层网络瘫痪了,交换机CPU跑到100%,所有业务全断。我远程一看,广播包数量直接爆表。嗯,典型的广播风暴。

为什么会这样?说白了,就是STP没把环路堵住。

3.1 广播风暴是怎么产生的?

先简单回顾一下原理。二层网络里,如果存在物理环路,广播帧就会在交换机之间无限转发。你想想看,一个广播帧从交换机A发出去,从B绕一圈又回到A,A一看不是自己发的,继续转发。就这样,帧在环路里越积越多,最终把带宽吃光。

正常情况下,STP会阻塞某个端口,把环路逻辑上切断。但如果STP状态异常,该堵的端口没堵住,那广播风暴就来了。

核心判断依据:当交换机CPU利用率持续超过80%,且广播/组播报文占比异常高(比如超过50%),基本可以锁定是广播风暴。

3.2 STP/RSTP状态异常常见原因

我在项目中遇到过几种典型情况,给大家列一下:

  • BPDU报文丢失:链路质量差,或者中间设备过滤了BPDU,导致交换机收不到对方的BPDU,误以为自己是根桥。
  • 端口角色计算错误:比如优先级配置冲突,或者链路聚合配置不一致,导致STP算错了阻塞端口。
  • STP收敛时间过长:RSTP虽然快,但如果链路频繁抖动,端口状态在Learning和Forwarding之间反复切换,也会出问题。
  • 人为配置失误:这个最常见。我曾经见过有人把端口STP给关了,结果环路一出现,整个网络直接崩了。

注意:不要以为RSTP就万无一失。RSTP的快速收敛依赖于点对点链路和边缘端口的正确配置。如果配置不当,RSTP退化成STP,收敛时间长达30-50秒,这期间广播风暴完全可能发生。

3.3 排查步骤:从现象到根因

好,现在假设你接到告警,网络卡死了。怎么查?我个人的排查习惯是这样的:

  1. 第一步:确认风暴现象

    登录核心交换机,执行 display interface 看端口流量。如果某个端口入方向广播包速率异常高(比如每秒几万个),基本就是风暴入口。

    <Huawei> display interface gigabitethernet 0/0/1
        Input:  broadcast packets: 56789 packets/sec
        Output: broadcast packets: 12345 packets/sec

    注意看广播包速率。正常网络广播包每秒几十到几百个,如果上万甚至几十万,那肯定有问题。

  2. 第二步:检查STP状态

    display stp brief 查看所有端口的STP角色和状态。重点关注那些应该是阻塞(Alternate或Backup)但实际是转发(Forwarding)的端口。

    <Huawei> display stp brief
        MSTID  Port                        Role  State
        0      GigabitEthernet0/0/1        DESI  FORWARDING
        0      GigabitEthernet0/0/2        ROOT  FORWARDING
        0      GigabitEthernet0/0/3        ALTE  FORWARDING  <-- 这里有问题!

    你看,端口0/0/3角色是Alternate(备用端口),按理应该是Discarding状态,但它却是Forwarding。这就是环路点。

  3. 第三步:定位根桥和BPDU问题

    执行 display stp 查看本机是否是根桥。如果多台交换机都认为自己是根桥,那BPDU肯定丢了。

    <Huawei> display stp
        CIST Bridge         :32768.4c1f-cc12-3456
        CIST Root/ERPC      :32768.4c1f-cc12-3456  <-- 本机是根桥
        <Huawei2> display stp
        CIST Bridge         :32768.4c1f-cc12-7890
        CIST Root/ERPC      :32768.4c1f-cc12-7890  <-- 这台也认为自己是根桥

    两台交换机都认为自己是根桥,说明它们之间没有正常交换BPDU。这时候要检查链路和中间设备。

  4. 第四步:抓包确认

    在怀疑的端口上抓包,过滤BPDU(目的MAC 01-80-c2-00-00-00)。如果长时间抓不到BPDU,或者BPDU的根桥ID不一致,问题就清楚了。

3.4 实战案例:一次RSTP边缘端口配置错误

我记得有一次,一个园区网升级,把接入层交换机全换了。结果上线后,每隔半小时就出现一次广播风暴,持续十几秒又自己恢复。

排查过程很有意思。我登录核心交换机,发现风暴发生时,某个接入端口突然从Forwarding变成Discarding,然后又变回来。反复看日志,发现这个端口配置了 stp edged-port enable,但实际连接的是一台普通交换机,不是终端设备。

问题就在这里。RSTP的边缘端口一旦收到BPDU,会立即重新参与STP计算,导致端口状态抖动。每次抖动都会触发拓扑变更,广播包就趁机泛滥。

避坑指南:我曾经吃过这个亏。边缘端口一定要确认连接的是终端设备(PC、服务器、IP电话等),不要想当然。如果连接的是交换机,必须去掉边缘端口配置,或者使用 stp bpdu-filter 配合使用。

3.5 快速恢复手段

如果网络已经瘫痪,业务优先。我建议按以下顺序操作:

操作 说明 风险
手动shutdown风暴端口 找到广播包速率最高的端口,直接shutdown 低,但会断业务
开启风暴控制 配置广播风暴抑制阈值,比如 broadcast-suppression 80 低,可能误杀正常流量
强制指定根桥 手动配置根桥优先级,避免BPDU丢失后多根桥 中,需确认拓扑
重启交换机 最后手段,重启后STP重新收敛 高,全断

我个人习惯是先shutdown风暴端口,等业务恢复后,再慢慢排查根因。别急着重启,重启解决不了配置问题。

3.6 预防建议

最后说几句预防的事。广播风暴其实完全可以避免:

  • 开启BPDU保护:在接入端口配置 stp bpdu-protection,一旦收到伪造BPDU,端口自动error-down。
  • 开启环路检测:很多厂商支持 loopback-detection,能自动发现环路并关闭端口。
  • 合理规划STP优先级:核心交换机优先级设低(比如4096),汇聚层设中等,接入层保持默认。这样根桥稳定,不容易漂移。
  • 定期检查STP状态:用脚本每天检查一遍所有交换机的STP端口角色,发现异常及时处理。

总结一句话:STP/RSTP状态异常导致的广播风暴,排查核心就三步——看端口流量、查STP角色、抓BPDU报文。只要思路清晰,半小时内肯定能定位问题。

好了,这一章就到这里。下一章咱们聊聊三层环路,也就是路由黑洞的问题。那个更刺激,到时候见。