前面提到的STP/RSTP协议以及Cisco的私有协议PVST+都属于单生成树(SST)协议,也就是对于支持多vlan的设备只能运行单一的生成树。MSTP是IEEE 802.1s中提出的一种STP和VLAN结合使用的新协议,它既继承了RSTP端口快速迁移的优点,又解决了RSTP中不同vlan必须运行在同一棵生成树上的问题。接下来我们从MSTP基本概念、基本原理、报文特征、H3C产品实现以及与Cisco产品互通等几个方面进行阐述,在总结中引入了H3C设备为了应对实际网络环境所提供的特定保护功能,在附录中是MSTP模块的缺省配置。
图 1 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而言的,同一个域内外部路径开销是相同的;内部路径开销是域内相对于某个实例而言的,同一端口对于不同实例对应不同的内部路径开销。
与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一脉相承,三者有很好的兼容性。在同一个域内的交换机将互相传播和接收不同生成树实例的配置消息,保证所有生成树实例的计算在全域内进行;而不同域的交换机仅仅互相传播和接收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格式对比。
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算法实现过程
网络中的设备发送接受BPDU报文,在经过比较配置消息后,在整个网络中选择一个优先级最高的交换机作为CIST的树根。在每个MST域内MSTP通过计算生成IST;同时MSTP将每个MST域作为单台交换机对待,通过计算在MST域间生成CST。如前所述,CST和IST构成了整个交换机网络的CIST。
在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。
然后,交换机使用计算出来的配置消息和对应端口上原来的配置消息进行比较。如果端口上原来的配置消息更优,则交换机将此端口阻塞,端口的配置消息不变,并且此端口将不再转发数据,只接收配置消息;如果计算出来的配置消息更优,则交换机就将该端口设置为指定端口,端口上的配置消息替换成计算出来的配置消息,并周期性向外发送。
在H3C的软件平台中有两个STP的相关模块,一个是RSTP模块,另外一个是MSTP模块。RSTP模块实现了IEEE 802.1w的RSTP状态机,它支持STP兼容模式和RSTP模式;MSTP模块实现了IEEE 802.1s的MSTP状态机,它支持STP兼容模式、RSTP兼容模式和MSTP模式。IEEE 802.1s的MSTP状态机本身并没有实现RSTP兼容模式,对RSTP兼容模式的支持是H3C对标准协议的扩展。RSTP模块缺省运行于RSTP模式,MSTP模块缺省运行于MSTP模式。当不清楚产品支持哪种模式可以使用命令 display stp,如表 1 运行RSTP模块和MSTP模块显示结果的区别所示。RSTP模块和MSTP模块是互斥的,所以存在把RSTP模块升级到MSTP模块的问题。MSTP模块设计时就考虑了和RSTP模块的命令行兼容,所以可以平滑地从RSTP模块升级到MSTP模块,RSTP模块的命令行被MSTP模块解释为对CIST的操作,升级过程不会引入问题。
表 1 运行RSTP模块和MSTP模块显示结果的区别
运行RSTP模块的显示结果 | 运行MSTP模块的显示结果 |
<DUT>display stp Protocol mode: IEEE RSTP The bridge ID (Pri.MAC): 32768.00e0-fc00-1500 The bridge times: Hello Time 2 sec, Max Age 20 sec, Forward Delay 15 sec Root bridge ID(Pri.MAC): 32768.00e0-fc00-1500 Root path cost: 0 Bridge bpdu-protection: disabled Default path cost standard is dot1t Timeout factor: 3 | < DUT >display stp -------[CIST Global Info][Mode MSTP]------- CIST Bridge :32768.00e0-fc00-1500 Bridge Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20 CIST Root/ERPC :32768.00e0-fc00-1500 / 0 CIST RegRoot/IRPC :32768.00e0-fc00-1500 / 0 CIST RootPortId :0.0 BPDU-Protection :disabled TC or TCN received :0 Time since last TC :0 days 0h:0m:51s |
H3C STP支持3种PATH COST缺省值的计算方法:IEEE 802.1D标准方法、IEEE 802.1t标准方法和H3C的私有计算方法。
Port Speed | Link Type | Path Cost | ||
802.1D-1998 | 802.1T | Legacy | ||
0 |
| 65,535 | 200,000,000 | 200,000 |
10Mbps | Half-Duplex Full-Duplex Aggregated Link 2 Ports Aggregated Link 3 Ports Aggregated Link 4 Ports | 100 99 95 95 95 | 2,000,000 1,999,999 1,000,000 666,666 500,000 | 2,000 2,000 1,800 1,600 1,400 |
100Mbps | Half-Duplex Full-Duplex Aggregated Link 2 Ports Aggregated Link 3 Ports Aggregated Link 4 Ports | 19 18 15 15 15 | 200,000 199,999 100,000 66,666 50,000 | 200 200 180 160 140 |
1000Mbps | Full-Duplex Aggregated Link 2 Ports Aggregated Link 3 Ports Aggregated Link 4 Ports | 4 3 3 3 | 20,000 10,000 6,666 5,000 | 20 18 16 14 |
10Gbps | Full-Duplex Aggregated Link 2 Ports Aggregated Link 3 Ports Aggregated Link 4 Ports | 2 1 1 1 | 2,000 1,000 666 500 | 2 1 1 1 |
表 2 各种情况下缺省Path Cost值
IEEE 802.1D IEEE 802.1t标准的PATH COST缺省值的基本计算请参考协议文本,下面介绍对标准协议的一些扩充。
IEEE 802.1D和IEEE 802.1t标准中并没有规定同样速率下全双工端口和半双工端口的Path Costs值的不同,但是一般全双工的Path Costs值比半双工略小一点。
对于聚合链路,802.1D并没有具体的规定,它没有区分聚合链路和单端口链路的优先级别的不同,因此对于802.1D-1998中聚合链路STP的Path Cost值不用考虑聚合链路数。
802.1T推荐的计算缺省Path Cost值的公式为:
对于聚合链路,链路速率为聚合组中所有unblock端口的速率和。
H3C的私有计算方法为
对于聚合链路,链路速率为聚合组中所有unblock端口的速率和。
用于设置Path Cost计算方法的命令行如下:
[系统视图] stp pathcost-standard { dot1d-1998 | dot1t | legacy}
H3C产品既支持IEEE802.1s中规定的BPDU格式,也支持Cisco的私有格式(H3C产品中称为legacy模式)。在H3C设备上可以通过配置端口支持MSTP的标准,当配置dot1s时,H3C设备802.1s规定的BPDU格式和legacy规定的BPDU格式某些字段前后位置颠倒,也有增删。
MSTP协议互通包括与STP/RSTP协议的互通、与CiscoMSTP协议(Legacy)的互通以及与PVST+协议的互通,下面分别说明。
IEEE在制定STP、RSTP和MSTP标准的时候已经考虑了它们之间的互通性,可以保证他们混合组网的情况下不会导致环路出现,但是RSTP和MSTP在快速迁移的配合上有如下的限制。
由于RSTP/MSTP的指定端口快速迁移机制,即接收到下游的agreement报文才能进行快速迁移。引发这样的问题:上游桥运行RSTP,下游运行MSTP,此时,RSTP不向下游发agreement报文,MSTP的根端口没有接收到agreement报文,则表示MSTP没有同步,这就意味着根端口不向上游RSTP指定端口发agreement。所以,MSTP域内的agreement被抑制,上游RSTP指定端口只能在2倍的Forward Delay延时后Forwarding。
建议将运行MSTP协议的桥做为上游,运行RSTP的桥做下游。因为RSTP的同步不要求根端口接收到上游的agreement,所以在这种情况下上游MSTP指定端口可以接收到下游RSTP根端口发送的agreement,就可以快速迁移了。
根据协议IEEE 802.1s的规定,相连交换机若实现MSTP域内MSTI的互通,它们的域配置(域配置由域名、修订级别、VLAN与实例的映射关系组成)必须完全一致。MSTP在发送BPDU报文的时候,会把配置ID(配置ID由域名、修订级别和配置摘要组成,其中配置摘要是由VLAN与实例的映射关系经过HMAC-MD5运算生成的16字节签名)放到报文中传输,相连的交换机就是根据这些信息来判断发送报文的交换机和自己是否处于同一个域内。
Legacy的MSTP配置摘要计算结果和IEEE802.1s标准中列举的参考例子不一致。正是由于Cisco MSTP计算出的配置摘要并不符合标准,导致了相连的H3C交换机和Cisco交换机即使它们的域配置相同,各自计算出的配置摘要也会不相同,所以它们不会认为在一个域内,这样就只能实现CIST的互通,不能实现MSTI的互通。
H3C MSTP提供如下方法可以和Cisco MSTP实现域内MSTI的互通。
在保证相连的H3C交换机域配置和Cisco交换机域配置完全一致的前提下,可以通过命令在每一个和Cisco交换机相连的端口上使能CONFIGURATION DIGEST SNOOPING功能。对于使能了CONFIGURATION DIGEST SNOOPING功能的端口,在接收到Cisco MSTP报文时,直接认为报文来自域内,同时记录下报文中的配置摘要;在发送MSTP报文时,将之前记录的配置摘要填充到发送的报文中,这就保证了Cisco交换机接收到该报文时也认为它来自域内,这样H3C MSTP和Cisco MSTP的域内MSTI就可以互通了。
注意:
(1) CONFIGURATION DIGEST SNOOPING功能一定要在域内相连的H3C交换机和Cisco交换机域配置完全相同的条件下使能,否则可能因为各交换机VLAN与实例映射关系不一致导致广播风暴。
(2) 域内和Cisco交换机相连的每一个端口都必须使能CONFIGURATION DIGEST SNOOPING功能;在域的边界端口上不能使能CONFIGURATION DIGEST SNOOPING功能。
(3) 不能直接更改使能了CONFIGURATION DIGEST SNOOPING功能的H3C交换机及其相连的Cisco交换机的域配置。请在更改域配置之前将CONFIGURATION DIGEST SNOOPING功能去使能,否则在更改域配置的过程中可能因为各交换机VLAN与实例映射关系不一致导致广播风暴。
(4) 如果域内都是H3C交换机,则不必使能CONFIGURATION DIGEST SNOOPING功能。
使能CONFIGURATION DIGEST SNOOPING功能的命令行分为端口命令和全局命令,首先配置各端口下的CONFIGURATION DIGEST SNOOPING功能,然后使能全局的CONFIGURATION DIGEST SNOOPING功能。这两级命令都使能的端口才真正启动CONFIGURATION DIGEST SNOOPING功能。端口命令如下:
[端口视图] [undo] stp config-digest-snooping
[系统视图] [undo] stp interface interfacename config-digest-snooping
全局命令如下:
[系统视图] [undo] stp config-digest-snooping
配置举例:
图 2 H3C设备与CiscoLegacy设备互连(Cisco设备做上游设备)
组网如上图,其中Cisco A、Cisco E为Cisco交换机,其余为H3C交换机,所有设备都启用MSTP,并且域配置都相同。
H3C B与Cisco A通过GE 1/1、GE 1/2相连,与Cisco E通过E 0/3相连。首先需要在端口GE 1/1、GE 1/2和E 0/3上使能CONFIGURATION DIGEST SNOOPING功能,然后使能全局的CONFIGURATION DIGEST SNOOPING功能,配置如下:
[H3CB-GigabitEthernet1/1]stp config-digest-snooping
[H3CB-GigabitEthernet1/2]stp config-digest-snooping
[H3CB-Ethernet0/3]stp config-digest-snooping
[H3CB]stp config-digest-snooping
H3C C和H3C D没有与Cisco设备直接相连,所以不需要任何配置。
进行以上配置后,所有交换机都可以进行MSTP域内MSTI互通了。
通过本文上面的介绍,我们可以知道,STP/RSTP/MSTP均是IEEE标准组织制定的标准协议,他们可以和Cisco的PVST+在一定程度上完成互通。
如前所述,支持IEEE各种标准的STP设备与PVST+设备做STP对接时,如果是Access端口对接,将不存在任何问题,标准设备只会将PVST+设备当作一个支持IEEE802.1D的设备。如果是通过Trunk接口对接,标准的STP设备可以与PVST+设备的VLAN 1互通;但在其他VLAN上,标准STP设备是无法识别PVST+报文的,需要做一些特殊处理。
我们来看看Cisco的PVST+ BPDU报文,报文格式如下:
图 3 Cisco的PVST+ BPDU报文格式
报文的以太网封装格式是SNAP格式,也叫ETHERNET_SNA,这种报文的封装格式如下描述:
在PVST+ BPDU报文格式图中标红的字段的值为0x010b,这个字段属于SNAP封装的Type字段,以太网封装中,对Type字段要求是值必须大于0x600,以此来区分Type和Length。但PVST+的这个字段却小于0x600。正是由于PVST+报文封装格式中这个字段的错误导致报文可能被许多设备丢弃而不做二层转发。
因此对于这种不能透传PVST+ BPDU的标准STP设备,要求物理环路必须在标准STP设备上来阻断,也就是说Blocking端口必须在标准STP设备上而不是PVST+设备上,否则就可能导致VLAN 1以外的其他VLAN出现广播风暴。
对于可以透传PVST+ BPDU的标准STP设备,由于标准STP设备会将PVST+ BPDU当作多播报文在VLAN内进行转发。因此PVST+设备可以正确接受到需要的PVST+报文,然后计算出其他VLAN内的环路并消除。所以这种情况下,不需要标准网络设备做额外特殊配置。
本文从MSTP协议的基本概念,基本原理,实现标准,产品互通性几个方面阐述了H3C MSTP协议的实现过程。在实际的应用中,综合设备整体的考虑,MSTP模块又需要引入一些新的功能或者保护机制,这些机制都是在结合产品特点的基础上,发挥H3C研发人员的智慧提出的,这些保护功能包括根保护,环路保护,TC报文保护以及BPDU报文保护,这些功能将在文章《STP小特性》中详细讲解。
配置项 | 缺省值 |
全局STP使能状态 | 支持IRF的交换机缺省使能,其他交换机缺省不使能 |
端口STP使能状态 | 使能 |
STP工作模式 | MSTP模式 |
域名 | 十六进制字符串表示的桥MAC |
修订级别 | 0 |
VLAN和实例的映射关系 | 所有VLAN都映射到CIST实例 |
桥优先级 | 32768 |
指定根桥和根桥备份 | 不使能 |
域的最大跳数 | 20 |
网络直径 | 7 |
Forward Delay | 15 |
Hello Time | 2 |
Max Age | 20 |
BPDU超时时间因子 | 3 |
BPDU最大发送速率 | 3 |
边缘端口 | 不使能 |
路径开销标准 | Legacy |
路径开销 | 根据路径开销标准自动计算 |
端口的优先级 | 128 |
点对点链路 | 自动计算 |
BPDU保护 | 不使能 |
根保护 | 不使能 |
环路保护 | 不使能 |
TC保护 | 使能 |
配置摘要侦听 | 不使能 |
表 3 RSTP、MSTP802.1s、Legacy BPDU格式对比
|
|
|
表 4 802.1s和legacy的MST配置标识符和MSTI配置消息对比
|
|