MSTP协议
一、MSTP协议概述:
A、MSPT由来:
在前面讲解了STP和RSTP的工作原理以及他们之间的关系与区别。但是不管是STP还是RSTP,在网络中进行生成树计算的时候都没有考虑到VLAN的情况。它们都是对单一生成树实例进行应用的。也就是说,在STP和RSTP中所有的VLAN都共享相同的生成树。
为了解决这一个问题,思科提出了第二代生成树---PVST、PVST+。按照PVST协议规定,每一个VLAN都有一个生成树,而且是每隔2秒就会发送一个BPDU,这对于一个有着上千万个VLAN网络来说,一方面这么多生成树维护起来比较困难,另一方面,为每个VLAN每隔2秒就发送一个BPDU,交换机也是难以承受的。
为了解决PVST带来的困难,思科又提出了第三代生成树----MST(MSTP)多生成树协议。MSTP可以对网络中众多的VLAN进行分组,把VLAN分到组里。这里的组就是后面讲的MST实例(Instance)。每个实例一个生成树,BPDU只对实例进行发送。这样就达到了负载均衡。
第一代:STP和RSTP:没有考虑VLAN的情况,所有的VLAN都共享相同的生成树。
第二代:PVST、PVST+:每一个VLAN一个生成树。
第三代:MSTP:将多个VLAN分到组里面。每个组共享一个生成树。

综上所述,STP、RSTP、PVST的应用缺陷:
(1)统一局域网内所有的vlan共享一个生成树,无法在vlan间实现数据流量的负载均衡。
(2)链路利用率低,被阻塞的冗余链路不承载任何流量,造成了带宽的浪费,还可能造成部分vlan报文无法转发。
(3)PVST为思科私有,可以实现多实例,多vlan。但是由于每个VLAN都需要生成一棵树,PVST BPDU的通信量将正比于Trunk的VLAN个数,在VLAN个数比较多的时候,维护多棵生成树的计算量和资源占用量将急剧增长,资源消耗大。
B、MSPT概述:
1、协议概述:
MSTP多生成树协议又是802.1s标准。MSTP在继承了第一代生成树RSTP的优点(快速收敛)的基础上也实现了负载均衡的功能,而且它比PVST的收敛还要快,并且和STP、RSTP、PVST都是完全兼容的。可谓是功能齐全的现代生成树。
MSTP在计算生成树的过程中,会为每个VLAN或每组VLAN计算一个生成树。一个组也就是一个实例,一个实例(也就是一个转发路径)的失效是不会影响其他实例的。
在以太网中部署MSTP协议后可实现如下功能:
形成多棵无环路的树,解决广播风暴并实现冗余备份。
多棵生成树在VLAN间实现负载均衡,不同VLAN的流量按照不同的路径转发。

2、原理简要:
MSTP把一个交换网络划分成多个域,每个域形成多棵生成树,生成树之间彼此独立,每颗生成树叫做一个多生成树实例MSTI(multiple spanning tree instance),每个域叫做一个MST域(multiple spanning tree region)。每个MSTI可以看作是多个vlan的集合,即vlan根据需要捆绑在若干MSTI上(一般而言,这种需要指的是相同的拓扑结构),vlan和MSTI是多对一的关系,这样可以节省通信开销和资源占用率。
在引入MSTP后,MSTP通过设置vlan映射表,把vlan和msti联系起来,根据现网需要,该网络中,每个vlan对应了一个msti(多生成树实例)。可以认为,每个msti之间允许独立的stp协议。
经过计算,最终生成了两棵树:
MSTI(多生成树实例)1 以 S4为根交换设备,转发VLAN 2 的报文
MSTI(多生成树实例)2 以S6 为根交换设备,转发VLAN 3 的报文以往我们认为,一个交换网络中只会存在一个根桥,但是在引入MSTP后,交换网络中可以存在多个根桥,根桥数量与MSTI的数量一致

C、基本概念:
1、区域划分:

MST域(Multiple Spanning Tree Regions,多生成树域)是由交换网络中的多台设备以及它们之间的网段所构成。这些设备具有下列特点:都启动了MSTP;具有相同的域名;具有相同的VLAN到生成树实例映射配置; 具有相同的MSTP修订级别配置;这些设备之间在物理上有链路连通。
一个交换网络可以存在多个MST域。用户可以通过MSTP配置命令把多台设备划分在同一个MST域内。
例如图中的区域A0,域内所有设备都有相同的MST域配置:域名相同;VLAN与生成树实例的映射关系相同(VLAN 1映射到生成树实例1,VLAN 2映射到生成树实例2,其余VLAN映射到CIST。其中,CIST即指生成树实例0);相同的MSTP修订级别(此配置在图中没有体现)。
VLAN映射表:VLAN映射表是MST域的一个属性,用来描述VLAN和生成树实例的映射关系。
例如图中,域A0的VLAN映射表就是:VLAN 1映射到生成树实例1,VLAN 2映射到生成树实例2,其余VLAN映射到CIST。MSTP就是根据VLAN映射表来实现负载分担的。
CST是连接交换网络内所有MST域的单生成树。如果把每个MST域看作是一个“设备”,CST就是这些“设备”通过STP协议、RSTP协议计算生成的一棵生成树。
例如图中红色线条描绘的就是CST。
CIST是连接一个交换网络内所有设备的单生成树,由IST和CST共同构成。
例如图中,每个MST域内的IST加上MST域间的CST就构成整个网络的CIST。
IST(Internal Spanning Tree,内部生成树)是MST域内的一棵生成树。IST是一个特殊的MSTI,MSTI的ID为0,通常称为MSTI0。
IST和CST(Common Spanning Tree,公共生成树)共同构成整个交换网络的生成树CIST(Common and Internal Spanning Tree,公共和内部生成树)。IST是CIST在MST域内的片段。
例如图中CIST在每个MST域内都有一个片段,这个片段就是各个域内的IST。
MSTI:一个MST域内可以通过MSTP生成多棵生成树,各棵生成树之间彼此独立。每棵生成树都称为一个MSTI(Multiple Spanning Tree Instance,多生成树实例)。
例如图中,每个域内可以存在多棵生成树,每棵生成树和相应的VLAN对应。这些生成树就被称为MSTI。
MST:手动创建和配置的域内生成树实例
域根:MST域内IST和MSTI的根桥就是域根。MST域内各棵生成树的拓扑不同,域根也可能不同。
总根:总根(Common Root Bridge)是指CIST的根桥。
例如图中,区域D0中,生成树实例1的域根为设备B,生成树实例2的域根为设备C。
例如图中,总根为区域A0内的某台设备。
域边界端口是指位于MST域的边缘,用于连接不同MST域、MST域和运行STP的区域、MST域和运行RSTP的区域的端口。
在进行MSTP计算的时候,域边界端口在MST实例上的角色和CIST的角色保持一致,即如果域边界端口在CIST上的角色是Master端口,则它在域内所有MST实例上的角色也是Master端口。例如上图中,如果区域A0的一台设备和区域D0的一台设备的第一个端口相连,整个交换网络的总根位于A0内,则区域D0中这台设备上的第一个端口就是区域D0的域边界端口。
2、端口划分、角色、状态**:**
在MSTP的计算过程中,端口角色主要有根端口、指定端口、Master端口、Alternate端口、Backup端口。端口在不同的生成树实例中可以担任不同的角色。



MSTP中,根据端口是否学习MAC地址和是否转发用户流量,可将端口状态划分为以下三种:
Forwarding状态:学习MAC地址,转发用户流量;
Learning状态:学习MAC地址,不转发用户流量;
Discarding状态:不学习MAC地址,不转发用户流量。
同一端口在不同的生成树实例中的端口状态可以不同。端口状态和端口角色是没有必然联系的,右表给出了各种端口角色能够具有的端口状态(“√”表示此端口角色能够具有此端口状态;“-”表示此端口角色不能具有此端口状态)。

二、报文介绍:
A、差异对比:
MSTP使用多生成树桥协议数据单元MST BPDU(Multiple Spanning Tree Bridge Protocol Data Unit)作为生成树计算的依据。MST BPDU报文用来计算生成树的拓扑、维护网络拓扑以及传达拓扑变化记录。
STP中定义的配置BPDU、RSTP中定义的RST BPDU、MSTP中定义的MST BPDU及TCN BPDU差异对比如右图

B、报文帧格式:
无论是域内的MST BPDU还是域间的,前35个字节和RST BPDU相同。
从第36个字节开始是MSTP专有字段。最后的MSTI配置信息字段由若干MSTI配置信息组连缀而成。
MSTP 报文字段解释:



C、报文帧格式格式:
目前MSTP的BPDU报文存在两种格式:
dot1s:IEEE802.1s规定的报文格式。
legacy:私有协议报文格式。
如果端口收发报文格式为默认支持dot1s或者legacy,这样就存在一个缺点:需要人工识别对端的BPDU报文格式,然后手工配置命令来决定支持哪种格式。人工识别报文格式比较困难,且一旦配置错误,就有可能导致MSTP计算错误,出现环路。
华为技术有限公司采用的端口收发MSTP报文格式可配置(stp compliance)功能,能够实现对BPDU报文格式的自适应:auto、dot1s、legacy
这样报文收发不但支持dot1s和legacy格式,还能通过auto方式根据收到的BPDU报文格式自动切换端口支持的BPDU报文格式,使报文格式与对端匹配。在自适应的情况下,端口初始支持dot1s格式,收到报文后,格式则和收到的报文格式保持一致。
D、Hello Time 报文数量:
Hello Time用于生成树协议定时发送配置消息维护生成树的稳定。如果交换设备在一段时间内没有收到BPDU报文,则会由于消息超时而对生成树进行重新计算。
当交换设备成为根交换设备时,该交换设备会按照该设置值为时间间隔发送BPDU报文。非根交换设备采用根交换设备所设置的Hello Time时间值。
华为技术有限公司数据通信设备提供的每个Hello Time时间内端口最多能够发送的BPDU报文个数可配置(Max Transmitted BPDU Number in Hello Time is Configurable)功能,可以设定当前端口在Hello Time时间内配置BPDU的最大发送数目。
用户配置的数值越大,表示每Hello Time时间内发送的报文数越多。适当的设置该值可以限制端口每Hello Time时间内能发送的BPDU数目,防止在网络拓扑动荡时,BPDU占用过多的带宽资源。
三、计算过程:
A、拓扑计算:
MSTP可以将整个二层网络划分为多个MST域,各个域之间通过计算生成CST。域内则通过计算生成多棵生成树,每棵生成树都被称为是一个多生成树实例。其中实例0被称为IST,其他的多生成树实例为MSTI。MSTP同STP一样,使用配置消息进行生成树的计算,只是配置消息中携带的是设备上MSTP的配置信息。
先按优先级选举出整出整个网络的总根,因为把域看做成一个交换机,所以总根所在的域成为整个网络的根桥,也就是CST的根桥。然后把每个域看做是交换机,计算出每个域和根桥互联端口的角色,最终计算成整个整个CIST,即整个网络的MSTP实例。后面再计算MST和IST。最终归结就是先计算公共的生成树,再计算域内的生成树。
优先级向量:MSTI和CIST都是根据优先级向量来计算的,这些优先级向量信息都包含在MST BPDU中。各交换设备互相交换MST BPDU来生成MSTI和CIST。优先级向量简介如下,括号中的向量的优先级从左到右依次递减:
参与CIST计算的优先级向量为:{ 根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID }
参与MSTI计算的优先级向量为:{ 域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID }

比较原则:
同一向量比较,值最小的向量具有最高优先级。
优先级向量比较原则如下。
首先,比较根交换设备ID。
如果根交换设备ID相同,再比较外部路径开销。
如果外部路径开销相同,再比较域根ID。
如果域根ID仍然相同,再比较内部路径开销。
如果内部路径仍然相同,再比较指定交换设备ID。
如果指定交换设备ID仍然相同,再比较指定端口ID。
如果指定端口ID还相同,再比较接收端口ID。
如果端口接收到的BPDU内包含的配置消息优于端口上保存的配置消息,则端口上原来保存的配置消息被新收到的配置消息替代。端口同时更新交换设备保存的全局配置消息。反之,新收到的BPDU被丢弃。

B、CIST的计算:
经过比较配置消息后,在整个网络中选择一个优先级最高的交换设备作为CIST的树根。在每个MST域内MSTP通过计算生成IST;同时MSTP将每个MST域作为单台交换设备对待,通过计算在MST域间生成CST。CST和IST构成了整个交换设备网络的CIST。
C、CIST中端口角色的选举:
1、比价CIST的总根ID,越小越优。
2、比较CIST到达总根的ERPC,越小越优。
3、比较CIST域根的BID,越小越优。
4、比较CIST到达域根的IPRC,越小越优。
5、比较CIST中BPDU报文发送者的BID,越小越优。
6、比较CIST中BPDU报文发送者的PID,越小越优。
7、比较CIST中BPDU报文接收者的PID,越小越优。
D、MSTI的计算:
在MST域内,MSTP根据VLAN和生成树实例的映射关系,针对不同的VLAN生成不同的生成树实例。每棵生成树独立进行计算,计算过程与STP计算生成树的过程类似。
MSTI的特点:
每个MSTI独立计算自己的生成树,互不干扰。
每个MSTI的生成树计算方法与STP基本相同。
每个MSTI的生成树可以有不同的根,不同的拓扑。
每个MSTI在自己的生成树内发送BPDU。
每个MSTI的拓扑通过命令配置决定。
每个端口在不同MSTI上的生成树参数可以不同。
每个端口在不同MSTI上的角色、状态可以不同。
在MST域内,沿着其对应的MSTI转发。
在MST域间,沿着CST转发。
四、收敛过程:
A、拓扑变化的处理:
MSTP拓扑变化处理与RSTP拓扑变化处理过程类似。
在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态。
为本交换设备的所有非边缘指定端口启动一个TC While Timer,该计时器值是Hello Time的两倍。
在这个时间内,清空所有端口上学习到的MAC地址。
同时,由非边缘端口向外发送RST BPDU,其中TC置位。一旦TC While Timer超时,则停止发送RST BPDU。
其他交换设备接收到RST BPDU后,清空所有端口学习到MAC地址,除了收到RST BPDU的端口。然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,重复上述过程。
如此,网络中就会产生RST BPDU的泛洪。
B、快速收敛机制:
MSTP支持普通方式和增强方式两种P/A(Proposal/Agreement)机制。
1、普通方式:
p0和p1两个端口马上都先成为指定端口,发送RST BPDU。
S2的p1口收到更优的RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送RST BPDU。
S1的p0进入Discarding状态,于是发送的RST BPDU中把proposal和Agreement置1。
S2收到根桥发送来的携带proposal的RST BPDU,开始将自己的所有端口进入sync变量置位。
p2已经阻塞,状态不变;p4是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口p3。
各端口的synced变量置位后,p2、p3进入Discarding状态,p1进入Forwarding状态并向S1返回Agreement位置位的回应RST BPDU。
当S1判断出这是对刚刚发出的Proposal的回应,于是端口p0马上进入Forwarding状态。下游设备继续执行P/A协商过程。

2、增强方式:
在MSTP中,P/A机制工作过程如下:
上游设备发送Proposal报文,P位和A位同时置位,请求进行快速迁移。下游设备接收到后,把与上游设备相连的端口设置为根端口,并阻塞所有非边缘端口。
上游设备继续发送Agreement报文。下游设备接收到后,根端口转为Forwarding状态。
下游设备回应Agreement报文,报文A位置位。上游设备接收到后,把与下游设备相连的端口设置为指定端口,指定端口进入Forwarding状态。
缺省情况下,华为数据通信设备使用增强的快速迁移机制。如果华为数据通信设备和其他制造商的设备进行互通,而其他制造商的设备P/A机制使用普通的快速迁移机制,此时,可在华为数据通信设备上通过设置P/A机制为普通的快速迁移机制,从而实现华为数据通信设备和其他制造商的设备进行互通。
一个RSTP端口连接一个MSTP端口,RSTP的指定端口快速切换时只会发出P位BPDU,导致MSTP不会回应A位BPDU。这会导致RSTP的指定端口仍然要等待30秒才能开始转发数据。这种情况可以配置No Agreement Check,配置No Agreement Check后,MSTP不再检查Propsal报文中的A位是否置位

五、多进程:
MSTP多进程是基于MSTP协议的增强性技术。此技术可将二层交换设备上的端口绑定到不同的进程中,并以进程为单位进行MSTP协议计算,不在同一个进程内的端口不参与此进程中的MSTP协议计算,从而实现各个进程内的生成树计算相互独立,互不影响。
MSTP多进程机制并不只限于MSTP协议,RSTP和STP协议同样适用。
通过部署MSTP多进程可实现如下优势:
极大地提升了在不同组网条件下生成树协议的可部署性。
为了保证运行不同类型生成树协议的网络可靠运行,可将不同类型的生成树协议划分到不同的进程中,不同进程对应的网络进行独立的生成树协议计算。
增强了组网的可靠性,对于大量的二层接入设备,可减少单台设备故障对整个网络的冲击。
通过进程隔离不同的拓扑计算,即某台设备故障只影响其所在的进程对应的拓扑,不会影响其他进程拓扑计算。
网络扩容时,可减少网络管理者维护量,从而提升了用户运维管理的方便性。
当网络扩容时,只需要划分新的进程与原有网络对接,不需要调整原有网络的MSTP进程配置。如果是某个进程中进行了设备扩容,此时也只需要针对扩容的进程进行修改,而不需要调整其他进程中的配置。
实现二层端口分割管理
每个MSTP进程可以管理设备上的部分端口,即设备的二层端口资源被多个MSTP进程分割管理,每个MSTP进程上均可运行标准的MSTP。
2022-08-14 网工进阶(二十六) MSTP-网络层次、端口角色、端口状态、拓扑计算_mstp端口角色-CSDN博客
2022-08-13 网工进阶(二十五) RSTP进阶知识-RSTP对STP的改进、拓扑收敛过程_不参加 stp 计算,直接进入 forwarding 状态转发-CSDN博客