生成树协议MSTP
生成树协议MSTP
1.1 MSTP引入
IEEE802.1D标准的提出早于VLAN的标准802.1Q,因此在STP中没有考虑VLNA的因素。而802.1w对应的RSTP仅对STP的机制进行了改进,其和STP一样属于单生成树(Single Spanning Tree,SST)协议。
计算STP/RSTP时,网桥上所有VLNA共享一棵生成树,无法实现不同VLAN在多条Trunk链路上的负载分担,而当某条链路被阻塞后将不会承载任何流量,造成了带宽的极大浪费。
上述缺陷是单生成树协议自身无法克服的,如果要实现VLAN间的负载分担需要用到MSTP(Multiple Spanning Tree Protocol,多生成树协议)。
MSTP在IEEE的802.1s标准中定义,它即可以实现快速收敛,又可以弥补STP和RSTP的缺陷。MSTP能使不同VLAN的流量沿各自的路径转发,从而利用冗余链路提供了更好的负载分担机制。
MSTP的基本思想是:基于实例(Instance)计算出多棵生成树,每一个实例可以包含一个或多个VLAN,每一个VLAN只能映射一个实例。网桥通过配置多个实例,可以实现不同的VLAN组之间的负载分担。
1.2 MSTP的基本工作概念
-
MST域
多生成树计算的前提是:将不同的VLAN映射到不同的实例中去,为了确保网桥之间多生成树协议计算的正确,这些网桥的VLAN和实例映射关系必须完全相同。在一个大型的网络中,可能不同的网桥属于不同的部门,而每个部门可能有不同的VLAN映射需求,无法使得所有网桥都配置相同的VLAN映射关系。
为了解决上述问题,可以将网络划分为多个域(MST域),将拥有相同VLNA映射关系以及其他属性的网桥放到同一个域中,域之间运行标准的RSTP。
MST域(MST Region)是指网络中具有相同域名、修订级别、摘要信息的网桥构成的一个集合。其中各MST域组成元素的含义如下:
(1)域名(Configuration Name):本域名的名称,MSTP中每一个域都有一个独一无二的名称,配置不同域名的网桥被认为属于不同的域。
(2)修订级别(Revision Level):目前保留,默认为0。
(3)配置摘要(Configuration Digest):由网桥的VLAN和实例映射关系生成的长度为16字节的HMAC_MD5签名,如果两个网桥生成不同的配置摘要,则表示两个网桥有不同的VLNA和实例映射关系,说明两个网桥属于不同的MST域。
-
CST、IST、CIST、总根和域根
CIST(Common and Internal Spanning Tree,公共和内部生成树)是整个网络所有设备经过生成树计算得到的一棵树。总根是整个网络中优先级最高的桥,是CIST的根桥。
CST(Common Spanning Tree,公共生成树)是连接网络内所有MST域的单生成树。如果把每个MST域看作是一个逻辑上的网桥,CST就是这些网桥通过STP/RSTP计算得到的一棵生成树,总根所处的域为CST的根桥。
IST的根桥即CIST的域根,是MST域内距离总根最近的桥,也称为Master桥。如果总根在该域中,则总根即为该域的CIST域根。
-
MSTI和MSTI域根
一个MST域内可以通过MSTP生成多棵生成树,每棵生成树之间彼此独立。每棵生成树都称为一个MSTI(Multiple Spanning Tree Instance,多生成树实例)。
每一个MSTI映射一个或多个VLAN,并计算出一棵独立的生成树,其范围只限于域内。每一个MSTI都对应一个实例号,实例号从1开始,以区别实例号为0的IST。
MSTI的域根,是每一个MSTI上优先级最高的网桥。MST域内每个MSTI可以指定不同的根。
-
MSTP中的端口角色
和STP和RSTP相比,MSTP增加了域的概念,所以在桥的角色上,MSTP增加了和域相关的Master桥,在端口角色上,MSTP增加了和域相关的域边界端口以及Master端口。
IST中距离总根最近的桥为Master桥,该桥为IST的根,Master桥指向总根的端口为Master端口。
MST域内网桥和其他MST域或STP/RSTP网桥相连的端口称为域边界端口,Master端口也是域边界端口,其在各域边界端口中距离总根最近。
如果把MST域看作逻辑上的一个网桥,域边界端口就为该网桥连接其他网桥的端口,其中,Master端口就是该网桥的根端口。
1.3 MSTP工作原理
-
MSTP的BPDU格式
MST BPDU和RST BPDU的前36个字节的格式是相同的。其中,BPDU协议版本号为0x03,表示为MSTP协议;BPDU类型为0x02,表示为RST/MST BPDU。
RST BDPU中的Root ID字段在MSTP中表示CIST总根ID,EPC字段在MSTP中表示CIST外部路径开销,Bridge ID字段在MSTP中表示CIST域根ID,Port ID字段在MSTP中表示CIST指定端口ID。
CIST外部路径开销(External Path Cost,EPC)指发送此BPDU的网桥所属的域距离总根所属的域的CST路径开销。
从37字节开始是MST专有字段,包含以下几个字段。
(1)Version3 Length:长度为两个字节,表示MST专有字段的长度,该字段用于接收到BPDU后进行校验。
(2)MST配置标识(Configuration ID):长度为51个字节,包含4个字段,其中,格式选择字段固定为0x00,其余3个字段用来判断网桥是否属于某MST域,包含前文介绍过的Configuration Name、Revsion Level和Configuration Digest。
(3)CIST内部路径开销(Internal Root Path Cost,IRPC):长度为4个字节,表示发送此BPDU的网桥到达CIST域根的路径开销。
(4)CIST Bridge ID:长度为8个字节,表示发送此BPDU的网桥ID。
(5)CIST剩余跳数:长度为1个字节,用来限制MST域的规模。从CIST域根开始,BPDU每经过一个网桥的转发,跳数就被减1;网桥将丢弃收到的跳数为0的BPDU,使处于最大跳数外的网桥无法参与生成树的计算,从而限制了MST域的规模。剩余跳数默认值为20。
(6)MSTI Configuration Messages:包含0个或最多64个MSTI配置信息,MSTI配置信息数量由域内MST实例数决定,每一个MSTI配置信息长度为16字节。
MSTI配置信息中包含如下几个字段,这些字段信息只在本MST实例中有效,各MST实例中的这些字段值是相互独立的。
(1)MSTI Flag:长度为1个字节,从低位开始,第1位到第7位的定义和RSTP相同,第8位为Master标志位,表示网桥是否为Master 桥,取代RSTP中的TCA标志位。
(2)MSTI Region Root ID:长度为8个字节,表示该MST实例的域根的ID。其中,第1个字节的低4位和第2个字节的8位共12位表示该MST实例的ID。
(3)MSTI IRPC:长度为4个字节,表示发送此BPDU的网桥到达MSTI根域的路径开销。
(4)MSTI Bridge Priority:长度为1个字节,表示发送此BPDU的网桥,即指定桥的优先级。其中,高4位为优先级位,低4位固定为0。
(5)MSTI Port Priority:长度为1个字节,表示发送此BPDU的端口的优先级。其中,高4位为优先级位,低4位固定为0。
(6)MSTI剩余跳数:长度为1个字节,定义同CIST剩余跳数,表示BPDU在该MST实例中的剩余跳数。
-
CIST优先级向量
MSTP计算可以分为CIST计算和MSTI计算两部分。其中,CIST计算依据的是CIST优先级向量的比较。
CIST优先级向量为{RootID:ERPC:RRootID:IRPC:DesignateBridgeID:DesignatePortID:RcvPortID},优先级向量的比较原则为最小优先。具体比较原则如下:
(1)首先比较CIST总根ID,该ID小者为优。
(2)如果CIST总根ID相同则比较CIST外部路径开销,开销小者为优。
(3)如果CIST外部路径开销相同则比较CIST域根ID,域根ID小者为优。
(4)如果域根ID相同则比较CIST内部路径开销,开销小者为优。
(5)如果CIST内部路径开销相同则比较CIST指定桥ID,指定桥ID小者为优。
(6)如果指定桥ID相同则比较CIST指定端口ID,指定端口ID小者为优。
(7)如果上述参数都相同则比较CIST接收端口ID,接收端口ID小者为优。
经过CIST计算,最后可以生成一棵贯穿整个网络的生成树。
-
MSTI优先级向量
MSTI计算依据的是MSTI优先级向量的比较。
MSTI优先级向量为{RRootID:IRPC:DesignateBridgeID:DesignatePortID:RcvPortID},优先级响亮的比较的原则为最小最优。具体比较原则如下:
(1)首先比较MSTI域根ID,域根ID小者为优。
(2)如果域根ID相同则比较MSTI内部路径开销,开销小者为优。
(3)如果MSTI内部路径开销相同则比较MSTI指定桥ID,指定桥ID小者为优。
(4)如果指定桥ID相同则比较MSTI指定端口ID,指定端口ID小者为优。
(5)如果上述参数都相同则比较MSTI接收端口,接收端口ID小者为优。
每一个MSTI都进行独立的比较计算,最后在域内生成多棵独立的生成树。
-
MSTP计算方法
从前面MSTP BPDU格式的介绍可以知道,每个BPDU既包含CIST计算所需的信息,也包含MSTI计算所需要的信息。MSTI的计算不需要再单独发送BPDU,也不需要任何定时器参数,当网桥在域内进行IST计算时,域内的每棵MSTI树也同时计算生成了。
CST和IST的计算方式和RSTP类似。在进行CST计算时,会将MST域看作逻辑上的一个网桥,其中,网桥的ID为IST域根的ID。
当网桥收到BPDU并判断来自不同域后,不会解析MST专有字段的信息,因此MSTI的计算仅限于区域内。由于网桥端口在不同的实例中可能具有不同的角色,所以可能会出现网桥端口既会接收BPDU,也会发哦是那个BPDU的情况,这是MSTP端口收发BPDU和RSTP端口收发BPDU的区别。
-
CST计算过程
如图1-1所示,假设网络中S1优先级最高,且各链路开销相同,则CIST计算过程如下:
(1)初始时,每一个域“网桥”由域内优先级最高的网桥表示,此时该优先级最高的网桥为CIST域根,该域“网桥”向其他域发送以该域根为总根的BPDU,EPC为0。
(2)经过RSTP计算可以确定域“根网桥”,该域中包含整个网络优先级最高的网桥,即CIST总根,图中为S1。
(3)经过比较EPC可以确定每个域“网桥”的端口角色,域“网桥”的“根端口“即为域的Master端口,该Master端口所在网桥即为新的CIST域根。
(4)一个域可能有多个域边界端口,在确定Master端口后,通过比较BPDU的优先级,可以确定域边界端口角色为指定端口、Alternate端口或是Backup端口。
(5)阻塞域之间的Alternate端口和Backup端口。
图1-1 CST 计算 -
IST计算
CST计算完成后,确定了CIST域根,其中,Regionl1的域根为S1,Region2的IST域根为S2,Region3的IST域根为S3,Region4的域根为S4。需要注意,此时IST域根不一定是域中优先级最高的网桥,而是域中距离总根最近的网桥,即Master端口所在的网桥。
域内以CIST根域为根桥,结合IRPC确定各网桥端口的角色,最终得到IST。IST计算所需要比较的优先级向量包含{域根:IRPC:指定桥ID:指定端口ID:接收端口ID}。
IST计算过程如下
(1)域内网桥通过比较IRPC确定网桥的IST根端口。
(2)网桥通过比较BPDU的优先级确定IST上的指定端口、Alternate端口和Backup端口。
(3)网桥阻塞IST上的Alternate端口和IST Backup端口。
每一个域都进行相同的计算,得到每一个域的IST,结合之前域间计算得到的CST,最终得到整个网络的CIST。
-
MSTI计算过程
在IST计算过程中,网桥通过交互BPDU中的BPDU中的MST配置信息可以同时确定各MST实例的根桥以及端口角色。
-
MSTP计算结构
-
MSTP和RSTP的互操作
-
MSTP的P/A机制
MSTP支持RSTP中的所有快速收敛机制,其中,MSTP的P/A机制和RSTP有所不同。
在RSTP中,上游网桥指定端口发送Proposal置位的BPDU,下游网桥执行同步操作后回应Agreement置位的BPDU,上游网桥收到Agreement置位的BPDU后其指定端口可以立即进入转发状态。