Skip to content

STP 生成树协议原理与华为交换机配置实操 ​

一、为什么需要 STP:二层环路问题 ​

STP(Spanning Tree Protocol,生成树协议) 用于在存在冗余链路的二层网络中,通过阻塞部分端口,把物理有环的拓扑修剪成逻辑无环的树,同时保留备份链路——故障时自动切换,实现链路冗余。

二层环路的三大危害:

  1. 广播风暴:以太网帧没有 TTL 字段,广播帧在环路中被交换机不断复制转发,呈指数级增长,瞬间耗尽带宽与 CPU;
  2. MAC 地址表震荡:同一主机的 MAC 在交换机的不同端口间反复"漂移",MAC 表不断刷新,无法正常查表转发;
  3. 重复帧接收:同一单播帧经多条路径到达目的地,接收方收到多份副本,上层协议状态可能错乱。

三层 IP 报文有 TTL 逐跳递减防环;而二层帧没有类似机制,环路必须靠 STP 在逻辑上"剪枝"解决。BPDU 中还携带 TC/TCN 报文用于通告拓扑变化:STP 收到后把 MAC 表老化时间缩短为 Forward Delay,RSTP/MSTP 则快速刷新 MAC 表。

二、STP(802.1D)核心概念 ​

2.1 桥 ID 与 BPDU ​

概念说明
桥 ID(Bridge ID)桥优先级(默认 32768)+ 设备 MAC 地址,全网标识一台交换机
BPDU桥协议数据单元,目的组播地址 01-80-C2-00-00-00,每 2 秒发送一次
根桥生成树的"树根",全网唯一
根端口(RP)非根桥上"离根最近"的端口,每台非根桥有且只有一个
指定端口(DP)每条链路上负责向该链路转发数据的端口,根桥所有端口都是指定端口
非指定端口既非根端口也非指定端口,被逻辑阻塞(Discarding),不转发数据

BPDU 关键字段:根桥 ID、根路径开销、发送者桥 ID、发送端口 ID、Hello Time / Max Age / Forward Delay。

2.2 路径开销(RPC,Root Path Cost) ​

端口到根桥沿途开销的累加。华为交换机支持三种开销标准(stp pathcost-standard 指定,默认 dot1t):

端口速率802.1D-1998华为私有 legacy802.1T(默认)
10 Mbps10020002000000
100 Mbps19200200000
1 Gbps42020000
10 Gbps222000

2.3 三个定时器 ​

定时器默认值作用
Hello Time2s根桥周期性发送 BPDU 的间隔
Max Age20sBPDU 的存活时间,超时判定上游/链路故障
Forward Delay15s端口经过 Listening、Learning 状态的停留时间

收敛时间:端口从阻塞到转发需 Listening(15s) + Learning(15s) = 30 秒;链路故障需先等待 Max Age 感知,最坏情况 30~50 秒。

2.4 端口状态机 ​

状态收发 BPDU学习 MAC转发数据
Disabled×××
Blocking只收××
Listening收发××
Learning收发√×
Forwarding收发√√

三、生成树选举:四步走 ​

  1. 选根桥:全网比较桥 ID——优先级越小越优;优先级相同比 MAC,越小越优;
  2. 每台非根桥选一个根端口,依次比较:
    1. 根路径开销最小;
    2. 对端(上游)桥 ID 最小;
    3. 对端端口 ID 最小;
    4. 本端端口 ID 最小;
  3. 每条链路选一个指定端口:根桥端口必为指定端口;非根桥之间依次比较根路径开销 → 桥 ID → 端口 ID,最优者胜出;
  4. 剩余端口阻塞:既非根端口也非指定端口的端口进入 Discarding,破除环路。

判断顺序口诀:先比开销,再比桥 ID,最后比端口 ID(前一项相同才比下一项)。

四、RSTP(802.1w)快速生成树 ​

STP 收敛太慢(30~50 秒),RSTP 通过以下机制把收敛缩短到秒级:

改进点说明
端口状态简化5 种 → 3 种:Discarding、Learning、Forwarding
新增端口角色Alternate(根端口的备份)、Backup(指定端口的备份)
P/A 快速协商握手式 Proposal/Agreement,指定端口可跳过定时器直接进入 Forwarding
边缘端口接终端的端口不参与计算,立即进入转发
故障快速切换根端口故障时 Alternate 立即顶替,无需等待 Max Age

RSTP 向下兼容 STP:端口收到传统 STP BPDU 后按 STP 方式慢速收敛,混用时快速特性失效,工程上应全网统一。

五、MSTP(802.1s)多生成树 ​

RSTP 仍是"单树"——所有 VLAN 共用一棵树,备份链路完全闲置。MSTP 的核心价值:多个 VLAN 映射到多个实例,每个实例独立计算一棵树,实现负载分担。

  • MST 域(Region):由三要素唯一确定——域名、修订级别、VLAN 与实例映射表;三要素完全相同才属于同一域;
  • 实例(Instance):多个 VLAN 的集合;实例 0 即 CIST(公共与内部生成树),负责连通所有域;
  • 华为交换机默认工作在 MSTP 模式。

六、华为交换机 STP 基础配置 ​

6.1 全局配置 ​

text
<HTSw> system-view
[SW1] stp mode mstp                 # 生成树模式:stp / rstp / mstp(默认 mstp)
[SW1] stp enable                    # 全局开启 STP(默认已开启)

# 指定根桥(推荐方式)
[SW1] stp root primary              # 主根:优先级自动置 0
[SW2] stp root secondary            # 备份根:优先级自动置 4096

# 或手动调整优先级(取值 0 或 4096 的倍数,范围 0~61440)
[SW1] stp priority 4096

# 网络直径联动调整三个定时器(推荐,代替手工改定时器)
[SW1] stp bridge-diameter 4         # 任意两台设备间的最大跳数

手工调整定时器(单位为厘秒,一般不建议直接修改):

text
[SW1] stp timer hello 200           # Hello Time 2 秒
[SW1] stp timer max-age 2000        # Max Age 20 秒
[SW1] stp timer forward-delay 1500  # Forward Delay 15 秒

6.2 端口级配置 ​

text
[SW1] interface GigabitEthernet 0/0/1
[SW1-GigabitEthernet0/0/1] stp cost 20000          # 手工指定端口开销(干预选路)
[SW1-GigabitEthernet0/0/1] stp edged-port enable   # 边缘端口(只接终端,不接交换机)
[SW1-GigabitEthernet0/0/1] quit

6.3 STP 安全保护 ​

text
# 边缘端口 + BPDU 保护:防私接交换机形成环路
[SW1] stp bpdu-protection                           # 全局开启
# 效果:边缘端口收到 BPDU 后立即 shutdown,需 undo shutdown 手工恢复

# 根保护:防止下游设备发送更优 BPDU 抢占根桥
[SW1] interface GigabitEthernet 0/0/24
[SW1-GigabitEthernet0/0/24] stp root-protection     # 收到更优 BPDU 时该口进入 Discarding
[SW1-GigabitEthernet0/0/24] quit

# TC 保护:限制 TC 报文的处理频率,防拓扑变化攻击
[SW1] stp tc-protection

七、MSTP 负载分担完整实验 ​

7.1 实验拓扑 ​

text
              SW1(汇聚层)
             /            \
   GE0/0/24 ↔ GE0/0/24   GE0/0/23 ↔ GE0/0/24
           /                  \
         SW2 ══ GE0/0/23 ↔ GE0/0/23 ══ SW3

链路 1:SW1 GE0/0/24 ↔ SW2 GE0/0/24
链路 2:SW1 GE0/0/23 ↔ SW3 GE0/0/24
链路 3:SW2 GE0/0/23 ↔ SW3 GE0/0/23

PC1(VLAN10,192.168.10.11/24)接 SW3 GE0/0/1
PC2(VLAN10,192.168.10.12/24)接 SW1 GE0/0/1

目标:
- 实例 1(VLAN10):SW1 为根,VLAN10 流量走 SW3→SW1 直连链路
- 实例 2(VLAN20):SW2 为根,VLAN20 流量走 SW3→SW2 直连链路
- 两条上联链路同时利用,实现负载分担;任一链路故障自动切换

7.2 SW1 完整配置 ​

text
<HTSw> system-view
[HTSw] sysname SW1
[SW1] stp mode mstp
[SW1] vlan batch 10 20

# MST 域配置(三台必须完全一致)
[SW1] stp region-configuration
[SW1-mst-region] region-name RG1
[SW1-mst-region] revision-level 1
[SW1-mst-region] instance 1 vlan 10
[SW1-mst-region] instance 2 vlan 20
[SW1-mst-region] active region-configuration       # 激活域配置(必须执行)
[SW1-mst-region] quit

# 根桥角色
[SW1] stp instance 1 root primary                  # 实例 1 主根
[SW1] stp instance 2 root secondary                # 实例 2 备根

# 互联 Trunk
[SW1] interface GigabitEthernet 0/0/24
[SW1-GigabitEthernet0/0/24] port link-type trunk
[SW1-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20
[SW1-GigabitEthernet0/0/24] quit
[SW1] interface GigabitEthernet 0/0/23
[SW1-GigabitEthernet0/0/23] port link-type trunk
[SW1-GigabitEthernet0/0/23] port trunk allow-pass vlan 10 20
[SW1-GigabitEthernet0/0/23] quit

# 终端接入(边缘端口)
[SW1] interface GigabitEthernet 0/0/1
[SW1-GigabitEthernet0/0/1] port link-type access
[SW1-GigabitEthernet0/0/1] port default vlan 10
[SW1-GigabitEthernet0/0/1] stp edged-port enable
[SW1-GigabitEthernet0/0/1] quit
[SW1] stp bpdu-protection

7.3 SW2 完整配置 ​

text
<HTSw> system-view
[HTSw] sysname SW2
[SW2] stp mode mstp
[SW2] vlan batch 10 20

[SW2] stp region-configuration
[SW2-mst-region] region-name RG1
[SW2-mst-region] revision-level 1
[SW2-mst-region] instance 1 vlan 10
[SW2-mst-region] instance 2 vlan 20
[SW2-mst-region] active region-configuration
[SW2-mst-region] quit

[SW2] stp instance 2 root primary                  # 实例 2 主根
[SW2] stp instance 1 root secondary                # 实例 1 备根

[SW2] interface GigabitEthernet 0/0/24
[SW2-GigabitEthernet0/0/24] port link-type trunk
[SW2-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20
[SW2-GigabitEthernet0/0/24] quit
[SW2] interface GigabitEthernet 0/0/23
[SW2-GigabitEthernet0/0/23] port link-type trunk
[SW2-GigabitEthernet0/0/23] port trunk allow-pass vlan 10 20
[SW2-GigabitEthernet0/0/23] quit

7.4 SW3 完整配置 ​

text
<HTSw> system-view
[HTSw] sysname SW3
[SW3] stp mode mstp
[SW3] vlan batch 10 20

[SW3] stp region-configuration
[SW3-mst-region] region-name RG1
[SW3-mst-region] revision-level 1
[SW3-mst-region] instance 1 vlan 10
[SW3-mst-region] instance 2 vlan 20
[SW3-mst-region] active region-configuration
[SW3-mst-region] quit

# 接入层设备不指定根桥(保持默认优先级 32768)

[SW3] interface GigabitEthernet 0/0/24
[SW3-GigabitEthernet0/0/24] port link-type trunk
[SW3-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20
[SW3-GigabitEthernet0/0/24] quit
[SW3] interface GigabitEthernet 0/0/23
[SW3-GigabitEthernet0/0/23] port link-type trunk
[SW3-GigabitEthernet0/0/23] port trunk allow-pass vlan 10 20
[SW3-GigabitEthernet0/0/23] quit

[SW3] interface GigabitEthernet 0/0/1
[SW3-GigabitEthernet0/0/1] port link-type access
[SW3-GigabitEthernet0/0/1] port default vlan 10
[SW3-GigabitEthernet0/0/1] stp edged-port enable
[SW3-GigabitEthernet0/0/1] quit
[SW3] stp bpdu-protection

7.5 验证 ​

text
[SW1] display stp brief                            # 查看 CIST 各端口角色与状态
[SW3] display stp instance 1 brief                 # 查看实例 1 的端口角色
[SW3] display stp instance 2 brief                 # 查看实例 2 的端口角色
[SW1] display stp root                             # 查看根桥信息
[SW1] display stp region-configuration             # 查看 MST 域配置
[SW1] display stp statistics                       # 查看 BPDU 收发统计

预期结果(各链路速率相同、开销为默认值时):

  • 实例 1:SW3 的根端口为 GE0/0/24(经 SW1,上游桥 ID 更优);GE0/0/23 显示 ALTE / DISCARDING(阻塞);
  • 实例 2:SW3 的根端口为 GE0/0/23(经 SW2);GE0/0/24 显示 ALTE / DISCARDING(阻塞);
  • PC1 ping PC2 正常通,VLAN10 流量走 SW3→SW1 直连链路。

业务连通性验证:

text
PC1> ping 192.168.10.12            # 通:VLAN10 经生成树转发

故障切换验证:

text
# 断开 SW1 与 SW3 之间的链路(关闭 SW3 的 GE0/0/24 模拟)
[SW3] interface GigabitEthernet 0/0/24
[SW3-GigabitEthernet0/0/24] shutdown
[SW3-GigabitEthernet0/0/24] quit

[SW3] display stp instance 1 brief
# 预期:实例 1 的 GE0/0/23 由 ALTE/DISCARDING 切换为 ROOT/FORWARDING
# 实例 1 收敛期间 PC1 短暂丢包后恢复 ping 192.168.10.12

# 恢复链路后自动回切
[SW3] interface GigabitEthernet 0/0/24
[SW3-GigabitEthernet0/0/24] undo shutdown

若要强制某链路优先使用,可手工调开销:stp cost,开销小者优先。

八、常用查看与排错命令 ​

命令作用
display stp brief查看端口角色与状态速览(含端口角色缩写 DESI/ROOT/ALTE/BACKUP)
display stp instance 1 brief查看指定实例的端口角色与状态
display stp root查看根桥信息(根桥 ID、优先级、MAC)
display stp查看端口详细生成树信息(BPDU、定时器、开销)
display stp region-configuration查看 MST 域配置
display stp statistics查看 BPDU 收发统计

排错思路:先 display stp brief 看根桥与端口角色是否符合规划 → display stp root 确认根桥位置 → 不符时检查优先级、域三要素一致性、端口开销 → 最后检查链路物理状态(display interface brief)。

九、常见问题与注意事项 ​

  1. 边缘端口必须配 BPDU 保护:边缘端口不收发 BPDU 且直接转发,若用户私接交换机极易形成环路,开启 stp bpdu-protection 后收到 BPDU 即 shutdown;
  2. MST 域三要素不一致:域名、修订级别、VLAN 映射表任一不同,设备会被视为不同域并按域边界处理,无法实现预期的负载分担;
  3. 忘记执行 active region-configuration:域配置停留在草稿状态不生效;
  4. 根桥位置规划:根桥应设在汇聚/核心层高速稳定设备,避免接入层低速设备当选根桥导致流量绕路;
  5. 优先级取值限制:stp priority 只能配 0 或 4096 的倍数(0~61440),默认 32768;
  6. 模式混用:与仅支持 STP 的设备对接会协商降级,失去快速收敛与多实例能力,工程上全网统一 MSTP;
  7. 定时器调整:一般不手工改 Hello/Max Age/Forward Delay,推荐用 stp bridge-diameter 联动调整;
  8. 配置保存:STP 配置同样需要 save 持久化,否则重启丢失。

十、面试问答 ​

  1. STP 的作用? 在有冗余链路的二层网络中通过阻塞部分端口构建无环树,防止广播风暴与 MAC 表震荡;链路故障时自动启用备份链路,兼顾可靠性与无环。
  2. 根桥如何选举? 比较桥 ID(优先级 + MAC):优先级越小越优,相同则 MAC 越小越优;华为默认优先级 32768,建议直接用 stp root primary 置 0。
  3. 根端口与指定端口如何选举? 根端口依次比较:根路径开销 → 对端桥 ID → 对端端口 ID → 本端端口 ID;指定端口在每条链路上比较:根路径开销 → 桥 ID → 端口 ID。
  4. STP 与 RSTP 的区别? 收敛速度(30~50 秒 vs 秒级);端口状态(5 种 vs 3 种);RSTP 新增 Alternate/Backup 端口角色、P/A 快速协商与边缘端口机制。
  5. MSTP 相比 RSTP 的优势? 多个 VLAN 映射到多个实例独立计算生成树,实现 VLAN 级负载分担,备份链路不再闲置;域内独立计算、域间通过 CST 互联。
  6. 为什么二层需要 STP 而三层不需要? IP 报文有 TTL 逐跳递减防环;以太网帧无 TTL 字段,广播帧会在环路中无限复制,必须靠协议逻辑破环。
  7. 边缘端口为什么有风险?如何防护? 边缘端口不参与 STP、直接进入转发,若接了交换机可形成环路;配合全局 stp bpdu-protection,边缘口一旦收到 BPDU 立即被 shutdown 并告警。

十一、记忆技巧 ​

  • 选举四步:先选根桥 → 非根桥选根口 → 每链路选指定口 → 剩余端口全部堵;
  • 比较三要素:开销 → 桥 ID → 端口 ID(依次往下比,小的胜出);
  • 收敛时间:2×Forward Delay = 30 秒;故障感知再加 Max Age,最坏 50 秒;
  • RSTP 三态:丢、学、转(Discarding / Learning / Forwarding);
  • MST 域三要素:名字、版本、映射表(region-name / revision-level / instance-vlan 映射);
  • 华为根桥两条命令:stp root primary(优先级 0)、stp root secondary(优先级 4096);
  • 安全三件套:边缘端口 + BPDU 保护、根保护、TC 保护。