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内容会忽略。