一、STP 基础概述与核心作用
STP(Spanning Tree Protocol,生成树协议)是工作在 OSI 二层数据链路层的协议,专门为解决以太网二层环路问题设计,是园区网二层网络高可用设计的核心协议。
其核心作用如下:
-
破环防堵 :通过逻辑阻塞冗余链路的部分接口,将物理环形的网络拓扑,转换为逻辑无环的树形最短路径拓扑,从根本上避免二层环路带来的网络故障。
-
冗余备份:实时监听整个网络的拓扑结构变化,当主用链路 / 设备发生故障时,自动将原本阻塞的备份接口重新开启,恢复网络连通性,实现链路的冗余备份。
-
标准兼容:STP 遵循 IEEE 802.1D 标准,同时衍生出 RSTP(快速生成树,802.1w)、MSTP(多生成树,802.1s)等升级版本;华为设备默认开启 MSTP 协议,可向下兼容 STP/RSTP。
二、二层环路的危害
以太网二层网络中,若存在物理环路且无破环机制,会引发三大致命问题,最终导致全网瘫痪:
2.1 广播风暴
以太网中广播报文会被交换机向除入接口外的所有接口泛洪。当网络存在环路时,广播报文会在环形链路中被无限循环转发、复制,报文数量指数级增长,最终占满所有链路的全部带宽,导致正常业务报文无法转发,全网瘫痪。
2.2 MAC 地址表漂移(偏移)
交换机通过数据帧的源 MAC 地址 + 入接口,生成 MAC 地址表项,指导后续单播报文的转发。当网络存在环路时,同一个源 MAC 地址的报文,会从交换机的不同接口反复进入,导致交换机不断刷新 MAC 地址表中该 MAC 对应的接口记录,出现 MAC 地址表漂移现象。这会导致交换机 MAC 地址表频繁震荡,CPU 占用率飙升,单播报文转发异常,出现丢包、错发等问题。
2.3 多帧复制
单播报文在环路中会被循环转发,导致目的终端会收到同一个数据帧的多个重复副本。这不仅会占用终端的处理性能,还会导致上层协议无法处理重复报文,出现会话异常、数据传输错误等问题。
三、STP 核心报文:BPDU(桥协议数据单元)
STP 的所有选举、协商、拓扑变更通知,都通过 BPDU(Bridge Protocol Data Unit,桥协议数据单元)报文实现,BPDU 是 STP 的核心载体。
3.1 BPDU 的两种核心类型
STP 定义了两种核心 BPDU 报文,承担不同的功能:
-
配置 BPDU:STP 进行角色选举、参数协商的核心报文。网络稳定时,只有根桥会周期性(默认 Hello Time 2s)发送配置 BPDU,非根桥设备仅转发根桥生成的配置 BPDU。
-
TCN BPDU(拓扑变更通知 BPDU):用于网络拓扑发生变化时,向全网通告拓扑变更信息,触发全网交换机刷新 MAC 地址表,避免错误的 MAC 表项导致流量不通。
3.2 配置 BPDU 报文格式与字段解释
配置 BPDU 报文的核心字段如下,完全遵循 IEEE 802.1D 标准定义:
| 字段 | 字节数 | 全称 | 核心作用与说明 |
|---|---|---|---|
| PID | 2 字节 | 协议 ID | 对于 STP 而言,该字段固定值为 0 |
| PVI | 1 字节 | 协议版本 ID | 标识 STP 协议版本:STP 为 0,RSTP 为 2,MSTP 为 3 |
| BPDU Type | 1 字节 | BPDU 类型 | 标识 BPDU 类型:0x00 为配置 BPDU,0x80 为 TCN BPDU |
| Flags | 1 字节 | 标志位 | STP 仅使用最高位和最低位:- 最低位 TC(Topology Change):拓扑变更标志- 最高位 TCA(Topology Change Acknowledgment):拓扑变更确认标志 |
| Root ID | 8 字节 | 根桥 ID | 全网选举出的根网桥的桥 ID(BID) |
| RPC | 4 字节 | 根路径开销 | 从发送该 BPDU 的接口,到达根桥的路径总开销(Root Path Cost) |
| Bridge ID | 8 字节 | 网桥 ID | 发送该 BPDU 的交换机的桥 ID(BID) |
| Port ID | 2 字节 | 端口 ID | 发送该 BPDU 的交换机接口的 ID,由 4 位优先级 + 12 位接口编号组成 |
| Message Age | 2 字节 | 消息寿命 | 从根桥发出 BPDU 后经过的秒数,每经过一个交换机递减 1,本质是到达根桥的跳数 |
| Max Age | 2 字节 | 最大寿命 | BPDU 的最大老化时间,默认 20s。若超过该时间未收到根桥的 BPDU,则认为根桥故障,原有 BPDU 失效 |
| Hello Time | 2 字节 | Hello 时间 | 根桥连续发送配置 BPDU 的时间间隔,默认 2s |
| Forward Delay | 2 字节 | 转发延迟 | 接口在侦听、学习状态停留的时间间隔,默认 15s |

3.3 核心标识字段
3.3.1 BID(网桥 ID)
BID 是交换机的唯一身份标识,也是 STP 选举的核心参数,STP 所有协商规则均为 "数值越小越优先"。
-
组成结构:8 字节 = 2 字节桥优先级 + 6 字节交换机 MAC 地址
-
桥优先级:可手动配置,取值范围 0-61440,步长 4096,华为设备默认优先级为 32768
-
比较规则:先比较桥优先级,数值越小越优先;优先级相同时,比较 MAC 地址,MAC 地址越小越优先。
3.3.2 PID(端口 ID)
PID 用于标识交换机的接口,参与根端口、指定端口的选举,同样遵循 "数值越小越优先"。
-
组成结构:2 字节 = 4 位端口优先级 + 12 位接口编号
-
端口优先级:可手动配置,取值范围 0-240,步长 16,华为设备默认优先级为 128
-
比较规则:先比较端口优先级,数值越小越优先;优先级相同时,比较接口编号,编号越小越优先。
3.3.3 RPC(根路径开销)
RPC 是接口到达根桥的总路径开销,是 STP 选举的核心参数,数值越小,路径越优。
-
计算规则:RPC = 报文入方向沿途所有接口的开销值累加和
-
接口开销值:由接口带宽决定,带宽越高,开销值越小,不同标准的开销计算方式不同,华为设备默认采用私有计算方法,对应关系如下:
| 接口速率 | 接口模式 | IEEE 802.1D-1998 标准 | IEEE 802.1t 标准 | 华为私有计算方法 |
|---|---|---|---|---|
| 10Mbps | 半双工 | 100 | 2000000 | 2000 |
| 10Mbps | 全双工 | 99 | 1999999 | 1999 |
| 100Mbps | 半双工 | 19 | 200000 | 200 |
| 100Mbps | 全双工 | 18 | 199999 | 199 |
| 1Gbps | 全双工 | 4 | 20000 | 20 |
| 10Gbps | 全双工 | 2 | 2000 | 2 |
| 40Gbps | 全双工 | 1 | 500 | 1 |

3.4 TCN BPDU 与拓扑变更处理流程
当网络拓扑发生变化(如链路 up/down、接口故障)时,STP 通过 TCN BPDU 实现全网拓扑变更通知,核心流程如下:
-
TCN 发起:检测到拓扑变化的交换机,会向所有运行 STP 的接口,周期性发送 TCN BPDU。
-
逐跳确认与上报:上游交换机收到 TCN BPDU 后,会回复 TCA 标志位置 1 的配置 BPDU 进行确认,同时继续向根桥方向逐级转发 TCN BPDU,直到根桥收到。
-
根桥全网通告:根桥收到 TCN BPDU 后,会发送 TC 标志位置 1 的配置 BPDU,该报文会被转发到整个交换网络的所有设备。
-
MAC 地址表刷新:全网交换机收到 TC 置 1 的 BPDU 后,会将自身 MAC 地址表的老化时间从默认 300s 缩短为 Forward Delay(默认 15s),快速刷新错误的 MAC 地址表项,避免流量转发异常。

四、STP 四大角色选举规则
STP 的核心是通过 BPDU 报文的参数比较,完成四大角色的选举,最终确定哪些接口转发、哪些接口阻塞,实现无环拓扑。选举核心原则:所有参数比较,均为数值越小越优先。
4.1 第一步:选举根网桥 RB(Root Bridge)
根网桥是整个交换网络的 "树根",整个交换网络有且仅有一个根网桥,是 STP 拓扑的核心。
-
选举规则:比较所有运行 STP 的交换机的 BID,BID 最小的交换机成为根网桥。
-
选举优先级:先比较桥优先级,优先级越小越优先;优先级相同时,比较交换机 MAC 地址,MAC 越小越优先。
-
根网桥特性:网络稳定后,只有根网桥会周期性发送配置 BPDU,其他非根网桥仅转发根桥的 BPDU;根网桥的所有接口均为指定端口,处于转发状态。
4.2 第二步:选举根端口 RP(Root Port)
根端口是非根网桥设备上的端口,每台非根网桥有且仅有一个根端口。
-
核心定位:非根网桥设备上,离根桥最近、接收根桥 BPDU 最优的端口,用于接收根桥发送的配置 BPDU。
-
选举规则(按优先级依次比较,找到最优端口):
-
比较入方向 RPC :比较端口收到的 BPDU 中的 RPC 值,RPC 值最小的端口成为根端口。
-
比较对端 BID :若入方向 RPC 相同,比较 BPDU 中发送端的 BID,对端 BID 最小的对应端口成为根端口。
-
比较对端 PID :若对端 BID 也相同,比较 BPDU 中发送端的 PID,对端 PID 最小的对应端口成为根端口。
-
比较本端 PID :若对端 PID 也相同(如两台交换机之间有多条直连链路),比较本端端口的 PID,本端 PID 最小的端口成为根端口。
-
4.3 第三步:选举指定端口 DP(Designated Port)
指定端口是每一段物理链路上的端口 ,每一段链路有且仅有一个指定端口。
-
核心定位:链路上负责向该链路转发根桥配置 BPDU的端口,同时负责向该链路转发业务数据。
-
选举规则(按优先级依次比较):
-
比较出方向 RPC :比较链路两端端口发送 BPDU 中的 RPC 值,RPC 值最小的端口成为指定端口。
-
比较本端 BID :若 RPC 值相同,比较端口所属交换机的 BID,BID 更小的交换机对应的端口成为指定端口。
-
比较本端 PID :若本端 BID 相同(同一台交换机的两个接口直连),比较本端端口的 PID,PID 更小的端口成为指定端口。
-
若以上参数全部相同,直接阻塞该端口。
-
4.4 第四步:确定非指定端口 NDP(Non-Designated Port)
-
定义:完成根端口、指定端口选举后,剩余所有没有角色的端口,均为非指定端口。
-
最终状态:非指定端口会被 STP 逻辑阻塞,仅能侦听 BPDU,不能转发业务数据,从而打破物理环路,形成无环的树形拓扑。
五、STP 的端口状态
STP 为接口定义了 5 种状态,不同状态下接口的行为不同,核心是为了避免在收敛过程中出现临时环路,状态转换规则如下:
| 状态名称 | 英文 | 核心行为描述 |
|---|---|---|
| 禁用 | Disable | 接口被手动关闭或物理 down,不能收发 BPDU,也不能收发业务数据帧,不参与 STP 计算。 |
| 阻塞 | Blocking | 接口被 STP 逻辑阻塞,是 STP 接口启动后的初始状态。- 不能发送 BPDU,只能持续侦听 BPDU- 不能收发业务数据帧- 不进行 MAC 地址学习- 若 20s(Max Age)内未收到最优 BPDU,会进入侦听状态。 |
| 侦听 | Listening | STP 进行角色选举的核心状态,持续时间为 1 个 Forward Delay(默认 15s)。- 可以收发 BPDU,参与 STP 角色选举- 不能收发业务数据帧- 不进行 MAC 地址学习- 选举结束后,根端口、指定端口进入学习状态;非指定端口退回阻塞状态。 |
| 学习 | Learning | 为避免转发初期的广播泛洪,提前进行 MAC 地址学习,持续时间为 1 个 Forward Delay(默认 15s)。- 可以收发 BPDU- 不能转发业务数据帧- 会侦听业务数据帧的源 MAC,进行 MAC 地址表学习- 状态结束后,根端口、指定端口进入转发状态。 |
| 转发 | Forwarding | 接口的最终工作状态,只有根端口、指定端口可以进入该状态。- 可以正常收发业务数据帧- 可以收发并处理 BPDU- 进行 MAC 地址学习,正常参与数据转发。 |
STP 初次收敛时间:阻塞状态 20s + 侦听 15s + 学习 15s = 至少 50s,这也是 STP 收敛速度慢的核心原因。
六、STP 的收敛机制
STP 的收敛分为初次收敛 和拓扑变更后的重收敛两种场景,不同场景的收敛过程与时间不同。
6.1 STP 初次收敛
-
所有交换机接口启动后,先进入 Blocking 阻塞状态,避免临时环路。
-
所有交换机初始都认为自己是根桥,发送配置 BPDU,开始根网桥选举。
-
经过 Max Age(20s)超时后,接口进入 Listening 侦听状态,完成根端口、指定端口、非指定端口的选举,持续 15s。
-
根端口、指定端口进入 Learning 学习状态,进行 MAC 地址学习,持续 15s。
-
根端口、指定端口进入 Forwarding 转发状态,非指定端口保持 Blocking 阻塞状态,收敛完成,总耗时至少 50s。
6.2 STP 故障重收敛
6.2.1 根桥故障
-
故障现象:根桥设备宕机,停止发送配置 BPDU。
-
收敛过程:
-
非根桥设备在 Max Age(20s)内未收到根桥的 BPDU,认为原有 BPDU 失效,开始重新选举根桥。
-
非根桥之间互相发送配置 BPDU,重新选举出新的根桥。
-
新的根桥选举完成后,所有接口重新经过 15s 侦听 + 15s 学习状态,最终进入转发状态。
-
-
收敛总耗时:20s + 15s +15s = 50s 左右。

6.2.2 直连链路故障
-
故障现象:非根桥设备的根端口所在直连链路发生故障,设备可通过其他接口收到根桥的 BPDU。
-
收敛过程:
-
设备检测到根端口直连链路物理 down,立即失效原有根端口。
-
设备将原本阻塞的替代端口(非指定端口)切换为新的根端口,该端口从阻塞状态进入侦听状态。
-
经过 15s 侦听 + 15s 学习状态后,新的根端口进入转发状态。
-
-
收敛总耗时:15s +15s = 30s 左右。

6.2.3 非直连链路故障
-
故障现象:非根桥设备的根端口所在链路故障,且无法通过其他接口直接收到根桥的 BPDU。
-
收敛过程:
-
设备无法收到根桥的 BPDU,等待 Max Age(20s)超时后,认为原有 BPDU 失效,开始重新选举。
-
接口进入 15s 侦听状态,完成端口角色重新选举。
-
接口进入 15s 学习状态,完成 MAC 地址学习。
-
接口进入转发状态,收敛完成。
-
-
收敛总耗时:20s +15s +15s = 50s 左右。
七、STP 基础配置命令(华为设备)
华为设备默认开启 MSTP 协议,若需使用标准 STP,需手动修改协议模式,核心配置命令如下:
7.1 全局基础配置
# 全局开启STP(华为低端交换机默认开启,高端设备部分需手动开启)
[Huawei] stp enable
# 全局关闭STP
[Huawei] undo stp enable
# 配置STP协议模式(华为设备默认MSTP,需手动修改为STP)
[Huawei] stp mode stp
# 查看STP模式可选值
[Huawei] stp mode ?
mstp Multiple Spanning Tree Protocol (MSTP) mode
rstp Rapid Spanning Tree Protocol (RSTP) mode
stp Spanning Tree Protocol (STP) mode
# 修改交换机的STP桥优先级(步长4096,取值0-61440,数值越小越优先)
[Huawei] stp priority 28672
# 将设备直接配置为主根桥(实质是将优先级设置为0,强制成为根桥)
[Huawei] stp root primary
# 将设备配置为备份根桥(主根桥故障后,自动成为新根桥,优先级设置为4096)
[Huawei] stp root secondary
# 修改STP计时器参数(非必要不修改,需全网保持一致)
[Huawei] stp timer hello 2 # 修改Hello Time,默认2s
[Huawei] stp timer max-age 20 # 修改Max Age,默认20s
[Huawei] stp timer forward-delay 15 # 修改Forward Delay,默认15s
7.2 接口级配置
# 进入接口视图
[Huawei] interface GigabitEthernet 0/0/1
# 接口关闭STP(通常用于连接终端的Access接口、三层接口,避免终端上下线触发TC)
[Huawei-GigabitEthernet0/0/1] undo stp enable
# 接口开启STP
[Huawei-GigabitEthernet0/0/1] stp enable
# 修改接口的STP端口优先级(步长16,取值0-240,数值越小越优先)
[Huawei-GigabitEthernet0/0/1] stp port priority 16
# 修改接口的STP开销值(手动指定接口开销,覆盖默认计算值)
[Huawei-GigabitEthernet0/0/1] stp cost 20
# 配置接口为边缘端口(连接终端的接口,可直接进入转发状态,无需等待收敛时间)
[Huawei-GigabitEthernet0/0/1] stp edged-port enable
7.3 STP 状态查看命令
# 查看STP全局状态、根桥信息、接口角色、计时器等核心信息
[Huawei] display stp
# 查看指定接口的STP详细状态、角色、开销等信息
[Huawei] display stp interface GigabitEthernet 0/0/1
# 查看STP拓扑变更统计信息
[Huawei] display stp topology-change
display stp 输出解读示例
-------[CIST Global Info][Mode STP]-------
CIST Bridge :32768.4c1f-ccd3-6375 # 本设备的BID(优先级+MAC)
Config Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20 # 配置的计时器参数
Active Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20 # 实际生效的计时器参数
CIST Root/ERPC :32768.4c1f-cc33-24a8 / 20000 # 根桥的BID + 本设备到根桥的RPC
CIST RegRoot/IRPC :32768.4c1f-ccd3-6375 / 0
CIST RootPortId :128.1 # 本设备的根端口ID(优先级+接口编号)
BPDU-Protection :Disabled
TC or TCN received :183 # 收到的TC/TCN报文数量
TC count per hello :4
STP Converge Mode :Normal
Time since last TC :0 days 0h:0m:26s # 距离上次拓扑变更的时间
Number of TC :8
Last TC occurred :GigabitEthernet0/0/1 # 上次拓扑变更的接口
八、STP 的局限性与 RSTP/MSTP
8.1 STP 的局限性
-
收敛速度极慢:初次收敛至少 50s,即使是直连链路故障也需要 30s 收敛,无法满足现代园区网的业务高可用需求。
-
端口角色与状态冗余:端口状态划分复杂,阻塞、侦听、学习状态都无法转发数据,造成带宽浪费;非指定端口角色模糊,无法实现快速切换。
-
单生成树带宽利用率低:整个交换网络只有一棵生成树,所有 VLAN 共享同一棵树,冗余链路被完全阻塞,无法实现流量负载分担,链路带宽利用率极低。
-
拓扑变更影响范围大:一次拓扑变更会导致全网交换机缩短 MAC 地址老化时间,影响整个网络的稳定性。
8.2 RSTP(快速生成树协议,IEEE 802.1w)
RSTP 是 STP 的升级版本,核心目标是优化收敛速度,可实现亚秒级收敛,同时完全向下兼容 STP。
8.2.1 RSTP 改进点
-
端口角色重构取消了 STP 的非指定端口,重新定义了 4 种端口角色,实现备份端口的快速切换:
-
根端口 RP:与 STP 定义一致,非根桥接收根桥 BPDU 的最优端口。
-
指定端口 DP:与 STP 定义一致,链路负责转发 BPDU 和业务数据的端口。
-
替代端口(Alternate Port):根端口的备份端口,因收到其他设备更优的 BPDU 而被阻塞。当根端口故障时,替代端口会直接成为新的根端口,无需等待收敛时间,实现毫秒级切换。
-
备份端口(Backup Port):指定端口的备份端口,因收到自身设备更优的 BPDU 而被阻塞。当指定端口故障时,备份端口会直接成为新的指定端口,快速进入转发状态。
-
-
端口状态简化将 STP 的 5 种状态简化为 3 种,逻辑更清晰:
-
丢弃状态(Discarding):合并了 STP 的禁用、阻塞、侦听状态,不能转发业务数据,不进行 MAC 学习,仅能收发 BPDU。
-
学习状态(Learning):与 STP 一致,进行 MAC 地址学习,不能转发业务数据。
-
转发状态(Forwarding):与 STP 一致,正常转发业务数据,进行 MAC 学习和 BPDU 处理。
-
-
快速收敛机制
-
边缘端口机制:连接终端的接口配置为边缘端口后,可直接进入转发状态,无需等待 Forward Delay 时间,同时边缘端口的 up/down 不会触发拓扑变更。
-
P/A 协商机制:点对点直连链路的两个端口,通过 Proposal/Agreement 报文快速协商,无需等待计时器,可直接进入转发状态,大幅缩短收敛时间。
-
根端口 / 指定端口快速切换:根端口故障时,替代端口直接进入转发状态;指定端口故障时,备份端口直接进入转发状态,无需经过侦听、学习状态。
-
-
拓扑变更机制优化
-
取消了 TCN BPDU 的逐跳上报机制,非根桥设备可直接向所有非边缘指定端口泛洪 TC 报文,无需等待根桥确认。
-
拓扑变更时,仅清空发生变化的接口对应的 MAC 地址表项,而非全网缩短老化时间,大幅降低拓扑变更对全网的影响。
-
-
BPDU 报文与失效机制优化
-
所有 RSTP 交换机都会周期性发送 BPDU,不再仅由根桥发送,Hello Time 作为本地计时器,不依赖根桥。
-
若连续 3 个 Hello Time 未收到对端的 BPDU,就认为邻居失效,原有 BPDU 立即失效,无需等待 Max Age 20s,大幅缩短故障检测时间。
-
8.3 MSTP(多生成树协议,IEEE 802.1s)
MSTP 在 RSTP 的基础上,解决了 STP/RSTP 单生成树的带宽浪费问题,是当前园区网的主流部署方案,华为设备默认开启 MSTP。
8.3.1 MSTP 特性
-
多实例生成树:MSTP 可以将多个 VLAN 映射到同一个生成树实例(MSTI),每个实例独立计算一棵生成树,不同实例的根桥、阻塞端口可以不同。
-
流量负载分担:不同 VLAN 的流量可以走不同的生成树,实现冗余链路的流量负载分担,大幅提升链路带宽利用率。
-
向下兼容:完全兼容 STP 和 RSTP 协议,可与运行 STP/RSTP 的设备互通。
-
VLAN 与生成树绑定:每个 VLAN 仅在对应的生成树实例中转发,避免了单生成树中所有 VLAN 共享一条转发路径的问题,同时实现了不同 VLAN 的二层隔离。
8.3.2 MSTP 优势
-
解决了 STP/RSTP 单生成树的带宽浪费问题,冗余链路不再完全闲置,可实现流量分担。
-
网络拓扑更灵活,可针对不同业务 VLAN 设计不同的转发路径,满足不同业务的转发需求。
-
拓扑变更影响范围更小,单个实例的拓扑变化,不会影响其他实例的转发,网络稳定性更高。