4、RSTP与MSTP:RSTP的快速收敛机制、MSTP的实例划分、多生成树的应用场景
STP 收敛慢,这是很多老网工心里的痛。我记得刚入行那会儿,在机房加一台交换机,整个网络要等 30 到 50 秒才能恢复通信。业务部门电话直接打爆。后来换了 RSTP,世界清净多了。
这一节,我们就聊聊 RSTP 怎么做到秒级收敛,MSTP 又如何解决 VLAN 负载均衡的问题。说白了,就是让生成树不再“一棵树吊死”。
RSTP 的快速收敛机制
RSTP(Rapid Spanning Tree Protocol)本质上是 STP 的升级版。它保留了 STP 的核心选举逻辑——根桥、根端口、指定端口——但把收敛速度从秒级降到了毫秒级。
为什么能这么快?关键在于三个改进:
- 端口角色更丰富:除了根端口(RP)和指定端口(DP),RSTP 引入了替代端口(Alternate Port)和备份端口(Backup Port)。替代端口是根端口的备胎,一旦根端口挂了,它立刻顶上,不需要重新协商。
- 边缘端口(Edge Port):连接终端的端口直接进入转发状态,不参与生成树计算。我习惯把所有接 PC 的端口都配成边缘端口,配合 BPDU 防护,既快又安全。
- 提议-同意(Proposal-Agreement)机制:这是 RSTP 的精髓。STP 需要等待计时器超时,RSTP 通过握手快速完成端口角色协商。一台交换机发出提议,对端同意后,端口直接进入转发状态。
核心差异对比
| 特性 | STP (802.1D) | RSTP (802.1w) |
|---|---|---|
| 收敛时间 | 30~50 秒 | 1~3 秒 |
| 端口状态 | 5 种(Blocking/Listening/Learning/Forwarding/Disabled) | 3 种(Discarding/Learning/Forwarding) |
| 端口角色 | RP、DP、Blocked Port | RP、DP、Alternate Port、Backup Port、Edge Port |
| 收敛机制 | 计时器驱动 | 握手驱动 + 计时器备份 |
| 拓扑变更 | TC 通知泛洪 | TC 通知 + 快速 MAC 表刷新 |
避坑指南:我曾经遇到过一个案例,RSTP 收敛还是慢。排查后发现,有人把边缘端口配在了交换机互联链路上。边缘端口不处理 BPDU,导致环路检测失效。记住:边缘端口只连终端,互联端口必须用普通端口。
MSTP 的实例划分
RSTP 虽然快,但它有一个硬伤——所有 VLAN 共享一棵生成树。你想想看,如果链路 A 是根桥的指定端口,那所有 VLAN 的流量都走这条链路。另一条链路闲着,带宽浪费了。
MSTP(Multiple Spanning Tree Protocol)就是来解决这个问题的。它把多个 VLAN 映射到不同的生成树实例(Instance)里,每个实例独立计算拓扑。说白了,就是让不同的 VLAN 走不同的路。
MSTP 的核心概念有三个:
- MST 域(MST Region):一组配置相同的交换机组成的区域。域内跑 MSTP,域间跑 RSTP。
- IST(Internal Spanning Tree):域内的默认生成树实例,实例 ID 为 0。所有未映射的 VLAN 都归 IST 管。
- MSTI(Multiple Spanning Tree Instance):用户自定义的生成树实例。每个实例可以映射一组 VLAN,独立计算根桥和路径。
举个例子:
# 配置 MST 域
stp region-configuration
region-name MY_CAMPUS
revision-level 1
instance 1 vlan 10,20,30
instance 2 vlan 40,50,60
active region-configuration
# 配置实例 1 的根桥
stp instance 1 root primary
# 配置实例 2 的根桥
stp instance 2 root secondary
这样,VLAN 10/20/30 走实例 1 的拓扑,VLAN 40/50/60 走实例 2 的拓扑。两条上行链路都能用起来。
注意:MST 域的配置必须一致。Region Name、Revision Level、VLAN 映射表,三样东西只要有一项不同,交换机就认为不在同一个域内,会退化成 RSTP。我曾经在割接时吃过这个亏——两边配置差了一个空格,结果域没建起来,全网震荡了半小时。
多生成树的应用场景
MSTP 最适合的场景就是链路负载分担。我总结了几种典型用法:
- 双上行链路负载均衡:核心层有两台交换机,接入层双归上联。实例 1 的根桥设在核心 A,实例 2 的根桥设在核心 B。流量自动分流。
- 业务隔离:办公网 VLAN 和监控网 VLAN 分属不同实例。办公网走主链路,监控网走备链路。即使办公网链路断了,监控网不受影响。
- 跨机房冗余:两个机房之间有多条互联链路。不同实例走不同链路,既做冗余又做负载。
实例划分建议
| 场景 | 实例数量 | 映射策略 |
|---|---|---|
| 小型园区(< 50 台交换机) | 2~3 个 | 按业务类型划分(办公、监控、访客) |
| 中型园区(50~200 台) | 4~8 个 | 按区域 + 业务划分(东区办公、西区办公、核心业务) |
| 数据中心 | 8~16 个 | 按租户或应用划分(每个实例映射少量 VLAN) |
个人经验:实例不是越多越好。每个实例都要消耗 CPU 资源跑 BPDU 和拓扑计算。我见过有人配了 32 个实例,结果交换机 CPU 飙到 80%。一般来说,实例数控制在 8 个以内比较稳妥。
核心逻辑流程图
下面这张图展示了 RSTP 和 MSTP 的核心逻辑关系。从 STP 到 RSTP 再到 MSTP,每一步都是对前者的优化。
从图上可以看得很清楚:RSTP 解决了收敛速度问题,MSTP 解决了链路利用率问题。两者结合,就是现代园区网生成树的标准答案。
嗯,这里要注意一点:MSTP 配置起来比 RSTP 复杂,调试也麻烦。我建议先在实验室搭环境验证,确认 VLAN 映射和根桥设置没问题,再上生产。否则一个域配置错误,全网拓扑震荡,那场面……你懂的。