RSTP快速生成树协议之(三):RSTP对STP的改进以及数据包分析
RSTP快速生成树协议之(三)
RSTP对STP的改进以及数据包分析
在RSTP快速生成树协议之(一)STP协议的不足中,已经列举了STP协议中的各种弊端:初始化时间长;拓扑变更时收敛时间长,机制复杂;连接终端造成不必要的计算;以及端口角色和端口状态的不足等。所以,本节笔记将会介绍RSTP对STP这些弊端的改进措施。
在讨论RSTP对STP的改进前,可以先去了解一下之前的笔记,其中介绍了STP有哪些不足之处:
参考链接:https://www.cnblogs.com/zylSec/p/14651273.html
RST BPDU(RSTP的BPDU报文)
RSTP协议的BPDU格式和STP协议是相同的,但是报文参数略有不同。
(1)BPDU Type字段
RSTP使用了类似STP的BPDU报文,即RST BPDU报文。而报文中的BPDU Type字段则是用来区分不同STP协议的BPDU报文的。
STP协议的BPDU Type字段是0(0x00)时,代表这个报文是配置BPDU;当是128(0x80)时,代表这个报文是TCN BPDU(Topology Change Notification);当是2(0x02)时,则代表是RSTP的RST BPDU报文。
Tips:BPDU Type是0x02时,不仅可能是RST BPDU(Rapid Spanning-Tree BPDU),还可能是MST BPDU(Multiple Spanning-Tree BPDU)。
(2)flags字段
在STP协议中,BPDU的报文中flags字段只定义了拓扑变化TC(Topology Change)和拓扑变化确认TCA(Topology Change Acknowledge),而其他字段是保留的。
而在RSTP的RST BPDU中,flags还使用了其他的字段,它把原来保留的中间6位都利用了起来。这新增的6位作用包括表示P/A进程,定义端口角色和端口状态。这样改变了配置BPDU的叫RST BPDU。
以下是flags字段中各bit所代表的含义:
TCA(第7 bit,高位): 拓扑改变响应位,STP笔记中有提及,不再赘述
Agreement(第6 bit): P/A进程的A置位。详细用途会在下面讲P/A机制时再进行探讨
Forwarding(第5 bit): 为真时表示端口的状态是Forwarding,此时端口处于既转发用户流量又学习MAC地址的状态。
Learning(第4 bit): 为真时表示端口的状态是Learning,此时端口处于学习MAC地址,但不转发用户流量的状态。
Flags(第3和2 bit): 表示端口角色(Port Role),因为占2个比特,可以表示4种不同的端口角色。
Proposal:(第1 bit): P/A进程的P置位,详细用途会在下面讲P/A机制时再进行探讨。
TC(第0 bit,低位): 拓扑改变位,STP笔记中有提及,不再赘述。
Tips:端口角色(Port Role)不同取值的不同含义
Port Role = 00 时,为Unkown未定义
Port Role = 01 时,为Alternate Port 预备端口 /Backup Port 备份端口
Port Role = 10 时,为Root Port根端口
Port Role = 11 时,为Designated Port指定端口
针对问题一的改进:P/A机制
我们知道,STP有初始化环境下收敛时间长的问题,为了改进这个问题,RSTP提出了P/A机制。
(1)P/A机制的基本原理
P/A机制,即Proposal/Agreement机制,中文对应是提议/同意机制。它的目的是使一个指定端口尽快的进入到Forwarding状态中。
P/A机制要求两台交换设备之间链路必须是点对点的全双工模式。一旦P/A协商不成功,指定端口的选举就会回到STP的协商方式,就需要等待两个Forward Delay(30秒)时间。
相对于STP来说,P/A带来了来回确认机制和同步变量机制,而不再需要等待计时器超时来保障无环路。
(2)P/A机制的具体工作过程
通过P/A机制,RSTP是这样加快拓扑收敛的速度的。如下图所示,局域网内有三台刚开启的运行RSTP协议的交换机:
阶段一:
由于设备刚启动,与STP一样,所有交换机都会认为自己是根桥。不同的是,此时交换机会向其他交换机发送P置位(即Flags中的Proposal位置为1)的BPDU报文(以下将这种报文简称为P消息),这个BPDU报文包含了该交换机的配置信息;并把发送P消息的端口变成指定端口(DP口),同时端口状态处在Discarding状态。如上图所示。
阶段二:
由于SWA的桥优先级是最高的,所以SWA不会对SWB或SWC发来的BPDU做出反应,而是继续发送自己的P消息。
SWB和SWC收到SWA发送过来的P消息,对比桥优先级后一致认为SWA才是根桥,此时他们就会根据P/A机制协商流程向SWA回复A置位(即Flags中的Agreement位置为1)的BPDU(以下将这种消息简称为A消息)。并把自己的发送端口改为根端口(RP),同时端口处于Forwarding状态,可以进行数据转发。
阶段三:
此时SWB与SWA,SWC与SWA的P/A协商基本完成,接下来就是SWB和SWC之间的P/A协商。以下是协商的过程:
Step 1:SWB和SWC都会发送根桥为SWA的P消息给对方。
Step 2:SWC收到SWB的P消息后,发现P消息里虽然根桥和自己认可的一样,但是发送者的桥优先级比自己高(SWB>SWC),所以会马上停止发送P消息,但是由于已经有端口是根端口(RP),也不会回A消息。
Step 3:SWB收到SWC的P消息后,发现P消息里虽然根桥和自己认可的一样,但是发送者的桥优先级比自己低(SWB>SWC),所以会继续不停地发送P消息。
Step 4:以上状态在等待2个Forward Delay(30秒)时间后,SWB的桥优先级比较高,所以SWB的端口为指定端口(DP),处于Forwarding状态;SWC的桥优先级比较低,所以SWC的端口为预备端口(AP),处于Discarding状态。
实际上SWB与SWC之间的协商等同于退回到STP的模式,但是反正是Discarding状态,根本不影响其他业务转发。
Tips:以上就是RSTP使用P/A机制进行选举端口角色的过程。可以看出,其原理从本质上还是和STP协议是相同的。流程都可以总结如下:
选举根桥(根交换机)=》 选举根端口 =》选举指定端口 =》选举预备端口和备份端口
RSTP在这个流程的基础上,加入了“发起提议-同意回复”(P/A机制)这种确认机制,正是因为在每个步骤有确认机制的接入,就再不需要依赖计时器来保证网络拓扑无环才去转发,只需要考虑BPDU发送报文并计算无环拓扑的时间(一般都是秒级)。
针对问题二的改进:根端口快速切换机制
在STP协议中,如果一台非根交换机的根端口(RP)因故障原因突然down了,那么其阻塞端口(BP)则需要等待两倍的Forward Delay(30秒)时间才能重新进入Forwarding(转发)状态。那么RSTP是如何解决这个问题的呢?
如图所示:非根交换机SWC的根端口(RP)突然发生故障而down了。
RSTP定义中,作为到根桥的备份,其新增了端口角色:预备端口Alternate Port(以下简称AP)。为加快收敛时间,当设备上旧的根端口失效时,预备端口就可以在保证链路无环的情况下,从Discarding状态立刻迁移到Forwarding状态。
RSTP协议中,预备端口(AP)要切换成根端口(RP)并进入转发状态可以在秒级时间内完成收敛。这样就可以解决STP收敛慢的问题。
针对问题三的改进:次等BPDU处理机制
在问题二中,我们讨论的是当非根交换机的根端口down了,而另一个端口是预备端口时的情况,由于预备端口不参与转发BPDU,所以交换机可以很快的将该端口切换成根端口。
那么如果另一个端口是指定端口(DP)的情况呢?
在STP协议中,由于对端交换机收到了次优的BPDU且不做处理,需要等计时器超时(20秒),交换机才会知道拓扑发生了变更。而想要重新选举,还要等待两倍的Forward Delay(30秒)的时间,才能让拓扑收敛。那么,RSTP又是如何改进这个问题的呢?
如上图所示:SWB与根桥SWA之间的链路发生故障,使得根端口down了,接下来RSTP协议的协商过程如下:
Step 1:SWB感应到自己的根端口发生故障,失去了与根桥的联系。于是开始将自己作为根桥,向外发送Proposal置位的BPDU。
Step 2:SWC的预备端口(AP)收到次优BPDU后会马上发送本地最优的BPDU给对端SWB,同时端口角色从预备端口(AP)变更为指定端口(DP)。
Step 3:SWB收到更优的BPDU,会立即重新定义端口角色,将原指定端口(DP)端口改为根端口(RP),然后发送Agreement置位的BPDU。
Step 4:SWC在收到Agreement置位的BPDU后会立即进入转发状态。
RSTP处理次等BPDU报文时,不再依赖于任何定时器超时解决拓扑收敛,而是会立即发送本地最优的BPDU给对端,从而加快了拓扑收敛。
针对问题四的改进:引入边缘端口
在STP协议中,即使是连接终端的链路也都参与到拓扑收敛的计算中。但是只要确保终端设备不会出现环路,那么纳入STP的计算和使用等待计时器超时的机制都是不必要的。
为此,RSTP引入了边缘端口的概念。只要设置连接终端的端口为边缘端口,那么交换机上的该对应链路可立即进入转发状态。
交换机上连接终端设备的接口设置成为边缘端口后,不会参与STP的计算,而会立即进入转发。
Tips:
但当该端口收到BPDU后,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算。
RSTP中对STP的改进已经大致介绍了,但其实这只是浅显的理解,RSTP的改进之处还远远不止这些。下一次的笔记会继续介绍关于RSTP的保护功能。
RSTP快速生成树协议笔记之(一):STP协议的不足
https://www.cnblogs.com/zylSec/p/14651273.html
RSTP快速生成树协议笔记之(二):端口角色和端口状态的改进
https://www.cnblogs.com/zylSec/p/14655908.html
RSTP快速生成树协议之(三):RSTP对STP的改进以及数据包分析
https://www.cnblogs.com/zylSec/p/14665145.html
RSTP快速生成树协议之(四):RSTP的保护功能
https://www.cnblogs.com/zylSec/p/14672493.html
RSTP快速生成树协议之(五):RSTP配置实例与抓包分析