冗余链路一接就广播风暴?华为交换机STP四步堵环路还留活备份
做网络的人都在两个念头之间反复横跳:链路只拉一条,怕哪天断了全楼断网;拉两条做备份,两条线一接,交换机之间成了环,广播包在里面转圈打转,几分钟就能把整台设备的 CPU 和 MAC 地址表打花。真正遇过的都知道那种场面——全网 ping 延迟飙高、交换机灯狂闪、MAC 地址表来回翻动,除了拔线没有别的止血办法。这个矛盾催生了生成树协议——设备之间互相通个气,把环剪开变成一棵树,堵住一个口防环,被堵的口平时闲着,主路断了它再顶上。
生成树家族有三代:最早的 STP、收敛更快的 RSTP、能按 VLAN 分树分流的 MSTP。什么时候还会用最基础的 STP?网络里挂着一批早年采购的老款交换机只支持 STP,或者内网业务简单、所有 VLAN 共用一棵树就够、不需要按 VLAN 走不同路径,全网统一跑 STP 反而省心。要接受的代价官方文档也写得明白——STP 收敛速度较慢,拓扑发生变化后重新计算要等上一会儿,换来的是跨代设备的兼容能力。下面这套华为 S 系列交换机的基础 STP 配置,四台设备 SwitchA 到 SwitchD 首尾相接连成环,照着敲就能把环稳稳剪开。
配置步骤
第一步,把环上四台设备的工作模式都切到 STP。生成树协议要求全网模式一致,A 配 MSTP、B 配 STP 会按兼容方式降级收敛,行为就不可预期了。四台设备上都执行:
<HUAWEI> system-view
[HUAWEI] sysname SwitchA
[SwitchA] stp mode stp
<HUAWEI> system-view
[HUAWEI] sysname SwitchB
[SwitchB] stp mode stp
<HUAWEI> system-view
[HUAWEI] sysname SwitchC
[SwitchC] stp mode stp
<HUAWEI> system-view
[HUAWEI] sysname SwitchD
[SwitchD] stp mode stp
第二步,定根桥和备份根桥。整棵树由根桥说了算,主动指定比让设备自己竞选可控得多。核心位置的性能好的 SwitchA 做根桥,SwitchD 做备份根桥:
[SwitchA] stp root primary
[SwitchD] stp root secondary
第三步,统一路径开销计算方法,并把打算让它当备份的那条口的开销改大,让生成树计算时主动堵它。开销计算方法全网必须一致,这里统一用华为计算方法,四台设备上都执行:
[SwitchA] stp pathcost-standard legacy
[SwitchB] stp pathcost-standard legacy
[SwitchC] stp pathcost-standard legacy
[SwitchD] stp pathcost-standard legacy
再把 SwitchA 与 SwitchC 之间那条预备当备份的链路所在的 SwitchC 端口 GigabitEthernet1/0/1 开销配成 20000:
[SwitchC] interface gigabitethernet 1/0/1
[SwitchC-GigabitEthernet1/0/1] stp cost 20000
[SwitchC-GigabitEthernet1/0/1] quit
第四步,收尾两件事。接 PC 打印机这类终端的口不参与生成树计算,设成边缘端口——终端开关机本来跟环路没关系,若参与计算反而会引起生成树反复重新计算,全网跟着抖一遍。SwitchB 和 SwitchC 下挂终端的口都这样配:
[SwitchB] interface gigabitethernet 1/0/2
[SwitchB-GigabitEthernet1/0/2] stp edged-port enable
[SwitchB-GigabitEthernet1/0/2] quit
[SwitchC] interface gigabitethernet 1/0/2
[SwitchC-GigabitEthernet1/0/2] stp edged-port enable
[SwitchC-GigabitEthernet1/0/2] quit
顺手加上 BPDU 保护,防止有人在边缘口私接交换机把环又引回来——边缘口一旦收到 BPDU 报文直接 shutdown:
[SwitchB] stp bpdu-protection
[SwitchC] stp bpdu-protection
最后四台设备全局使能 STP,环路开始被修剪:
[SwitchA] stp enable
[SwitchB] stp enable
[SwitchC] stp enable
[SwitchD] stp enable
验证
网络计算稳定后,在根桥 SwitchA 上看一眼端口角色:
[SwitchA] display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 DESI FORWARDING NONE
0 GigabitEthernet1/0/2 DESI FORWARDING NONE
两个口都是 DESI 指定端口、处于转发状态,符合根桥的预期。再看 SwitchB:
[SwitchB] display stp interface gigabitethernet 1/0/1 brief
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 DESI FORWARDING NONE
关键在 SwitchC——第三步改大开销的那个口有没有被堵住:
[SwitchC] display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 ALTE DISCARDING NONE
0 GigabitEthernet1/0/3 ROOT FORWARDING NONE
GigabitEthernet1/0/1 成为 Alternate 端口、处于 DISCARDING 状态,环路被剪开;GigabitEthernet1/0/3 是根端口正常转发——根端口是该交换机去往根桥开销最小的口,Alternate 则是被阻塞待命的备份口。哪天主路故障,这个 DISCARDING 的口会自动接管,备份就位。四台设备最终的配置文件分别如下,可直接对照核对自己的配置:
#
sysname SwitchA
#
stp mode stp
stp instance 0 root primary
stp pathcost-standard legacy
#
return
#
sysname SwitchB
#
stp mode stp
stp bpdu-protection
stp pathcost-standard legacy
#
interface GigabitEthernet1/0/2
stp edged-port enable
#
return
#
sysname SwitchC
#
stp mode stp
stp bpdu-protection
stp pathcost-standard legacy
#
interface GigabitEthernet1/0/1
stp instance 0 cost 20000
#
interface GigabitEthernet1/0/2
stp edged-port enable
#
return
#
sysname SwitchD
#
stp mode stp
stp instance 0 root secondary
stp pathcost-standard legacy
#
return
配置文件里能看到 stp instance 0 root primary 这类实例 0 的写法——STP 只有实例 0 一棵树,这也是它与 MSTP 多实例直观的区别。贵州诚鑫致达科技做园区网和机房改造时,遇到新老设备混跑的场景,会先统一生成树模式再动链路。你的网络里如果还有老款交换机在撑着,评论区聊聊型号,看看适不适合这套基础配置。