XYCOVO CONSOLE KURISU · WEB 渗透 / AI 辅助攻防 ONLINE
#015 · 2025-05-01✓ PASS

生成树协议

STP 防环原理、根桥选举、端口角色与状态机、RSTP 快速收敛、MSTP 多实例负载均衡及华为交换机配置实战。
网络网络安全stprstpAUTHOR: KURISU

生成树协议(Spanning Tree Protocol)在保证交换网络冗余性的前提下消除二层环路,是构建可靠企业网络的基础技术。


一、为什么需要生成树协议

在交换网络中,为了提供冗余、提高可靠性,通常会设计冗余链路。但二层网络中的冗余链路会引发三个严重问题:

  • 广播风暴:广播帧在二层环路中形成顺时针和逆时针两个方向的无限循环,最终导致设备宕机、网络瘫痪
  • MAC 地址表翻摆(漂移):同一个数据帧从不同接口反复到达,导致 MAC 地址表内容持续被覆盖
  • 多帧复制:目的设备收到多份相同的帧

STP 的核心目标:在保留物理冗余的前提下,逻辑上阻塞某些端口,将网络计算为一棵无环的树


二、STP(802.1D)基础概念

2.1 桥 ID(Bridge ID)

桥 ID 用来在同一个二层网络中唯一标识一台交换机,共 8 字节:

| 桥优先级(2 字节)| 桥 MAC 地址(6 字节)|
  • 桥优先级:默认为 32768,修改时必须为 4096 的倍数,取值范围 0-61440
  • 桥 MAC 地址:使用交换机背板 MAC
  • 根网桥选举:拥有最小桥 ID 的交换机成为根网桥

桥优先级的前 4 个 bit 是真正的优先级,后 12 个 bit 在 MSTP 中用作扩展系统 ID 携带 Instance ID。

2.2 路径开销(Cost)

每个激活 STP 的接口都维护一个 Cost 值,主要用于计算 RPC(根路径开销)

RPC = 从根网桥到达目标节点所经过的所有接口的 Cost 数值之和

华为设备默认使用 802.1t 标准计算开销:

链路速率Cost 值
10 Mbps2000000
100 Mbps200000
1 Gbps20000
10 Gbps2000

2.3 接口 ID(Port ID)

接口 ID 共 16 bit:

| 接口优先级(4 bit)| 接口编号(12 bit)|
  • 接口优先级默认 128,必须是 16 的倍数,取值范围 0-240

三、STP 工作机制

STP 整个工作流程分为四个步骤:

3.1 选举根网桥

  • 选举范围:整个交换网络,有且仅有一个根网桥
  • 选举规则:桥 ID 最小的设备成为根网桥
  • 根网桥角色可抢占:如果新加入的设备拥有更小的桥 ID,将重新触发选举

根网桥的位置至关重要,STP 的一切工作都基于根网桥位置而定。在实际组网中,一般将汇聚层设备或网关设备定为根网桥(三点合一原则)。

3.2 选举根端口(Root Port)

在每一个非根网桥上,选举出一个最优接口成为根端口。根端口是设备上离根网桥最近的接口,负责接收 BPDU 报文。

最优 BPDU 比较原则(依次比较):

顺序比较项原则
1根网桥 ID越小越优
2RPC 数值越小越优
3对端 BID越小越优
4对端 PID越小越优
5本地 PID越小越优

3.3 选举指定端口(Designated Port)

  • 选举范围:每个网段中选举一个
  • 规则:该网段上到达根网桥最优的接口(即发出的 BPDU 报文最优)
  • 特点:根网桥上所有接口都是指定端口,指定端口负责向该网段转发 BPDU

3.4 阻塞非指定端口

除了根端口和指定端口以外的接口,在逻辑上被阻塞。被阻塞的接口:

  • 不接收也不转发业务数据
  • 不能发送 BPDU 报文
  • 可以接收周期性 BPDU 报文(用于感知拓扑变化)

四、BPDU 报文

STP 使用 BPDU(网桥协议数据单元) 进行通信,目标组播 MAC 地址为 0180-C200-0000

配置 BPDU

用于协商参数和保活:

关键字段说明
根网桥 ID当前根网桥的 BID
RPC到达根网桥的开销
发送者 BID发送此 BPDU 的交换机
发送者 PID发送接口的 ID
消息寿命(Message Age)类似 TTL,初始为 0,每经过一台交换机 +1,最大 20
最大寿命(Max Age)默认 20 秒,超时后认为网络故障
转发延迟(Forward Delay)默认 15 秒

TCN BPDU

拓扑变更通知 BPDU,用于在网络拓扑变化时向根网桥通告变更。


五、STP 端口状态机

STP 定义了五种端口状态:

状态收发 BPDU学习 MAC转发数据说明
阻塞(Blocking)可接收(不发送)激活 STP 后的第一个状态
侦听(Listening)完成所有角色选举
学习(Learning)构建 MAC 地址表
转发(Forwarding)正常转发数据
禁用(Disabled)管理性关闭

收敛时间

场景时间说明
首次收敛50s20s MaxAge + 15s Listening + 15s Learning
根网桥故障50s同上
直连链路故障30s交换机立即感知,直接进入 Listening(15s + 15s)
非直连链路故障50s需等待 MaxAge 超时

六、RSTP(802.1w)快速生成树

RSTP 解决了 STP 的三大缺陷:收敛速度慢、链路利用率低、端口角色单一。

6.1 端口角色改进

STP 端口角色RSTP 端口角色说明
根端口(RP)根端口(RP)保持不变
指定端口(DP)指定端口(DP)保持不变
非指定端口替代端口(AP)根端口的备份,收到其他设备 BPDU 而被阻塞
-备份端口(BP)指定端口的备份,收到自己 BPDU 而被阻塞

一台非根网桥只有一个根端口,替代端口可以有多个。当根端口故障,最优的替代端口立即成为新的根端口。

6.2 端口状态精简

STP 五种状态缩减为三种:

STP 状态:Blocking → Listening → Learning → Forwarding
RSTP 状态:Discarding → Learning → Forwarding

Blocking、Disabled、Listening 统一合并为 Discarding(丢弃) 状态。

6.3 P/A 机制(提议/同意)

P/A 机制是 RSTP 快速收敛的核心:

  1. 设备发送 P 标记位置位的 BPDU(提议),请求将接口切换为转发状态
  2. 对端收到后,将本地除接收接口以外的所有接口切换为丢弃状态(同步过程),确保本地无环
  3. 同步完成后,对端回复 A 标记位置位的 BPDU(同意),并将该接口切换为转发状态
  4. 上游设备收到 A 标记后,将接口切换为转发状态

逐跳执行 P/A 机制,实现秒级收敛。

6.4 边缘端口(Edge Port)

连接终端设备(PC、服务器)的端口:

  • 激活后立即切换为转发状态,无需等待
  • 端口 up/down 不触发拓扑变更
  • 收到 BPDU 后丧失边缘端口特性,重新参与 STP 计算

6.5 STP 保护功能

保护类型作用配置命令
BPDU 保护边缘端口收到 BPDU 则立即关闭接口stp bpdu-protection
根保护根网桥收到更优 BPDU 时忽略,保护根桥角色stp root-protection
环路保护单向链路故障时维持阻塞状态,防止环路stp loop-protection
TC 保护限制单位时间内处理 TC 报文的次数stp tc-protection

七、MSTP(802.1s)多生成树协议

7.1 为什么需要 MSTP

STP/RSTP 所有 VLAN 共享一棵生成树,无法在不同 VLAN 间实现流量负载均衡,导致链路带宽利用率低。

MSTP 的核心思路:将一组 VLAN 映射到一个实例(Instance),每个实例独立计算一棵生成树,不同实例的根桥可以不同,从而实现负载均衡。

7.2 核心概念

概念说明
Instance ID12 bit,范围 0-4094;实例 0 默认存在,所有 VLAN 默认属于实例 0
MSTI基于 Instance 的生成树实例
MST 域拥有相同域名、VLAN-实例映射关系、修订等级的 MSTP 交换机集合
扩展系统 IDBID 中后 12 bit 专门用来携带 Instance ID

7.3 MSTP 域规则

同一 MST 域的设备必须满足:

  • 都启动了 MSTP 协议
  • 具有相同的域名
  • 具有相同的 VLAN 到实例映射关系
  • 具有相同的修订等级

7.4 负载均衡设计

通过在域内不同实例中设置不同的根桥,实现 VLAN 流量分流:

          实例 1(VLAN 1-10):SW1 为主根,SW2 为备根
          实例 2(VLAN 11-20):SW2 为主根,SW1 为备根
          
          VLAN 1-10 流量走 SW1,VLAN 11-20 流量走 SW2

八、配置命令实战

8.1 STP 基础配置

# 启用 STP(华为设备默认启用)
[SW] stp enable

# 设置 STP 模式
[SW] stp mode stp    # STP (802.1D)
[SW] stp mode rstp   # RSTP (802.1w)
[SW] stp mode mstp   # MSTP (802.1s) — 华为默认

# 查看 STP 状态
display stp
display stp brief

# 查看桥 MAC 地址
display bridge mac-address

8.2 根桥控制

# 设置主根桥(优先级自动设为 0)
[SW] stp root primary

# 设置备用根桥(优先级自动设为 4096)
[SW] stp root secondary

# 手动设置优先级(步长 4096)
[SW] stp priority 8192

8.3 接口级配置

# 修改接口 Cost
[SW-GigabitEthernet0/0/1] stp cost 10000

# 修改接口优先级(步长 16)
[SW-GigabitEthernet0/0/1] stp port priority 32

# 启用边缘端口
[SW-GigabitEthernet0/0/1] stp edged-port enable

# BPDU 过滤(常与边缘端口配合使用)
[SW-GigabitEthernet0/0/1] stp bpdu-filter enable

# 修改开销算法
[SW] stp pathcost-standard dot1t

8.4 RSTP 保护功能配置

# 全局启用 BPDU 保护
[SW] stp bpdu-protection

# 接口启用根保护(指定端口上配置)
[SW-GigabitEthernet0/0/1] stp root-protection

# 接口启用环路保护
[SW-GigabitEthernet0/0/1] stp loop-protection

# TC 保护(限制 TC 报文处理次数)
[SW] stp tc-protection
[SW] stp tc-protection threshold 10

8.5 MSTP 完整配置示例

实验拓扑

       [SW1] ═══════════ [SW2] ═══════════ [SW3]
        │                                    │
        └────────────────────────────────────┘
           实例 1(VLAN 1-10):SW1 为主根
           实例 2(VLAN 11-20):SW2 为主根

配置步骤

# ============ 所有交换机:创建 VLAN ============
[sw1] vlan batch 1 to 20
[sw2] vlan batch 1 to 20
[sw3] vlan batch 1 to 20

# ============ 所有交换机:配置 Trunk ============
# SW1
[sw1] interface GigabitEthernet 0/0/1
[sw1-GigabitEthernet0/0/1] port link-type trunk
[sw1-GigabitEthernet0/0/1] port trunk allow-pass vlan 1 to 20
[sw1-GigabitEthernet0/0/1] quit
[sw1] interface GigabitEthernet 0/0/2
[sw1-GigabitEthernet0/0/2] port link-type trunk
[sw1-GigabitEthernet0/0/2] port trunk allow-pass vlan 1 to 20
[sw1-GigabitEthernet0/0/2] quit

# SW2 和 SW3 类似,配置所有互联端口为 Trunk

# ============ 所有交换机:配置 MSTP ============
[sw1] stp mode mstp
[sw1] stp enable
[sw1] stp region-configuration
[sw1-mst-region] region-name HCIP
[sw1-mst-region] instance 1 vlan 1 to 10
[sw1-mst-region] instance 2 vlan 11 to 20
[sw1-mst-region] revision-level 0
[sw1-mst-region] active region-configuration
[sw1-mst-region] quit

# SW2、SW3 必须配置相同的 MST 域信息
# (region-name、instance 映射、revision-level 必须一致)

# ============ 设置各实例的根桥 ============
# SW1 作为实例 1 的根桥
[sw1] stp instance 1 root primary
[sw1] stp instance 2 root secondary

# SW2 作为实例 2 的根桥
[sw2] stp instance 2 root primary
[sw2] stp instance 1 root secondary

# ============ 验证配置 ============
display stp region-configuration
display stp instance 1 brief
display stp instance 2 brief

查看 MST 域配置

[sw1] display stp region-configuration
 Oper configuration
   Format selector    : 0
   Region name        : HCIP
   Revision level     : 0
   Instance   VLANs Mapped
      0       21 to 4094
      1       1 to 10
      2       11 to 20

九、协议对比总结

特性STP (802.1D)RSTP (802.1w)MSTP (802.1s)
收敛速度慢(30-50s)快(秒级)快(秒级)
端口角色RP / DP / BlockingRP / DP / AP / BPRP / DP / AP / BP
端口状态5 种3 种3 种
收敛机制计时器P/A + 快速切换P/A + 快速切换
负载均衡不支持不支持支持(多实例)
VLAN 感知基于 Instance 管理 VLAN
BPDU 发送仅根桥所有设备所有设备

十、STP 设计最佳实践

  1. 根桥位置:将汇聚层或核心层设备设为根桥,遵循”三点合一”(根桥 = 网关 = 核心设备)
  2. 边缘端口:所有连接终端设备的端口均应配置 stp edged-port enable
  3. BPDU 保护:全局启用 stp bpdu-protection,防止非法交换机接入导致网络震荡
  4. 环路保护:在关键链路开启 stp loop-protection,防止单向链路故障引发环路
  5. MSTP 实例规划:合理规划 VLAN 到 Instance 的映射,实现流量的负载均衡
  6. 修订等级一致性:MST 域内所有设备的修订等级必须相同

← #014 链路聚合…#016 Nmap 端口扫描实战笔记… →