HCIP学习04 STP----生成树协议

一、STP 基础概述与核心作用

STP(Spanning Tree Protocol,生成树协议)是工作在 OSI 二层数据链路层的协议,专门为解决以太网二层环路问题设计,是园区网二层网络高可用设计的核心协议。

其核心作用如下:

  1. 破环防堵 :通过逻辑阻塞冗余链路的部分接口,将物理环形的网络拓扑,转换为逻辑无环的树形最短路径拓扑,从根本上避免二层环路带来的网络故障。

  2. 冗余备份:实时监听整个网络的拓扑结构变化,当主用链路 / 设备发生故障时,自动将原本阻塞的备份接口重新开启,恢复网络连通性,实现链路的冗余备份。

  3. 标准兼容: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 报文,承担不同的功能:

  1. 配置 BPDU:STP 进行角色选举、参数协商的核心报文。网络稳定时,只有根桥会周期性(默认 Hello Time 2s)发送配置 BPDU,非根桥设备仅转发根桥生成的配置 BPDU。

  2. 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 实现全网拓扑变更通知,核心流程如下:

  1. TCN 发起:检测到拓扑变化的交换机,会向所有运行 STP 的接口,周期性发送 TCN BPDU。

  2. 逐跳确认与上报:上游交换机收到 TCN BPDU 后,会回复 TCA 标志位置 1 的配置 BPDU 进行确认,同时继续向根桥方向逐级转发 TCN BPDU,直到根桥收到。

  3. 根桥全网通告:根桥收到 TCN BPDU 后,会发送 TC 标志位置 1 的配置 BPDU,该报文会被转发到整个交换网络的所有设备。

  4. 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。

  • 选举规则(按优先级依次比较,找到最优端口):

    1. 比较入方向 RPC :比较端口收到的 BPDU 中的 RPC 值,RPC 值最小的端口成为根端口

    2. 比较对端 BID :若入方向 RPC 相同,比较 BPDU 中发送端的 BID,对端 BID 最小的对应端口成为根端口

    3. 比较对端 PID :若对端 BID 也相同,比较 BPDU 中发送端的 PID,对端 PID 最小的对应端口成为根端口

    4. 比较本端 PID :若对端 PID 也相同(如两台交换机之间有多条直连链路),比较本端端口的 PID,本端 PID 最小的端口成为根端口

4.3 第三步:选举指定端口 DP(Designated Port)

指定端口是每一段物理链路上的端口每一段链路有且仅有一个指定端口

  • 核心定位:链路上负责向该链路转发根桥配置 BPDU的端口,同时负责向该链路转发业务数据。

  • 选举规则(按优先级依次比较):

    1. 比较出方向 RPC :比较链路两端端口发送 BPDU 中的 RPC 值,RPC 值最小的端口成为指定端口

    2. 比较本端 BID :若 RPC 值相同,比较端口所属交换机的 BID,BID 更小的交换机对应的端口成为指定端口

    3. 比较本端 PID :若本端 BID 相同(同一台交换机的两个接口直连),比较本端端口的 PID,PID 更小的端口成为指定端口

    4. 若以上参数全部相同,直接阻塞该端口。

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 初次收敛

  1. 所有交换机接口启动后,先进入 Blocking 阻塞状态,避免临时环路。

  2. 所有交换机初始都认为自己是根桥,发送配置 BPDU,开始根网桥选举。

  3. 经过 Max Age(20s)超时后,接口进入 Listening 侦听状态,完成根端口、指定端口、非指定端口的选举,持续 15s。

  4. 根端口、指定端口进入 Learning 学习状态,进行 MAC 地址学习,持续 15s。

  5. 根端口、指定端口进入 Forwarding 转发状态,非指定端口保持 Blocking 阻塞状态,收敛完成,总耗时至少 50s。

6.2 STP 故障重收敛

6.2.1 根桥故障
  • 故障现象:根桥设备宕机,停止发送配置 BPDU。

  • 收敛过程:

    1. 非根桥设备在 Max Age(20s)内未收到根桥的 BPDU,认为原有 BPDU 失效,开始重新选举根桥。

    2. 非根桥之间互相发送配置 BPDU,重新选举出新的根桥。

    3. 新的根桥选举完成后,所有接口重新经过 15s 侦听 + 15s 学习状态,最终进入转发状态。

  • 收敛总耗时:20s + 15s +15s = 50s 左右

6.2.2 直连链路故障
  • 故障现象:非根桥设备的根端口所在直连链路发生故障,设备可通过其他接口收到根桥的 BPDU。

  • 收敛过程:

    1. 设备检测到根端口直连链路物理 down,立即失效原有根端口。

    2. 设备将原本阻塞的替代端口(非指定端口)切换为新的根端口,该端口从阻塞状态进入侦听状态。

    3. 经过 15s 侦听 + 15s 学习状态后,新的根端口进入转发状态。

  • 收敛总耗时:15s +15s = 30s 左右

6.2.3 非直连链路故障
  • 故障现象:非根桥设备的根端口所在链路故障,且无法通过其他接口直接收到根桥的 BPDU。

  • 收敛过程:

    1. 设备无法收到根桥的 BPDU,等待 Max Age(20s)超时后,认为原有 BPDU 失效,开始重新选举。

    2. 接口进入 15s 侦听状态,完成端口角色重新选举。

    3. 接口进入 15s 学习状态,完成 MAC 地址学习。

    4. 接口进入转发状态,收敛完成。

  • 收敛总耗时: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 的局限性

  1. 收敛速度极慢:初次收敛至少 50s,即使是直连链路故障也需要 30s 收敛,无法满足现代园区网的业务高可用需求。

  2. 端口角色与状态冗余:端口状态划分复杂,阻塞、侦听、学习状态都无法转发数据,造成带宽浪费;非指定端口角色模糊,无法实现快速切换。

  3. 单生成树带宽利用率低:整个交换网络只有一棵生成树,所有 VLAN 共享同一棵树,冗余链路被完全阻塞,无法实现流量负载分担,链路带宽利用率极低。

  4. 拓扑变更影响范围大:一次拓扑变更会导致全网交换机缩短 MAC 地址老化时间,影响整个网络的稳定性。

8.2 RSTP(快速生成树协议,IEEE 802.1w)

RSTP 是 STP 的升级版本,核心目标是优化收敛速度,可实现亚秒级收敛,同时完全向下兼容 STP。

8.2.1 RSTP 改进点
  1. 端口角色重构取消了 STP 的非指定端口,重新定义了 4 种端口角色,实现备份端口的快速切换:

    • 根端口 RP:与 STP 定义一致,非根桥接收根桥 BPDU 的最优端口。

    • 指定端口 DP:与 STP 定义一致,链路负责转发 BPDU 和业务数据的端口。

    • 替代端口(Alternate Port):根端口的备份端口,因收到其他设备更优的 BPDU 而被阻塞。当根端口故障时,替代端口会直接成为新的根端口,无需等待收敛时间,实现毫秒级切换。

    • 备份端口(Backup Port):指定端口的备份端口,因收到自身设备更优的 BPDU 而被阻塞。当指定端口故障时,备份端口会直接成为新的指定端口,快速进入转发状态。

  2. 端口状态简化将 STP 的 5 种状态简化为 3 种,逻辑更清晰:

    • 丢弃状态(Discarding):合并了 STP 的禁用、阻塞、侦听状态,不能转发业务数据,不进行 MAC 学习,仅能收发 BPDU。

    • 学习状态(Learning):与 STP 一致,进行 MAC 地址学习,不能转发业务数据。

    • 转发状态(Forwarding):与 STP 一致,正常转发业务数据,进行 MAC 学习和 BPDU 处理。

  3. 快速收敛机制

    • 边缘端口机制:连接终端的接口配置为边缘端口后,可直接进入转发状态,无需等待 Forward Delay 时间,同时边缘端口的 up/down 不会触发拓扑变更。

    • P/A 协商机制:点对点直连链路的两个端口,通过 Proposal/Agreement 报文快速协商,无需等待计时器,可直接进入转发状态,大幅缩短收敛时间。

    • 根端口 / 指定端口快速切换:根端口故障时,替代端口直接进入转发状态;指定端口故障时,备份端口直接进入转发状态,无需经过侦听、学习状态。

  4. 拓扑变更机制优化

    • 取消了 TCN BPDU 的逐跳上报机制,非根桥设备可直接向所有非边缘指定端口泛洪 TC 报文,无需等待根桥确认。

    • 拓扑变更时,仅清空发生变化的接口对应的 MAC 地址表项,而非全网缩短老化时间,大幅降低拓扑变更对全网的影响。

  5. 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 特性
  1. 多实例生成树:MSTP 可以将多个 VLAN 映射到同一个生成树实例(MSTI),每个实例独立计算一棵生成树,不同实例的根桥、阻塞端口可以不同。

  2. 流量负载分担:不同 VLAN 的流量可以走不同的生成树,实现冗余链路的流量负载分担,大幅提升链路带宽利用率。

  3. 向下兼容:完全兼容 STP 和 RSTP 协议,可与运行 STP/RSTP 的设备互通。

  4. VLAN 与生成树绑定:每个 VLAN 仅在对应的生成树实例中转发,避免了单生成树中所有 VLAN 共享一条转发路径的问题,同时实现了不同 VLAN 的二层隔离。

8.3.2 MSTP 优势
  • 解决了 STP/RSTP 单生成树的带宽浪费问题,冗余链路不再完全闲置,可实现流量分担。

  • 网络拓扑更灵活,可针对不同业务 VLAN 设计不同的转发路径,满足不同业务的转发需求。

  • 拓扑变更影响范围更小,单个实例的拓扑变化,不会影响其他实例的转发,网络稳定性更高。

相关推荐
speop2 小时前
TASK02 | Reasoning Kindom 符号的黎明——因果的第一次建模
学习
晓晓hh3 小时前
JavaSE学习——比较相关接口
学习
CC城子3 小时前
EtherCAT的igh学习与研究(二)
学习·ethercat
炽烈小老头3 小时前
【每天学习一点算法 2026/04/11】Pow(x, n)
学习·算法
旖-旎3 小时前
哈希表(存在重复元素)(3)
数据结构·c++·学习·算法·leetcode·散列表
weixin_513449963 小时前
walk_these_ways项目学习记录第九篇(通过行为多样性 (MoB) 实现地形泛化)--学习算法
学习·算法·机器学习
chh5634 小时前
C++--内存管理
java·c语言·c++·windows·学习·面试
CNemon4 小时前
《怎样学习文言文》溯源
学习
wayz115 小时前
21天机器学习核心算法学习计划(量化方向)
学习·算法·机器学习