STP / RSTP / MSTP 详解
3155 字
16 分钟
STP / RSTP / MSTP 详解
STP / RSTP / MSTP 详解
一、生成树协议概述
1.1 为什么需要生成树
二层网络中,冗余链路可以提升可靠性,但会引入三个问题:
- 广播风暴:广播帧在环路中无限循环
- MAC 表不稳定:同一 MAC 从不同端口学习,导致 MAC 表抖动
- 重复帧:目的主机收到多份相同帧
1.2 发展历程
| 协议 | 标准 | 收敛时间 | 特点 |
|---|---|---|---|
| STP | IEEE 802.1D | 30-50秒 | 经典协议,收敛慢 |
| RSTP | IEEE 802.1w | 秒级 | 快速收敛,端口角色增多 |
| MSTP | IEEE 802.1s | 秒级 | 多实例负载分担,兼容STP/RSTP |
| PVST+ | Cisco 私有 | - | 每VLAN一个STP实例 |
1.3 生成树核心思想
- 选举根桥作为树根
- 计算到根桥的最短路径
- 阻塞非最短路径上的端口(阻断环路)
- 拓扑变化时重新计算,动态调整
二、STP(IEEE 802.1D)原理 🏷️高频考点
2.1 STP 基本概念
Bridge ID(BID)
Bridge ID = Bridge Priority(2字节) + MAC Address(6字节) = 优先级(高4位取值0-15,步长4096) + 系统ID扩展(低12位,PVST+用) + MAC- 默认优先级:32768(即优先级值 = 8,对应 8×4096 = 32768)
- 优先级范围:0-65535,步长 4096
- 比较规则:先比优先级(值小优),再比 MAC 地址(值小优)
端口开销(Path Cost)
| 链路速率 | 旧标准(802.1D-1998) | 新标准(802.1D-2004) |
|---|---|---|
| 10 Mbps | 100 | 2,000,000 |
| 100 Mbps | 19 | 200,000 |
| 1 Gbps | 4 | 20,000 |
| 10 Gbps | 2 | 2,000 |
| 100 Gbps | - | 200 |
根路径开销(RPC, Root Path Cost)
从当前交换机到根桥的累计端口开销总和。
端口角色
| 角色 | 功能 | 转发状态 |
|---|---|---|
| Root Port(RP) | 到根桥开销最小的端口,每台非根桥有且仅有一个 | Forwarding |
| Designated Port(DP) | 每条链路上到根桥开销最小的端口 | Forwarding |
| Blocked Port(BP) | 既非 RP 也非 DP,被阻塞的端口 | Blocking |
2.2 STP 选举过程 🏷️高频考点
选举顺序:根桥 → 根端口 → 指定端口 → 阻塞端口第1步:选举根桥
所有交换机初始都认为自己是根桥,通过 Configuration BPDU 交互比较 BID:
- BID 最小者成为根桥
- 比较顺序:Bridge Priority 小优 → MAC 地址小优
第2步:选举根端口(每台非根桥上)
每台非根桥基于以下标准(按顺序)选举一个根端口:
| 比较标准 | 说明 |
|---|---|
| ① RPC 最小 | 到达根桥的累计路径开销最小 |
| ② 对端 BID 最小 | 上游邻居的 Bridge ID 最小 |
| ③ 对端 PID 最小 | 上游邻居的 Port ID 最小 |
| ④ 本端 PID 最小 | 本交换机上的 Port ID 最小 |
Port ID = Port Priority(默认128) + Port Number
第3步:选举指定端口(每条链路上)
每条网段上基于标准(按顺序)选举:
| 比较标准 | 说明 |
|---|---|
| ① RPC 最小 | 该端口到达根桥的 RPC 最小 |
| ② BID 最小 | 该端口所在交换机的 BID 最小 |
| ③ PID 最小 | 该端口的 Port ID 最小 |
根桥上的所有端口都是指定端口
第4步:剩余端口 → 阻塞端口
未成为 RP 或 DP 的端口进入 Blocking 状态。
2.3 STP BPDU 报文
Configuration BPDU(配置 BPDU)
- 用于选举和维护生成树拓扑
- 根桥每 Hello Time(默认 2s)发送一次
- 非根桥从 RP 收到后,从自己的 DP 转发出去
BPDU 关键字段:
| 字段 | 说明 |
|---|---|
| Root Identifier | 根桥 BID |
| Root Path Cost | 到根桥的累计开销 |
| Bridge Identifier | 发送者 BID |
| Port Identifier | 发送端口 PID |
| Message Age | BPDU 在网络中的存活时间 |
| Max Age | BPDU 最大老化时间(默认 20s) |
| Hello Time | 根桥发送 BPDU 间隔(默认 2s) |
| Forward Delay | 监听/学习状态持续时间(默认 15s) |
TCN BPDU(拓扑变化通知)
- 拓扑变化时,检测到变化的交换机向上游(RP方向)发送 TCN BPDU
- 根桥收到后发送TC 置位的 Configuration BPDU 通知全网
- 交换机收到 TC 置位的 BPDU 后将 MAC 地址表老化时间缩短到 Forward Delay(15s)
2.4 STP 端口状态与计时器 🏷️高频考点
| 状态 | 收发BPDU | 学习MAC | 转发数据 | 持续时间 |
|---|---|---|---|---|
| Disabled | ✗ | ✗ | ✗ | - |
| Blocking | ✓ | ✗ | ✗ | Max Age(20s) |
| Listening | ✓ | ✗ | ✗ | Forward Delay(15s) |
| Learning | ✓ | ✓ | ✗ | Forward Delay(15s) |
| Forwarding | ✓ | ✓ | ✓ | 持续 |
端口状态变迁时间线:初始化/故障恢复 → Blocking(20s) → Listening(15s) → Learning(15s) → Forwarding从阻塞到转发共耗时约30-50秒2.5 STP 拓扑示例
三、RSTP(IEEE 802.1w)改进 🏷️高频考点
3.1 RSTP vs STP 对比
| 特性 | STP | RSTP |
|---|---|---|
| 收敛时间 | 30-50秒 | 秒级 |
| 端口状态 | 5种 | 3种(Discarding/Learning/Forwarding) |
| 端口角色 | 3种 | 5种(+Alternate/+Backup) |
| BPDU 发送 | 仅根桥触发 | 每台交换机独立发送 |
| BPDU 超时 | Max Age(20s) | 3×Hello Time |
| 拓扑变化 | TCN BPDU → TC BPDU | 直接 TC BPDU |
| 快速收敛 | 无 | P/A 机制、边缘端口 |
3.2 RSTP 端口角色 🏷️高频考点
| 角色 | 功能 | 转发状态 | 对应STP |
|---|---|---|---|
| Root Port | 到根桥最优路径端口 | Forwarding | RP |
| Designated Port | 链路上到根桥最优端口 | Forwarding | DP |
| Alternate Port | 根端口备份,收到更优 BPDU | Discarding | BP |
| Backup Port | 指定端口备份,同一交换机上收到自己 BPDU | Discarding | - |
| Edge Port | 边缘端口,直接转终端 | Forwarding | - |
根端口故障 → Alternate Port 立即切换为根端口(无需等待计时器)指定端口故障 → Backup Port 立即切换为指定端口3.3 端口状态映射
| STP | RSTP |
|---|---|
| Disabled | Discarding |
| Blocking | Discarding |
| Listening | Discarding(合并) |
| Learning | Learning |
| Forwarding | Forwarding |
3.4 RSTP 快速收敛机制 🏷️高频考点
P/A(Proposal/Agreement)机制
指定端口快速进入 Forwarding 流程:
SW-A(DP) SW-B(AP/RP) | | |------ Proposal 置位 BPDU -------->| (1) 提议 | | (2) 进入 Sync 过程: | | 阻塞所有非边缘DP |<------ Agreement 置位 BPDU -------| (3) 同意 | | | 端口立即 → Forwarding | (4) RP 快速 Forwarding | |P/A 机制使得点到点链路上端口可以在数秒内进入 Forwarding
边缘端口(Edge Port)
- 连接终端主机的接口,不参与 STP 计算
- 接口 UP 直接进入 Forwarding,不经过 Discarding/Learning
- 收到 BPDU 则丧失边缘端口属性(或触发 BPDU Guard)
- 配置:
stp edged-port enable
根端口快速切换
- 当前 RP 失效 → 网络中质量最好的 AP 立即切换为新 RP → 直接进入 Forwarding
3.5 RSTP BPDU 改进
- 每台交换机独立发送 BPDU:即使不是根桥,每个 Hello Time 也从指定端口发送 BPDU
- 邻居丢失快速检测:连续 3 个 Hello Time 未收到 BPDU = 邻居失效(比 STP Max Age 20s 快得多)
- Flag 字段充分利用:Proposal、Agreement、TC、TCA 等标志位
- BPDU 作为 Keepalive:BPDU 不仅用于选举,还作为邻居存活检测
3.6 RSTP 拓扑变化
- 检测到拓扑变化时,发送 TC 置位的 BPDU(不再使用 TCN BPDU)
- 收到 TC BPDU 后,立即清除非边缘接口的 MAC 地址表项(不仅是缩短老化时间)
四、MSTP(IEEE 802.1s) 🏷️高频考点
4.1 MSTP 核心思想
将多个 VLAN 映射到不同的生成树实例(MSTI),每个实例独立计算生成树:
- 不同实例可选举不同的根桥 → 负载分担
- 同一实例内 VLAN 共享同一颗生成树
- 兼容 STP/RSTP
4.2 MSTP 基本概念
| 概念 | 全称 | 说明 |
|---|---|---|
| MST Region | MST 域 | 相同域名、修订级别、VLAN映射表的交换机集合 |
| MSTI | 多生成树实例 | 每个实例独立运行 RSTP |
| IST | 内部生成树 | Instance 0,域内所有交换机参与 |
| CST | 公共生成树 | 连接所有 MST 域的生成树 |
| CIST | 公共与内部生成树 | IST + CST 合并,整个网络的单一生成树 |
| 总根(CIST Root) | 整个网络 CIST 的根桥 | |
| 域根(Regional Root) | MST 域内距离 CIST Root 最近的交换机 |
4.3 MSTP 端口角色
在 RSTP 基础上增加:
| 端口角色 | 说明 |
|---|---|
| Master Port | 域根上到 CIST 根桥的最优路径端口,各 MSTI 中为 Root Port |
| Boundary Port | 连接不同 MST 域或 STP/RSTP 设备的端口(域边界端口) |
| RP / DP / AP / BP | 与 RSTP 相同 |
4.4 VLAN 到实例映射
MST 域配置示例: Instance 1 → VLAN 10, 20, 30 (根桥 = SW-A,流量走左侧) Instance 2 → VLAN 40, 50, 60 (根桥 = SW-B,流量走右侧) Instance 0 (IST) → 其余VLAN (默认根桥 = SW-A)4.5 MSTP 负载分担拓扑图
4.6 MSTP BPDU
MSTP BPDU 包含:
- MSTP 通用头部:CIST 相关参数
- MSTI 配置消息:每个实例的 BPDU 信息
- MST 配置 ID:域名、修订级别、哈希值(VLAN映射摘要)
MST 域要求:域名、修订级别、VLAN-to-Instance Mapping 必须完全一致,否则视为不同域
五、STP 保护机制 🏷️高频考点
| 保护机制 | 作用 | 配置位置 | 命令 |
|---|---|---|---|
| BPDU Guard | 边缘端口收到 BPDU 时立即关闭端口(Error-Down),防止非法交换机接入 | 边缘端口 | stp bpdu-protection |
| BPDU Filter | 边缘端口不发送/不处理 BPDU | 边缘端口 | stp bpdu-filter enable |
| Root Guard | 指定端口收到更优 BPDU 时置为 Discarding,防止根桥被抢占 | 指定端口 | stp root-protection |
| Loop Guard | 防止阻塞端口因单向链路故障错误迁移为指定端口导致环路 | 根端口/Alternate端口 | stp loop-protection |
| TC Guard | 限制 TC-BPDU 处理频率,防止恶意 TC 报文频繁刷新 MAC 表 | 全局/接口 | stp tc-protection |
| TC-BPDU Guard | 设置 TC-BPDU 处理阈值,超阈值则丢弃 | 全局 | stp tc-protection threshold 5 |
5.1 BPDU Guard 触发后的恢复
# 手动恢复interface GigabitEthernet0/0/1 undo shutdown
# 自动恢复(配置Error-Down自动恢复)error-down auto-recovery cause bpdu-protection interval 305.2 Root Guard 原理
指定端口收到更优 BPDU(包含更小 BID 的根桥信息)时:
- 端口暂时进入 Root-Inconsistent 状态(等同于 Discarding)
- 不再收到更优 BPDU 后,自动恢复为 Forwarding
5.3 Loop Guard 原理
Alternate Port 或 Root Port 在连续 3 个 Hello Time 未收到 BPDU 时:
- 端口进入 Loop-Inconsistent 状态(阻断)
- 防止因单向链路故障导致环路
六、华为设备配置命令示例
6.1 STP 模式选择
# STP模式stp enablestp mode stp
# RSTP模式stp mode rstp
# MSTP模式(默认)stp mode mstp6.2 STP/RSTP 基础配置
# 修改交换机优先级(根桥)stp priority 0 # 使本机成为根桥(最常用)stp root primary # 一键配置根桥(优先级=0)
# 修改端口的开销interface GigabitEthernet0/0/1 stp cost 2000
# 修改端口优先级interface GigabitEthernet0/0/1 stp port priority 16 # 步长166.3 MSTP 配置
# 进入MST域配置stp region-configuration region-name REGION1 revision-level 1 instance 1 vlan 10 20 30 instance 2 vlan 40 50 60 active region-configuration # 必须激活 quit
# 配置实例优先级stp instance 1 priority 0 # Instance 1 中本机为根桥stp instance 2 priority 40966.4 边缘端口配置
interface GigabitEthernet0/0/1 stp edged-port enable # 配置为边缘端口(连接终端) quit
# 全局启用边缘端口自动检测(BPDU保护前推荐)stp edged-port default6.5 STP 保护机制配置
# BPDU保护(全局,对边缘端口生效)stp bpdu-protection
# BPDU过滤(接口级)interface GigabitEthernet0/0/1 stp bpdu-filter enable
# 根桥保护(接口级)interface GigabitEthernet0/0/1 stp root-protection
# 环路保护(接口级)interface GigabitEthernet0/0/1 stp loop-protection
# TC防护(全局)stp tc-protection # 默认开启stp tc-protection threshold 10 # 设置阈值stp tc-protection interval 10 # 设置处理间隔(秒)6.6 STP 计时器配置
# 修改STP计时器(仅在根桥上生效)stp timer hello 200 # 以厘秒为单位,200 = 2秒stp timer forward-delay 1500 # 1500 = 15秒stp timer max-age 2000 # 2000 = 20秒七、常见故障排查
7.1 故障场景与排查
| 故障现象 | 可能原因 | 排查命令 |
|---|---|---|
| STP 收敛慢 | 未使用 RSTP/MSTP,端口非边缘端口 | display stp |
| 环路未消除 | VLAN 映射错误,MST 域配置不一致 | display stp region-configuration |
| 根桥非预期 | 优先级配置错误 | display stp information |
| 端口频繁UP/DOWN | BPDU Guard 误触发 | display stp port-state-history |
| 拓扑变化频繁 | TC-BPDU 攻击 | display stp tc-bpdu statistics |
7.2 常用诊断命令
# 查看STP基本信息display stp
# 查看STP接口摘要display stp brief
# 查看接口STP详细信息display stp interface GigabitEthernet0/0/1
# 查看MST域配置display stp region-configuration
# 查看MSTP实例信息display stp instance 1
# 查看STP拓扑变化统计display stp topology-change
# 查看错误端口(BPDU Guard/Err-Down)display error-down recovery7.3 排错思路
display stp brief→ 确认根桥、端口角色是否正确display stp region-configuration→ 确认 MST 域配置一致性display stp interface xxx→ 检查端口状态、收发 BPDUdisplay logbuffer→ 检查是否有 BPDU Guard/Root Guard 告警
关键知识点总结:
- STP 选举:根桥(BID最小)→ 根端口(RPC最小)→ 指定端口 → 阻塞
- RSTP 改进:3状态、P/A机制、边缘端口、秒级收敛
- MSTP 核心:VLAN映射到实例,各实例独立选举,实现负载分担
- 保护机制:BPDU Guard(边缘口防攻击)、Root Guard(防根桥抢占)、Loop Guard(防单向链路环路)
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
STP / RSTP / MSTP 详解
https://blog.zs13.tech/posts/网络/02-交换技术/stp-rstp-mstp详解/相关文章智能推荐
1
VLAN 技术详解
网络2026-08-05
2
BGP 协议详解
网络2026-08-05
3
IPv6 技术详解
网络2026-08-05
4
IS-IS 协议详解
网络2026-08-05
5
OSPF 协议详解
网络2026-08-05
随机文章随机推荐



