多生成树协议MSTP,协议标准IEEE 802.1s,通过生成多个生成树,来解决以太网环路问题。
BPDU包组播地址:
01-80-C2-00-00-00
MSTP的报文是通过802.3(Vlan)承载的。
MSTP出现的背景
- RSTP和STP还存在同一个缺陷:由于局域网内所有的VLAN共享一棵生成树,因此无法在VLAN间实现数据流量的负载均衡,链路被阻塞后将不承载任何流量,还有可能造成部分VLAN的报文无法转发
- MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡
- MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。每棵生成树叫做一个多生成树实例MSTI,每个域叫做一个MST域
生成树实例是多个VLAN的一个集合。通过将多个VLAN捆绑到一个实例,可以节省通信开销和资源占用率。MSTP各个实例拓扑的计算相互独立,在这些实例上可以实现负载均衡。可以把多个相同拓扑结构的VLAN映射到一个实例里,这些VLAN在端口上的转发状态取决于端口在对应MSTP实例的状态
因此,MSTP的目的有两个:
- 形成多棵无环路的树,解决广播风暴并实现冗余备份
- 多棵生成树在VLAN间实现负载均衡,不同VLAN的流量按照不同的路径转发。
报文格式
MSTP的报文是通过RSTP报文来承载的,因此BPDU Type=02
,只不过是多了一个MST扩展,扩展中包含MSTP的内容。
无论是域内的MST BPDU还是域间的,前36个字节和RST BPDU相同。从第37个字节开始是MSTP专有字段,最后的MSTI配置信息字段由若干MSTI配置信息组连接而成。
- Version 3 Length:MSTP的BPDU的长度
- MST Configuration Identifier:MST配置标识,表示MST域的标签信息,包含4个字段。
- CIST Internal Root Path Cost:CIST内部路径开销指从本端口到IST Master交换设备的累计路径开销。CIST内部路径开销根据链路带宽计算
- CIST Bridge Identifier:CIST的指定交换设备ID
- CIST Remaining Hops:BPDU报文在CIST中的剩余跳数
- MSTI Configuration Messages:MSTI配置信息。每个MSTI的配置信息占16 bytes,如果有n个MSTI就占用n×16bytes
同一个MST域的条件(重点)⭐️
- 都启动了MSTP
- 具有相同的域名
- 具有相同的VLAN到生成树实例映射配置
- 具有相同的MSTP修订级别配置
即MST配置标识必须一致:
优先级只能是4096的倍数的原因:
RootID
=PRI(2B)
+背板MAC(6B)
=PRI(4bit)
+SYSID(12bit,这一块就是VlanID,最大4096)
+MAC(6B)
设置优先级时primary代表优先级为0,secondary代表优先级为4096
术语以及之间的关系图谱
- 多生成树实例MSTI
所有运行STP/RSTP/MSTP的交换设备经MSTP协议计算后形成的树状网络 - 多生成树域MST域
由交换网络中的多台交换设备以及它们之间的网段所构成 - 公共生成树CST
连接交换网络内所有MST域的一棵生成树
如果把每个MST域看作是一个节点,CST就是这些节点通过STP或RSTP协议计算生成的一棵生成树
如图1所示,黑色线条连接各个域构成CST - 内部生成树IST
各MST域内的一棵生成树
IST是一个特殊的MSTI,MSTI的ID为0,通常称为MSTI0,IST是CIST在MST域中的一个片段
如图1所示,深蓝色线条在域中连接该域的所有交换设备构成IST - 单生成树SST:两种情况
- 运行STP或RSTP的交换设备只能属于一个生成树
- MST域中只有一个交换设备,这个交换设备构成单生成树
- 公共内部生成树CIST:所有MST域的IST+CST
- 域根,IST域根和MSTI域根
- IST域根如图1所示,在MST域中IST生成树中距离总根最近的交换设备是IST域根
- MSTI域根是每个多生成树实例的树根,如图2所示,域中不同的MSTI有各自的域根,
一个MST域内可以生成多棵生成树,每棵生成树都称为一个MSTI
- 总根
全网中BID最小的为总根 - 主桥
域内距离总根最近的交换设备,如图1中的黄色交换机,如果总根在MST域中,则总根为该域的主桥
CIST中的选举过程
- 先选举总根
- 每个区域需要选举域根。域根是到达总根距离最短的设备,每个区域只能选举一个域根。如果该区域中存在总根,那么总根同时也是该区域的域根
- 非总根和域根的设备需要选举一个到达总根距离最短的RP
- 每条链路需要选举DP
MSTP拓扑计算
MSTP可以将整个二层网络划分为多个MST域,各个域之间通过计算生成CST。域内则通过计算生成多棵生成树,每棵生成树都被称为是一个多生成树实例。其中实例0被称为IST,其他的多生成树实例为MSTI。MSTP同STP一样,使用配置消息进行生成树的计算,只是配置消息中携带的是设备上MSTP的配置信息。
优先级向量
MSTI和CIST都是根据优先级向量来计算的,这些优先级向量信息都包含在MST BPDU中。各交换设备互相交换MST BPDU来生成MSTI和CIST。
参与CIST计算的优先级向量为:{ 根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID }
参与MSTI计算的优先级向量为:{ 域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID }
比较原则(CIST选举的顺序)(重点)⭐️
确定设备角色和端口角色;同一向量比较,值最小的向量具有最高优先级
- 比较CIST的总根的BID,越小越优
- 比较CIST中到达总根的ERPC(外部根路径开销),越小越优
- 比较CIST中域根的BID,越小越优
- 比较CIST中到达域根的IRPC(内部根路径开销),越小越优
- 比较CIST中BPDU包发送者的BID,越小越优
- 比较CIST中BPDU包发送者的PORT ID,越小越优
- 比较CIST中BPDU包接收者的PORT ID,越小越优
如果端口接收到的BPDU内包含的配置消息优于端口上保存的配置消息,则端口上原来保存的配置消息被新收到的配置消息替代。端口同时更新交换设备保存的全局配置消息。反之,新收到的BPDU被丢弃。
CIST的计算
经过比较配置消息后,在整个网络中选择一个优先级最高的交换设备作为CIST的树根。
在每个MST域内MSTP通过计算生成IST;同时MSTP将每个MST域作为单台交换设备对待,通过计算在MST域间生成CST。
CST和IST构成了整个交换设备网络的CIST。
MSTI的计算
在MST域内,MSTP根据VLAN和生成树实例的映射关系,针对不同的VLAN生成不同的生成树实例。
每棵生成树独立进行计算,计算过程与STP计算生成树的过程类似。
MSTI的特点
- 每个MSTI独立计算自己的生成树,互不干扰
- 每个MSTI的生成树计算方法与STP基本相同
- 每个MSTI的生成树可以有不同的根,不同的拓扑
- 每个MSTI在自己的生成树内发送BPDU
- 每个MSTI的拓扑通过命令配置决定
- 每个端口在不同MSTI上的生成树参数可以不同
- 每个端口在不同MSTI上的角色、状态可以不同
在运行MSTP协议的网络中,一个VLAN报文将沿着如下路径进行转发:
- 在MST域内,沿着其对应的MSTI转发
- 在MST域间,沿着CST转发
MSTP拓扑变化处理与RSTP拓扑变化处理过程类似
追问
为什么需要使用 MSTP
MSTP 的作用主要是用来负载,可以通过实例进行 VLAN 内流量的负载
- STP
- 形成一棵无环路的树,解决广播风暴并实现冗余备份,收敛速度较慢
- 无需区分用户或业务流量,所有VLAN 共享一棵生成树
- RSTP
- 形成一棵无环路的树,解决广播风暴并实现冗余备份,收敛速度快
- 无需区分用户或业务流量,所有VLAN 共享一棵生成树
- MSTP
- 形成多棵无环路的树,解决广播风暴并实现冗余备份,收敛速度快,多棵生成树在VLAN间实现负载均衡,不同VLAN的流量按照不同的路径转发
- 需要区分用户或业务流量,并实现负载分担。不同的VLAN通过不同的生成树转发流量,每棵生成树之间相互独立