STP/RSTP/MSTP
STP基本概念
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
STP基本概念;端口角色选举原则 ---------------------------------- STP只有一个根桥(Root Bridge) 两大基本度量依据:ID和路径开销。 ID又分为:BID(Bridge ID)和PID(Port ID)。 BID(Bridge ID)桥ID:共64位:16位桥优先级(Bridge Priority)+48位MAC;越小越优先(8字节=2字节优先级+6字节mac) PID(Port ID)端口ID:共16位:4位端口优先级+12位端口号(PID只在某些情况下对选择指定端口有作用。) 路径开销(Path Cost)是一个端口变量,是STP协议用于选择链路的参考值。 根路径开销(Root Path Cost):端口到根桥的路径开销 根桥RB(Root Bridge):根桥就是网桥ID最小的桥,通过交互配置BPDU协议报文选出最小的BID。 根端口RP(Root Port):所谓根端口就是去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据,这个端口的选择标准是依据根路径开销判定。很显然,在一个运行STP协议的设备上根端口有且只有一个,根桥上没有根端口。 指定端口DP(Designated Port):转发配置BPDU ---------------------------------- 端口角色选举原则 STP选举有四个比较原则,构成消息优先级向量:{ 根桥ID,根路径开销,发送设备BID,发送端口PID }。 RSTP端口角色参数对比顺序:根ID、根路径开销、转发桥ID、转发桥端口ID、本地端口ID。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
Hello Time;Forward Delay;Max Age ------------------------------ STP中影响端口状态和端口收敛的3个因素(同样适用于RSTP): 对于STP,影响端口状态和端口收敛有以下3个参数。(主要是影响到收敛时间,收敛速度吧,并不影响最终的端口角色) Hello Time(缺省2秒):运行STP协议的设备发送配置消息BPDU的时间间隔,用于设备检测链路是否存在故障。 当网络拓扑稳定之后,该计时器的修改只有在根桥修改后才有效。 但当拓扑变化之后,TCN BPDU的发送不受这个计时器的管理。 Forward Delay(缺省15秒):设备状态迁移的延迟时间。 STP采用了一种状态迁移机制,新选出的根端口和指定端口要经过2倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。Forward Delay Timer指一个端口处于Listening和Learning状态的各自持续时间,默认是15秒。 Max Age(缺省20秒):端口的BPDU报文老化时间,可在根桥上通过命令人为改动老化时间。 非根桥设备收到配置BPDU报文后,报文中的Message Age和Max Age会进行比较: 如果Message Age小于等于Max Age,则该非根桥设备继续转发配置BPDU报文。 如果Message Age大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败。 如果配置BPDU是根桥发出的,则Message Age为0。否则,Message Age是从根桥发送到当前桥接收到BPDU的总时间,包括传输延时等。实际实现中,配置BPDU报文经过一个桥,Message Age增加1。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
配置BPDU;TCN BPDU;RST BPDU的变化 ----------------------------------------------------------------------- 配置BPDU是一种心跳报文,只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。 TCN BPDU是在设备检测到网络拓扑发生变化时才发出。 BPDU报文类型 0x00:STP的Configuration BPDU 0x80:STP的TCN BPDU(Topology Change Notification BPDU) 0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU) BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00 STP 配置BPDU 在初始化过程中,每个桥都主动发送配置BPDU。但在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他桥在收到上游传来的配置BPDU后,才触发发送自己的配置BPDU。配置BPDU的长度至少要35个字节,包含了桥ID、路径开销和端口ID等参数。 只有当发送者的BID或端口的PID两个字段中至少有一个和本桥接收端口不同,BPDU报文才会被处理,否则丢弃。这样避免了处理和本端口信息一致的BPDU报文。 不处理收到自己发出的BPDU报文,那么也就是说在某指定端口下存在傻瓜交换机orHUB的环路,是处理不了的咯?环路是一直存在的咯? 配置BPDU是基于端口的,即使是根桥,每个端口的配置BPDU也是不同的,因为配置BPDU中包含了发送端口的PID 发送配置BPDU的3种情况: 1.端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。(根桥) 2.当根端口收到配置BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份配置BPDU。 3.当指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU。 ----------------------------------------------------------------------- TCN BPDU:只有3个字段:协议号、版本和类型。类型字段是固定值0x80,长度只有4个字节。 TCN BPDU是指在下游拓扑发生变化时向上游发送拓扑变化通知,直到根节点。 发送TCN BPDU报文的2种情况: 1.端口状态变为Forwarding状态。(标准定义是端口up/down) 2.指定端口收到TCN BPDU,复制TCN BPDU并发往根桥。 ----------------------------------------------------------------------- RSTP中,RST BPDU格式的改变,充分利用了STP协议报文中的Flag字段,明确了端口角色。 Type字段,RST BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的RST BPDU时会丢弃。 Flags字段,使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU RSTP中无TCN BPDU,因为RSTP中所有的交换机都可以发送TC置位的BPDU报文
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
STP算法实现的基本过程: 配置BPDU的四元组:{ 根桥ID,根路径开销,发送设备BID,发送端口PID } 1.初始状态:所有设备都认为自己是根桥,所有的端口都处于Listening状态。 2.选择根桥:通过交换配置BPDU,设备之间比较根桥ID,根桥ID最小的被选为根桥 根桥的端口只有指定端口和blocking的端口 3.选择根端口和指定端口: A.最优配置消息的选择过程: 每个端口将收到的配置消息与自己的配置消息进行比较: 如果收到的配置消息优先级较低,则将其直接丢弃,对自己的配置消息不进行任何处理; 如果收到的配置消息优先级较高,则用该配置消息的内容将自己配置消息的内容替换掉。(注意,这里是直接进行替换) 设备将所有端口的配置消息进行比较,选出最优的配置消息 B.根端口和指定端口的选择过程: a.非根桥设备将接收最优配置消息的那个端口定为根端口 b.设备根据根端口的配置消息和根端口的路径开销,为每个端口计算一个指定端口配置消息: 根桥ID替换为根端口的配置消息的根桥ID; 根路径开销替换为根端口配置消息的根路径开销加上根端口对应的路径开销; 发送者BID替换为自身设备的ID; 发送端口PID替换为自身端口ID。 c.设备将计算出的配置消息与角色待定端口自己的配置消息进行比较:(确定指定端口or被阻塞) 如果计算出的配置消息更优,则该端口被确定为指定端口,其配置消息也被计算出的配置消息替换,并周期性地向外发送; 如果该端口自己的配置消息更优,则不更新该端口的配置消息并将该端口阻塞。该端口将不再转发数据,且只接收不发送配置消息。 非根端口的2个配置BPDU:自己计算出的配置BPDU,自己的配置BPDU(原生的or直接替换的) 计算出的配置BPDU大,则端口确定为指定端口 自己的配置BPDU大,则端口被阻塞(所以这里理解成接收的配置BPDU大,则端口被阻塞,这也是没问题的)
ROOT/DP/RP选举成功,意味着整个STP树形拓扑建立完毕,但并不意味着网络的收敛完毕
端口角色选举成功,但还是要等待收敛时间才能进入转发状态
端口角色的确认是极快的,若确认的端口角色是阻塞的,那么端口就进行阻塞;若确认的端口为RP/DP,则开始进行收敛,在STP中进入listening,在RSTP中是在discarding
STP对比RSTP
六方面进行比较:1.端口角色;2.端口状态;3.收敛加速;4.TC机制;5.报文结构;6.保护机制
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.端口角色;2.端口状态 ----------------------------------------------------------------------------------- STP/RSTP端口角色、端口状态对比 1.端口角色 STP:RP(根端口)、DP(指定端口)、AP RSTP:RP(根端口)、DP(指定端口)、AP(替代端口)、BR(备份端口)、EP(边缘端口) 从配置BPDU报文发送角度来看: Alternate端口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口。 Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口。 从用户流量角度来看: Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。(备份根端口) Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路。(备份指定端口) ----------------------------------------- 2.端口状态 STP:disable、listening、learning、forwarding、blocking Disabled:禁用状态;端口不仅不处理BPDU报文,也不转发用户流量。 Blocking:阻塞状态;端口仅仅接收并处理BPDU,不转发用户流量。 Listening:侦听状态;端口可以转发BPDU报文,但不转发用户流量。确定端口角色,将选举出根桥、根端口和指定端口。 Learning:学习状态;设备会根据收到的用户流量构建MAC地址表,但不转发用户流量。增加Learning状态防止临时环路。 真的能防止环路?listening状态就确认了端口角色,已经无环了!learning状态的主要目的是学习mac地址,若跳过learning状态,直接转发,设备可能面临大量未知单播帧造成的泛洪现象。 Forwarding:转发状态;端口既转发用户流量也处理BPDU报文。只有根端口或指定端口才能进入Forwarding状态。 RSTP: Forwarding:在这种状态下,端口既转发用户流量又处理BPDU报文。 Learning:这是一种过渡状态。在Learning下,交换设备会根据收到的用户流量,构建MAC地址表,但不转发用户流量,所以叫做学习状态。Learning状态的端口处理BPDU报文。 Discarding:Discarding状态的端口只接收BPDU报文。 这里应该理解为稳定状态下才只接收BPDU报文,比如指定端口处于discarding状态肯定还是要发送BPDU报文的。 RSTP的状态规范把原来的5种状态缩减为3种。根据端口是否转发用户流量和学习MAC地址来划分: 如果不转发用户流量也不学习MAC地址,那么端口状态就是Discarding状态。 如果不转发用户流量但是学习MAC地址,那么端口状态就是Learning状态。 如果既转发用户流量又学习MAC地址,那么端口状态就是Forwarding状态。 ----------------------------------------- STP的不足之处如下: STP没有细致区分端口状态和端口角色,不利于初学者学习及部署。 从用户角度来讲,Listening、Learning和Blocking状态并没有区别,都同样不转发用户流量。 从使用和配置角度来讲,端口之间最本质的区别并不在于端口状态,而是在于端口扮演的角色。 根端口和指定端口可以都处于Listening状态,也可能都处于Forwarding状态。 STP算法是被动的算法,依赖定时器等待的方式判断拓扑变化,收敛速度慢。 STP算法要求在稳定的拓扑中,根桥主动发出配置BPDU报文,而其他设备进行处理,传遍整个STP网络。这也是导致拓扑收敛慢的主要原因之一。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
RSTP的加速机制:P/A协商,根端口快速切换机制,边缘端口 ------------------------------------------- 快速收敛 Proposal/Agreement机制(P/A协商): stp中,当一个端口被选举成为指定端口后,端口至少等待一个forward delay(learning)时间才会迁移到forwarding状态。 RSTP中,当一个端口被选举成为指定端口后,端口会进入discarding状态,再通过PA协商快速进入forwarding状态。(这种机制必须在点到点全双工链路上使用) 根端口快速切换机制: 如果网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口,进入Forwarding状态。因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥。 边缘端口的引入: 在RSTP里面,如果某一个指定端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口叫做边缘端口。(边缘端口需要手工配置) 边缘端口不参与RSTP运算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用。但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。 ------------------------------------------- Proposal/Agreement机制(P/A协商): PA协商网络环境:P2P的链路类型(通过双工模式来判断,全双工则为P2P;半双工则为share); 发出P置位BPDU包的条件:DP端口处于discarding或learning状态 响应P置位BPDU包的条件:P2P链路类型的RP端口才会响应 协商过程: 1.DP端口处于discarding状态发出的BPDU包P位会置1 2.另一端DP端口收到BPDU后,端口角色确认为RP, a.先将本设备上的DP端口进入disacrding状态;(这个动作为sync,完成后则为synced) 通过阻塞非根端口保证不会出现环路。 b.RP端口进入forwarding状态; c.回复A置位的BPDU包 3.DP端口收到A置位的BPDU包后,PA协商完成,端口进入forwarding状态。(内部状态机为agreed) 4.步骤2的DP端口进入discarding状态会造成向下游发起PA协商 所以在RSTP网络中接入一台根桥的话,会引起整个网络的PA协商 一旦P/A协商不成功,指定端口的选择就需要等待两个Forward Delay,协商过程与STP一样。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
STP拓扑改变的条件: 标准定义:up/down都为拓扑变化(华为实现:一个端口的状态变为forwarding) ------------------ STP发送TCN的条件: 1.非根桥的DP口收到TCN BPDU包后会复制一份TCN BPDU向根桥方向发送 2.一个端口进入转发状态,并且该设备至少有一个指定端口(例如PC开机) 3.forwarding端口进入disable或blocking状态(例如PC关机)(这条在ensp stp模式下实测是没有的!) ------------------ STP拓扑变化处理过程: 1.设备的端口状态发生变化后,设备向上游设备发送TCN BPDU报文 2.上游设备收到TCN BPDU报文后,2个动作: a.回复配置BPDU报文(flags的TCA位置1),告知下游设备停止发送TCN BPDU报文。 b.复制一份TCN BPDU报文,向根桥方向发送。 3.重复,直到根桥收到TCN BPDU报文。 4.根桥泛洪配置BPDU报文(TC位和TCA位同时置1;同时置位的报文只有1个),TC位置1是为了通知下游设备直接删除桥MAC地址表项,TCA位置1是为了通知下游设备停止发送TCN BPDU报文。(根桥持续发送TC置位的BPDU包35秒:max age+forward delay) 置位的TC标记的配置BPDU报文主要是上游设备用来告知下游设备拓扑发生变化,请下游设备直接删除桥MAC地址表项,从而达到快速收敛的目的。 这里的加速收敛是指加速了mac地址的老化,示例:以直连链路故障图为例,网络稳定后,SW2和SW3上的PC发生了相互的通信,此时各台交换机都储存了PC的mac;若sw1和sw3的互联链路发生故障,网络拓扑发生改变,网络稳定后,PC之间无法通信,只能等mac自然老化(300秒)后,才能正常通信。 TC BPDU包的主要目的:刷新mac地址表,实现快速转发。 mac地址清除机制:将mac地址表的老化时间设置为15秒 ----------------------------------------------------- RSTP检测拓扑变化只有1个标准:一个非边缘端口迁移到forwarding状态。 RSTP检测到拓扑变化后: 为本交换设备的所有非边缘指定端口启动一个TC while timer,该计时器是2倍hello time,即4秒 清空状态发生变化的端口上学习到的mac地址; 同时在4秒内由这些端口向外发送RST BPDU。(非边缘端口,即RP/DP/AP/BP,由于APBP阻塞,所以实际应该就是RP和DP) 其他交换设备收到RST BPDU后,清空所有端口学习到的mac地址,除了收到RST BPDU的端口。 同时启动TC While Timer,重复上述过程。 RSTP中,每台都可以主动发起tc置位的BPDU包,只持续发送4秒 RSTP中是直接清mac的,但是不同的设备清mac的机制不一样 RSTP中,只要有设备检测到拓扑变化,便发送TC置位的BPDU报文 当检测到拓扑发生了变化时: 1.首先清空状态发生变化的端口上学习到的MAC地址。 2.同时在2倍的hello time时间内不断向非边缘端口发送TC置位的RST BPDU。 3.其他设备收到TC置位的RST BPDU后,清空其他所有端口学习到的MAC地址(除了收到RST BPDU的端口)。同时也会从自己的非边缘端口和根端口向外泛洪TC置位的RST BPDU。 -------------------------- STP和RSTP TC的区别: STP中只有根桥才会发送TC BPDU,非根设备检测到拓扑变化后,往根桥方向发送TCN BPDU报文 RSTP中,所有设备都能发送TC BPDU mac地址老化的机制也不一样:STP将mac地址老化设置为15秒;而RSTP中直接清除mac(不同的设备清mac的机制不一样)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
配置BPDU的改变,rstp充分利用了bpdu中的flag字段 STP BPDU 0x00;RST BPDU0x02 BPDU报文的flags字段共1字节 STP使用了其中的2位:TCA位和TC位 RSTP全部都有使用:TCA位、agreement位、forwarding位、learning位、port role位(2bit)、proposal位、TC位 其中forwarding位、learning位组合: 00表示端口状态discarding;01表示端口状态learning;11表示端口状态forwarding port role位: 00表示端口角色unknown;01表示AP或BP;10表示根端口;11表示指定端口
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
6.保护机制:BPDU保护功能、root保护(根保护)、环路保护、TC防护(防TC-BPDU攻击);BPDU报文过滤功能 ------------------------------------ BPDU保护功能: 该功能通常配置在边缘端口上,配置了该功能后,当端口收到BPDU时,端口将被error-down,但边缘端口属性不变,同时通知网管系统。 恢复的2种方式:1.手工shutdown/undo shutdown;2.配置使能端口自动恢复功能,并设置延迟时间,当端口没有接受到BPDU,在经历延迟时间后,端口自动恢复。 场景:误操作环路、遭受攻击 ------------------------------------ root保护(根保护): 该功能只能在指定端口上配置生效,配置该功能后,当端口收到更高优先级BPDU时,端口状态进入discarding状态;经过一段时间后(2倍forward delay),如果端口没有收到更高优先级BPDU,端口自动up。 场景:维护人员误配置、网络攻击 ------------------------------------ 环路保护:该功能只能在RP或AP上配置生效,在启动了环路保护之后,端口长时间没有收到上游的RST BPDU时,通知网管系统(若是根端口,则进入discarding状态),一直阻塞,直到端口收到RST BPDU时,端口恢复到forwarding状态。 场景:链路单向故障or阻塞,导致RP/AP没有收到RST BPDU报文,RP经历链路故障检测时间后,判断链路故障,将会重新选举端口角色,成为DP;此时2边都是DP,都处于转发状态,形成了环路。 ------------------------------------ TC防护(防TC-BPDU攻击):在单位时间内,交换机处理TC BPDU的次数可以配置。若在单位时间内,交换设备收到TC BPDU报文数量大于配置的阈值,那么设备只会处理指定次数;在定时器到期后,统一处理一次TC BPDU。这样避免频繁删除MAC地址表和ARP表象,从而达到保护设备的目的。 场景:伪造TC BPDU攻击。 ------------------------------------ 只用提前面的4种就好 BPDU报文过滤功能 配置为边缘端口后,端口仍然会发送BPDU报文,这可能导致BPDU报文发送到其他网络,引起其他网络产生震荡。因此可以配置边缘端口的BPDU报文过滤功能,使边缘端口不处理、不发送BPDU报文。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
还有3点变化:配置BPDU报文的发送方式;BPDU超时计时机制;处理次等BPDU的机制 --------------------------------- 拓扑稳定后,配置BPDU报文的发送方式有变化: 根桥按照Hello Timer规定的时间间隔发送配置BPDU。 使用STP,非根桥设备在收到上游设备发送过来的配置BPDU后,才会触发发出配置BPDU。 使用RSTP,非根桥设备按照Hello Timer规定的时间间隔自主发送RST BPDU 更短的BPDU超时计时: STP等待一个Max Age(缺省20秒) RSTP的超时时间3*hellotime*time factor(在华为设备中time factor缺省为3) 处理次等BPDU: 当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身存储的RST BPDU与收到的RST BPDU进行比较。 如果该端口存储的RST BPDU的优先级高于收到的RST BPDU,那么该端口会直接丢弃收到的RST BPDU,立即回应自身存储的RST BPDU。 当上游设备收到下游设备回应的RST BPDU后,上游设备会根据收到的RST BPDU报文中相应的字段立即更新自己存储的RST BPDU。
RSTP比STP收敛快:3种机制(根端口快速切换,PA协商,边缘端口)
RSPT比STP的优势:3种收敛机制;TC机制优化;更快的链路检测机制
边缘端口
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
边缘端口 边缘端口特点: 1.避免了30秒的延时,快速进入转发状态 2.边缘端口的up/down不会触发拓扑改变 3.边缘端口收到TC BPDU包,不会清除MAC地址(这个应该是收到TC BPDU包后,不会清除边缘端口学习到的MAC地址) 4.PA协商不会阻塞边缘端口 5.边缘端口收到BPDU包后,会成为普通端口,执行STP计算 6.边缘端口不发送TC BPDU包 7.边缘端口会发送BPDU包(RST BPDU) 边缘端口的问题: 1.会导致短暂的环路问题(一台交换机上2个边缘端口自环) 边缘端口快速进入转发状态,同时边缘端口会发送BPDU包 2.在DHCP环境中,不应用边缘端口可能会造成无法获取IP地址的问题 windows系统的dhcp机制,只会发起几次dhcp请求,若不应用边缘端口,端口未完成收敛,那么windows系统无法获取ip,就会给自己分配一个169.254.x.x/24的IP,不会再发起dhcp请求 边缘端口的保护机制: 1.BPDU防护:开启后边缘端口若收到BPDU包,则会shutdown(error-disable) 恢复方式: a.手工恢复:shutdown/undo shutdown b.自动恢复:error-disable recovery time 2.BPDU过滤:接口不发送也不接收BPDU包,如果应用在边缘端口可能会造成永久的环路。
STP/RSTP收敛对比示例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.直连链路故障 稳定的网络状态如图所示,当SW1和SW3的互联链路发生故障,最终SW3 ethernet0/0/3的端口角色会从AP迁移至RP,收敛时间需要多久? STP:检测到故障后,SW3通过STP算法重新确认了ethernet0/0/3为RP(这个过程极快),该端口开始进入listening状态,再进入learning状态,最终进入forwarding状态。 确认端口角色很快,但收敛完成,进入转发状态需要30秒(2个默认的转发时延) 实际上厂商对STP进行了优化,思科使用私有方案,华为则借用了RSTP机制 RSTP:根端口快速切换机制:最优的AP快速切换为RP,进入Forwarding状态。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
3.次优BPDU 示意图同直连链路故障,当SW1和SW2的互联链路发生故障,最终SW3 ethernet0/0/3的端口角色会从AP迁移至DP,收敛时间需要多久? 当链路故障发生后,SW2开始发送自己的BPDU包, STP:SW3接收到该次优BPDU包会忽略;等待max age后,才会进行状态迁移;共50秒=20秒+2*15秒(这个ENSP没法验证) 根据我的理解应该是接到次优BPDU包后,就重新确认了端口角色,然后经历30秒后,端口进入转发状态。 厂商进行了优化,思科使用私有的优化,华为则借用了RSTP机制 RSTP:SW3接收到该次优BPDU包后,忽略该BPDU包,端口角色由AP切为DP;同时回复了一个BPDU包。(这点可以参考发送BPDU的3种情况) 因为SW3 ethernet0/0/3此时为DP,状态为discarding,所以回复的BPDU包P位置位。 通过P/A协商,ethernet0/0/3快速进入forwarding状态。(此处端口up触发了TC,sw3发送TC置位BPDU包) 结论:SW3 ethernet0/0/3快速进入forwarding状态。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2.非直连链路故障 稳定的网络状态如图所示,当SW1和HUB的互联链路发生故障,最终SW3 ethernet0/0/3的端口角色会从AP迁移至RP,收敛时间需要多久? BPDU超时机制: STP:等待一个Max Age(缺省20秒) RSTP:等待3个hello time间隔(hello time缺省2秒) SW3经过等待BPDU超时时间后,认为链路故障,AP端口开始迁移为RP端口 STP:链路故障后,SW3端口角色,状态均无变化;等待max age 20秒后,重新确认了端口角色,端口状态也开始收敛,ethernet0/0/3经过2个转发时延进入forwarding状态。 共50秒=20秒+2*15秒 RSTP:链路故障后,SW3端口角色,状态均无变化;等待3个hello time 6秒后,重新确认了端口角色,端口状态也开始变化,由于根端口快速切换机制,快速进入了forwarding状态。 共6秒=3*2秒 STP的根桥故障,收敛需要50秒 RSTP的根桥故障,重新选举角色需要6秒,至于收敛还是得看具体情况了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
4.P/A协商 2台交换机通过一根网线直连,就会触发P/A协商 当端口up后,2边的交换机都认为自己是根桥,端口都是DP,但同时端口状态为discarding。所以此时发出的RST BPDU的P位都会置位。 以下都是自己的推测: 高优先级端收到BPDU,收到次优BPDU,立即回复一个BPDU包,该BPDU的P位也是置位的。 详见极端PA图 share DP端口会发送P置位BPDU,对端P2P RP响应后会快速进入转发状态并回复A置位BPDU,但是share DP端口收到后不会响应,端口不会快速进入转发状态 反过来的情况:P2P DP端发送P置位BPDU,share RP不会响应A置位BPDU 增强型PA协商(华为私有) 每一个PA协商的报文都会将PA位同时置位;每一个RST BPDU的A都是置位的。 所以在这种机制下,华为设备应该保持DP端口角色的那一端会更早地进入转发转态;因为收到这个BPDU是对端主动发送的,而不是对端被动回复的 全P2P网络,PA协商不生效场景:2台交换机通过一台傻瓜交换机互联,网络状态已经稳定。此时接入一台非根交换机到傻瓜交换机,无法触发PA协商
上面这个场景,当DP的链路有故障,那么该段链路的端口收敛,DP需要48秒;经历3个hello间隔检测到链路故障2*3*3=18秒,HUB无法触发PA协商,收敛需要30秒。
1111111111