RSTP与STP的不同
增加端口角色:AP和BP
减少端口状态为Discardinglearningforwarding
充分利用BPDU中的Flag字段
对BPDU的处理方式发生了改变
提高收敛速度
增加了保护功能
RSTP和STP消除环路的思想保持一致,RSTP具备了STP的所有功能,支持RSTP的网桥可以和支持STP的网桥一同运行。
RSTP的端口角色共有4种:根端口、指定端口、Alternate端口和Backup端口。
根端口和指定端口的作用同STP协议中定义,Alternate端口和Backup端口的描述如下:
从配置BPDU报文发送角度来看:
Alternate端口就是由于学习到其它网桥发送的更优配置BPDU报文而阻塞的端口。
Backup端口就是由于学习到自己发送的更优配置BPDU报文而阻塞的端口。
从用户流量角度来看:
Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。
Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路。
给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程。
RSTP端口状态
Forwarding
Learning
discarding
STP端口状态 | RSTP端口状态 | 发送配置BPDU | MAC地址学习 | 转发数据 |
Disable | Discarding | 否 | 否 | 否 |
Blocking | Discarding | 否 | 否 | 否 |
Listening | Discarding | 是 | 否 | 否 |
Learning | Learning | 是 | 是 | 否 |
Forwarding | Forwarding | 是 | 是 | 是 |
RSTP的状态规范把原来的5种状态缩减为3种。根据端口是否转发用户流量和学习MAC地址来划分:
如果不转发用户流量也不学习MAC地址,那么端口状态就是Discarding状态。
如果不转发用户流量但是学习MAC地址,那么端口状态就是Learning状态。
如果既转发用户流量又学习MAC地址,那么端口状态就是Forwarding状态。
RSTP计算过程:
端口在Discarding状态下完成端口角色的确定:
当端口角色确定为根端口和指定端口后,经过forwardingdelay后,端口进入Learning状态,处于Learning状态的端口其处理方式和STP相同,此期间端口开始学习MAC地址并在Forwardingdelay后进入Forwarding状态,开始转发数据。实际上,RSTP会通过其他方式加快这个过程。
当端口角色确定为Alternate端口后,端口会维持在Discarding状态。
RSTP对STP的BPDU改动
充分利用STP中BPDU的Flag,明确端口角色
Type字段为2
Flag字段使用了之前的保留位,更改后的配置BPDU更名为RST BPDU
配置BPDU格式的改变,充分利用了STP协议报文中的Flag字段,明确了端口角色。在配置BPDU报文的格式上,除了保证和STP格式基本一致之外,RSTP作了一些小变化:
Type字段,配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃。
Flags字段,使用了原来保留的中间6位,这样改变的配置BPDU叫做RSTBPDU。
RSTP中BPDU的Flag字段解释:
第0位为TC标志位,和STP相同。
第1位为Proposal标志位,该位置位表示该BPDU为快速收敛机制中的Proposal报文。
第2位和第3位为端口角色标志位,00表示端口角色为未知;01表示端口角色为Alternate或Backup端口;10表示端口为根端口;11表示端口为指定端口。
第4位为Learning标志位,该位置位表示端口处于Learning状态。
第5位为Forwarding标志位,该位置位表示端口处于Forwarding状态。
第6位为Agreement标志位,该位置位表示该BPDU位快速收敛机制中的Agreement报文。
第7位为TCA标志位,和STP相同。
RSTP中配置BPUD的处理
非根桥设备每隔HelloTimer从指定端口主动发送配置BPDU
BPDU超时计时器为3个HelloTimer
阻塞端口可以立即对收到的次级BPDU进行回应
BPDU处理发生的变化
拓扑稳定后,配置BPDU报文的发送方式
拓扑稳定后,根桥按照HelloTimer规定的时间间隔发送配置BPDU。其他非根桥设备在收到上游设备发送过来的配置BPDU后,才会触发发出配置BPDU,此方式使得STP协议计算复杂且缓慢。RSTP对此进行了改进,即在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置BPDU报文,非根桥设备仍然按照HelloTimer规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行。
更短的BPDU超时计时
如果一个端口连续3个HelloTime时间内没有收到上游设备发送过来的配置BPDU,那么该设备认为与此邻居之间的协商失败。而不像STP那样需要先等待一个MaxAge。
次级BPDU的处理
当一个端口收到上游的指定桥发来的RSTBPDU报文时,该端口会将自身存储的RSTBPDU与收到的RSTBPDU进行比较。如果该端口存储的RSTBPDU的优先级高于收到的RSTBPDU,那么该端口会直接丢弃收到的RSTBPDU,立即回应自身存储的RSTBPDU。当上游设备收到下游设备回应的RSTBPDU后,上游设备会根据收到的RSTBPDU报文中相应的字段立即更新自己存储的RSTBPDU。由此,RSTP处理次等BPDU报文不再依赖于任何定时器通过超时解决拓扑收敛,从而加快了拓扑收敛。
STP收敛机制
在STP中,为了避免环路,端口从使能到进入转发状态需要等待默认30秒的时间,只能依靠计时器被动的收敛。如果想要缩短计时器,会引起网络的不稳定性。
RSTP快速收敛机制
边缘端口机制
在RSTP里面,如果某一个指定端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口叫做边缘端口。边缘端口不接收处理配置BPDU,不参与RSTP运算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用。但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。
根端口快速切换机制
如果网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口,进入Forwarding状态。因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥。
Proposal/Agreement机制
当一个端口被选举成为指定端口之后,在STP中,该端口至少要等待一个ForwardDelay(Learning)时间才会迁移到Forwarding状态。而在RSTP中,此端口会先进入Discarding状态,再通过Proposal/Agreement机制快速进入Forward状态。这种机制必须在点到点全双工链路上使用。
Proposal/Agreement机制简称P/A机制。
边缘端口机制
边缘端口连接的是终端,当网络拓扑发生变化时,边缘端口不会发生环路,所以边缘端口可以忽略两个ForwardingDelay,直接进入转发状态,无需任何延迟。
边缘端口不接收处理配置BPDU,不参与RSTP运算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用。但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。
根端口快速切换机制
在RSTP中,Alternate端口为根端口的备份。当该网桥的根端口失效进入阻塞状态时,网桥会选择优先级最高的Alternate端口作为新的根端口,如果网桥对端设备指定端口依然为转发状态,则该网桥的新根端口直接进入Forwarding状态。
P/A机制
是指定端口快速进入转发状态
工作模式为点对点的全双工模式
包括Proposal和Agreement报文
P/A机制
Proposal/Agreement机制,其目的是使一个指定端口尽快进入Forwarding状态。
P/A机制要求两台交换设备之间链路必须是点对点的全双工模式。一旦P/A协商不成功,指定端口的选择就需要等待两个ForwardDelay,协商过程与STP一样。
新链路连接成功后,P/A机制协商过程如下
p0和p1两个端口马上都先成为指定端口,发送RSTBPDU。
S2的p1口收到更优的RSTBPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送RSTBPDU。
S1的p0进入Discarding状态,于是发送的RSTBPDU中把proposal置1。
S2收到根桥发送来的携带proposal的RSTBPDU,开始将自己的所有端口进入sync变量置位。
p2已经阻塞,状态不变;p4是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口p3。
p2、p3、p4都进入Discarding状态之后,各端口的synced变量置位,根端口p1的synced也置位,于是便向S1返回Agreement位置位的回应RSTBPDU。该RSTBPDU携带和刚才根桥发过来的BPDU一样的信息,除了Agreement位置位之外(Proposal位清零)。
当S1判断出这是对刚刚发出的Proposal的回应,于是端口p0马上进入Forwarding状态。
P/A过程可以向下游继续传递
P/A过程可以向下游继续传递。
当S1和S2之间新增了一条链路后,P/A机制工作如下:
S1通过端口E1发送Proposal置位的RSTBPDU消息给S2。
S2收到该消息后,意识到E2为根端口,启用同步机制阻塞指定端口E1和E3以避免产生环路,然后将根端口设置为转发状态,并向S1发送Agreement消息。
S1收到Agreement消息后,指定端口E1马上进入转发状态。
S2处于同步状态的非边缘指定端口E1和E3发送Proposal报文。
S3收到S2发送的Proposal报文后,判断E1为根端口,启动同步过程,由于S3下游均为边缘端口,所以已经实现了同步,因此S3直接向S2回复Agreement消息。
S2收到S3发送的Agreement消息后,端口E1马上进入转发状态。
S4的处理过程如S3。
S2收到S4发送的Agreement消息后,端口E3马上进入转发状态。
P/A过程结束。
在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态。
一旦检测到拓扑发生变化,将进行如下处理:
为本交换设备的所有非边缘指定端口启动一个TC WhileTimer,该计时器值是HelloTime的两倍。在这个时间内,清空状态发生变化的端口上学习到的MAC地址。同时,由这些端口向外发送RSTBPDU,其中TC置位。一旦TC WhileTimer超时,则停止发送RSTBPDU。
其他交换设备接收到RSTBPDU后,清空所有端口学习到MAC地址,除了收到RSTBPDU的端口。然后也为自己所有的非边缘指定端口和根端口启动TC WhileTimer,重复上述过程。
如此,网络中就会产生RSTBPDU的泛洪。
RSTP与STP互操作
RSTP端口在接收到STPBPDU的两个hellotimer后,会切换到STP工作模式
切换到STP协议的RSTP端口会丧失快速收敛等特性
当运行STP的设备从网络撤离后,原运行RSTP的交换设备可迁移回到RSTP工作模式
RSTP可以和STP互操作,但是此时会丧失快速收敛等RSTP优势。
当一个网段里既有运行STP的交换设备又有运行RSTP的交换设备,STP交换设备会忽略RST BPDU,而运行RSTP的交换设备在某端口上接收到运行STP的交换设备发出的配置BPDU,在两个Hello Time时间之后,便把自己的端口转换到STP工作模式,发送配置BPDU。这样,就实现了互操作。
在华为设备上可以配置运行STP的交换设备被撤离网络后,运行RSTP的交换设备可迁移回到RSTP工作模式。
选举根交换机
端口角色 | 描述 |
Root Port | 根端口,是所在交换机上离根交换机最近的端口,稳定时处于转发状态。 |
Designated Port | 指定端口,转发所连接的网段发往根交换机方向的数据和从交换机方向发往所连接的网段的数据,稳定时处于转发状态。 |
Backup Port | 备份端口,不处于转发状态,所属交换机为端口所连网段的指定交换机。 |
Alternate Port | 预备端口,不处于转发状态,所属交换机不是端口所连网段的指定交换机。 |
端口状态 | 描述 |
Discarding 丢弃状态 | 此状态下端口对接收到的数据做丢弃处理,端口不转发数据帧,不学习MAC地址表。 Alternate Port和Backup Port |
Learning 学习状态 | 此状态下端口不转发数据帧,但是学习MAC地址表,参与计算生成树,接收并发送BPDU。 |
Forwarding 转发状态 | 此状态下端口正常转发数据帧,学习MAC地址表,参与计算生成树,接收并发送BPDU。 |
转载于:https://blog.51cto.com/12633577/1978855