一、为什么需要生成树协议
二层冗余链路的三个问题:
- 广播风暴:广播帧在环路无限循环,设备宕机、网络瘫痪
- MAC 表翻摆:同一帧从不同接口反复到达,表项持续被覆盖
- 多帧复制:目的设备收到多份相同的帧
目标:逻辑阻塞部分端口,把网络算成无环的树。
二、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)
接口的 Cost 值用于计算 RPC(根路径开销):
RPC = 从根网桥到达目标节点所经过的所有接口的 Cost 数值之和
华为默认按 802.1t 标准算:
| 链路速率 | Cost 值 |
|---|---|
| 10 Mbps | 2000000 |
| 100 Mbps | 200000 |
| 1 Gbps | 20000 |
| 10 Gbps | 2000 |
2.3 接口 ID(Port ID)
接口 ID 共 16 bit:
| 接口优先级(4 bit)| 接口编号(12 bit)|
- 默认 128,须为 16 的倍数,范围 0-240
三、STP 工作机制
3.1 选举根网桥
- 范围:全网仅一个根网桥
- 规则:桥 ID 最小者胜出
- 可抢占:桥 ID 更小的新设备触发重选
一般将汇聚层/网关设备定为根网桥(三点合一)。
3.2 选举根端口(Root Port)
每个非根网桥上选离根网桥最近的接口作根端口,收 BPDU。
最优 BPDU 比较(依次):
| 顺序 | 比较项 | 原则 |
|---|---|---|
| 1 | 根网桥 ID | 越小越优 |
| 2 | RPC 数值 | 越小越优 |
| 3 | 对端 BID | 越小越优 |
| 4 | 对端 PID | 越小越优 |
| 5 | 本地 PID | 越小越优 |
3.3 选举指定端口(Designated Port)
- 范围:每个网段一个
- 规则:到根网桥最优(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
向根网桥通告拓扑变更。
五、STP 端口状态机
| 状态 | 收发 BPDU | 学习 MAC | 转发数据 | 说明 |
|---|---|---|---|---|
| 阻塞(Blocking) | 可接收(不发送) | 否 | 否 | 激活 STP 后的第一个状态 |
| 侦听(Listening) | 是 | 否 | 否 | 完成所有角色选举 |
| 学习(Learning) | 是 | 是 | 否 | 构建 MAC 地址表 |
| 转发(Forwarding) | 是 | 是 | 是 | 正常转发数据 |
| 禁用(Disabled) | 否 | 否 | 否 | 管理性关闭 |
收敛时间
| 场景 | 时间 | 说明 |
|---|---|---|
| 首次收敛 | 50s | 20s 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 机制(提议/同意)
- 发送 P 置位 BPDU(提议),请求接口切为转发
- 对端把本地除接收口外的接口切为丢弃(同步),确保无环
- 同步后回 A 置位 BPDU(同意),该接口切为转发
- 上游收到 A 标记后同样切为转发
逐跳执行 P/A,秒级收敛。
6.4 边缘端口(Edge Port)
- 激活后立即转发,无需等待
- 端口 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 ID | 12 bit,范围 0-4094;实例 0 默认存在,所有 VLAN 默认属于实例 0 |
| MSTI | 基于 Instance 的生成树实例 |
| MST 域 | 拥有相同域名、VLAN-实例映射关系、修订等级的 MSTP 交换机集合 |
| 扩展系统 ID | BID 中后 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 / Blocking | RP / DP / AP / BP | RP / DP / AP / BP |
| 端口状态 | 5 种 | 3 种 | 3 种 |
| 收敛机制 | 计时器 | P/A + 快速切换 | P/A + 快速切换 |
| 负载均衡 | 不支持 | 不支持 | 支持(多实例) |
| VLAN 感知 | 无 | 无 | 基于 Instance 管理 VLAN |
| BPDU 发送 | 仅根桥 | 所有设备 | 所有设备 |
十、STP 设计最佳实践
- 根桥位置:汇聚/核心层设备作根桥(三点合一)
- 边缘端口:终端端口均配
stp edged-port enable - BPDU 保护:全局
stp bpdu-protection - 环路保护:关键链路
stp loop-protection - 实例规划:VLAN-Instance 映射做负载均衡
- 修订等级:域内所有设备必须一致