Skip to content
Kurisu
Go back

生成树协议

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

二层冗余链路的三个问题:

目标:逻辑阻塞部分端口,把网络算成无环的树。

二、STP(802.1D)基础概念

2.1 桥 ID(Bridge ID)

桥 ID 唯一标识一台交换机,共 8 字节:

| 桥优先级(2 字节)| 桥 MAC 地址(6 字节)|

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

2.2 路径开销(Cost)

接口的 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)|

三、STP 工作机制

3.1 选举根网桥

一般将汇聚层/网关设备定为根网桥(三点合一)。

3.2 选举根端口(Root Port)

每个非根网桥上选离根网桥最近的接口作根端口,收 BPDU。

最优 BPDU 比较(依次):

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

3.3 选举指定端口(Designated Port)

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

向根网桥通告拓扑变更。

五、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 而被阻塞

非根网桥只有一个根端口,替代端口可多个;根端口故障时最优 AP 立即接管。

6.2 端口状态精简

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

三者合并为 Discarding(丢弃)。

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

  1. 发送 P 置位 BPDU(提议),请求接口切为转发
  2. 对端把本地除接收口外的接口切为丢弃(同步),确保无环
  3. 同步后回 A 置位 BPDU(同意),该接口切为转发
  4. 上游收到 A 标记后同样切为转发

逐跳执行 P/A,秒级收敛。

6.4 边缘端口(Edge Port)

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 域规则

同域设备必须:都启用 MSTP、域名相同、VLAN-实例映射相同、修订等级相同。

7.4 负载均衡设计

不同实例设不同根桥,实现分流:

          实例 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. 实例规划:VLAN-Instance 映射做负载均衡
  6. 修订等级:域内所有设备必须一致

Share this post:

Previous Post
Nmap 端口扫描实战
Next Post
链路聚合