MSTP--多生成树协议
前面提到的STP/RSTP协议以及Cisco的私有协议PVST+都属于单生成树(SST)协议,也就是对于支持多vlan的设备只能运行单一的生成树。MSTP是IEEE 802.1s中提出的一种STP和VLAN结合使用的新协议,它既继承了RSTP端口快速迁移的优点,又解决了RSTP中不同vlan必须运行在同一棵生成树上的问题。接下来我们从MSTP基本概念、基本原理、报文特征、H3C产品实现以及与Cisco产品互通等几个方面进行阐述,在总结中引入了H3C设备为了应对实际网络环境所提供的特定保护功能,在附录中是MSTP模块的缺省配置。

多生成树协议MSTP(Multiple Spanning Tree Protocol)是IEEE 802.1s中定义的一种新型生成树协议。简单说来,STP/RSTP是基于端口的,PVST+是基于VLAN的,而MSTP是基于实例的。与STP/RSTP和PVST+相比,MSTP中引入了“实例”(Instance)和“域”(Region) “的概念。所谓“实例”就是多个VLAN的一个集合,这种通过多个VLAN捆绑到一个实例中去的方法可以节省通信开销和资源占用率。MSTP各个实例拓扑的计算是独立的,在这些实例上就可以实现负载均衡。使用的时候,可以把多个相同拓扑结构的VLAN映射到某一个实例中,这些VLAN在端口上的转发状态将取决于对应实例在MSTP里的转发状态。
所谓“域”,由域名(Configuration Name)、修订级别(Revision Level)、格式选择器(Configuration Identifier Format Selector[1])、VLAN与实例的映射关系(mapping of VIDs to spanning trees),其中域名、格式选择器和修订级别在BPDU报文中都有相关字段,而VLAN与实例的映射关系在BPDU报文中表现摘要信息(Configuration Digest),该摘要是根据映射关系计算得到的一个16字节签名。只有上述四者都一样且相互连接的交换机才认为在同一个域内。如图 1 MSTP基本概念示意图所示,每个域内所有交换机都有相同的MST域配置。缺省时,域名就是交换机的桥MAC地址,修订级别等于0,格式选择器等于0,所有的VLAN都映射到实例0上。

MSTP的实例0具有特殊的作用,称为CIST(Common Internal Spanning Tree),即公共与内部生成树,其他的实例[2]称为MSTI(Multiple Spanning Tree Instance),即多生成树实例。CIST由通过STP/RSTP计算得到的单生成树和MSTP计算得到的域组成,是为了保证在所有桥接的局域网是简单的和全连接的。CST(Common Spanning Tree)是STP/RSTP也是MSTP计算出的用于连接MST域的单生成树。IST(Internal Spanning Tree)是在一个给定的MST域内由CIST提供的连通性。如图 1 MSTP基本概念示意图所示,如果把每个MST域看作是一个“交换机”,CST就是这些“交换机”通过STP/RSTP或者MSTP协议计算生成的一棵生成树。IST是CIST在MST域内的片段,是一个特殊的多生成树实例。

总根和域根
与STP和RSTP相比,MSTP中引入了总根和域根的概念。总根是一个全局概念,对于所有互连的运行STP/RSTP/MSTP的交换机只能有一个总根,也即是CIST的根;而域根是一个局部概念,是相对于某个域的某个实例而言的。如图 1 MSTP基本概念示意图所示,所有相连的设备,总根只有一个,而每个域所包含的域根数目与实例个数相关。

外部路径开销和内部路径开销
与STP和RSTP相比,MSTP中引入了外部路径开销和内部路径开销的概念。外部路径开销是相对于CIST而言的,同一个域内外部路径开销是相同的;内部路径开销是域内相对于某个实例而言的,同一端口对于不同实例对应不同的内部路径开销。

边缘端口、Master端口和Alternate端口
与STP和RSTP相比,MSTP中引入了域边缘端口和Master端口的概念。域边缘端口是连接不同MST域、MST域和运行STP的区域、MST域和运行RSTP的区域的端口,位于MST域的边缘;在某个不包含总根的域中,Master端口是所有边界端口中,到达总根具有最小开销的端口,也就是连接MST域到总根的端口,位于整个域到总根的最短路径上;Alternate端口是Master端口的备份端口,如果Master端口被阻塞后,Alternate端口将成为新的Master端口。如图 1 MSTP基本概念示意图所示,域根在Region 1中,其中设备C与Region 2和Region 3相连的端口是域边界端口,而Region 2中设备A与Region 1相连的端口是Master端口。Region 3中设备A与Region 1相连的端口是Alternate端口。另外包含Master端口的设备称为主设备[3]。

MSTP与STP/RSTP一脉相承
MSTP与STP/RSTP一脉相承,三者有很好的兼容性。在同一个域内的交换机将互相传播和接收不同生成树实例的配置消息,保证所有生成树实例的计算在全域内进行;而不同域的交换机仅仅互相传播和接收CIST生成树的配置消息,MSTP协议利用CIST保证全网络拓扑结构的无环路存在,也是利用CIST保持了同STP/RSTP的向上兼容,因此从外部来看,一个MSTP域就相当于一个交换机,对不同的域、STP、RSTP交换机是透明的。

与STP和RSTP相比,MSTP具有VLAN认知能力,可以实现负载均衡,可以实现类似RSTP的端口状态快速切换;与PVST+相比,MSTP可以捆绑多个VLAN到一个实例中以降低资源占用率,并且可以很好地向下兼容STP/RSTP协议。

从报文格式上分析RSTP/MSTP的相同之处,两者协议标识符都是0x0000,BPDU类型都是0x2, Max Age字段都表示保存BPDU的时间,Hello Time字段都表示BPDU的传送间隔,Forward Delay都表示交换机状态迁移的延迟时间,Version 1 Length的值都是0。

从报文格式上分析两者的不同之处,MSTP协议版本号是3,而RSTP协议的版本号是2,RSTP中Message Age字段表示穿越运行RSTP桥后消息的年龄(在根端口处加1),MSTP中Message Age字段表示穿越MST域后消息的年龄(在域Master口处加1),在MSTP中引入了公共和内部生成树(Common and Internal Spanning Tree--CIST),CIST是连接一个交换网络内所有交换机的单生成树,因此在MSTP中,与RSTP报文的对应字段都与CIST相关。

另外MSTP与STP/RSTP在报文格式上相比,STP/RSTP中定义的Root Bridge Identifier , Designated Bridge Identifier,Designated Port Identifier等概念在MSTP对应的是CIST Root Identifier, CIST Designated Bridge, CIST Designated Port Identifier等概念,另外STP/RSTP中的Path Cost字段对应MSTP中的CIST External Path Cost字段,详细的描述请参见附录中RSTP、MSTP802.1s、Legacy BPDU格式对比。

 

 

 

2      MSTP基本原理
MSTP协议在计算生成树时使用的算法和原理与STP/RSTP大同小异,只是因为在MSTP中引入了域和内部路径开销等参数,故MSTP中的优先级向量是7维,而STP/RSTP是5维。STP/RSTP中的优先级向量是{根桥标识符,根路径开销,桥标识符, 发送BPDU报文端口标识符, 接收BPDU报文端口标识符},MSTP中的优先级向量是{CIST根桥标识符,CIST外部根路径开销,CIST域根标识符,CIST内部根路径开销,CIST指定桥标识符,CIST指定端口标识符,CIST接收端口标识符},其中STP/RSTP中的桥标识符实际上是发送BPDU的设备的标识符,与MSTP中的CIST指定桥标识符对应。MSTP中的CIST域根标识符有两种情况,一种是总根所在域内,BPDU报文中该字段是参考总根的标识符,另一种情况是不包含总根的域中,BPDU报文该字段是参考主设备的标识符。运行MSTP的实体初始化时认为自己是总根、域根,通过交互配置消息,按照上面介绍的7维向量计算CIST生成树和MSTI,下面简要介绍CIST生成树和MSTI的计算,介绍H3C设备MSTP算法实现过程

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

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

生成树协议算法实现过程
在初始时,每台交换机的各个端口会生成以自身交换机为根桥的配置消息,其中根路径开销为0,指定桥ID为自身交换机ID,指定端口为本端口。

(1)   每台交换机都向外发送自己的配置消息,并在接收到其他配置消息后进行如下处理:

当端口收到比自身的配置消息优先级低的配置消息时,交换机把接收到的配置消息丢弃,对该端口的配置消息不作任何处理;

当端口收到比本端口配置消息优先级高的配置消息时,交换机把接收到的配置消息中的内容替换该端口的配置消息中的内容;然后交换机将该端口的配置消息和交换机上的其它端口的配置消息进行比较,选出最优的配置消息。

(2)   配置消息的比较原则如下:

树根ID较小的配置消息优先级高;

若树根ID相同,则比较根路径开销。比较方法为:计算配置消息中的根路径开销与本端口对应的路径开销之和(设为S),S较小的配置消息优先级较高;

若根路径开销也相同,则依次比较指定桥ID、指定端口ID、接收该配置消息的端口ID等。MSTP中比较上面提到的7维向量,STP/RSTP中比较上面提到的5维向量。

(3)   计算生成树的步骤如下:

选出根桥。

比较所有交换机发送的配置消息,其中树根ID最小的交换机为根桥。

选出根端口。

每台交换机把接收最优配置消息的那个端口定为自身交换机的根端口。

确定指定端口。

首先,交换机根据根端口的配置消息和根端口的路径开销,为每个端口计算一个指定端口配置消息:树根ID替换为根端口的配置消息的树根ID;根路径开销替换为根端口的配置消息的根路径开销加上根端口的路径开销;指定桥ID替换为自身交换机的ID;指定端口ID替换为自身端口ID。

然后,交换机使用计算出来的配置消息和对应端口上原来的配置消息进行比较。如果端口上原来的配置消息更优,则交换机将此端口阻塞,端口的配置消息不变,并且此端口将不再转发数据,只接收配置消息;如果计算出来的配置消息更优,则交换机就将该端口设置为指定端口,端口上的配置消息替换成计算出来的配置消息,并周期性向外发送。