MSTP概述
RSTP虽然在STP的基础上进行了一定程度的优化,但是依然与STP一样存在一个较大的短板,那就是当它们都被部署在交换网络中时,所有的VLAN共用一颗生成树。这个短板将使得网络中的流量无法再所有可能链路上实现负载分担,导致链路带宽利用率、设备资源利用率较低。
Cisco的私有生成树协议PVST(Per-VLAN Spanning Tree),它基于每个VLAN进行生成树的计算。这种技术的优点是实现了负载分担。但是这种技术也有缺点。如果网络中VLAN的数量特别大,那么所有的交换机将不得不为每个VLAN都计算一颗生成树,那么设备的资源消耗将变得非常大,为了进行大规模的生成树计算,设备将变得不堪重负,甚至有可能影响到正常业务流量的处理。
IEEE发布的802.1s标准解决了上述问题,它定义了一种新的生成树协议——MSTP(Multiple Instance Spanning Tree Protocol,多实例生成树协议),MSTP能够兼容STP及RSTP,在该协议中,生成树不是基于VLAN运行的,而是基于Instance(实例)运行的。所谓Intance,也即一个或多个VLAN的集合。
将一个或多个VLAN映射到一个Instance,然后MSTP基于该Instance计算生成树。映射到同一个Instance的VLAN将共享同一颗生成树。
同时,MSTP引入了域(region)的概念(类似于OSPF的area)。可以将一个交换网络分成多个MST域(Multiple Spanning Tree Region,多生成树域),一个MST域内可以包含一台或多台交换机。(在实际应用中,一般还是没有划分多个域,即网络中的交换机都属于同一个域,就像OSPF的应用,实际很多场景都只有一个骨干区域,这样做,无他,纯属简化网络)
STP、RSTP、MSTP的比较:
协议名称 | 标准 | 特点 | 应用场景 |
---|---|---|---|
STP | 802.1D | 形成一颗无环路的树,解决广播风暴并实现冗余备份,收敛速度较慢 | 无需区分用户或业务流量,所有VLAN共享一颗生成树 |
RST | 802.1W | 形成一颗无环路的树,解决广播风暴并实现冗余备份,收敛速度快。 | 无需区分用户或业务流量,所有VLAN共享一颗生成树 |
MSTP | 802.1S | 形成多颗无环路的树,解决广播风暴并实现冗余备份。收敛速度快 | 需要区分用户或业务流量,并形成负载分担。不同的VLAN通过不同的生成树转发流量,每颗生成树之间相互独立。 |
相关术语
在MSTP中,引入了比较多的术语(毕竟引入了域的概念),初次学习这些术语时,可能会觉得比较懵。。。
MST域(MST Region)
MSTP网络中包含1个或多个MST域(MST Region),每个MST Region中包含一个或多个MSTI。如下图所示,网络中包含4个域
属于同一个MST域的交换机必须(1)配置相同的域名(Region name)、相同的修订级别(Revison level),以及相同的VLAN与Instance的映射关系。
比如下图中,MST Region 4中由交换设备A、B、C和D构成,域中有3个MSTI。
VLAN映射表
VLAN映射表是MST域的属性,它描述了VLAN和MSTI之间的映射关系。比如上图中,VLAN1映射到MSTI1、VLAN2映射到MSTI2、其他的VLAN映射到MSTI3。
CST(Common Spanning Tree,公共生成树)
公共生成树CST(Common Spanning Tree)是连接交换网络内所有MST域的一棵生成树。
如果把每个MST域看作是一个节点,CST就是这些节点通过STP或RSTP协议计算生成的一棵生成树。
比如下图中,红色框起来的就是组成CST的各条链路,而图中黑色链路加上红点的三条链路就是通过STP或RSTP协议计算生成的树,这颗树就是CST。组成CST剩下的一条链路的的一端端口被阻塞了。
IST(Internal Spanning Tree,内部生成树)
内部生成树IST是各MST域内ID为0的生成树,即MSTI0。
我们从前面可以知道,一个VLAN只能对应一个实例。但是一个实例可以对应一组VLAN。这都需要人工配置,在默认情况下,所有的VLAN都属于实例0,即MSTI0。当一个VLAN映射到其他实例后,该VLAN就从MSTI0中删除了。
CIST(Common and Internal Spanning Tree,公共和内部生成树)
公共和内部生成树CIST(Common and Internal Spanning Tree)是通过STP或RSTP协 议计算生成的,连接一个交换网络内所有交换设备的单生成树。
CIST是由CST和IST构成的。
SST(Single Spanning Tree,单生成树)
构成SST的两种情况:
- 运行STP或RSTP的交换设备只能属于一个生成树。
- MST域中只有一个交换设备,这个交换设备构成单生成树。
总根(Common Root, CIST Root)
总根是CIST的根桥。选举原则还是最低桥ID原则(网络中桥ID最小的交换机成为总根)。
比如下图中,S1就是这片网络的总根。
域根(Regional Root)
域根(Regional Root):MST域内IST和MSTI的根桥。在域中各实例有各自的域根。可以不是一个桥。
IST域根如下图所示,在MST域中IST生成树中距离总根(CIST Root)最近的交换设 备是IST域根(即标黄的交换机)。
如下图所示,在Region4中总共有3个实例,分别是MSTI1、MSTI2、MSTI3。而这三个实例的域根分别是A、B、C
主桥(Master Bridge)
主桥(Master Bridge)或者称CIST域根桥,是域内距离总根最近的交换设备,也就是IST域根,即下图中的黄色交换机。
端口角色
相对于RSTP,MSTP新增了两种端口角色:Master端口、域边缘端口。因此,MSTP总共有7种端口角色:根端口、指定端口、Alternate端口、Backup端口、边缘端口、Master端口、域边缘端口。
- Master端口:位于整个域到总根的最短路径上,是连接域到总根的端口,是域中的报文去往总根的必经之路。
如图所示,交换设备S1、S2、S3、S4和它们之间的链路构成一个MST域,S1交换设备的端口AP1在域内的所有端口中到总根的路径开销最小,所以AP1为Master端口。
- 域边缘端口:域边缘端口是指位于MST域的边缘并连接其它MST域或SST的端口。如上图所示,MST域内的AP1、DP1和DP2都和其它域直接相连,它们都是本MST域的域边缘端口。
端口角色总结:
端口角色 | 说明 |
---|---|
根端口 | 在非根桥上,离根桥最近的端口是本交换机设备的根端口。根桥没有根端口 |
指定端口 | 对一台设备而言,它的指定端口是向下游交换设备转发BPDU报文的端口。一般来说,根桥的所有端口都是指定端口 |
Alternate 端口 | 从配置BPDU报文发送角度来看,Alternate端口就是由于学习到其他网桥发送的配置BPDU报文而阻塞的端口。它是根端口的备份。 |
Backup 端口 | 从配置BPDU报文发送角度来看,Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口。它是指定端口的备份。(一般来说,除非人为构造,实际该类型端口很少见) |
Master端口 | Master端口是MST域和总根相连的所有路径中最短路径上的端口,它是 交换设备上连接MST域到总根的端口。 Master端口是域中的报文去往总根的必经之路。 Master端口是特殊域边缘端口,Master端口在CIST上的角色是Root Port,在其它各实例上的角色都是Master端口。 |
域边缘端 口 | 域边缘端口是指位于MST域的边缘并连接其它MST域或SST的端口。 |
边缘端口 | 如果指定端口位于整个域的边缘,不再与任何交换设备连接,这种端口 叫做边缘端口。 边缘端口一般与用户终端设备直接连接。 |
端口状态
MSTP定义的端口状态与RSTP协议中定义相同。
STP端口状态 | M/RSTP端口状态 | 端口状态对应的行为 |
---|---|---|
Disabled | Discarding | 不转发用户流量也不学习MAC地址 |
Blocking | ||
Listening | ||
Learning | Learning | 不转发用户流量但学习MAC地址 |
Forwarding | Forwarding | 既转发用户流量也学习MAC地址 |
MSTP报文
MSTP使用多生成树桥协议数据单元MST BPDU(Multiple Spanning Tree Bridge Protocol Data Unit)作为生成树计算的依据。MST BPDU报文用来计算生成树的拓扑、维护网络拓扑以及传达拓扑变化记录。
STP、RSTP、MSTP各BPDU的比较:
协议版本 | BPDU类型 | BPDU名称 |
---|---|---|
0 | 0x00 | 配置BPDU |
0 | 0x80 | TCN BPDU |
2 | 0x02 | RST BPDU |
3 | 0x02 | MST BPDU |
MSTP的报文格式如下。从下面可以知道,前36个字节和RST BPDU相同。从第37个字节开始时MSTP转有字段。
+--------------------------------+
| DMAC |
+--------------------------------+
| SMAC |
+--------------------------------+
| Length |
+--------------------------------+
| LLC header |
+--------------------------------+-----------------------
| Protocol Identifier | ^
+--------------------------------+ |
| Protocol Version Identifier | |
+--------------------------------+ |
| BPDU Type | |
+--------------------------------+ |
| Flags | |
+--------------------------------+ |
| Root Identifier | |
+--------------------------------+ |
| Root Path Cost | |
+--------------------------------+ |
| Bridge Identifier | |
+--------------------------------+ |
| Port Identifier | |
+--------------------------------+ |
| Message Age | |
+--------------------------------+ BPDU
| Max Age | payload
+--------------------------------+ |
| Hello Time | |
+--------------------------------+ |
| Forward Delay | |
+--------------------------------+---------- |
| Version 1 Length | RSTP/MSTP |
| | Extension |
+--------------------------------+---------- |
| Version 3 Length | ^ |
+--------------------------------+ | |
| MST Config ID Format Selector | | |
+--------------------------------+ | |
| MST Config Name | | |
+--------------------------------+ | |
| MST Config reversion | | |
+--------------------------------+ | |
| MST Config Digest | MSTP |
+--------------------------------+ Extension |
| CIST Internal Root Path Cost | | |
+--------------------------------+ | |
| CIST Bridge Identifier | | |
+--------------------------------+ | |
| CIST Remaining Hops | | |
+--------------------------------+ | |
| MSTI configuration Messages | | |
| (may be absent) | V V
+--------------------------------+-----------------------
| FCS |
+--------------------------------+
字段说明:
字段 | 长度(单位:字节) | 说明 |
---|---|---|
DMAC | 6 | 目的MAC地址,该字段标识帧的接收者。 |
SMAC | 6 | 源MAC地址,该字段标识帧的发送者。 |
Length | 2 | 指后续数据的字节长度,但不包括FCS字段。 |
Protocol Identifier | 2 | 协议ID=“0”。 |
Protocol Version Identifier | 1 | 协议版本标识符,STP为0x00,RSTP为0x02,MSTP为0x03。 |
BPDU Type | 1 | BPDU类型: (1)0x00:STP的Configuration BPDU (2)0x80:STP的TCN BPDU(Topology Change Notification BPDU) (3)0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU) |
Flags | 1 | 标记域。对于STP:第一个bit(左边、高位bit)表示“TCA(拓扑改变响应)”,最后一个bit(右边、低位bit)表示“TC(拓扑改变)”,其他字段预留。 对于RSTP和MSTP: Bit7:TCA (Topology Change Acknowledgement) Bit6:Agreement Bit5:Forwarding Bit4:Learning Bit3和Bit2:端口角色。 00:未知; 01(低位为1高位为0):Alternate / Backup; 10(低位为0高位为1):根端口; 11:指定端口 Bit1:Proposal Bit0:TC (Topology Change) |
Root Identifier | 8 | 网桥ID都是8个字节——前两个字节是网桥优先级,后6个字节是网桥MAC地址。对于MSTP,是指CIST的总根交换机ID。 |
Root Path Cost | 4 | 根路径开销,本端口累计到根桥的开销。对于MSTP,是指CIST外部路径开销指从本交换机所属的MST域到CIST根交换机的累计路径开销。CIST外部路径开销根据链路带宽计算。 |
Bridge Identifier | 8 | 发送者BID,本交换机的Bridge ID。对于MSTP,是指CIST的域根交换机ID,即IST Master的ID。如果总根在这个域内,那么域根交换机ID就是总根交换机ID。 |
Port Identifier | 2 | 发送端口PID,发送该BPDU的端口ID。对于MSTP,是指本端口在IST中的指定端口ID。 |
Message Age | 2 | 该BPDU的消息年龄,以秒为单位。 |
Max Age | 2 | 消息老化年龄,以秒为单位,超时则认为到根交换机的链路故障。 |
Hello Time | 2 | 发送两个相邻BPDU间的时间间隔,以秒为单位。 |
Forward Delay | 2 | 控制Listening和Learning状态的持续时间,以秒为单位。 |
Version 1 Length | 1 | Version1 BPDU的长度,值固定为0。只在RSTP和MSTP的BPDU中出现,STP的BPDU没有此字段。 |
Version 3 Length | 2 | Version3 BPDU的长度,只在MSTP的BPDU中出现。 |
MST Config ID Format Selector | 1 | 固定为0。 |
MST Config Name | 32 | “域名”,字符串格式。 |
MST Config reversion | 2 | 修订级别,非负整数。 |
MST Config Digest | 16 | 利用HMAC-MD5算法将域中VLAN和实例的映射关系加密成16字节的摘要。 |
CIST Internal Root Path Cost | 4 | CIST内部路径开销,指从本端口到IST Master交换机的累计路径开销,只在MSTP的BPDU中出现。CIST内部路径开销根据链路带宽计算。 |
CIST Bridge Identifier | 8 | CIST的指定交换机ID,只在MSTP的BPDU中出现。 |
CIST Remaining Hops | 1 | BPDU报文在CIST中的剩余跳数,只在MSTP的BPDU中出现。 |
MSTI Configuration Messages (may be absent) | n×16字节 | MSTI配置信息,只在MSTP的BPDU中出现。每个MSTI的配置信息占16 bytes,如果有n个MSTI就占用n×16bytes。单个MSTI Configuration Messages的字段说明如下: MSTI Flags(1字节):MSTI标志。 MSTI Regional Root Identifier(8字节):MSTI域根交换机ID。 MSTI Bridge Priority(1字节):本交换机在MSTI中的指定交换机的优先级。 MSTI Remaining Hops(1字节):BPDU报文在MSTI中的剩余跳数。 |
FCS | 4 | 帧校验序列FCS(Frame Check Sequence)是为接收网卡提供判断是否传输错误的一种方法,如果发现错误,丢弃此帧。 FCS只是通用叫法,具体的FCS还可以细分多种校验方法。在以太帧中,FCS通常采用循环冗余码校验CRC(Cyclical Redundancy Check)。 |
我们之前说过,属于同一个MST域的交换机必须(1)配置相同的域名(Region name)、相同的修订级别(Revison level),以及相同的VLAN与Instance的映射关系。对应MSTP的报文是指的MST Config ID Format Selector、MST Config Name、MST Config reversion、MST Config Digest4个字段的值要要完全一样,才是属于同一个域。
MSTP的拓扑计算
MSTP可以将整个二层网络划分为多个MST域,各个域之间通过计算生成CST。域内则通过计算生成多棵生成树,每棵生成树都被称为是一个多生成树实例。其中实例0被称为IST,其他的多生成树实例为MSTI。MSTP同STP一样,使用配置消息进行生成树的计算,只是配置消息中携带的是设备上MSTP的配置信息。
MSTI和CIST都是根据优先级向量来计算的,这些优先级向量信息都包含在MST BPDU 中。各交换设备互相交换MST BPDU来生成MSTI和CIST。
- 参与CIST计算的优先级向量为:
{ 根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID } - 参与MSTI计算的优先级向量为:
{ 域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID }
括号中的向量的优先级从左到右依次递减。
参考文献:
1、《HCNP路由交换学习指南》
2、华为 S7700 V200R019C10 配置指南-以太网交换