资源描述
收敛机制
一、STP
1、一般来说,就是blocking状态端口20s内没收到BPDU,就要进入Listening状态,learning状态,然后forwarding .
2、如果有端口down,即便blocking状态端口能收到BPDU,也会经过20s的最大寿命时间,开始进入listening,learning,然后forwarding 成为根端口.(当然这中间也有个选举的过程)
个人认为,经过20s才会发出自己是根桥的BPDU 。
3、根端口down,指定端口会发出自己是根桥的BPDU.
这在其他交换机看来是次级BPDU。处理次级BPDU的方式跟有没有配置backbonefast有关。
默认情况: 对于非指定端口(根端口或者Blocking端口),在收到比自己当前端口信息更优或者一样好的BPDU,则会更新Max Age计时器。如果超过这个时间仍然收不到满足条件的BPDU,端口便会迁移到Listening状态,准备重新进行选择。
指定端口收到次等BPDU时,会立刻发出自己的更好的配置BPDU回应。
配置了backbonefast的情况见下面。
4、Uplinkfast:
解决的方法是一旦发现了线路down,马上把Blocking的port切换到Forwarding,不要经过Listening和Learning阶段。这就是UplinkFast,切换时间可以在2s~4s。
UplinkFast被设计应用在接入层交换机。一般应用两条上行链路(也就是用于级联的端口,但不一定是专门的Uplink端口)连接到分布层,一条是冗余链路。
UplinkFast激活一个快速重新配置的条件:
A. 在交换机上必须启动了UplinkFast功能;
B. 至少有一个处于Blocking的端口(即有冗余链路);
C. 链路失效必须发生在Root Port上。
交换机启动了UplinkFast后,由于提高了交换机上所有端口的路径开销,所以不适合作为根桥。
所有端口的根开销变为3000,桥的优先级变为49152.
5、Backbonefast
根端口down,和根桥失去了联系,所以就开始发出BPDU,宣布自己是根桥
BackboneFast是对UplinkFast的一种补充,UplinkFast能够检测直连链路的失效,BackboneFast是用来检测间接链路的失效。当启用了BackboneFast的交换机检测到间接链路失效之后,会马上使阻塞的端口进入监听状态,少了20S的老化时间。
Switch C收到这个BPDU之后,发现是次级BPDU,所以确定有非直连链路的故障。Switch C会从根端口发送RLQ,Switch A(根桥)接到RLQ,以RLQ响应进行应答,Switch C收到SwitchA的RLQ响应,知道根桥还在,然后把右边的端口从blocking直接过去到Listening状态。当L1链路恢复的时候,BackboneFast会马上把Switch C上右侧的端口的状态设为blocking。
从不同的端口收到次级BPDU的情况:
1). 当交换机从阻塞端口收到次级BPDU的时候,那么该交换机上的根端口和其他阻塞端口将成为到达根桥的替代路径。
2). 当交换机从根端口收到次级BPDU,那么当前所有的阻塞端口都将成为达到根桥的替代路径。
3). 当交换机从根端口收到次级BPDU,并且交换机上不存在阻塞端口的话,那么交换机认定到达根桥的链路已经down掉了,在老化时间到了之后,交换机将通过把自己宣告为根桥开始正常的STP选举过程。
配置BackboneFast
Switch(config)#spanning-tree backbonefast
注意事项
如果要启用BackboneFast特性,我们应该在网络中的所有交换机上都启用。
642-811的英文原版书说:BackboneFast能使交换机在收到inferior BPDU后,根据接收该BPDU端口的状态,来决定通向Root Bridge的alternate Path,并通过Blocking端口来发送Root Link Query,根据应答,判断哪个端口为Newly Current Root Bridge Port,并将其马上进行状态转换,无需等待Max Age Timer计时器到时。
问题:RLQ 根链路查询和根链路应答 BPDU的格式 怎么体现出来?
6、portfast
采用PortFast可以让这些端口节省Listening和Learning状态的时间,立即进入Forwarding状态。需要注意的是:PortFast仅仅让端口在网络环境变化的情况下直接进入Forwarding状态。而端口仍然运行STP协议,所以如果检测到环路(也就是在别的端口收到BPDU的同时,在此端口也收到了BPDU),端口仍将由Forwarding状态变成Blocking状态。
当一个设备连接到一个端口上时,端口通常进入侦听状态。当转发延迟定时器超时后,进入学习状态,当转发延迟定时器第二次超时,端口进入到转发或者阻塞状态,当一个交换机或中继端口启用PortFast后,端口立即进入转发状态,但交换机检测到链路,端口就进入转发状态(插电缆后的2s) 。如果端口检测到一个环路同时又启用了PortFast 功能。它就进入阻塞状态。重要的是要注意到PortFast 值在端口初始化的时候才生效。如果端口由于某种原因又被迫进入阻塞状态,随后又需要回到转发状态,仍然要经过正常的侦听 。(因为此时portfast特性消失了)
7、TCN BPDU的发送过程
首先说一下BPDU的大体格式
配置BPDU在是一种“心跳”报文,只要端口上使能了STP,则配置BPDU就会按照Hello Timer所规定的时间间隔发出。在初始化过程中,每个桥都主动发出配置BPDU;但在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他桥在收到上游传来的配置BPDU后,才触发发送自己的配置BPDU。配置BPDU的长度至少要35个字节,而且如果当且仅当发送者BID或发送端口PID两个字段中至少有一个和本桥本接收端口不同,才会被处理,否则丢弃,这样避免了处理和本端口信息一致的BPDU。
TCN BPDU内容比较简单,只有表3种列出的前3个字段。且类型字段为0x80。
TCA位只有在回应TCN BPDU的配置BPDU中置1,后面会详细进行说明。
对于STP,一共有3个计时器影响着端口状态以及网络的收敛,如下所述:
1 Hello Timer:STP交换机发送BPDU的时间间隔。当网络拓扑稳定之后,该计时器的修改只有在根桥修改才有效。根桥会在之后发出的BPDU中填充适当的字段以向其他非根桥传递该计时器修改信息。但当拓扑变化之后,TCN BPDU的发送不受这个计时器的管理。
2 Forwarding Delay Timer:指一个端口Listening 和Learning的各自时间,默认为15秒,即Listening状态持续15秒,随后Learning状态再持续15秒。这两个状态下的端口会处于Blocking状态,这是STP用于避免临时环路的关键。
3 Max Age:端口的BPDU老化的时间,前文已经探讨过。端口会根据接收到的BPDU存储所接收到的最好的四个信息(根桥BID、累计根路径开销、发送者BID和发送端口PID)。每次接收到合适的BPDU,端口都会启动这个Max Age计时器。超过这个Max Age时间端口接收不到合适BPDU,就会认为网络直径过大。这个时间默认为20秒。
如果非根桥交换机的指定端口断掉,则交换机会立即通过根端口以一定速率发送TCN BPDU给上游交换机,上游交换机收到该TCN BPDU后会立刻向下游交换机回应TCA BPDU(即把标志字段的TCA位置位的配置BPDU)并继续向上游传递TCN BPDU。下游交换机收到TCA消息的交换机会停止发送TCN BPDU。如此不断的传递,直到传到根桥。
然后,根桥将自己的MAC地址表老化时间改为Forward Delay。其后会持续Forward Delay+Max Age长的时间内在发出的配置BPDU中把TC位置位。其下游任何交换机接收到根桥传递过来的TC置位的配置BPDU都会将自己的MAC地址表老化时间修改为Forward Delay那么长时间。
二、RSTP
RSTP则是局域网中最精细的协议之一。
1、 STP协议虽然能够解决环路问题,但是还是有很多不足之处。
首先,STP并没有细致区分端口状态和端口角色。网络协议的优劣往往取决于协议是否对各种情况加以细致区分。事实上,从用户角度上看Listening、Learning和Blocking状态是没有区别的,都同样不转发用户流量。从使用和配置上来讲,端口之间最本质的区别并不在于端口状态,而是在于端口扮演的角色。根端口和指定端口也可能处于Listening状态,也可能都处于Forwarding状态。
其次,STP算法是被动的算法,对网络是否已经达到收敛没有一种反馈机制。对待拓扑变化的基本的方法是通知根桥,修改MAC地址表老化时间,自动学习,确立新路径。这种以计时器来等待的方式显然是浪费时间,响应迟缓。
再次,STP的算法要求在稳定拓扑里,根桥主动发出BPDU而其他交换机进行中继,这样整个STP网络。
2、RSTP的端口角色共有4种:即根端口、指定端口、Alternate端口和Backup端口。
从BPDU的发送上来看,Alternate端口就是由于学习到其它交换机的发送的BPDU而阻塞的端口;而Backup端口就是由于学习到自己发送的BPDU而阻塞的端口。从用户流量上来看,Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备选切换;而同时Backup端口,作为指定端口的备份,提供了另外一条从根桥到叶节点的可切换的通路。(Backup端口挺少的)
给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程。
在BPDU的格式上,除了保证和STP格式基本一致之外,RSTP作了一些小的变化。一个是在Type字段,配置BPDU类型不再是0而是2,版本号也变成了2。所以运行STP的交换机收到该类BPDU时会丢弃。另一个变化是在Flag字段,把原来保留的中间6位使用起来。这样改变了的配置BPDU叫做RST BPDU。
RST BPDU的Flag字段格式如表5所示。
表1 RSTP Flag字段格式
端口角色 = 00 未知
01 根端口
10 Alternate / Backup
11 指定端口
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
TCA
Agreement
Forwarding
Learning
端口角色
Proposal
TC
3、靠收到上游BPDU而触发发送BPDU的方式使得STP庞大而笨拙。RSTP对这一点进行了改进,即在稳态后,无论非根桥是否接收到根桥传来的信息,BPDU是按照每个Hello时间进行发送的,该行为完全由每个交换机自主。如果一个端口连续3个Hello时间(这个是默认的设置)接受不到上游指定桥送来的BPDU,那么该交换机认为与此邻居之间的链路失败。而不像STP那样都要先等待一个Max Age。
当一个桥从某个端口收到的BPDU的优先级比该交换机上某端口的优先级低的时候,会立即回复一个有效的BPDU,并将该收到BPDU的端口设置为指定端口。上游的指定端口马上接收这个信息,并且更新自己的信息。这样根本不用任何计时器,来通过超时解决拓扑收敛。有些类似Cisco的BackboneFast技术。
当一个端口被选举成为了指定端口之后,在STP中,该端口还要等待至少一个Forward Delay(Learning)时间才会迁移到forwarding状态。而在RSTP中,这样的端口角色会先进入Discarding状态,尔后马上通过Proposal/Agreement机制快速的进入Forwarding状态。这种机制必须在点到点链路上使用。
4、P/A机制
P/A机制即Proposal/Agreement机制。其目的是使一个指定端口尽快进入Forwarding状态。其过程的完成根据以下几个端口变量:
a) proposing. 当一个指定端口处于Discarding或Learning状态的时候,该变量置位。向下游交换机传递Proposal位被置位的RST BPDU。
b) proposed. 当端口收到对端的指定端口发来的携带Proposal的RST BPDU的时候,该变量置位。该变量指示本网段上的指定端口希望尽的进入Forwarding状态。
c) sync. 当Proposed被设置以后,收到proposal的根端口会依次为自己的其他端口置位sync变量。如果端口是非边缘的指定端口是则会进入Discarding状态。
d) synced. 当端口完成转到Discarding后, 会设置自己的synced变量。Alternate、Backup 和边缘端口会马上设置该变量。根端口监视其他端口的synced,当所有其他端口的synced全被设置,根端口会设置自己的synced,然后传回RST BPDU,其中Agreement位被置位。
e) agreed. 当指定端口接收到一个RST BPDU时,如果该BPDU中的Agreement位被置位且端口角色字段是“根端口”,该变量被设置。Agreed变量一旦被置位,指定端口马上转入Forwarding状态。
事实上,经典的STP协议指定端口的角色选择是很快的,主要的速度瓶颈在于超时等待:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定,在协议中就是至少要等待一个Forward Delay后所有端口才能进行转发。而RSTP的主要目的就是消除这个瓶颈。通过阻塞自己的非根端口来保证不会出现环路。而使用P/A这种积极的手段来加快“上游”端口转到Forwarding状态的速度。
这里要强调的是,P/A机制要求两台交换机之间链路必须是点对点的全双工状态。要注意的是,一旦P/A协商不成功,就会等待正常的STP中的两个Forward Delay,此时的行为就回到了STP。
5、拓扑变化变更处理
在RSTP中检测拓扑是否发生了变化只有一个标准:一个非edge端口迁移到Forwarding状态。一旦检测到拓扑发生变化,则采取如下措施:
为本交换机的所有非边缘指定端口启动一个TC While Timer,该计时器值是Hello Time的两倍。如果是根端口上有状态变化,则根端口也要启动。在这个时间内,清空这些端口上学来的MAC地址;同时,由这些端口向外发送TC BPDU,其中的TC置位。根端口总是要发送这种TC BPDU。一旦TC While Timer超时,则停止发送TC BPDU。
其他交换机接收到TC BPDU,作如下工作:
清空所有端口学来的MAC地址,收到TC BPDU的端口除外。然后也为所有自己的非边缘指定端口和自己的根端口启动TC While Timer,重复上述的过程。
如此,网络中就会产生TC BPDU的泛洪。
6、互操作
一个纯STP交换机收到RSTP报文会直接丢弃。
如果使能了mcheck参数,则在RSTP交换机发现失去了所连接的STP交换机,则自动迁移回RSTP工作状态。
展开阅读全文