RSTP原理与配置
为什么引入RSTP?
STP协议虽然能够解决环路问题,但是收敛速度慢,影响了用户通信质量。如果STP网络的拓扑结构频繁变化,网络也会频繁失去连通性,从而导致用户通信频繁中断。IEEE于2001年发布的802.1w标准定义了快速生成树协议RSTP(Rapid Spanning-Tree Protocol),RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。
STP缺陷
STP能够提供无环网络,但是收敛速度较慢。如果STP网络的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断。RSTP使用了Proposal/Agreement机制保证链路及时协商,从而有效避免收敛计时器在生成树收敛前超时。在交换网络中,P/A过程可以从根桥向下游级联传递。
RSTP端口角色
运行RSTP的交换机使用了两个不同的端口角色来实现冗余备份。当到根桥的当前路径出现故障时,作为根端口的备份端口,Alternate端口提供了从一个交换机到根桥的另一条可切换路径。Backup端口作为指定端口的备份,提供了另一条从根桥到相应LAN网段的备份路径。当一个交换机和一个共享媒介设备例如Hub建立两个或者多个连接时,可以使用Backup端口。同样,当交换机上两个或者多个端口和同一个LAN网段连接时,也可以使用Backup端口。
RSTP边缘端口
边缘端口不接收处理配置BPDU,不参与RSTP运算。
RSTP里,位于网络边缘的指定端口被称为边缘端口。边缘端口一般与用户终端设备直接连接,不与任何交换设备连接。边缘端口不接收配置BPDU报文,不参与RSTP运算,可以由Disabled状态直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用了一样。但是,一旦边缘端口收到配置BPDU报文,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。
端口状态
RSTP把原来STP的5种端口状态简化成了3种。
Discarding状态,端口既不转发用户流量也不学习MAC地址。
Learning状态,端口不转发用户流量但是学习MAC地址。
Forwarding状态,端口既转发用户流量又学习MAC地址。
RST BPDU
除了部分参数不同,RSTP使用了类似STP的BPDU报文,即RST BPDU报文。BPDU Type用来区分STP的BPDU报文和RST (Rapid Spanning Tree) BPDU报文。STP的配置BPDU报文的BPDU Type值为0(0x00),TCN BPDU报文的BPDU Type值为128 (0x80),RST BPDU报文的BPDU Type值为2 (0x02)。STP的BPDU报文的Flags字段中只定义了拓扑变化TC(Topology Change)标志和拓扑变化确认TCA(Topology Change Acknowledgment)标志,其他字段保留。在RST BPDU报文的Flags字段里,还使用了其他字段。包括P/A进程字段和定义端口角色以及端口状态的字段。Forwarding,Learning与Port Role表示发出BPDU的端口的状态和角色。
STP中,当网络拓扑稳定后,根桥按照Hello Timer规定的时间间隔发送配置BPDU报文,其他非根桥设备在收到上游设备发送过来的配置BPDU报文后,才会触发发出配置BPDU报文,此方式使得STP协议计算复杂且缓慢。RSTP对此进行了改进,即在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置BPDU报文,非根桥设备都会仍然按照Hello Timer规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行。
RSTP的收敛过程
每一台交换机启动RSTP后,都认为自己是“根桥”,并且发送RST BPDU。所有端口都为指定端口,处于Discarding状态。
每个认为自己是“根桥”的交换机生成一个RST BPDU报文来协商指定网段的端口状态,此RST BPDU报文的Flags字段里面的Proposal位需要置位。当一个端口收到RST BPDU报文时,此端口会比较收到的RST BPDU报文和本地的RST BPDU报文。如果本地的RST BPDU报文优于接收的RST BPDU报文,则端口会丢弃接收的RST BPDU报文,并发送Proposal置位的本地RST BPDU报文来回复对端设备。
交换机使用同步机制来实现端口角色协商管理。当收到Proposal置位并且优先级高的BPDU报文时,接收交换机必须设置所有下游指定端口为Discarding状态。如果下游端口是Alternate端口或者边缘端口,则端口状态保持不变。
当确认下游指定端口迁移到Discarding状态后,设备发送RST BPDU报文回复上游交换机发送的Proposal消息。在此过程中,端口已经确认为根端口,因此RST BPDU报文Flags字段里面设置了Agreement标记位和根端口角色。
在P/A进程的最后阶段,上游交换机收到Agreement置位的RST BPDU报文后,指定端口立即从Discarding状态迁移为Forwarding状态。然后,下游网段开始使用同样的P/A进程协商端口角色。
链路故障/根桥失效
链路故障或者根桥失效都会导致交换机收不到邻居发送的RST BPDU。 在RSTP中,3倍Hello Timer内收不到邻居的BPDU即认为邻居失效。
在STP中,当出现链路故障或根桥失效导致交换机收不到BPDU时,交换机需要等待Max Age时间后才能确认出现了故障。而在RSTP中,如果交换机的端口在连续3次Hello Timer规定的时间间隔内没有收到上游交换机发送的RST BPDU,便会确认本端口和对端端口的通信失败,从而需要重新进行RSTP的计算来确定交换机及端口角色。
STP兼容
RSTP是可以与STP实现后向兼容的,但在实际中,并不推荐这样的做法,原因是RSTP会失去其快速收敛的优势,而STP慢速收敛的缺点会暴露出来。
当同一个网段里既有运行STP的交换机又有运行RSTP的交换机时,STP交换机会忽略接收到的RST BPDU,而RSTP交换机在某端口上接收到STP BPDU时,会等待两个Hello Time时间之后,把自己的端口转换到STP工作模式,此后便发送STP BPDU,这样就实现了兼容性操作
配置STP模式
执行命令后,SWA所有端口都工作在RSTP模式。
在Sx7交换机上,可以使用stp mode rstp命令来配置交换机工作在RSTP模式。
stp mode rstp命令在系统视图下执行,此命令必须在所有参与快速生成树拓扑计算的交换机上配置。
display stp命令可以显示RSTP配置信息和参数。根据显示信息可以确认交换机是否工作在RSTP模式。
配置边缘端口
边缘端口可以由Disabled直接转到Forwarding状态,不经历时延。
Sx7系列交换机默认所有端口都工作在非边缘端口。
边缘端口完全不参与STP或RSTP计算。边缘端口的状态要么是Disabled,要么是Forwarding;终端上电工作后,它就直接由Disabled状态转到Forwarding状态,终端下电后,它就直接由Forwarding状态转到Disabled状态。
交换机所有端口默认为非边缘端口。
stp edged-port enable命令用来配置交换机的端口为边缘端口,它是一个针对某一具体端口的命令。
stp edged-port default命令用来配置交换机的所有端口为边缘端口。
stp edged-port disable命令用来将边缘端口的属性去掉,使之成为非边缘端口。它也是一个针对某一具体端口的命令。
需要注意的是,华为Sx7系列交换机运行STP时也可以使用边缘端口设置。
根保护
根保护功能确保了根桥的指定端口不会因为一些网络问题而改变端口角色。
由于错误配置根交换机或网络中的恶意攻击,根交换机有可能会收到优先级更高的BPDU报文,使得根交换机变成非根交换机,从而引起网络拓扑结构的变动。这种不合法的拓扑变化,可能会导致原来应该通过高速链路的流量被牵引到低速链路上,造成网络拥塞。交换机提供了根保护功能来解决此问题。根保护功能通过维持指定端口角色从而保护根交换机。一旦启用了根保护功能的指定端口收到了优先级更高的BPDU报文时,端口会停止转发报文并且进入Listening状态。经过一段时间后,如果端口一直没有再收到优先级较高的BPDU报文,端口就会自动恢复到原来的状态。根保护功能仅在指定端口生效,不能配置在边缘端口或者使能了环路保护功能的端口上。
BPDU保护
配置BPDU保护功能后,如果边缘端口收到BPDU报文,边缘端口将会被立即关闭,并通知网管系统。被关闭的边缘端口可配置成自动恢复或管理员手动恢复。
正常情况下,边缘端口是不会收到BPDU的。但是,如果有人发送BPDU来进行恶意攻击时,边缘端口就会收到这些BPDU,并自动变为非边缘端口,且开始参与网络拓扑计算,从而会增加整个网络的计算工作量,并可能引起网络震荡。
为防止上述情况的发生,我们可以使用BPDU保护功能。使能BPDU保护功能后的交换机的边缘端口在收到BPDU报文时,会立即关闭该端口,并通知网络管理系统。被关闭的边缘端口可配置成自动恢复或管理员手动恢复。
如需使能BPDU保护功能,可在系统视图下执行stp bpdu-protection命令。
环路保护
根端口如果长时间收不到来自上游的BPDU,则进入Discarding状态,避免在网络中形成环路。
交换机通过从上游交换机持续收到BPDU报文来维护根端口和阻塞端口的状态。当由于链路拥塞或者单向链路故障时,交换机不能收到上游交换机发送的BPDU报文,交换机重新选择根端口。最初的根端口会变成指定端口,阻塞端口进入Forwarding状态,这就有可能导致网络环路。
交换机提供了环路保护功能来避免这种环路的产生。环路保护功能使能后,如果根端口不能收到上游交换机发送的BPDU报文,则向网管发出通知信息。根端口会被阻塞,阻塞端口仍然将保持阻塞状态,这样就避免了可能发生的网络环路。
如需使能环路保护功能,可在接口视图下执行stp loop-protection命令。
配置验证
display stp interface 命令可以显示端口的RSTP配置情况。包括端口状态,端口优先级,端口开销,端口角色,是否为边缘端口等等。