第19篇:MSTP 多实例生成树:VLAN 与实例的映射
关键词:MSTP、802.1s、MSTI、CIST、VLAN映射、多实例、负载分担、区域
一、引言
RSTP 解决了快速收敛的问题,但它依然有一个先天局限:整个网络只有一棵生成树,无论有多少 VLAN,所有 VLAN 都共享同一棵生成树和同一组转发路径。这意味着,即使部署了双上行链路,也只能使用其中一条,另一条被 STP 阻塞,造成浪费。MSTP(Multiple Spanning Tree Protocol,IEEE 802.1s)通过多实例机制解决该问题:MSTP 把多个 VLAN 映射到不同的生成树实例,让不同的 VLAN 走不同的路径。
二、核心概念
2.1 MSTP 的层次结构
MSTP 包含两层架构:内部生成树(CIST)和多实例生成树(MSTI)。
| 层次 | 说明 | 编号 |
|---|---|---|
| CIST(Common and Internal Spanning Tree) | 全网唯一一棵公共生成树 | 1 个(Instance 0) |
| MSTI(Multiple Spanning Tree Instance) | 每个实例独立计算,映射不同 VLAN | 最多 64 个(Instance 1~64) |

2.2 VLAN 与 MSTI 的映射
每个 VLAN 只能被映射到一个 MSTI,不同的 MSTI 拥有不同的根桥和不同的路径。
| MSTI | 映射 VLAN | 根桥 | 转发路径 |
|---|---|---|---|
| IST(实例 0) | 所有未映射 VLAN,默认 VLAN 1 | 全网统一 | 全网统一 |
| MSTI 1 | VLAN 10, 20 | 核心交换机 A | 主用路径 A |
| MSTI 2 | VLAN 30, 40 | 核心交换机 B | 主用路径 B |
2.3 MST 区域(MST Region)
MSTP 把网络划分为区域:同一区域内所有交换机的配置必须完全一致。
| 配置项 | 说明 | 一致性要求 |
|---|---|---|
| 区域名称(Region Name) | 区域的标识名 | 区域内必须相同 |
| 修订号(Revision Level) | 配置版本号 | 区域内必须相同 |
| VLAN 与实例映射表 | VLAN 与 MSTI 的映射关系 | 区域内必须完全相同 |
配置不一致的后果:两台相邻交换机如果三项配置任意一项不一致,会被认为是不同区域,它们之间按 IST 交互(等效于实例 0 的 RSTP),多实例负载分担失效。
# 配置 MST 区域
[HUAWEI] stp region-configuration
[HUAWEI-mst-region] region-name Region-A
[HUAWEI-mst-region] revision-number 1
[HUAWEI-mst-region] instance 1 vlan 10 20
[HUAWEI-mst-region] instance 2 vlan 30 40
[HUAWEI-mst-region] active region-configuration
# 注意:必须执行 active 命令使配置生效
2.4 MSTP 的优势
| 维度 | 单实例 RSTP | 多实例 MSTP |
|---|---|---|
| 链路利用率 | 一半链路(其余被阻塞) | 多条链路被不同 VLAN 分摊 |
| 负载分担 | 不支持 | 支持(按 VLAN 映射到不同实例) |
| 阻塞链路 | 约 50% 冗余链路被浪费 | 全部链路都能承载流量 |
| 路径选择 | 所有 VLAN 共用同一棵树 | 不同实例可走不同路径 |
| 收敛时间 | 秒级 | 秒级(继承 RSTP 快速收敛) |
| 配置复杂度 | 低(单实例) | 中(需维护区域与映射表) |
三、技术细节
3.1 MSTP 多实例的负载分担

3.2 MSTP 实例优先级设置
| 命令 | 说明 |
|---|---|
stp instance 1 priority 4096 |
使本设备成为实例 1 的根桥 |
stp instance 1 root primary |
直接设为实例 1 的主根桥 |
stp instance 1 root secondary |
直接设为实例 1 的备份根桥 |
# 核心交换机 A(实例 1 的主根)
[Core-A] stp instance 1 root primary
[Core-A] stp instance 2 root secondary
# 核心交换机 B(实例 2 的主根)
[Core-B] stp instance 1 root secondary
[Core-B] stp instance 2 root primary
3.3 MSTP 端口角色与实例
MSTP 中,每个实例都有独立的端口角色:
| 角色(CIST 视角) | 角色(MSTI 视角) | 说明 |
|---|---|---|
| 根端口(Root Port) | 主根端口(M-RP) | CIST 计算出的根端口 |
| 指定端口(Designated Port) | 主指定端口(M-DP) | CIST 计算出的指定端口 |
| 替代端口(Alternate Port) | 替代端口 | 备份根端口 |
| 备份端口(Backup Port) | 备份端口 | 备份指定端口 |
| 无 | 附加根端口(A-RP) | MSTI 自身的根端口,可能与 CIST 不同 |
| 无 | 附加指定端口(A-DP) | MSTI 自身的指定端口,可能与 CIST 不同 |
说明:M-RP/M-DP 是 CIST 视角下的端口角色(继承自 CIST 的选举结果);A-RP/A-DP 是 MSTI 独有的附加角色,仅在 MSTI 中出现。当某 MSTI 的根端口与 CIST 不同时,会额外显示一个 A-RP 或 A-DP。
3.4 实例 0(IST)的特殊性
| 维度 | 说明 |
|---|---|
| 实例号 | 0(固定,不能修改) |
| VLAN 映射 | 默认 VLAN 1,以及未映射到 MSTI 的 VLAN |
| 根桥 | 全网统一的根桥 |
| 作用 | 作为各 MSTI 之间互通的桥梁 |
四、实战配置/案例分析
4.1 案例一:双核心的负载分担配置
网络场景:两台核心交换机 Core-A 和 Core-B 之间通过双链路连接,两台接入交换机接入,希望 VLAN 10/20 的流量走 Core-A,VLAN 30/40 的流量走 Core-B。
| 设备 | 角色 | 连接 |
|---|---|---|
| Core-A | 核心交换机 A | 双链路连接两台接入交换机 |
| Core-B | 核心交换机 B | 双链路连接两台接入交换机 |
| Access-1 | 接入交换机 1 | 接入端口分别连接 Core-A 和 Core-B |
| Access-2 | 接入交换机 2 | 接入端口分别连接 Core-A 和 Core-B |
# ========== Core-A 配置 ==========
[Core-A] sysname Core-A
[Core-A] stp mode mstp
[Core-A] stp enable
# 配置 MST 区域
[Core-A] stp region-configuration
[Core-A-mst-region] region-name Company-Net
[Core-A-mst-region] revision-number 1
[Core-A-mst-region] instance 1 vlan 10 20
[Core-A-mst-region] instance 2 vlan 30 40
[Core-A-mst-region] active region-configuration
# Core-A 作为实例 1 的主根(VLAN 10/20 走 Core-A)
[Core-A] stp instance 1 root primary
# Core-A 作为实例 2 的备份根
[Core-A] stp instance 2 root secondary
# ========== Core-B 配置 ==========
[Core-B] sysname Core-B
[Core-B] stp mode mstp
[Core-B] stp enable
# MST 区域配置(必须与 Core-A 完全一致)
[Core-B] stp region-configuration
[Core-B-mst-region] region-name Company-Net
[Core-B-mst-region] revision-number 1
[Core-B-mst-region] instance 1 vlan 10 20
[Core-B-mst-region] instance 2 vlan 30 40
[Core-B-mst-region] active region-configuration
# Core-B 作为实例 2 的主根(VLAN 30/40 走 Core-B)
[Core-B] stp instance 2 root primary
[Core-B] stp instance 1 root secondary
# ========== Access-1 配置 ==========
[Access-1] sysname Access-1
[Access-1] stp mode mstp
[Access-1] stp enable
# MST 区域配置(保持一致)
[Access-1] stp region-configuration
[Access-1-mst-region] region-name Company-Net
[Access-1-mst-region] revision-number 1
[Access-1-mst-region] instance 1 vlan 10 20
[Access-1-mst-region] instance 2 vlan 30 40
[Access-1-mst-region] active region-configuration
# 接入端口配置为边缘端口
[Access-1] interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/24
[Access-1-Port-range] stp edged-port enable
[Access-1-Port-range] quit
# ========== 验证 ==========
<Access-1> display stp brief
MSTID PortName PortRole PortSt
0 GE0/0/25 M-RP Forwarding ← CIST 根端口
0 GE0/0/26 M-ALP Discarding
1 GE0/0/25 M-RP Forwarding ← MSTI 1 根端口(走 Core-A)
1 GE0/0/26 M-ALP Discarding
2 GE0/0/25 M-ALP Discarding
2 GE0/0/26 A-RP Forwarding ← MSTI 2 根端口(走 Core-B)
# 结果:VLAN 10/20 走 GE0/0/25(Core-A),VLAN 30/40 走 GE0/0/26(Core-B)
# 双上联链路同时被使用,实现负载分担
4.2 案例二:MST 区域配置不一致故障
故障现象:MSTP 配置后,负载分担未生效,所有 VLAN 流量都走 Core-A。
# Core-A 区域配置
<Core-A> display stp region-configuration
MST Configuration Group:
Registration number: 1
Configuration name: Company-Net
VLAN Instances
10-20 1
30-40 2
# Access-1 区域配置
<Access-1> display stp region-configuration
MST Configuration Group:
Registration number: 0 ← 修订号不同!
Configuration name: Company-Net
VLAN Instances
10-20 1
30-40 2
# 结论:Access-1 的修订号为 0,与 Core-A 不一致
# 三项配置中任意一项不同,两台设备就会被认为是不同区域
# 不同区域之间按 IST 交互(等效实例 0 的 RSTP),多实例负载分担失效
# 修复
[Access-1] stp region-configuration
[Access-1-mst-region] revision-number 1
[Access-1-mst-region] active region-configuration
4.3 案例三:MSTP 查看常用命令
# 查看多实例的简要信息
<HUAWEI> display stp brief
MSTID PortName PortRole PortSt
0 GE0/0/1 M-RP Forwarding
0 GE0/0/2 M-ALP Discarding
1 GE0/0/1 M-RP Forwarding
1 GE0/0/2 M-ALP Discarding
2 GE0/0/1 M-ALP Discarding
2 GE0/0/2 A-RP Forwarding
# 查看 MST 区域信息
<HUAWEI> display stp region-configuration
# 查看指定实例的详细信息
<HUAWEI> display stp instance 1
# 查看 VLAN 与实例的映射关系
<HUAWEI> display stp vlan-mapping
# 查看指定端口的 MSTP 信息
<HUAWEI> display stp port GigabitEthernet 0/0/1
4.4 案例四:单实例 MSTI 的端口角色观察
# 查看实例 1 的详细信息
<HUAWEI> display stp instance 1
Instance: 1
State: Active
Root Bridge:
Bridge ID: 4096.00e0.fc12.0001 ← 实例1的根桥是 Core-A
Root Cost: 0
Local Bridge:
Bridge ID: 32768.00e0.fc12.0003 ← 本设备是 Access-1
Port Information:
Port GE0/0/25
Role: M-RP ← MSTI 1 的根端口
State: Forwarding
Designated Cost: 20000
Port GE0/0/26
Role: M-ALP ← MSTI 1 的替代端口(被阻塞)
State: Discarding
五、总结
| 维度 | MSTI 0(IST) | MSTI 1~64 |
|---|---|---|
| 类型 | 公共实例 | 多实例 |
| VLAN 映射 | 所有未映射 VLAN | 手动映射指定 VLAN |
| 根桥 | 全网统一 | 每实例独立选举 |
| 路径 | 全网统一 | 每实例独立计算 |
| 端口角色 | CIST 角色 | MSTI 角色(可不同) |
| MSTP 配置检查清单 | 说明 |
|---|---|
| 区域名称一致 | 区域内所有交换机必须相同 |
| 修订号一致 | 配置版本必须相同 |
| VLAN 映射一致 | VLAN 与 MSTI 的映射关系完全相同 |
| 执行 active 命令 | 任何配置修改后必须 active |
| 根桥位置正确 | 不同实例的主根应在不同设备 |
| MSTP 端口角色缩写 | 全称 | 说明 |
|---|---|---|
| M-RP | Master Root Port | CIST 主根端口 |
| M-DP | Master Designated Port | CIST 主指定端口 |
| M-ALP | Master Alternate Port | CIST 替代端口 |
| A-RP | Additional Root Port | MSTI 附加根端口 |
| A-DP | Additional Designated Port | MSTI 附加指定端口 |
提示:端口角色缩写的显示形式随 VRP 版本略有差异,部分版本显示为 MRP / MDP / MALP / ARP / ADP(不带连字符),含义相同。
思考
- 如果一个 MST 区域内的交换机没有执行
active region-configuration,MSTP 区域会如何划分?退化成什么模式? - MSTP 一个区域最多能配置多少个 MSTI?如果现场有 100 个 VLAN 需要不同转发路径,MSTP 能否承载?
- MSTI 1 和 MSTI 2 的根端口可以不同吗?在什么情况下会出现不同?
下篇预告:第20篇:交换网络故障案例:某企业网环路致全网瘫痪