第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)

MSTP 的层次结构 - 图示

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 多实例的负载分担

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(不带连字符),含义相同。

思考

  1. 如果一个 MST 区域内的交换机没有执行 active region-configuration,MSTP 区域会如何划分?退化成什么模式?
  2. MSTP 一个区域最多能配置多少个 MSTI?如果现场有 100 个 VLAN 需要不同转发路径,MSTP 能否承载?
  3. MSTI 1 和 MSTI 2 的根端口可以不同吗?在什么情况下会出现不同?

下篇预告:第20篇:交换网络故障案例:某企业网环路致全网瘫痪