生成树的改进 RSTP与MSTP
[TOC]
快速生成树协议RSTP
IEEE 802.1W中定义的RSTP可以视为STP的改进版本,RSTP在许多方面对STP进行了优化,它的收敛速度更快,而且能够兼容STP
RSTP对STP的改进:
- RSTP对STP的改进:
- 通过端口角色的增补,简化了生成树协议的理解及部署;
- 端口状态的重新划分;
- 配置BPDU格式的改变,充分利用了STP协议报文中的Flag字段,明确了端口角色;
- 配置BPDU的处理发生变化;
- 快速收敛;
- 增加保护功能。
改进点1:端口角色的改进:
RSTP的端口角色共有4种:根端口、指定端口、Alternate端口和Backup端口。
根端口和指定端口的作用同STP中定义,Alternate端口和Backup端口的描述如下:
- 从配置BPDU报文发送角度来看:
- Alternate端口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口
- Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口
- 从用户流量角度来看:
- Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口
- Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路
给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程
改进点2:端口状态的改进
RSTP的状态规范缩减为3种,根据端口是否转发用户流量和学习MAC地址来划分:
- Discarding状态:不转发用户流量也不学习MAC地址
- Learning状态:不转发用户流量但是学习MAC地址
- Forwarding状:既转发用户流量又学习MAC地址。
STP端口状态 | RSTP端口状态 | 端口在拓扑中的角色 |
---|---|---|
Forwarding | Forwarding | 包括根端口、指定端口 |
Learning | Learning | 包括根端口、指定端口 |
Listening | Discarding | 包括根端口、指定端口 |
Blocking | Discarding | 包括Alternate端口、Backup端口 |
Disabled | Discarding | 包括Disable端口 |
改进点3:配置BPDU - RST BPDU
RSTP的配置BPDU充分利用了STP报文中的Flag字段,明确了端口角色
- 除了保证和STP格式基本一致之外,RSTP作了如下变化:
- Type字段:配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃
- Flag字段:使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU
RST BPDU报文格式:
RST BPDU与STP配置BPDU报文格式不同点
- BPDU类型,1 Byte,RST BPDU的类型值为0x02。
- 标志,1 Byte,包括:
- bit 7:TCA,表示拓扑变化确认;
- bit 6:Agreement,表示同意,用于P/A机制;
- bit 5:Forwarding,表示转发状态;
- bit 4:Learning,表示学习状态;
- bit 3和bit 2:表示端口角色, 00表示未知端口, 01表示替代或备份端口, 10表示根端口, 11表示指定端口
- bit 1:Proposal,表示提议,用于P/A机制;
- bit 0:TC,表示拓扑变化。
改进点4:配置BPDU的处理
RSTP对配置BPDU的发送方式进行了改进
在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置BPDU报文,非根桥设备仍然按照Hello Time规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行
更短的BPDU超时时间
如果一个端口在超时时间(即三个周期,超时时间=Hello Time×3)内没有收到上游设备发送过来的配置BPDU,那么该设备认为与此邻居之间的协商失败
STP需要先等待一个Max Age
处理次优BPDU
当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身缓存的RST BPDU与收到的RST BPDU进行比较如果该端口缓存的RST BPDU优于收到的RST BPDU,那么该端口会直接丢弃收到的RST BPDU,立即回应自身缓存的RST BPDU,从而加快收敛速度
- STP: STP只有指定端口会立即处理次优BPDU,其他端口会忽略次优BPDU,等到Max Age计时器超时后,缓存的次优BPDU才会老化,然后发送自身更优的BPDU,进行新一轮的拓扑收敛。
- RSTP: RSTP处理次优BPDU报文不再依赖于任何定时器,解决拓扑收敛,同时RSTP的任何端口角色都会处理次优BPDU,从而加快了拓扑收敛。
改进点5:快速收敛机制
快速收敛机制:
- 如果网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口,进入Forwarding状态。因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥
- 如果网络中一指定端口失效,那么网络中最优的Backup端口将成为指定端口,进入Forwarding状态。因为Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路
##### 边缘端口 (Edge Port)机制:
在RSTP里面,如果某一个端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口可以设置为边缘端口
边缘端口不参与RSTP计算,可以由Discarding直接进入Forwarding状态,同时边缘端口的UP和Down,不会引起网络拓扑的变动
但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡
Proposal/Agreement机制:
简称P/A机制,RSTP通过P/A机制加快了上游端口进入Forwarding状态的速度。 当一个端口被选举成为指定端口之后,会先进入Discarding状态,再通过P/A机制快速进入Forwarding状态
事实上对于STP,指定端口的选择可以很快完成,主要的速度瓶颈在于:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定,也就是说必须要等待至少一个Forward Delay所有端口才能进行转发。 而RSTP的主要目的就是消除这个瓶颈,通过阻塞自己的非根端口来保证不会出现环路。而使用P/A机制加快了上游端口进入Forwarding状态的速度。
改进点6:拓扑变更机制
在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态。
一旦检测到拓扑发生变化,将进行如下处理: 为本交换设备的所有非边缘指定端口和根端口启动一个TC While Timer,该计时器值是Hello Time的两倍。在这个时间内,清空状态发生变化的端口上学习到的MAC地址。 同时,由非边缘指定端口和根端口向外发送RST BPDU,其中TC置位。一旦TC While Timer超时,则停止发送RST BPDU。 其他交换设备接收到RST BPDU后,清空所有端口(除了收到RST BPDU的端口和边缘端口)学习到MAC地址,然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,重复上述过程。 如此,网络中就会产生RST BPDU的泛洪。
RSTP与STP的兼容
RSTP可以兼容STP:RSTP可以和STP互操作,但是此时会丧失快速收敛等RSTP优势。
当一个网段里既有运行STP的交换设备又有运行RSTP的交换设备,STP交换设备会忽略RSTP的BPDU
运行RSTP的交换设备在某端口上接收到运行STP的交换设备发出的配置BPDU,在两个Hello Time时间之后,便把自己的端口转换到STP工作模式,发送配置BPDU,从而实现了互操作。
RSTP的基本配置
RSTP的配置指令与STP的基本配置指令相同此处介绍不同指令:
设置RSTP
代码语言:javascript复制[Huawei] stp mode rstp
配置当前接口为边缘端口
代码语言:javascript复制[Huawei-GigabitEthernet0/0/1] stp edged-port enable
缺省情况下,交换设备的所有端口都是非边缘端口。
RSTP的保护功能配置命令
配置BPDU保护功能
代码语言:javascript复制[Huawei] stp bpdu-protection
配置交换设备边缘端口的BPDU保护功能。缺省情况下,交换设备的BPDU保护功能处于禁用状态。
配置根保护功能
代码语言:javascript复制[Huawei-GigabitEthernet0/0/1] stp root-protection
配置交换设备的根保护功能。缺省情况下,端口的根保护功能处于去使能状态。当端口的角色是指定端口时,配置的根保护功能才生效。配置了根保护的端口,不可以配置环路保护
配置环路保护功能
代码语言:javascript复制[Huawei-GigabitEthernet0/0/1] stp loop-protection
配置交换设备根端口或Alternate端口的环路保护功能。缺省情况下,端口的环路保护功能处于关闭状态
配置TC保护功能
代码语言:javascript复制[Huawei] stp tc-protection interval interval-value
配置设备处理阈值指定数量的拓扑变化报文所需的时间。缺省情况下,设备处理最大数量的拓扑变化报文所需的时间是Hello Time
RSTP与STP的不足
流量无法负载分担 和 二层次优路径
多生成树协议(MSTP)
MSTP是IEEE 802.1S中定义的生成树协议,MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡
MSTP可以将一个或多个VLAN映射到一个Instance(实例),再基于Instance计算生成树,映射到同一个Instance的VLAN共享同一棵生成树
MSTP的基本概念
MST Region
- MSTP网络层次:
- MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。
- MST Region(Multiple Spanning Tree Region,多生成树域),也可简称MST域
- 由交换网络中的多台交换设备以及它们之间的网段所构成
- 一个局域网可以存在多个MST域,各MST域之间在物理上直接或间接相连。用户可以通过MSTP配置命令把多台交换设备划分在同一个MST域内
- MSTP网络中包含1个或多个MST域,每个MST域中包含一个或多个多生成树实例。
- 同一个MST域的设备具有下列特点:
- 都启动了MSTP,具有相同的域名,具有相同的VLAN到生成树实例映射配置,具有相同的MSTP修订级别配置
MSTI
Multiple Spanning Tree Instance,多生成树实例:一个MST域内可以生成多棵生成树,每棵生成树都称为一个MSTI,MSTI使用Instance ID标识,华为设备取值为0~4094。
- VLAN映射表 MST域的属性,描述了VLAN和MSTI之间的映射关系。
- VLAN1映射到MSTI 1,VLAN2映射到MSTI 2,其余VLAN映射到MSTI 3
- Instance0是缺省存在的,而且缺省时,华为交换机上所有的VLAN都映射到了Instance0。
- 通过设置VLAN映射表,把VLAN和MSTI联系起来 每个VLAN只能对应一个MSTI,即同一VLAN的数据只能在一个MSTI中传输,而一个MSTI可能对应多个VLAN
CST(Common Spanning Tree,公共生成树)
是连接交换网络内所有MST域的一棵生成树。 如果把每个MST域看作是一个节点,CST就是这些节点通过生成树协议计算生成的一棵生成树。
如图深蓝色粗线条连接各个域构成CST。
IST(Internal Spanning Tree,内部生成树) 是各MST域内的一棵生成树。 IST是一个特殊的MSTI,MSTI的Instance ID为0。 如图所示的MST Region 4,黑色细线条在域中连接该域的所有交换设备构成IST。
CIST(Common and Internal Spanning Tree,公共和内部生成树) 通过生成树协议计算生成的,连接一个交换网络内所有交换设备的单生成树。 如图所示,所有MST域的IST加上CST就构成一棵完整的生成树,即CIST。
MSTP的端口
MSTP端口角色
MSTP中定义的所有端口角色包括:根端口、指定端口、Alternate端口、Backup端口、Master端口、域边缘端口和边缘端口
端口角色 | 说明 |
---|---|
根端口 | 在非根桥上,离根桥最近的端口是本交换设备的根端口。根端口负责向树根方向转发数据 |
指定端口 | 对一台交换设备而言,它的指定端口是向下游交换设备转发BPDU报文的端口。 |
Alternate端口 | 从配置BPDU报文发送角度来看,Alternate端口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口。从用户流量角度来看,Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。 |
Backup端口 | 从配置BPDU报文发送角度来看,Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口。从用户流量角度来看,Backup端口作为指定端口的备份,提供了另外一条从根节点到叶节点的备份通路 |
端口角色 | 说明 |
---|---|
Master端口 | Master端口是MST域和总根相连的所有路径中最短路径上的端口,它是交换设备上连接MST域到总根的端口。Master端口是域中的报文去往总根的必经之路。Master端口是特殊域边缘端口,Master端口在CIST上的角色是Root Port,在其它各实例上的角色都是Master端口 |
域边缘端口 | 域边缘端口是指位于MST域的边缘并连接其它MST域或SST的端口。 |
端口角色 | 说明 |
---|---|
边缘端口 | 如果指定端口位于整个域的边缘,不再与任何交换设备连接,这种端口叫做边缘端口。边缘端口一般与用户终端设备直接连接 |
MSTP的端口状态
MSTP定义的端口状态与RSTP协议中定义相同: Forwarding状态:端口既转发用户流量,学习MAC地址,又接收/发送BPDU报文。 Learning状态:过渡状态,端口接收/发送BPDU报文,不转发用户流量但是学习MAC地址。 Discarding状态:端口只接收BPDU报文,不转发用户流量也不学习MAC地址。
MSTP端口状态 | 端口在拓扑中的角色 |
---|---|
Forwarding | 包括根端口、指定端口、Master端口、域边缘端口 |
Learning | 包括根端口、指定端口、Master端口、域边缘端口 |
Discarding | 包括根端口、指定端口、Master端口、域边缘端口、Alternate端口、Backup端口 |
MSTP报文
MSTP使用MST BPDU(Multiple Spanning Tree Bridge Protocol Data Unit,多生成树桥协议数据单元)作为生成树计算的依据。 MST BPDU报文用来计算生成树的拓扑、维护网络拓扑以及传达拓扑变化记录。
无论是域内的MST BPDU还是域间的,前36个字节和RST BPDU相同。从第37个字节开始是MSTP专有字段。最后的MSTI配置信息字段由若干MSTI配置信息组连缀而成。 MST BPDU中主要信息说明: Protocol Identifier:2 Byte,协议标识符。 Protocol Version Identifier:1 Byte,协议版本标识符,STP为0,RSTP为2,MSTP为3。 BPDU Type:1 Byte,BPDU类型: 0x00:STP的Configuration BPDU 0x80:STP的TCN BPDU(Topology Change Notification BPDU) 0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU) CIST Flags:1 Byte,CIST标志字段。 CIST Root Identifier:8 Byte,CIST的总根交换设备ID。 CIST External Path Cost:4 Byte,CIST外部路径开销指从本交换设备所属的MST域到CIST根交换设备所属的MST域的累计路径开销。CIST外部路径开销根据链路带宽计算。
CIST Regional Root Identifier:8 Byte,CIST的域根交换设备ID,即IST Master的ID。如果总根在这个域内,那么域根交换设备ID就是总根交换设备ID。 CIST Port Identifier:2 Byte,本端口在IST中的指定端口ID。 Message Age:2 Byte,BPDU报文的生存期。 Max Age:2 Byte,BPDU报文的最大生存期,超时则认为到根交换设备的链路故障。 Hello Time:2 Byte,Hello定时器,缺省为2秒。 Forward Delay:2 Byte,Forward Delay定时器,缺省为15秒。 Version 1 Length:1 Byte,Version1 BPDU的长度,值固定为0。 Version 3 Length:2 Byte,Version3 BPDU的长度。 MST Configuration Identifier:51 Byte,MST配置标识,表示MST域的标签信息,包含4个字段。 CIST Internal Root Path Cost:4 Byte,CIST内部路径开销指从本端口到IST Master交换设备的累计路径开销。CIST内部路径开销根据链路带宽计算。 CIST Bridge Identifier:8 Byte,CIST的指定交换设备ID。 CIST Remaining Hops:1 Byte,BPDU报文在CIST中的剩余跳数。 MSTI Configuration Messages:16 Byte,MSTI配置信息。每个MSTI的配置信息占16 Byte,如果有n个MSTI就占用n×16 Byte。
MSTP的工作原理
MSTP拓扑计算: MSTP可以将整个二层网络划分为多个MST域,各个域之间通过计算生成CST,域内生成IST,CST和IST构成了整个交换设备网络的CIST。 域内还可以基于实例计算生成多棵生成树,每棵生成树都被称为是一个MSTI。 CIST和MSTI都是根据优先级向量来计算的,这些优先级向量信息都包含在MST BPDU中。各交换设备互相交换MST BPDU来生成CIST和MSTI 。 参与CIST计算的优先级向量为: { 根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID } 参与MSTI计算的优先级向量为: { 域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID }
优先级向量说明: 根交换设备ID:根交换设备ID用于选择CIST中的根交换设备。 根交换设备ID = Priority(16 bit) MAC(48 bit)。 其中Priority为MSTI0的优先级。 外部路径开销(External Root Path Cost,ERPC):从CIST的域根到达总根的路径开销。 MST域内所有交换设备上保存的外部路径开销相同。 若CIST根交换设备在域中,则域内所有交换设备上保存的外部路径开销为0。 域根ID:域根ID用于选择MSTI中的域根。 域根ID = Priority(16 bit) MAC(48 bit)。 其中Priority为MSTI0的优先级。 内部路径开销(Internal Root Path Cost,IRPC):本桥到达域根的路径开销。 域边缘端口保存的内部路径开销大于非域边缘端口保存的内部路径开销。 指定交换设备ID:CIST或MSTI实例的指定交换设备是本桥通往域根的最邻近的上游桥。 如果本桥就是总根或域根,则指定交换设备为自己。 指定端口ID:指定交换设备上同本设备上根端口相连的端口。 Port ID = Priority(4 bit) 端口号(12 bit)。 端口优先级必须是16的整数倍。 接收端口ID:接收到BPDU报文的端口。 Port ID = Priority(4 bit) 端口号(12 bit)。 端口优先级必须是16的整数倍。
优先级向量比较原则: 同一向量比较,值最小的向量具有最高优先级。 优先级向量比较原则如下 首先,比较根交换设备ID。 如果根交换设备ID相同,再比较外部路径开销。 如果外部路径开销相同,再比较域根ID。 如果域根ID仍然相同,再比较内部路径开销。 如果内部路径仍然相同,再比较指定交换设备ID。 如果指定交换设备ID仍然相同,再比较指定端口ID。 如果指定端口ID还相同,再比较接收端口ID。 如果端口接收到的BPDU内包含的配置消息优于端口上保存的配置消息,则端口上原来保存的配置消息被新收到的配置消息替代。端口同时更新交换设备保存的全局配置消息。反之,新收到的BPDU被丢弃。