上次说了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机制。
深入剖析阶段:
选举过程:①根桥的选举
一开始都会认为自己是根桥,从每个指定端口发送BPDU,就以C为例子。
C会认为我自己是根桥,A收到C的BPDU,比较ROOT ID 会认为A自己是根桥
B收到C的BPDU,会认为C是根桥,这时候B,C 都是rootbridge
A发送BPDU,形成的结果如上图,这时候才能真正选出来,而不是所谓的一句笼统的大家互发 BPDU选举就完事了也就是说一个交换机想要成为根桥,他的 ROOT ID字段必须比所有指定端口能接收到BPDU的ROOT ID字段都要小,这时候他才能成为根桥,一旦他接收到到了更好的,立马脱离根桥的身份.
RSTP更加明确的规定了端口角色和端口状态,更加依赖的是端口角色
STP端口角色:RP DP NDP
RSTP端口角色:RP DP AP(备份根端口) BP(备份指定端口)
字节 |
字段 |
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)
当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报文无法相互交互,就只能借助STP的2倍forward delay时间了)
P/A机制
P/A机制即Proposal/Agreement机制。其目的是使一个指定端口尽快进入Forwarding状态。其过程的完成根据以下几个端口变量:
A)Proposing。当一个指定端口处于Discarding或Learning状态的时候,该变量置位。并向下游交换传递Proposal位被置位的BPDU。
B)Proposed。当下游交设备端口收到对端的指定端口发来的携带Proposal的BPDU的时候。该变量置位。该变量指示上游网段的指定端口希望进入Forwarding状态。
C)sync。当Proposed被设置以后,收到Proposal置位信息的根端口会依次为自己的其他端口置位sync变量。如果端口是非边缘的指定端口是则会进入Discarding状态。(这个过程的堵塞状态就是完全的防环)
D)synced。当其它端口完成转到Discarding后,会设置自己的synced变量(Alternate、Backup和边缘端口会马上设置该变量)。根端口监视其他端口的synced,当所有其他端口的synced全被设置,根端口会设置自己的synced,然后传回BPDU,其中Agreement位被置位。
E)agreed。当指定端口接收到一个BPDU时,如果该BPDU中的Agreement位被置位且端口角色定义是“根端口”,该变量被设置。Agreed变量一旦被置位,指定端口马上转入Forwarding状态。
提示:RSTP的端口角色的同步是指根端口信息的同步,因为在一台交换机上只能有一个根端口(堵塞的是非边缘指定端口)
某位大神举的一个例子
实线为百兆链路,虚线为后加的千兆链路,圆圈为根端口
加上千兆虚线之后的拓扑如下
此时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的倍数增加了