上次说了STP的感悟,这次讲讲我个人对与RSTP的感悟。(学校坑爹的开题报告,没时间写微博了)

 

 

RSTP的出现的原因:就是因为传统的STP是基于被动的收敛时间,收敛时间太慢,根本无法满足真正的生产网络,网络震荡一次,就得等30S-50S,才能上网,估计谁也忍不了吧!

 

对于如何对RSTP下手呢?我总结如下两点,STP也可以这么考虑

如何形成一棵树

如何维护这个树(随时检测树的状态,当树根被拔了,当树干断了,如何用新的树根和新的树干来再次形成这棵逻辑的树)


802.1D

           形成树:先选举root bridge,再选取RP(形成树,不能转发数据),再选取DP和NDP(防止初期数据环路和BPDU环路),然后经过2倍的forward delay时间,端口的状态才会进入forwarding或者blocking状态。此时才可以转发数据。

 

           维护树:当拓扑变更时候,下游交换机从根端口向上游发送TCN BPDU,上游交换机接收到TCN BPDU就回复一个TCA位置位的配置BPDU,并且转发给上游,然后一直到根桥,根桥收到后发送TC位置位的配置BPDU,来告诉整个的生成树,有拓扑发生变化了,然后所有收到TC置位的BPDU的交换机会将自己的MAC地址表的老化时间改成和forward dealy,以此来刷新mac地址表,准备学习新的拓扑,防止错误的mac地址表的转发还会形成环路.这样发生拓扑改变的端口的最终经过两个forward delay 时间,到达forwrding 状态。

 

      其实你可以想想,一棵树的拓扑发生了变更,对于STP的做法是将这一消息要递送给根桥,然后让根桥来告知整个树,虽然这个方法很好,但是这样就会产生那两个被动的两个forward delay,这也是严重影响生成树收敛速度的原因之一。

 

802.1W

形成树:同802.1D

维护树:①当链路失效,不会造成环路,RSTP只要能找到合适的堵塞端口来替代该端口就行了

(RSTP使用TC置位的BPDU来表示拓扑的变更,但是为了和802.1D保持协调,RSTP可以产生和处理TCN bpdu)

                 ②当有新的链路的时候,可能会发生环路,此时的检查机制就是P/A机制。


深入剖析阶段:

选举过程:①根桥的选举

wKiom1bgK37y30r_AABoIZda9oA012.png


            一开始都会认为自己是根桥,从每个指定端口发送BPDU,就以C为例子。


wKiom1bgK-iTF8HMAACoZxYhGz8642.png

                                                                     C会认为我自己是根桥,A收到C的BPDU,比较ROOT ID 会认为A自己是根桥

                                                                       B收到C的BPDU,会认为C是根桥,这时候B,C 都是rootbridge


wKiom1bgLFziGdLlAAC8rBfwneM834.png

                                                

               A发送BPDU,形成的结果如上图,这时候才能真正选出来,而不是所谓的一句笼统的大家互发  BPDU选举就完事了也就是说一个交换机想要成为根桥,他的 ROOT ID字段必须比所有指定端口能接收到BPDU的ROOT ID字段都要小,这时候他才能成为根桥,一旦他接收到到了更好的,立马脱离根桥的身份.


RSTP更加明确的规定了端口角色和端口状态,更加依赖的是端口角色

        STP端口角色:RP DP NDP

        RSTP端口角色:RP DP AP(备份根端口) BP(备份指定端口)

wKiom1bgLTXDpUDqAABAxQZSF84740.png

wKioL1bgLevw07XtAABSR-1D7Uc230.png

字节

                           字段  

2

Protocol ID

1

Version

1

Message Type

1

Flag

8

Root ID

4

Cost of path

8

Bridge  ID

2

Port ID

2

Message Age

2

Maximum Time

2

Hello Time

2

Forward Delay

1
version 1 length


收到劣质BPDU的不同反应(X为NDP)

wKioL1bgL6njFICLAAAlnm3JTYk598.png

当S1和S2之间的链路失效的时候

STP:S2认为自己根桥,开始发送劣质BPDU,S3的NDP接口将等待20S的超时时间,然后再经过learning →listening→forwarding  约50s的时间

RSTP:S2认为自己根桥,开始发送劣质BPDU,S3的Alternate接口收到后,会告诉S2,S1才是跟,然后经过learning →listening→forwarding 约30s的时间



STP收敛

  • 依靠计时器被动进行收敛

RSTP快速收敛

  • 边缘端口机制(Cisco的portfast

  • 特性:                    

                                            

                                                       ①连接PC不需要等待转发延迟直接进入转方状态)

                                                ②接口状态的改变不会影响生成树的拓扑变更

                                                ③跟端口的快速切换时,不会堵塞边缘端口

                                                ④tc置位的配置BPDU不会通过边缘端口转发

                                                ⑤ 收到tc置位的配置BPDU,边缘端口的mac地址表项的计时器不会改变

                                                ⑥边缘端口收到BPDU,会立即还原成普通接口)               

   

  • 根端口快速切换机制(上述说到的,某个端口down了,立马找堵塞端口替代,立即进入转发状态,其实就是Cicso的uplinkfast【级联快速】,并且会向上游发送不带数据部分的伪帧来刷新mac地址表,一般用于接入层交换机)

  • Proposal/Agreement机制(使指定端口快速进入转发状态,接口两端必须是全双工的点到点链路,否则P/A报文无法相互交互,就只能借助STP2倍forward delay时间了)

P/A机制

P/A机制即Proposal/Agreement机制。其目的是使一个指定端口尽快进入Forwarding状态。其过程的完成根据以下几个端口变量:

AProposing。当一个指定端口处于DiscardingLearning状态的时候,该变量置位。并向下游交换传递Proposal位被置位的BPDU

BProposed。当下游交设备端口收到对端的指定端口发来的携带ProposalBPDU的时候。该变量置位。该变量指示上游网段的指定端口希望进入Forwarding状态。

Csync。当Proposed被设置以后,收到Proposal置位信息的根端口会依次为自己的其他端口置位sync变量。如果端口是非边缘的指定端口是则会进入Discarding状态。(这个过程的堵塞状态就是完全的防环

Dsynced。当其它端口完成转到Discarding后,会设置自己的synced变量(AlternateBackup边缘端口会马上设置该变量)。根端口监视其他端口的synced,当所有其他端口的synced全被设置,根端口会设置自己的synced,然后传回BPDU,其中Agreement位被置位。

Eagreed。当指定端口接收到一个BPDU时,如果该BPDU中的Agreement位被置位且端口角色定义是“根端口”,该变量被设置。Agreed变量一旦被置位,指定端口马上转入Forwarding状态。

提示RSTP的端口角色的同步是指根端口信息的同步,因为在一台交换机上只能有一个根端口(堵塞的是非边缘指定端口)

某位大神举的一个例子

实线为百兆链路,虚线为后加的千兆链路,圆圈为根端口

wKioL1bgP4ayOgKHAABGBeh9eA4441.png


加上千兆虚线之后的拓扑如下

wKioL1bgQEmhKYxCAABMSy3Qy9Y323.png



此时SW6和SW2之间新加的一条千兆链路,马上进行端口角色选举,毫秒附近,SW6  2口根端口确定,如图。立即进入转发状态,此时SW2 2口也立即进入转发状态,SW6根端口和指定端口选举之间肯定会有空隙,SW6的1口还是转发状态此时,图中明显右侧出现临时环路。所以P/A机制出现了

SW6根端口选举完毕,立即进入转发状态,但是SW2连接SW6的端口处于Discarding状态,并且向SW6发送一个P置位的配置BPDU,sw6会堵塞所有的非边缘指定端口,进行根端口角色的同步,100%无环路,然后依次向下游传递。



 Cisco的PVST,PVST+,RPVST+

 

 pv:per-vlan

ieee定义的STP,RSTP都是无法基于vlan的,cisco将BPDU的BID 八个字节进行了划分

priority
vlan ID
MAC
4bit
12bit
48bit

 开启了

 PVST :在中继链路用ISL封装,ISL封装思科自己不怎么用了

 PVST+ :在中继链路用dot1q封装

 RPVST+: 在中继链路用dot1q封装

为什么优先级设置成4096的倍数,我认为是一共16bit,前12位被占,后面的只能4bit只能以4096的倍数增加了