一、背景
无论是STP还是RSTP,一个网络中只生成一棵生成树,被阻塞的冗余链路将不承载任何流量,造成带宽浪费;局域网内所有的VLAN共享一棵生成树,还有可能造成部分VLAN的报文无法转发;
为了弥补STP和RSTP的缺陷,IEEE802.1S标准定义了MSTP,MSTP兼容STP和RSTP,既可以快速收敛,又能使不同VLAN的流量沿各自的路径转发,从而提高链路利用率;
二、MSTP
MSTP是在RSTP基础上的改进版本,可以在一个网络中划分多个MST域,在每个MST域内又可以形成多棵内部生成树,通过VLAN映射表把VLAN和生成树实例联系起来,将多个VLAN捆绑到一个实例中,各个实例拓扑的计算相互独立,并以实例为基础实现负载均衡;
1、基本概念
1)MSTP网络的层次结构
MSTP不仅涉及多个MSTI多生成树实例,而且还可划分多个MST域;
一个MSTP网络可以包含一个或多个MST域,而每个MST域内又可以包含一个或多个MSTI;
2)MST域 Multiple Spanning Tree Region 多生成树域
MST域由交换网络中的多台交换机以及交换机之间的网段构成;
一个MSTP网络可以存在一个或多个MST域,各MST域之间在物理上直接或间接相连;
同一个MST域的设备具有如下特点:
(1)开启MSTP功能;
(2)相同的域名;
(3)相同的VLAN到生成树实例的映射表;
(4)相同的MSTP修订级别;
3)MSTI Multiple Spanning Tree Instance 多生成树实例
MST域内的每棵生成树都是一个MSTI多生成树实例,MSTI多生成树实例之间相互独立;
一个MSTI多生成树实例可以与一个或多个VLAN对应,但一个VLAN只能与一个MSTI多生成树实例对应;
4)VLAN映射表
VLAN映射表是MST域的属性,描述了VLAN和MST域内对应MSTI之间的映射关系;
一个VLAN只能加入一个MSTI,而一个MSTI可以对应多个VLAN;
一台交换机可以划分多个VLAN,可以位于多个MSTI中;
5)IST Internal Spanning Tree 内部生成树
IST内部生成树是一个MSTI ID为0的特殊MSTI,是针对某个具体MST域来计算的;
每个MST域内只有一棵IST内部生成树,包括MST域内所有互连的交换机;
6)CST Common Spanning Tree 公共生成树
CST公共生成树是连接整个MSTP网络内所有MST域的一棵单生成树,是针对整个MSTP网络来计算的;
如果把每个MST域看作一台交换机,每个MST域看成是CST的一个节点,CST就是这些节点交换机通过STP、RSTP协议计算生成的一个生成树;
每个MSTP网络中只有一个CST公共生成树;
7)CIST Common and Internal Spanning Tree 公共和内部生成树
CIST公共和内部生成树是通过STP或RSTP协议计算生成的,连接整个MSTP网络内所有交换机的单生成树,由IST和CST共同构成;
需要注意的是,上面介绍的CST是连接交换网络中所有MST域的单生成树,而此处的CIST是连接交换网络内所有交换机的单生成树;
每个MSTP网络中也只有一个CIST,交换网络中所有MST域内的IST和CST一起构成一棵完整的生成树,就是CIST;
8)SST Single Spanning Tree 单生成树
构成SST单生成树有两种情况:
1)运行STP或RSTP生成树协议的交换机只属于一棵生成树;
2)MST域内只有一个交换机,这个交换机构成单生成树;
9)总根
总根是CIST公共和内部生成树的根桥,同时是某个MST域内IST内部生成树的根桥;
一个MSTP网络只有一个总根;
10)域根
因为在MSTP网络中,每个MST域内都有一个特殊的IST实例以及许多MSTI实例,所以域根又分为IST域根和MSTI域根;
IST域根就是各个MST域内IST生成树中距离CIST总根最近的交换机;
总根同时是总根所在MST域的IST域根;
MSTI域根就是对应生成树实例的树根,MST域内MSTI的拓扑不同,域内不同MSTI的域根也可能不同;
2、MSTP端口角色
MSTP中有七种端口角色:root port 根端口、designated port 指定端口、alternate port 替代端口、backup port 备份端口、edge port 边缘端口、master port 主端口、域边缘端口;
其中,根端口、指定端口、替代端口、备份端口、边缘端口这五种端口角色的作用与RSTP协议中对应端口角色的定义完全相同;
与RSTP一样,在MSTP中也是除边缘端口外的端口角色都参与MSTP计算;
同一端口在不同的生成树实例中,可以担任不同的端口角色;
1)根端口
根端口就是非根桥上到根桥根路径开销最小的端口;
根桥上没有根端口,只有非根桥上有根端口;
2)指定端口
指定端口就是向下游交换机转发BPDU的端口;
指定端口不仅根桥上有,非根桥上同样有;
3)alternate替代端口
当同一台交换机的两个端口同时连接一个下游交换机的两个端口时就存在一个环路,此时交换机会将其中一个端口阻塞,这个端口就是Alternate替代端口;
从BPDU角度看,Alternate替代端口就是由于学习到其它交换机发送的BPDU而被阻塞的端口;
从转发用户流量角度看,Alternate替代端口是根端口的备份端口,如果根端口被阻塞后,Alternate替代端口将成为新的根端口;
4)backup备份端口
当同一台交换机的两个端口同时连接一个下游交换机的一个端口时就存在一个环路,此时交换机将其中一个端口阻塞,这个端口就是Backup备份端口;
从BPDU角度看,Backup端口就是由于收到本设备上其它端口发送的BPDU而被阻塞的端口;
从转发用户流量角度看,Backup备份端口作为指定端口的备份,提供了一条从根桥到下游交换机的备份通路;
5)边缘端口
如果指定端口不再与任何交换机相连,而是与用户终端设备直接相连,这样的端口可以配置为边缘端口;
6)主端口 master port
Master端口就是MST域内IST域根上到总根外部根路径开销最小的端口;
Master端口是MST域和总根相连的所有路径上外部根路径开销最小的端口;
Master端口是特殊域边缘端口,在MST域内所有MSTI上的角色都是Master;
Master端口在CST/CIST上的角色是根端口;
7)域边缘端口
域边缘端口是位于MST域边缘,连接其它MST域或SST的端口;
进行MSTP计算时,域边缘端口在MSTI上的角色和CIST实例上的角色保持一致,即如果边缘端口在CIST实例上的角色是Master端口(连接域到总根的端口),则它在域内所有MSTI上的角色也是Master端口;
3、MSTP的端口状态和收敛机制
MSTP端口状态和RSTP协议中的定义完全相同,同样根据端口是否收发BPDU、学习MAC地址、转发用户流量把端口状态划分为3种:
1)discarding状态 只收BPDU
2)learning状态 收发BPDU、学习MAC地址
3)forwarding状态 收发BPDU、学习MAC地址、转发用户流量
MSTP的收敛机制与RSTP完全一样,P/A机制同样支持普通模式和增强模式两种;
4、MSTP拓扑计算原理
MSTP将整个二层网络划分为多个MST域,把每个MST域视为一个节点;
各个MST域之间按照STP或者RSTP协议算法进行计算并生成CST公共生成树;
在一个MST域内,通过MSTP协议算法计算生成若干个MSTI多生成树实例,其中实例0为IST内部生成树;
MSTP使用MST BPDU作为生成树计算的依据;
MST BPDU用来计算和维护MSTP;
1)MSTP向量优先级
MSTI和CIST拓扑都是根据优先级向量来计算的,这些优先级向量信息都包含在MST BPDU中;
各交换机互相交换MST BPDU来生成MSTI和CIST;
参与CIST计算的优先级向量按照优先级从高到低依次是:
(1)根桥ID
用于选择总根,即CIST中的根桥;
(2)外部路径开销
从MST域根到总根的路径开销;
MST域内所有交换机上保存的外部路径开销相同;
CIST根桥所属的MST域内所有交换机上保存的外部路径开销为0;
(3)域根ID
IST域根桥ID,一个IST域根是该MST域内到总根外部路径开销最小的交换机;
(4)内部路径开销
MST域内交换机到达MST域内IST域根的路径开销;
(5)指定桥ID
IST实例中发送MST BPDU的交换机;
(6)指定端口ID
IST实例中发送MST BPDU的端口;
(7)接收端口ID
IST实例中接收MST BPDU的端口;
参与MSTI计算的优先级向量按优先级从高到低依次是:
(1)MSTI域根ID
(2)MSTI内部路径开销
(3)指定桥ID
(4)指定端口ID
(5)接收端口ID
2)CIST的计算
经过MST BPDU比较后,首先在整个网络中选择一个优先级最高的交换作为CIST的根桥;
然后在每个MST域内通过MSTP协议算法计算生存IST;
同时MSTP将每个MST域作为节点,通过STP或RSTP协议算法在MST域间计算生成CST;
最后,CST和IST构成整个网络的CIST;
3)MSTI的计算
在MST域内,MSTP根据VLAN和MSTI的映射关系,生成不同的MSTI;
MSTI具备以下特点:
(1)每个MSTI独立计算自己的生成树,互不干扰;
(2)每个MSTI计算方法与RSTP基本相同;
(3)每个MSTI可以有不同的MSTI域根,不同的拓扑;
(4)每个MSTI在自己的生成树内发送BPDU;
(5)每个MSTI的拓扑通过命令配置决定;
(6)每个端口在不同的MSTI上的生成树参数可以不同;
(7)每个端口在不同MSTI上的端口角色、端口状态可以不同;
4)MSTI生成树算法实现
在一开始,每台交换机的各个端口会生成以自身交换机为根桥的MST BPDU,其中根路径开销为0,指定桥ID为自身交换机ID,指定端口为本端口;
每台交换机都向外发送自己的MST BPDU,并在接收到其它MST BPDU后进行如下处理:
(1)端口会丢弃比自身优先级低的MST BPDU;
(2)对于比自身优先级高的MST BPDU,交换机把接收到MST BPDU的内容替换自身端口MST BPDU的内容;然后交换机会比较所有端口的MST BPDU,选出最优的MST BPDU;
生成树计算步骤如下:
(1)选举根桥
通过比较所有交换机发送的MST BPDU,根桥ID最小交换机成为根桥;
(2)选举根端口
每台非根桥把接收到最优MST BPDU的端口作为根端口;
注意:最优MST BPDU指收到的MST BPDU携带的根路径开销加上接收端口的路径开销,即接收端口被替换后的MST BPDU;
(3)选举指定端口
首先,交换机根据根端口的MST BPDU和根端口的路径开销,为每个端口计算一个指定端口MST BPDU:根桥ID为根端口MST BPDU中根桥ID、根路径开销为根端口MST BPDU中根路径开销加上根端口路径开销、指定桥ID为自身交换机桥ID、指定端口ID为自身端口ID;
然后,交换机比较计算出来的MST BPDU与对应端口原来的MST BPDU:
如果计算出来的MST BPDU更优,对应端口作为指定端口,计算出来的MST BPDU替换对应端口原来的MST BPDU,并周期性向外发送;
如果对应端口原来的MST BPDU更优,阻塞对应端口,对应端口的MST BPDU不变,对应端口不能转发数据,只能接收MST BPDU;
(4)在生成树拓扑收敛后,无论非根桥的根端口是否收到MST BPDU,指定端口都按照hello time时间周期性发送MST BPDU;如果一个端口连续3个hello时间接收不到指定桥发送的MST BPDU,那么交换机认为与此邻居之间的链路故障;
5)MSTP对拓扑变化的处理
MSTP中检测拓扑是否发生变化的依据是一个非边缘端口进入forwarding状态;
交换机一旦检测到拓扑发生变化,进行如下处理:
(1)为本交换机的所有非边缘端口启动一个TC While Timer(是hello time的两倍),在这个时间内清空这些端口上学来的MAC地址;
(2)向外发送TC为置1的MST BPDU,直到TC While Timer超时;
(3)其它交换收到TC位置1的MST BPDU会清空除接收TC BPDU端口外的所有端口的MAC地址;
(4)为所有自己的非边缘端口和自己的根端口启动TC While Timer,重复上述过程;
5、MSTP BPDU报文
MSTP使用MST BPDU作为生成树计算的依据,MST BPDU报文用来计算生成树的拓扑、维护网络拓扑以及传达拓扑变化记录;
STP中定义的配置BPDU、TCN BPDU,RSTP中定义的RST BPDU、MSTP中定义的MST BPDU,版本号和类型值如下:
配置BPDU,版本0,类型0x00
TCN BPDU,版本0,类型0x80
RST BPDU,版本2,类型0x02
MST BPDU,版本3,类型0x02
1、MSTP BPDU报文格式
无论是域内的MST BPDU还是域间MST BPDU,前36个字节和RST BPDU相同;
从第37个字节开始是MSTP专有字段,最后的MSTI配置信息字段由若干MSTI配置信息组连缀而成;
MST BPDU格式字段说明:
Protocol Identifier,2字节,协议标识符总为0;
Protocol Version Identifier,1字节,协议版本标识符,STP为0,RSTP为2,MSTP为3;
BPDU Type,1字节,0x00为STP配置BPDU,0x80为STP TCN BPDU,0x02为RST BPDU或MST BPDU;
CIST Flags,1字节,CIST标志字段与RSTP标志字段完全一样;
CIST Root Identifier,8字节,CIST总根桥ID;
CIST External Path Cost,4字节,CIST外部路径开销是IST域根所属MST域到总根所属MST域的累计路径开销,类似于RSTP中的根路径开销,根据链路带宽计算;
CIST Regional Root Identifier,8字节,CIST域根桥ID即IST域根桥ID,总根所属MST域的IST域根桥ID就是总根桥ID;
CIST Port Identifier,2字节,IST中发送BPDU报文的指定端口ID;
Message Age,2字节,MST BPDU的消息生存时间;
Max Age,2字节,MST BPDU的最大生存时间,超时则认为到根桥的链路故障;
Hello Time,2字节,运行MSTP协议的设备每个hello time时间周期性发送MST BPDU;
Forward Delay,2字节,learning状态进入Learning状态的转发延时时间;
Version 1 Length,1字节,Version1 BPDU的长度,值固定为0;
Version 3 Length,2字节,Version3 BPDU的长度
MST Configuration Identifier,51字节,MST配置标识符,只有这里面的4个字段完全相同才属于同一个域;
CIST Internal Root Path Cost,4字节,CIST内部路径开销是发送BPDU的端口到IST域根的累计路径开销,CIST内部路径开销也是根据链路带宽计算的;
CIST Bridge Identifier,8字节,CIST的指定桥ID
CIST Remaining Hops,1字节,BPDU报文在CIST中的剩余跳数,每经过一个桥设备跳数减1;
MSTI Configuration Messages,16字节,每个MSTI配置消息占16个字节,如果有n个MSTI占用nx16字节;
MST配置标识符字段:
Configuration Identifier Format Selector,1字节,配置标识符选择器,固定为0;
Configuration Name,32字节,MST域名;
Revision Level,2字节,MST配置修订级别;
Configuration Digest,16字节,VLAN映射表的配置摘要;
MSTI配置消息字段:
MSTI Flags,1字节,MST标志位;
MSTI Regional Root Identifier,8字节,MSTI域根桥ID;
MSTI Internal Root Path Cost,4字节,MSTI内部路径开销是发送BPDU的端口到MSTI域根桥ID的累计路径开销,根据链路带宽计算;
MSTI Bridge Priority,1字节,发送MST BPDU的交换机在MSTI中的桥优先级;
MSTI Port Priority,1字节,发送MST BPDU的端口在MSTI中的端口优先级;
MSTI Remaining Hops,1字节,BPDU报文在MSTI中的剩余跳数;