HCIP-Datacom Core Technology V1.0_14 RSTP原理与配置

快速生成树协议概述

STP回顾与STP不足

STP的工作原理

STP协议是为了解决二层环路这样的一个问题, 如果在二层上面将多台设备进行互联,虽然能够提高网络的可靠性,但是会引起环路,环路一旦产生就很麻烦, 因为无论是MAC地址表震荡,还是广播风暴,最终受影响的是用户, 这样用户在通信过程中就可能会产生时断时续,因此就提出了STP这样的工作机制。

在STP协议初始化的过程中,每台设备都要选举类似于一个根桥的角色,然后当拓扑稳定之后, 由根桥周期性的每两秒发送一次BPDU报文,用来通知非根桥设备,当非根桥设备收到根桥下发的BPDU之后,然后再转发自己的最优BPDU给其他交换设备, 其中BPDU报文格式里面,包含了在选举STP协议里面的重多参数,比如说Root ID,开销,Bridge ID,端口ID,以及其它时间定时器,比如说Hello Time以及Forward delay。

STP树的生成过程

可以分为两大步骤,第一步骤,首先确定交换机的角色,也就是说确定根桥和非根桥,然后再确定交换机端口的角色,指定端口,根端口以及阻塞端口。

指定端口是用来转发根桥的报文以及用户流量。

根端口是用来接收根桥的BPDU,其中AP端口是保持该端口处于一个备份的状态,当链路发生故障,该链路将会被激活。

其中在选举的过程中一共要用到以下一 些参数,根桥ID、跟路径开销、网桥ID和端口ID。

其中根桥ID和网桥ID它们的概念需要区分一下。

根桥ID是在整个STP的交换机中,根桥它的Bridge ID,网桥ID是该交换设备发送BPDU报文时,该设备自己的Bridge ID,通过这些参数,要选举相关交换机角色以及端口角色。

假设交换机1 2 3 运行STP协议,它是如何一步一步完成下个STP的交换网络,首先每台设备都会相互发送自己配置的BPDU,用来选举根桥这样的一个角色,其中在配置BPDU里面选举根桥的时候,要用到第一个参数,就是Bridge ID,Bridge ID由两部分组成,优选级和MAC地址,根据这个参数,就能够选举出根桥和非根桥的角色,从上面的图中可以看出,交换机1成为了根桥,交换机2和3成为了非根桥设备,然后根桥的所有端口直接成为了指定端口,是用来下发自己的配置BPDU。

非根本设备开始选举一个根端口,每一个非根桥上面都要选举一个根端口,用来接收根桥的配置BPDU。这个根端口是通过什么条件选举的呢?第一个是比较根路径开销,假设交换机2的两个端口要选举一个根端口出来,首先要比较根路径开销,就是交换机2到达交换机1根桥这一段的开销,然后交换机2另一个端口到达这一边根桥的开销,根据开销选举根端口,如果开销比不出来,会比较该端口对端设备的BridgeID,也就是交换机1和交换机3它们这样的一个桥ID,如果桥ID也比较不出来,就会比较这两个端口对端的端口ID,也就是交换机1的端口和交换机3的端口,它们的端口ID。端口ID由两部分组成,端口优选级加端口号,如果第三个参数比不出来,就会比较自己本端的端口ID,它们的端口ID进行一个比较,最后来选举出一个根端口的角色,当两台设备的根端口选举完成之后,还要选举一个指定端口,指定端口的选举条件,首先是比较两个端口到达根桥的开销,如果开销是一样的,再比较这两个端口自己本身所在设备的桥ID,也就是交换机2和交换机3的桥ID,如果交换机2和交换机3的BridgeID比较不出来,再比较第三个参数端口ID,互此在SW2和SW3这一段中会选举一个指定端口,当指定端口选举完成之后,最后一个端口就是阻塞端口,至此通过以下这些参数,(网桥ID,根路径开销,网桥ID,端口ID),就构建了整个STP交换网络,根桥和非根桥,包括指定端口,根端口以及阻塞端口。

STP端口状态迁移

STP将它的端口状态一共划分成了5种端口状态,端口状态表明了该交换机的端口处于该状态下是否能够正常接收转发配置BPDU,是否能够正常转发用户的流量。不需要死记硬背,可以逻辑性的去理解STP它的工作原理,然后结合原理去理解它相关状态的具体机制,这样能够方便去记忆。

Disabled,是初始状态,既不转发用户流量,也不转发BPDU。

第二个状态是Blocking,最后AP端口会停留在该状态,既然该状态是阻塞状态,肯定是不能够转发配置BPDU,也不能够转发用户流量,否则这条链路不就能够实现正常通信了吗?那环路自然而然就又产生了,但是它能够接收和处理BPDU。

第三个状态是Forwarding状态,是DP和RP这两个端口最终处于的端口状态Forwarding,顾名思义,就是既能够转发BPDU,又能够转发用户流量,其中Listening和Learning这两个端口状态是比较特殊的,这两个端口状态是处于一个过渡状态,其中Listening状态,侦听,它听的是什么呢?是帮助在这一段时间内能够实现全网STT端口的一个确定,同时防止一个临时环路的产生,所以它是肯定不转发用户流量的,这个时间会持续15秒,第二个过滤状态是Leanring,该状态顾名思义是正在学习,通过转发的流量正在构建MAC地址表项,然后为用户构建一套完整的MAC地址表,为用户最终转发流量,这也是一个过滤状态,持续15秒,也就是说从Listening到Forwarding会经历两个转发延迟,一共是30秒,其中第一个转发延时是为了确定在STP网络中它的BPDU能够全网泛洪,最后确定端口状态,同时这一个转发延迟能够解决临时环路问题,第二个临时过滤状态是用来构建MAC地址表项的这样一个功能。在STP决定端口状态的时候,其实有点问题,因为它每种端口状态需要去记忆,是否转发接收和处理配置BPDU,和是否转发用户流量,而针对用户而言,只需要了解到该端口状态下是否能够帮助用户实现通信就可以了,而是否能够转发这个BPDU,是处于报文自己的工作机制,站在用户角度,其实是不需要那么深入去了解的。这5种端口状态的定义可能是比较繁琐的。

STP的不足

STP虽然很好的解决了环路的问题,但是它收敛慢,会最终影响用户的通信质量,至于它为什么收敛慢,对于端口状态的角色区分,不利于初学者去学习。

STP的算法是一种被动的算法,依赖于定时器,不太人性化。

STP由根桥下发配置BPDU,当非根桥设备接收到之后,才开始处理相关的动作,这样会显得非常不够智能,针对以上STP的不足之处,RSTP都进行了一一改良。

STP对计时器的依赖

第一个关于初始化的场景,交换机在选举完端口角色之后,比如说已经确定了该端口为指定端口和根端口,但是这个端口依然不能够直接为用户转发流量,它需要经因两个转发延迟,也就是说30秒才能够为用户进行一个通信,等待的时间是非常长的。

第二个是假设STP的网络已经全部完成了,现在新加入一台终端设备,比如说是PC,这个时候就会有问题,因为交换机的端口加入一台PC之后,它的状态要从初始的disable,最后迁移到Forwarding,才能够为用户提供一个转发流量的这样的一个功能。最少要经历两个过渡时间,也就是两个Forward Delay,最后才能够给用户进行一个通信,从这里可以看出,STP它对于这种计时器而言是非常依赖的。

STP重收剑过程慢

首先假设交换机1和2之间用两条链路进行连接,同时交换机启用了STP协议,肯定有一条端口被阻塞,作为另一条链路的备份,现在假设非备份链路断开了,正常情况下备份链路会被激活,那就应该从Blocking状态慢慢的会迁移到Forwarding状态,但是在迁移状态的过程中,需要经历两个转发延迟,最少30秒,这条链路才能被激活,为用户转发流量。假设下面有一个用户正在上网,主链路断开了,那也就意味着用户的通信需要断开30秒,才能够正常通信,对用户的体验感是非常不好。

假设SW1,SW2,SW3组成了一个STP网络,现在交换机1和2的链路断开了,这个时候针对交换机的AP端口而言,它就无法正常接收从交换机2转发过来的根桥的BPDU,因为SW1,SW2之间的链路断开了,所以这个时候应该要切换成DP端口,流量从右边转发给交换机2,实现备份链路被激活,但是AP端口接收不到更优的BPDU之后,它会有一个老化时间,将自己该端口存储的最优BPDU进行老化,再进行一个端口的切换,老化时间就是报文里面的Max age 20秒,然后再加上两个转发延迟30秒,所以说面对这种情况 ,非直连链路故障,该端口进行切换,要进行50秒的时间才能够打通这条备份链路,对于用户的体验感而言就更糟糕,等待的时间就更长了,所以这就是它收敛慢的一个原因。

STP拓扑变更机制

在STP拓扑变更机制中,假设整个STP网络中已经稳定了,现在新加入一台新增的交换机,这个时候处于和新增的交换机相连的交换机,立马能够感知到整个网络拓扑发生了改变,所以它会发送一个TCN BPDU,向根桥进行报告,然后根桥会回复一个TCA置位的配置BPDU,这个TCA代表让该交换机停止发送TCN BPDU报文,代表它已经知晓了这个情况,这个时候从图中的案例可以看到,该交换机的上游就是根桥,假设是在最底层的某个网络发生了变化,交换机需要层层递连向根桥报告,发送这样一个拓扑变更通知,由根桥进行确定,当根桥确定完成之后,再来下发TC置位的配置BPDU,用来删除错误的MAC地址表项,然后下连非根桥交换设备,收到TC置位的BPDU之后,再将这样的一个BPDU进行网络泛洪,其它交换机收到之后才会将错误的MAC地址表项进行删除。总结一下,这样的一个STP拓扑变更机制的缺点在于什么,STP组成的网络规模一旦很大,当下层或者最底层的某台设备网络发生变迁,同这样一个最底层的设备层层递连向根桥报告,告诉它整个网络的拓扑发生了变迁,由根桥确定,然后根桥再发送拓扑变更通知,再层层递连向下游传递,别的设备再删除这样的一个错误MAC地址表映射的关系,这样一来一回的时间,就大大让这样一个网络故障的时间存在的更长,对于用户通信时间而言,就代表着需要等待的更久的时间,才能够为用户进行一个抢修,或者说进行一个链路的激活。由此可见,STP的拓扑变更机制,是一个效率非常低的机制,所以在它的基础上进行了改良。

RSTP概述

为了解决STP收敛慢,提出了基于802.1W标准的RSTP协议,它在STP的协议基础之上进行了很多的改进,同时它能够兼容STP,该兼容的方式是基于接口,而不是基于设备。

假设有三台设备,运行了STP协议,其中两台设备是运行了RSTP,有一台设备管理员不小心误配,把它配置成了STP,这个时候它就会发送自己关于STP的配置BPDU,RSTP能够兼容STP,但是它不会将整个交换机的工作模式全部切换成STP,它会将接口的工作模式切成STP和该设备进行对接,而其它非接收到STP协议的接口,依然保持在RSTP的这样的一个工作模式中。这个兼容STP是基于接口兼容。

RSTP对STP的改进,首先第一个是增加了一些端口角色,在STP里面只有DP,RP以及AP,在RSTP里面衍生出了一个BP的概念,第二个关于端口状态的重新划分,STP对于接口状态的划分没有那么明细,同时显得过于繁琐。然后关于BPDU报文格式的改变。再到后面对于相关和处理收敛还增加了一些保护功能。

RSTP在园区网络中的应用位置

正常情况下,RSTP是应用在接入层和汇聚层,用的是一个二层网络,这个时候STP它的工作在接入层和汇聚层之间。

RSTP对STP改进

改进点1:端口角色

在STP协议里面,只有三种端口角色,分别是根端口,指定端口以及AP,在RSPT里面,会发现多了一个端口角色,那就是BP备份端口,BP端口和阻塞端口AP有什么不同,在STP协议中,AP端口是因为学习到其它交换设备发送过来的配置BPDU,自己没有成功竞选为DP从而阻塞成为了AP,那么综的具体作用是作为根端口的备份。而BP端口,它是因为学习到自己发送的配置BPDU,成为了备份端口,它是作为指定端口的备份,什么情况下才会有BP呢?也就是说什么情况下才会接收到自己发送的配置BPDU呢?比如说一个交换机下面连着一个Hub傻瓜交换机,这样傻瓜交换机它可能就直接透传这样的一个生成树协议,那么就有可能自己发的自己收到了,那么其中某一条链路就可能作为阻塞成为指定端口的备份。华为交换机的STP,它引入了大量的RSTP的工作原理,因此华为的STP它不算是一个标准的STP,它类似于STP和RSTP协议的某种集成,因此华为交换机能够看见BP这样的一个角色。

改进点2:端口状态

在STP里面,一共定义了5种端口状态,同时确定了每个端口状态,是否接收和转发BPDU,以及是否转发用户流量,作为用户的角度去看端口状态,只想知道处于该端口状态下,用户是否能够正常通信,通或者不通,至于是否能够转发和处理BPDU,是这个协议本身的工作机制,作为用户其实是不需要去知道,因此为了方便用户去学习和简化这个端口的状态的特征,RSTP将端口状态简化成为三种,其中Disabled Blocking和Listening全部统称为Discarding,Forwarding是转发状态,只保留了一个过滤状态,Learning,其中从三种端口状态能够发现,关于转发用户流量的区别是有更加明显的。在RSTP的过程中,正常情况下只能看到Forwarding和Discarding,其中Leanring是一个过滤状态,这样就能够帮助用户非常简单的去判断它是否能够转发用户流量,更加帮助用户去简单的记忆和学习。

改进点3: 配置BPDU-RST BPDU

RSTP为什么能够实现STP兼容,那么因为RSTP和STP的报文格式,基本来说是一模一样的,没有做任何变动,只不过在Flag这样的一个字段里面,STP一共有8个比特,其中在STP协议里面只用了两个比特,分别是0比特位和7比特位,TCA和TC,在RSTP里面,将剩下的6个比特位全部利用起来了,报文格式就是兼容的,所以RSTP能够实现对STP的一个兼容。

无论STP还是RSTP,BPDU的报文的类型一共有几种,有两种配置BPDU和TCN BPDU。经常有人要说STP的BPDU类型有几种,BPDUTCA BPDU/TC BPDU。TCA TC BPDU只是配置BPDU中其中里在一个Flag的比特位将它置位了,但是它们都属于配置BPDU,而用于通知拓扑变更发生错误的是由TCN BPDU,所以关于无论是STP,还是RSTP,它的BPDU类型只有两种,分别是配置BPDU以及TCN BPDU,没有TC和TCA这一类的说法。

其中6比特全部应用起来之后,将Flag 8个比特位就完美利用了,其中 2 3 比特位是交换机端口的角色,10代表根端口,11代表指定端口。

改进点4:配置BPDU的处理

关于网络稳定之后,根桥下发配置BPDU的时间间隔,是由Hello Time决定的,每隔两秒发送一次,在RSTP里面,无认非根桥设备是否收到下发的配置BPDU,都会每两秒发送一次最优的BPDU给其它的交换设备,因为端口有一个类似于缓存这样的功能,而STP有一个致命的缺点,每隔两秒发送一次关于根桥的BPDU,是要收到根桥发过来的配置BPDU,才会进行发送,这种方式就会让STP收敛非常缓慢。

假设一个端口在超时时间内没有收到上游设备发送过来的配置BPDU,或者单项链路发生了故障,就会导致交换机2收不到根桥交换机1发送过来的配置BPDU。如果在STP这样的一个工作环境中,需要等待一个老化时间,20秒,然后认为根桥发生故障,然后发送自己配置BPDU给交换机3。

但是在RSTP的工作原理中,它依然会每隔两秒发送一次根桥的缓存配置BPDU给交换机3,但是等待6秒之后,如果迟迟没有收到根桥下发的配置BPDU,就直接认为根桥故障,然后发送自己的配置BPDU,通过这样的一个机制,它能够实现确定根桥或者确定链路发生故障的时间,由原本的20秒,缩短为6秒,大大减少了确定故障的这样一个时间,从而加快一个收敛速度。

如果收不到上游发送的配置BPDU,这个时候交换机2和交换机3需要重新选举根桥的地位,因此交换机2会认为自己是根桥,发送BPDU过去给交换机3,交换机3的端口收到交换机2发过来的次优BPDU。如果在STP协议里面,只有指定端口会立即处理次优BPDU,如果是根端口,也需要等待一个老化时间,然后再经历两个转发延迟,最后再回复给交换机2。而在RSTP里面,当交换机3收到交换机2发送过来的BPDU之后,会跟自身存在的BPDU进行对比,一旦发现它是次优的,它就会直接将收到的BPDU立马丢弃,丢弃之后它也不经历任何时延或者说老化时间,立即响应自己缓存的最优BPDU给交换机2,加快这样一个收敛速度。也就是说从原来要经历一个老化时间,再经历两个转发延迟,一共50秒,这样一个激活链路的时间,变成了6秒确定根桥故障,发送自己的BPDU给交换机3,然后3收到之后立马进行回复,不经历任何时延,大大减缓了拓扑收敛时间。

改进点5: 快速收敛机制

根端口快速切换,假设网络中交换机3的某一个端口根端口失效,交换机3的AP端口,会直接切换到RP端口,进入Forwarding状态不经历任何时延,因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥,所以他不需要经历任何时间直接进行切换。

指定端口快速切换,如果网络中某一个指定端口发生故障,那么BP端口作为指定端口的备份,它会直接切换成DP端口,进入到Forwarding状态。

边缘端口一般是指一般将运行了STP的端口类型设置为边缘端口,正常情况下,就不参加生成树计算,直接为用户转发流量,也就是说边缘端口一般是连接终端设备或者是服务器。现在将边缘端口设置为边缘端口,会直接从Discarding状态直接迁移到Forwarding状态,但是它是不能够接收配置BPDU的,因为一旦接口收到配置BPDU之后,立即会丧失边缘端口的属性,会恢复到一个普通的STP端口,重新参加STP的计算。这样的好处是什么呢?假设网络稳定之后,新加入一台PC,同时将该端口设置为边缘端口之后,网线一连,用户就能直接正常上网了,这样能够帮助用户实现一个快速通信这样的一个功能。边缘端口的Up和Down,不会引起网络拓扑的变动。

P/A机制是能够快速确定交换机的端口角色,同时能够起到一个临时防环的这样的功能,和STP中选举端口的角色有什么不同,在STP在选举端口决策中,就哪怕端口确定了,端口也没有任何响应,需要等待一个转发延迟,然后才会进入到Forwarding状态,因为它是依赖于计时器的,但是在P/A机制中,它能够接收到更优的配置BPDU,然后启用P/A机制,进行一个确认,让端口状态快速进入到转发状态,而不需要等待一个计时器,同时在端口状态变迁的过程中,能够起到一个临时防环的功能,会同步先进入到Discarding,然后再通过P/A机制进入到Forwarding。

P/A机制详解

假设交换机1和交换机2之间新增了一条链路,交换机2下面的三个端口角色分别是AP端口,指定端口,DP端口,以及边缘端口EP,其中只有DP端口处在Forwarding状态,现在新增了一条链路,将交换机1和2连在了一起,它们开始进行一个P/A机制。如何开始进行同步,首先两个端口会直接成为指定端口,互相发送自己的BPDU,要进行根桥的选举。

交换机1是根桥,由此可见,当交换机2收到交换机1下发的配置BPDU之后,发现自己的BPDU没有交换机1的配置BPDU好,因此就知道自己的端口将成为根端口,于是停止发送自己的配置BPDU给交换机1,然后交换机1知道了自己成为了根桥,因为交换机在互相发送配置BPDU之后,都会进行一个对比,发现对端设备没有我的好,因此就能够帮助判断自己是根桥这样的一个角色,所以它这个端口就成为了指定端口,用来下发关于P置位的RSTP的配置BPDU,这个时候,SW1上虽然是DP端口,但是它是处在Discarding状态,然后交换机2就会收到关于P置位的配置BPDU,这个时候交换机2会开始进入一个端口同步状态。这个端口同步状态非常重要。

交换机2首先将自己的下游端口,也就是AP,DP,EP或者其它端口,也就是除了收到根桥下发P位置的BPDU的这个端口以外的其他所有端口,除了边缘端口以外,全部进入到Discarding状态,这一步,是为了起到一个临时的防环的作用,如果其它非边缘端口不处于Discarding状态,而是处于Forwarding状态,同时RP端口又是处于Forwarding状态,这个时候可能产生一个临时的环路,为了解决临时环路的问题,就有了这样的一个操作,除了非边缘端口,其它端口进入Discarding状态,进入同步状态之后,自己的根端口会变成Forwarding状态,并发送一个A置位的配置BPDU,给根桥,这个A置位是用来回复刚才下发的P置位的BPDU,代表确认你是根桥,我承认你的地位。

然后根桥的指定端口,收到了A置位的报文之后,立马将自己的端口状态从Discarding迁移到Forwarding,最后,P/A机制向下游继续传递。

通过P/A机制能够看到怎样的一个机制呢?能够发现,在端口确定上面,有一个一来一回这样的一个类似于确认的机制一样,而不是需要采用STP这种依赖于计时器,没有接收到对端设备的任何响应,仅仅是依赖于定时器超时,没有收到你的报文,就认为是根桥,这样的机制并不是那么的合理,而在RSTP中这个P/A机制类似于一个响应功能,接收到了对端设备发过的响应,承认是根桥的地位,同时能够确定端口角色,而且它能够帮助去解决在端口选举的过程中,能够起到一个临时防环的这样的过程,因此P/A机制在RSTP里面是一个非常重要的概念。也是它一个比较重要的快速收敛机制之一。

改进点6:拓扑变更机制

在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态,除了过渡状态Learning状态,在RSTP网络稳定之后,实际上只有两个端口状态,Discarding和Forwarding。如果一个非边缘端口迁移到Forwarding状态,意味着一个阻塞端口从Discarding迁移到Forwarding,就意味着备份链路被激活,网络拓扑一定就发生了变迁,因此,关于一个非边缘端口迁移到Forwarding状态。

一旦拓扑发生变化之后,它和STP会有怎样的变化,交换机1是根桥,交换机2和交换机3是非根桥,交换机有一个阻塞端口,现在交换机1和3之间的链路断开,这个时候就接收不到交换机1根桥下发的配置BPDU,然后会启动一个关于TC的定时器,这个时间是两倍的Hello Time,4秒,在这个时间内会清空发生变化端口上学习到的MAC地址,也就是说这条链路收不到任何BPDU报文,那么这个端口上所映射的MAC地址表项会全部清空,同时非边缘指定端口和根端口就会向外发送关于TC置位的这样一个BPDU,也就是说AP端口会迁移到RP,然后发送关于TC置位的这样一个BPDU。

从这里能够看出,和STP有什么不同呢?在STP里面要层层递连,向根桥报告发生故障,然后由根桥下发关于TC置位的配置BPDU,然后再进行错误MAC地址表项删除,类似于向根桥报告确认再删除相应的MAC地址表项这一操作功能,而在RSTP里面直接由发生故障的设备来发起这样的一个机制,直接删除错误端口映射的MAC地址表项,然后由自己为中心节点,向四周的设备进行扩散,发送TC置位的BPDU报文,其他交换机收到这样的一个报文之后,直接启用这样一个定时器,开始删除其他接口所映射的MAC地址表项,然后再向其他设备进行一个传递和泛洪,因此它关于MAC地址表项的删除和重新学习,是不是和STP相比就更加快了,由故障节点直接发起,而不需向根桥进行报告,但是这里它也会引起一个问题。

交换机2是如何删除MAC地址表项的,它接收到了交换机3发送过来的TC置位的BPDU,会清空所有端口学习到的MAC地址表项,因为交换机2的端口能够接收到TC置位的BPDU,说明该端口是好的,确定这条链路没有问题,因此保留了该端口所学习到的MAC地址表项,但是其他端口不确定,链路或者端口有故障,所以全部清空,这样的好处是能够加快MAC地址表项重新学习收敛这一过程,帮助用户实现快速转发,它类似于一个宁愿快速删除,也没有一个确认机制,因为并不明确到底是哪一个端口的MAC地址表是错误学习的,就全部清空,这个时候在一个极短的时间内,会引起一个MAC地址表泛滥的这样的一个过程,会产生一个极短的广播,在STP网络里面进行交互,因此,会发现这样的一个拓扑变更机制,虽然能够实现一个快速收敛这样的一个过程,但是它其实也是有一点弊端的。

改进点7 保护功能(1)

边缘端口一般是连接终端设备,如果这个端口设置为边缘端口之后,代表了在RSTP里面这个端口就不直接参加计算,从Discarding直接迁移到Forwarding,帮助用户实现快速通信的这样一个能力,但是如果有人伪造交换机,或者说接口下面不小心错误的连接了一台配置了生成树的交换机,那么边缘端口就能够收到关于BPDU的报文,当边缘端口收到了BPDU报文之后,它就丧失了自己的所有属性,成为了一个普通的端口,参加STP的计算,从而影响网络的收敛,这个时候可以在交换设备上去配置BPDU保护功能,配置完成之后,当它收到BPDU报文之后,然后上报给网管告警系统,由网管去确定这个端口收到了配置BPDU是误报还是不小心接到了一个新的交换机里面收到了BPDU报文,还是真的被恶意攻击了,同网络管理员进行一个确认,然后确认该端口没有问题之后,然后进行命令,手工的将端口进行恢复,重新激活该端口,然后帮助用户实现通信。也可以通过命令实现如果在30秒内或者说50秒内没有收到其它BPDU报文,这个端口会重新被激活,它类似于设置一个时间段,有可能收到的BPDU是一个误报产生告警,这个时候给它设置一个自动恢复时间,就不需要管理员手工给他开启了。

改进点7:保护功能(2)

根保护功能,什么是根保护功能,是用来保证交换机的端口始终处于一个指定端口的角色。

假设现在网络稳定了,交换机1成为了根桥,在STP或者RSTP协议里面,关于根桥的选举,它类似于一个抢占机制,比较桥ID,如果桥ID越优,它就成为根桥,如果这个时候,SW2被黑客或者非法用户侵占,去修改它的优选级,比根桥更优,这个时候就会将根桥的角色抢占过来,整个网络全部需要重新进行收敛和计算,交换机的角色以及它的端口状态都会发生一系列的变迁,最终网络就会发生震荡。或者说新购入一台交换设备,不小心它的桥ID是最优的,这个时候误接进到STP网络里面,也会引起网络动荡,为了防止这种情况的产生,可以启用一个根保护功能,当根桥的指定端口收到更优的BPDU之后,它的端口状态会直接进入到Discarding状态,不再转发任何报文,这个时候一般情况下会经历两个转发延迟,然后进行恢复,当然有一个前提,它没有持续的去发送更优的BPDU,只要交换机2持续的发送更优的BPDU,这个端口就一直处于Discarding状态,这个功能一般是确保根桥的端口角色不会因为一些特殊情况而发生端口角色变迁,比如说误接交换机,导致全网重新收敛。

改进点7: 保护功能(3)

环路保护功能,在数据通信里面,关于数据的方向性,是一来一回双向的,这个时候,看一下什么情况会产生环路问题。STP就是用来解决环路的,为什么还会产生环路呢?

一旦交换机3接收不到根桥下发的配置BPDU,那么A端口就会迁移到根端口,同时状态由Discarding迁移到Forwarding,这里注意一下根端口是处于在Forwarding状态,DP端口也是在Forwarding状态,这个时候环路为什么就产生了呢?成为了一个单向成环。

单向链路故障,交换机3收不到交换机1发的配置BPDU,并不代表交换机3无法发送数据报文给交换机1,因为数据通信是有来有回的,收不到不代表发出去的时候对端收不到,有可能这条链路是由两条链路做了一个捆绑,这个时候就可能产生一个单向环路问题,于是这个时候就要启用一个环路保护功能。

启用了环路保护功能之后,如果根端口或者AP端口,长时间收不到来自上游设备的BPDU报文之后,它首先会向网管发出告警,然后自己会进入到Discarding状态,切换到指定端口,这个时候会有什么好处呢?避免了能够发送数据给对端设备,使对端能够正常接收,将它的状态迁移到Discarding之后,那么它就不再做任何数据流量的转发,直接类似于人工行为的干预,将它变成了堵塞状态,直到链路不再堵塞,或者说单向链路的故障恢复之后,重新收到BPDU报文,会恢复到原本的这样一个端口状态,因此,关于环路保护功能,需要注意一下,根本原因是因为单向链路故障产生的故障导致接收不到,但是并不代表自己发送数据对端接收不到,这样一旦某条链路被激活之后,就可能形成一个单向环路。

改进点7:保护功能(4)

TC这个报文在RSTP的原理里面,是用来删除错误MAC地址表项的,这个关于TC的配置PBDU是非常重要的,这个时候如果某一台设备被恶意用户侵占,它一直发送大量的TCP BPUD报文给其他交换设备,这个时候会导致其它交换设备会一直在删除MAC地址表项,没有办法稳定的去学习,由于二层设备是基于MAC地址表项进行通信,转发用户流量,如果频繁的删除MAC地址表项,没有稳定的去学习一个MAC地址表,用户就无法正常的通信,因此就会导致用户通信质量直接断开或者说是断断续续,因此针对TC BPDU报文这种攻击,可以开启相应的这样的一个保护机制,设置在相应的时间内,所处理的这样的一个次数,如果在单位时间内,收到了这样的一个攻击,大于配置的阈值,只会处理指定次数,比如说,三秒内只处理5次,一旦超过了5次,就不再做任何接收和处理,对于其它超出的这样的一个次数,做统一处理,只处理一次。这样最终就会避免频繁的去删除MAC地址表项,影响用户通信。

RSTP的工作过程

RSTP的工作机制和STP非常类似,只不过在端口角色确定方面,衍生出了一个P/A机制。

每一台设备启用了RSTP协议之后,都会互相发送自己的配置BPDU,都认为自己是根桥,所有的端口都处于一个Discarding的指定端口状态,他们通过配置BPDU里面的桥ID参数去选举根桥,从图中的案例可以看出三台交换机的桥优选级是一样的,都是32768,但是交换机1的MAC地址比较小,所以交换机1就成为了根桥,交换机2和交换机3属于非根桥,然后开始去确定交换机端口的状态。

由上连链路的互联端口进行P/A机制,这里以交换机1和交换2之间进行判断,当交换机2收到更优的BPDU报文之后,因为交换机1是根桥,所以交换机2就停止发送自己的BPDU报给根桥,然后会进入到一个同步状态,它将其他非边缘端口直接变成了Discarding,然后将自己连接上游根桥的端口变成了RP根端口,同时迁移到Forwarding状态,然后向上游根桥回复一个A置位的BPDU报文,当交换机1收到A置位的BPDU报文之后,会将DP端口的状态从Discarding迁移到Forwarding,至此完成P/A机制的交互。同理,P/A机制也会在交换机1,交换机3之间进行,当P/A机制完成之后,这样的P/A进程会向下游传递。

当根桥和交换机2以及根桥和交换机3之间的P/A机制完成之后,开始下游链路的P/A机制,交换机下游设备一开始默认为指定端口,会持续发送自己的BPDU,给交换机3,当交换机3收到交换机2发送的P置位的BPDU之后,发现它的BPDU并非最优的BPDU,你不可能是根桥,所以会进行忽略,不做任何处理,这个时候交换机2迟迟没有收到关于A置位的这样的一个BPDU报文,经历了两个转发延迟之后,就将了端口的状态迁移到Forwarding,基实这一段的工作机制类似于回到了STP 的工作机制,它需要依赖一个类似于定时器这样一个状态。

在通过将RSTP和STP进行对比,发现虽然他们同时能够解决环路问题,但是RSTP相较于STP,他做了各个方面的改进,比较说端口角色,端口状态,选举过程的一些机制,包括拓扑变更机制以及一些保护功能,其实会发现生成树这个协议,在配置方面其实是非常简单的,但是它的工作原理有些复杂,因为比如说去学习RSTP,肯定要提前先了解STP它的工作原理,然后了解它的缺点,最后在哪些基础上进行了改良,因此将这两个协议进行对比学习,才能够更好的去掌握RSTP它的特征。

RSTP的基本配置

相关推荐
沫儿笙1 小时前
机器人重工焊接节气
网络·人工智能·机器人
数字护盾(和中)2 小时前
数字 “黑天鹅” 频发:从亚冬会网攻到朝日啤酒断供的安全警示
网络·安全·web安全
浩浩测试一下2 小时前
内网---> ForceChangePassword 权限滥用
java·服务器·网络·安全·web安全·网络安全·系统安全
中议视控2 小时前
浅谈Modbus,CRC,kNX,DMX512,KNZ,TCP/UDP等协议算法在可编程网络中央控制系统主机中的重要性
网络·tcp/ip·udp
CC.GG2 小时前
【Linux】基础I/O----C语言文件操作与系统调用文件操作
linux·c语言·网络
云小逸2 小时前
【Nmap 源码学习】Nmap 源码深度解析:nmap_main() 函数逐行详解
网络·windows·学习·nmap
执行部之龙2 小时前
TCP八股完结篇
网络·笔记·网络协议·tcp/ip
爱吃rabbit的mq2 小时前
第13章:神经网络基础 - 感知机到多层网络
网络·人工智能·神经网络
新新学长搞科研2 小时前
【CCF主办 | 高认可度会议】第六届人工智能、大数据与算法国际学术会议(CAIBDA 2026)
大数据·开发语言·网络·人工智能·算法·r语言·中国计算机学会