生成树协议STP、RSTP和MSTP原理的理解(下)

STP/RSTP的缺陷

RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但RSTP和STP还存在同一个缺陷:由于局域网内所有的VLAN共享一棵生成树,因此无法在VLAN间实现数据流量的负载均衡,链路被阻塞后将不承载任何流量,还有可能造成部分VLAN的报文无法转发。

mstp基本思想

基于实例(Instance)计算出多棵生成树,每个实例都会生成自己的生成树,并且每个实例可以包含一个或多个VLAN,每一个VLAN只能映射到一个实例。交换机可以通过配置多个实例,实现不同VLAN组之间的负载分担。

基本概念解释

MST域是一个具有相同域名、修订级别和摘要信息的网桥或交换机构成的集合,一个域可以包含多个实例。

域名,本域的名称,MSTP中每一个域都有一个独一无二的名称,配置不同域名会被认为属于不同的域。

修订级别,目前保留,默认为0。

配置摘要,由网桥的vlan和实例映射关系生成的长度为16字节的HMAC-MD5签名。

IST是MST域内的一颗生成树,每颗生成树对应一个实例。实例号为0,一定存在的

MSTI是多生成树实例,实例号从1开始,为0的实例号是IST

MSTI域根,是每一个MSTI实例上优先级最高的网桥

CST(公共生成树)是网络内所有MST域通过计算得到的一棵树。

CIST(公共和内部生成树)是整个网络所有设备经过生成树计算得到的一棵树。由IST和CST共同构成。

CIST总根,是整个网络中优先级最高的桥,是CIST的根桥。

CIST域根,IST的根桥即为CIST的域根,是MST域内距离总根最近的桥,也称为Master桥。

端口角色

相较RSTP,桥的角色上,MSTP增加了Master桥。端口角色上,增加了域边界端口以及Master端口。根端口、指定端口、Alternate端口、Backup端口定义和RSTP一样。

IST(实例号为0网络)中距离总根最近的桥为Master桥,该桥为IST的根,Master桥指向总根(整个网络中优先级最高的桥)的端口为Master端口。

MST域内网桥和其他MST域或STP/RSTP网桥相连的端口称为域边界端口,Master端口也是域边界端口。

如下图创建了三个区域,暂时都只有IST(实例0),优先级和MAC都是我编的,然后下图标注了MSTP所有的概念,更方便理解吧。


BPDU报文


BPDU Type:0x02

BPDU flags:CIST标志字段

Root Identifier:CIST总根交换机ID

Root Path Cost:CIST外部路径开销,指从本交换机所属的MST域到CIST根交换机的累计路径开销。

Bridge Identifier:CIST的域根交换机ID(每个域距离根桥最近的交换机,域根并不是只有一个,每个域都有一个域根,很多资料上也称为CIST域根,我理解一半天),即IST Master的ID。如果总根在这个域内,那么域根交换机ID就是总根交换机ID。

Port Identifier:CIST的指定端口ID(当前报文的上游交换机发送端口)

Version 3 Length:表示MST专有字段的长度,用于接收到BPDU后进行校验。

MST Config ID:格式选择字符固定为0x00。

MST Config name:域名

MST Config revision:修订级别,为0

MST Config digest:配置摘要

CIST Internal Root Path Cost:CIST内部路径开销,表示发送此BPDU的网桥到达CIST域根的路径开销。

CIST Bridge Identifier:发送此BPDU的网桥ID

CIST Remaining hops:CIST剩余跳数,限制MST域的规模,从域根开始,BPDU每经过一个网桥,跳数就减一,网桥会丢弃收到的跳数为0的BPDU,从而限制MST域的规模。默认为20

MSTI配置信息中的内容只在各自实例中有效,且每个实例中这些字段值是独立的

MSTI flag:一个字节,从第一位到第七位的定义和RSTP相同,第八位为Master标志位

Region Root:表示该实例的域根ID

Internal root path cost:表示发送此BPDU的网桥到达MSTI域根的路径开销

Bridge Identifier priority:表示发送此BPDU的网桥,即指定桥的优先级,其中高4位为优先级位,第四位固定为0

Port Identifier priority:表示发送此BPDU的端口的优先级,其中高4位为优先级位,第四位固定为0

Remaining hops:表示BPDU在该MST实例中的剩余跳数。

优先级向量

MSTP计算可以分为CIST和MSTI计算两部分

CIST优先级向量

用于计算生成CIST生成树和CST生成树,总根,域根等

{CIST总根ID、外部路径开销、域根ID、内部路径开销、指定交换设备ID、指定端口ID、接收端口ID}

再次注意(不要被弄晕了)

外部路径开销是当前域的Master桥到总根的路径开销

内部路径开销是当前交换机到当前域根的路径开销

指定交换设备ID就是发送这个报文的交换机的ID

指定端口ID就是发送这个报文的交换机的端口ID

对比是按照从左往右的顺序,值小者为优,给个报文的图直观一些


MSTI优先级向量用于计算生成区域内的生成树和端口状态等,计算范围仅限区域内

{域根ID、内部路径开销、指定交换设备ID、指定端口ID、接收端口ID}

MSTP计算方法

每个BPDU既包含CIST计算所需的信息,也包含MSTI计算所需要的信息。

计算生成树时候和RSTP类似,在进行CST计算时,会把MST域看做逻辑上的一个网桥,网桥ID为IST域根的ID也就是Master桥ID(距离总根最近的桥)。

当网桥收到BPDU并判断不是同一个域后,不会解析MST专有字段的信息。

初始时每个网桥都认为自己是总根,发送以自己为总根、域根和指定桥的BPDU。

计算端口角色和交换机角色过程与RSTP相同。

CST(公共生成树)的计算过程

需要对比的优先级向量为{总根、外部路径开销、域根、指定端口ID、接收端口ID},因为生成CST时候把相同的域当做一个网桥了,网桥ID为MST域的Master桥ID,所以自然无需对比内部路径开销和指定桥ID了。

初始时,每个域根向其他域根发送以自己为总根的BPDU。

确定“根网桥”(一个域看成一个网桥),也是CIST的总根。

确定端口角色“根端口”也就是一个域的Master端口,“根端口”的网桥也就是域根。

确定指定端口、Alternate端口或者Backup端口。

阻塞域之间的Alternate端口和Backup端口。

IST(内部生成树)和MSTI(内部生成树实例)的计算过程

经过CST的计算生成了域内的根桥(即Master桥)

所需要比较的优先级向量为MSTI优先级向量,即{域根ID、内部路径开销、指定交换设备ID、指定端口ID、接收端口ID}

域内网桥通过比较内部路径开销来确定根端口。

通过比较BPDU的优先级确定指定端口、Alternate端口或者Backup端口。

阻塞IST上的Alternate端口和Backup端口。

MSTP与RSTP交互

RSTP网桥收到MSTP的BPDU时,会将MSTP的BPDU报文里的CIST总根ID,外部路径开销,域根ID,指定端口ID分别与RSTP的BPDU报文里的根桥ID,根桥开销,指定桥ID,指定端口ID对应。

MSTP网桥收到RSTP的BPDU时,会将RSTP的BPDU报文里的根桥ID,根桥开销,指定桥ID,指定端口ID分别与MSTP的BPDU报文里的CIST总根ID,外部路径开销,域根ID,指定端口ID对应。

P/A快速收敛机制

MSTP支持RSTP的快速收敛机制,但有不同点。详细的可以看上面的RSTP的P/A机制,这里只写区别。

RSTP是上游交换机指定端口发送Proposal置位的BPDU,下游网桥执行同步操作之后回应Agreement置位的BPDU,上游网桥收到Agreement置位的BPDU后其指定端口可以立即进入转发状态。

MSTP是上游交换机指定端口发送Proposal置位和Agreement置位的BPDU,下游网桥收到BPDU后执行同步操作然后回应Agreement置位的BPDU,上游网桥收到Agreement置位的BPDU后其指定端口可以立即进入转发状态。

补充

MSTP和实例相关的讲的较少,因为同一个MST域中可以有多个实例,每个实例可以运行通过一个或n个VLAN,但是一个VLAN只能存在一个实例中,然后每个实例都会各自生成生成树,除了IST(实例为0)的根节点是Master桥,其余实例都是按照RSTP类似方法计算出各自实例自己的根桥,指定桥,根端口和指定端口的。

MSTP因为有多个实例,每个端口上对实例的状态可能不一样,比如在实例1端口为根端口,实例2上这个端口为指定端口,所以会出现端口既会发BPDU报文也会收BPDU报文。

拓扑改变的处理和RSTP相同。

MSTP比RSTP就是多了分区域多实例,细化看,每个实例运行的都是RSTP。

RSTP和MSTP启动时简单介绍

当一台交换设备启动RSTP和MSTP时候,会默认自己为根桥,且所有使能RSTP或者MSTP的端口都为指定端口Discarding状态,这样就会触发P/A快速机制,当一个指定端口发送P/A机制报文没收到对端发送过来的回复报文,则需要经过2倍的Forward delay时间才能到转发态。假如下游有一个交换设备同时开启了RSTP或者MSTP,则都会发送P/A机制报文,收到报文后两个指定端口会对比报文确定自己的角色从而继续P/A快速机制。P/A会阻塞除边缘端口和根端口外的其他所有端口,端口两两进行这种操作从而生成整个生成树。

MSTP启动时,多个实例都会在互不干扰的生成对应的生成树,类似多线程一样。

MSTP收到其他区域报文时候,只会对比CIST的信息,MIST内容会忽略。