8.2 STP:RSTP收敛

1.小知识

1.1 所有交换机使用RSTP,就一定快速收敛吗?

  答案:不一定。RSTP是否启用P/A快速收敛机制,除了需要对端设备开启RTSP协议,还需要确定物理链路类型。在RSTP定义中有point-to-point类型和share类型,当链路上有hub或者端口半双工时,交换机一般都认为链路是share类型,这个时候在该链路上就不会启动P/A链路是point-to-point类型时,交换机会启动P/A机制
  思科交换机在接口模式下使用spanning-tree link-type {share|point-to-point}指定类型;华为交换机在接口模式下使用stp point-to-point 指定类型。

1.2 P/A机制下,谁来负责避免环路呢?

  记住一点:由执行根端口角色变更的交换机在本地执行环路避免工作,例如设备变成根桥了,它以前的根端口角色就不存在变成指定端口;端口的开销变大或变小了,需要重新选举根端口了。这些情况都会引起根端口角色变更。

1.3 交换机在具体如何执行环路避免呢?

  设备在P/A传递机制中,非边缘端口会处于discard状态不会转发数据,设备只有收到A置位的报文才会将非边缘端口设置为forwarding状态。请记住一点:在初始化时候,所有交换机都会发送P置位报文,也是所有交换机协商完毕后,A置位的报文才会产生

1.4 拓扑变更时,所有设备的MAC表都清理吗?

  一定要记住:RSTP拓扑变更时,只有受到变更影响的设备MAC表才需要清理,并不是全网设备都需要清理。

2.拓扑收敛

  在拓扑收敛中,只有非边缘端口状态从discard转到forwarding才会触发拓扑变更TC报文,这里只讨论到设备角色和端口角色选举完毕为止,至于MAC表变更不做讨论,因为这个很简单。

2.1 初始网络收敛

在这里插入图片描述
  SW1优先级设置为root primary,SW4优先级设置为root secondary,下面描述网络初始化时收敛过程:

  1.所有设备初始时都认为自己是根桥,发送P置位的BPDU告诉邻居,我是老大,都是指定端口,你就说同不同意。

  2.LSW1和LSW4收到LSW2和LSW3报文后,都一致认为它俩是小弟,所以不会发送A置位的BPDU报文。

  3.LSW2和LSW3收到LSW1和LSW4报文后,认为LSW1是老大,于是将LSW1是老大的信息,再次发送P置位的BPDU给LSW4。

  4.LSW4一看该信息,得了老大是LSW1了,于是向LSW2和LSW3发送A置位报文。LSW2和LSW3也会将A置位报文发给LSW1,都承认LSW1是根桥老大。

  5在设备发送或收到A置位BPDU后,根端口和指定端口立刻选举出来,并设置为forwarding。这个时间很快,也不需要经过STP的端口转换延迟

2.2 新增根桥设备收敛

在这里插入图片描述
  以前的根桥时LSW1,后面新加设备LSW5的优先级更高,所以它是新根桥,其收敛过程如下:

  1.LSW5认为自己是根桥老大,设置gi0/0/1为指定端口处于disacrd状态,并发送根桥ID是自己的P置位BPDU给LSW2.

  2.LSW2也一样发送P置位的BPDU给LSW5,不过发现LSW5更优,所以立刻认为gi0/0/3是根端口,gi0/0/1和gi0/0/2设置为指定端口,但是为了防止环路,端口都是discard状态。

  3.LSW2向下级LSW1和LSW4传递P置位的BPDU,告诉它们老大换人了,抓紧协商同意把。LSW1和LSW4经过协商认为新老大是LSW5,于是端口都设置为discard状态。但是不会立刻向LSW2发送A置位的报文,因为LSW1和LSW4下游还有设备。

  4.LSW1和LSW4向下级LSW3发送P置位的BPDU,LSW3协商认为老大是LSW5,于是端口都设置为discard状态。由于LSW3已经是最下级设备,所以LSW3开始向上发送A置位的BPDU,并协商端口角色,其中根端口和指定端口立刻进入forwarding状态,阻塞端口继续处于discard状态。

  5.LSW1和LSW4收到A置位BPDU后协商自己端口角色,根端口和指定端口立即进入forwarding状态,LSW1和LSW4也会立即向上发送A置位BPDU。

  6.LSW2收到A置位BPDU后,根和指定端口立即进入forwarding状态,同时向上转发A置位报文,LSW5收到报文后指定端口进入forwarding状态。

  7.至此拓扑收敛完毕,虽然步骤很多但所用时间其实很短,大型拓扑也不过1-2秒左右就可以搞定。

2.3 新增非根桥收敛

在这里插入图片描述
  新增的LSW5优先级没有LSW1高,所以它只算是普通设备,收敛过程如下:

  1.LSW5认为自己是根桥老大,将gi0/0/1设置为指定端口discard状态,并发送P置位的BPDU,该BPDU中的根桥是自己。LSW2的gi0/0/3设置为指定端口discard状态,向LSW5发送P置位的BPDU,该BPDU的根桥是LSW1。

  2.LSW5发现还是LSW1厉害一些,所以认为LSW1是根桥,并发送A置位的BPDU,设置gi0/0/1为根端口状态立即变为forwarding。LSW2的gi0/0/3也立刻变成指定端口forwarding状态。

2.4 原设备升级根桥收敛

在这里插入图片描述
  原拓扑中LSW1是根桥,LSW4的gi0/0/2是替代端口AP,后面认为修改LSW4为新根桥,其拓扑收敛工程如下:

  1.LSW4认为自己是根桥老大,于是非边缘端口全部设置为指定端口,但是转发状态维持不变,开始向LSW2和LSW3发送P置位的BPDU。

  2.LSW2和LSW3收到P置位BPDU后,认为LSW4是新根桥老大,将自己端口设置为discard状态,并向下游设备转发P置位的BPDU。

  3.LSW1收到P置位的BPDU后,认为LSW4是新根桥老大,将自己的端口先设置为discard状态。由于LSW1是最下游设备,所以开始发送A置位的BPDU,同时内部选举端口角色,并将根端口和指定端口设置为forwarding状态。

  4.LSW2和LSW3收到A置位的BPDU后内部选举端口角色,并将根端口和指定端口立刻设置为forwarding状态。LSW2和LSW3同时向LSW4发送A置位的BPDU。

  5.LSW4收到A置位的BPDU后,discard状态的指定端口立刻进入forwarding状态,至此收敛完毕。

3.故障收敛

3.1直连故障

在这里插入图片描述
  LSW1与LSW3的直连链路出现故障,收敛过程如下:

  1.LSW3发现根端口失效后,根端口立即失效并删除最优BPDU信息,同时因为收到来自LSW2的配置BPDU报文,所以不会等待3个hello时间,立刻将AP端口(AP端口就是根端口的备份)设置为根端口,并将状态从discard变成forwarding。LSW3触发拓扑变更向LSW2发送TC置位的BPDU。

  2.LSW2收到TC置位的BPDU后,按照规则删除MAC表,并向LSW1继续发送TC置位的BPDU.

  3.LSW1根据规则删除MAC表,拓扑和MAC表收敛完毕,收敛时间忽略不计。

3.2 非直连故障

在这里插入图片描述
  在该拓扑中,LSW1和LSW3出现了非直连故障,拓扑收敛过程如下:

  1.LSW2与LSW1链路故障,LSW2立刻检测到RP端口失效,LSW2等待3个hello时间依然收不到任何设备发送的BPDU,就认为自己是根桥,Gi0/0/2端口角色不变,状态变成discard,发送根桥ID是自己的P置位配置BPDU

  2.LSW3在阻塞端口AP收到LSW2发送的次优BPDU后,立刻认为gi0/0/1端口应该是指定端口,并发送P和A都置位的最优BPDU给LSW2。 这里RSTP就比STP快了50秒,因为STP需要等20S超时+30S的端口变迁,阻塞端口才能变成指定端口并进入forwarding状态。

  3.LSW2收到最优BPDU后,不在认为自己不是根桥,所以指定端口状态变成forwarding,发送A置位的BPDU报文。LSW3收到报文后,指定端口gi0/0/1进入forwarding状态,并且发送TC置位的报文。

  4.LSW1和LSW2收到TC置位报文后,按照规则删除MAC表,拓扑收敛完毕,大概需要3个hello=6S。

发布了27 篇原创文章 · 获赞 7 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ldg513783697/article/details/104912355
8.2