对于STP生成树协议,了解的人比较多。通过STP协议,解决了二层网络内的环路问题,在消除环路和链路备份之间达成了平衡。但在现网中,一个二层网路内往往不止一个vlan,而是多个vlan的集合,STP/RSTP只能处理单个vlan的问题,而对于多个vlan的情况束手无策。因此,MSTP的出现至关重要。
本文通过查询华为Hex文档,结合自身理解,形成比较清晰而重要的MSTP的文档,可能是全网最详细的MSTP文档。

1 定义

MSTP(multiple spanning tree protocol)是多生成树协议,通过生成多个生成树,来解决以太网的环路问题。

2 目的

  • 在一个局域网内生成多个STP树,解决多个vlan的广播风暴,并实现冗余备份。
  • 多棵STP树在vlan间实现负载均衡,不同vlan的流量按照不同的路径转发。解决stp/rstp某一vlan的链路被阻塞后所有vlan均被阻塞的问题。
    网工在路上--一文弄懂MSTP协议
    在此图中,如果在全网内应用stp/rstp,则按协议要求,得到一棵用虚线表示的生成树,其中,S6为根桥,S2和S5之间、S1和S4之间的链路被阻塞。如果该网中只有一种vlan或者vlan的允许通过的链路一样,则stp/rstp已经满足现网要求。但是由于s1和s2之间,s3和s6之间只允许vlan3通过,s4与s5之间只允许vlan2通过,所以hostB和hostA之间无法通信。
    因此需要MSTP协议的引入来解决这种问题。

    3 原理

    MSTP把一个交换网络划分成多个域,每个域形成多棵生成树,生成树之间彼此独立,每颗生成树叫做一个多生成树实例MSTI(multiple spanning tree instance),每个域叫做一个MST域(multiple spanning tree region)。每个MSTI可以看作是多个vlan的集合,即vlan根据需要捆绑在若干MSTI上(一般而言,这种需要指的是相同的拓扑结构),vlan和MSTI是多对一的关系,这样可以节省通信开销和资源占用率。
    网工在路上--一文弄懂MSTP协议
    在引入MSTP后,MSTP通过设置vlan映射表,把vlan和msti联系起来,根据现网需要,该网络中,每个vlan对应了一个msti。可以认为,每个msti之间允许独立的stp协议。
    经过计算,最终生成了两棵树:

  • MSTI1 以 S4为根交换设备,转发VLAN 2 的报文
  • MSTI2 以S6 为根交换设备,转发VLAN 3 的报文
    以往我们认为,一个交换网络中只会存在一个根桥,但是在引入MSTP后,交换网络中可以存在多个根桥,根桥数量与MSTI的数量一致。

4 基本概念

4.1 网络层次

一个MSTP网络中包含多个MST域,每个MST域中包含多个MSTI,一个MSTI中包含多个运行STP/RSTP/MSTP的交换设备

网工在路上--一文弄懂MSTP协议

4.2 MST域

MST域由交换网络中的多台交换设备以及他们之间的网段所组成。同一MST域的设备具有以下特点:

  • 都启用了MSTP
  • 具有相同的域名 (region name)
  • 相同的vlan-MSTI映射关系 (instance xx vlan xx)
  • 相同的MSTP修订级别配置(region level)

MST域之间在物理上直接或者间接相连。

4.3 VLAN映射表

描述了vlan和MSTI的映射关系,vlan和MSTI是多对一的关系。

4.4 CST

公共生成树,连接交换网络内所有MST域的一棵生成树。如果把MST域看作是一个节点或桥,那么CST就是这些节点通过STP/RSTP计算生成的一棵生成树。

4.5 CIST&IST

  • CIST是公共和内部生成树,通过STP/RSTP生成,将交换网内所有交换设备看作是没有vlan区分的设备,由它们生成一棵单生成树。
  • IST是内部生成树,是MST域内的一棵生成树,IST是一个特殊的MSTI,MSTI的ID为0,通常称为MSTI0。可以把IST理解成CIST在MST域内的一个子集。

    4.6 SST

    单生成树,运行STP/RSTP的交换设备只能属于一个生成树。或者MST域中只有一个交换设备,这个交换设备构成单生成树。

    4.7 总根&域根

  • 总根是CIST的根桥。
  • 域根分为IST域根和MSTI域根。
  • IST域根是在MST域中IST生成树中距离总根最近的交换设备。
  • MSTI域根是每个多生成树实例的树根。一个MSTI域内可以有多个生成树实例,也即有多个MSTI域根。

    4.8 主桥

    IST Master,域内距离总根最近的交换设备。

    5 端口角色

    相比于RSTP,MSTP在根端口,指定端口,alternate端口,backup端口和边缘端口的基础上,新增master端口和域边缘端口。即共有7种端口类型。

    5.1 master端口

    是MST域和总根相连的所有路径种最短路径上的端口,是交换设备上连接MST域到总根的端口。Master端口是域中的报文去往总根的必经之路。master端口是特殊的域边缘端口,他在CIST上的角色是root port ,在其他各实例上的角色都是master端口。

网工在路上--一文弄懂MSTP协议

5.2 域边缘端口

位于MST域的边缘并连接其他MST域或SST的端口。

6 MSTP报文格式

网工在路上--一文弄懂MSTP协议

相比于RST BPDU报文,MSTP的BPDU报文前36字节是相同的。从第37字节开始是其专有字段。
目前MST BPDU存在两种格式。分别是:

  • dot1s
  • legacy
    需要人工识别,手动配置,配错成环。
    华为新增:auto
    实现自动识别,自动适配。初始支持dot1s。

    7 MSTP拓扑计算

    MSTP将二层网络分为多个MST域,域间计算生产CST,域内分为多个生成树实例,每个实例分别计算独立的STP生成树。
    实例0被称为IST,其他的多生成树实例为MSTI。

    7.1 优先级向量

  • MSTI的优先级向量{域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID}
  • CIST的优先级向量{根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID}
    从左至右依次递减。
向量名称 说明
根交换设备ID CIST的根交换设备ID,等于priority(16bit)+MAC(48bit),其中priority为MSTI0的优先级
外部路径开销(ERPC) 从CIST的域根到达总根的路径开销。MST域内所有交换设备上保存的外部路径开销相同。若CIST根交换设备在域中,则域内所有交换设备上保存的外部路径开销为0。
域根ID 域根ID用于选择MSTI中的域根。域根ID = Priority(16bits) + MAC(48bits)。其中Priority为MSTI0的优先级。
内部路径开销(IRPC) 本桥到达域根的路径开销。域边缘端口保存的内部路径开销大于非域边缘端口保存的内部路径开销。
指定交换设备ID CIST或MSTI实例的指定交换设备是本桥通往域根的最邻近的上游桥。如果本桥就是总根或域根,则指定交换设备为自己。
指定端口ID 指定交换设备上同本设备上根端口相连的端口。Port ID = Priority(4位) + 端口号(12位)。端口优先级必须是16的整数倍。
接收端口ID 接收到BPDU报文的端口。Port ID = Priority(4位) + 端口号(12位)。端口优先级必须是16的整数倍。

7.2 比较原则

同一向量比较,值最小的向量具有最高优先级。

  • 1 比较根交换设备ID。

  • 2 如果根交换设备ID相同,再比较外部路径开销。

  • 3 如果外部路径开销相同,再比较域根ID。

  • 4 如果域根ID仍然相同,再比较内部路径开销。

  • 5 如果内部路径仍然相同,再比较指定交换设备ID。

  • 6 如果指定交换设备ID仍然相同,再比较指定端口ID。

  • 7 如果指定端口ID还相同,再比较接收端口ID。

如果端口接收到的BPDU内包含的配置消息优于端口上保存的配置消息,则端口上原来保存的配置消息被新收到的配置消息替代。端口同时更新交换设备保存的全局配置消息。反之,新收到的BPDU被丢弃。

7.3 CIST的计算

经过比较配置消息后,在整个网络中选择一个优先级最高的交换设备作为CIST的树根。在每个MST域内MSTP通过计算生成IST;同时MSTP将每个MST域作为单台交换设备对待,通过计算在MST域间生成CST。CST和IST构成了整个交换设备网络的CIST。

7.4 MSTI的计算

在MST域内,MSTP根据VLAN和生成树实例的映射关系,针对不同的VLAN生成不同的生成树实例。每棵生成树独立进行计算,计算过程与STP计算生成树的过程类似

MSTI的特点:

  • 每个MSTI独立计算自己的生成树,互不干扰。

  • 每个MSTI的生成树计算方法与STP基本相同。

  • 每个MSTI的生成树可以有不同的根,不同的拓扑。

  • 每个MSTI在自己的生成树内发送BPDU。

  • 每个MSTI的拓扑通过命令配置决定。

  • 每个端口在不同MSTI上的生成树参数可以不同。

  • 每个端口在不同MSTI上的角色、状态可以不同。

在运行MSTP协议的网络中,一个VLAN报文将沿着如下路径进行转发:

  • 在MST域内,沿着其对应的MSTI转发。
  • 在MST域间,沿着CST转发。

8 MSTP快速收敛机制(P/A机制)

8.1 普通方式

网工在路上--一文弄懂MSTP协议

-1 p0和p1两个端口马上都先成为指定端口,发送RST BPDU。
-2 S2的p1口收到更优的RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送RST BPDU。

  • 3 S1的p0进入Discarding状态,于是发送的RST BPDU中把proposal和Agreement置1。
  • 4 S2收到根桥发送来的携带proposal的RST BPDU,开始将自己的所有端口进入sync变量置位。
  • 5 p2已经阻塞,状态不变;p4是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口p3。
  • 6 各端口的synced变量置位后,p2、p3进入Discarding状态,p1进入Forwarding状态并向S1返回Agreement位置位的回应RST BPDU。
  • 7 当S1判断出这是对刚刚发出的Proposal的回应,于是端口p0马上进入Forwarding状态。
    下游设备继续执行P/A协商过程。

8.2 增强方式

网工在路上--一文弄懂MSTP协议

  • 1 协商开始时,每一台设备都认为自己是根桥,根桥上的端口是指定端口,端口状态为Discarding,端口的synced变量置位,触发Proposal和Agreement同时置位。上游设备发送Proposal报文,请求进行快速迁移。下游设备接收到后,把与上游设备相连的端口设置为根端口,并阻塞所有非边缘端口。

  • 2 上游设备继续发送Agreement报文。下游设备接收到后,根端口转为Forwarding状态。

  • 3 下游设备回应Agreement报文。上游设备接收到后,把与下游设备相连的端口设置为指定端口,指定端口进入Forwarding状态。

缺省情况下,华为数据通信设备使用增强的快速迁移机制。