华为---RSTP(三)---P/A机制及RSTP的生成树形成过程

2024-02-25 14:04

本文主要是介绍华为---RSTP(三)---P/A机制及RSTP的生成树形成过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1. P/A机制简介

1.1 P/A机制的作用

1.2 P/A协商的前提条件

1.3 RSTP选举思路

2. P/A协商过程

3. 举例说明RSTP的生成树形成过程

3.1 示例环境要求

3.2 RSTP的生成树形成过程

3.2.1 SW和SW1之间链路上抓包分析

3.2.2 SW和SW2之间链路上抓包分析

3.2.3 SW1和SW2之间链路上抓包分析

3.2.4 SW2和SW3之间链路上抓包分析

3.2.5 SW1和SW3之间链路上抓包分析

3.2.6 备份端口选举抓包分析


1. P/A机制简介

P(Proposal)/A(Agreement)机制---请求/确认机制
        P/A机制        P:Proposal-协商        A:Agreement-同意
        P/A机制是RSTP( Rapid Spanning Tree Protocol,快速生成树协议)中的一个关键组成部分,它允许指定的端口在满足一定条件下快速进入转发状态,而无需等待定时器的超时。

1.1 P/A机制的作用

        为了使生成树链路上的端口(根端口、指定端口)快速进入转发状态,不用等待30秒延时(2个转发延时)。

1.2 P/A协商的前提条件

        P/A机制的触发前提是DP端口处于Discarding状态,两台交换设备之间链路必须是点对点的全双工模式,一旦P/A协商不成功,指定端口到转发状态就需要等待两个转发延时(30秒),协商过程与STP一样。

1.3 RSTP选举思路

        RSTP选举原理和STP本质上相同:选举根交换机->选举非根交换机上的根端口->选举指定端口->选举预备端口和备份端口。
        事实上对于STP,指定端口的选择可以很快完成,主要的速度瓶颈在于:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定,也就是说必须要等待至少一个Forward Delay所有端口才能进行转发。而RSTP的主要目的就是消除这个瓶颈,通过阻塞自己的非根端口来保证不会出现环路。而使用P/A机制加快了上游端口转到Forwarding状态的速度。

        RSTP在选举的过程中加入了“发起请求-回复同意”(P/A机制)这种确认机制,由于每个步骤有确认就不需要依赖计时器来保证网络拓扑无环后才进入转发状态,只需要考虑BPDU发送报文并计算无环拓扑的时间(一般都是秒级)。解决了STP网络收敛慢问题。

2. P/A协商过程

        如下图所示,根桥S1和S2之间新添加了一条链路。在当前状态下,S2的另外几个端口p2是Alternate端口,p3是指定端口且处于Forwarding状态,p4是边缘端口。

        Proposal/Agreement过程示意图

新链路连接成功后,P/A机制协商过程如下:

  1. p0和p1两个端口马上都先成为指定端口,发送RST BPDU。
  2. S2的p1口收到更优的RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送RST BPDU。
  3. S1的p0进入Discarding状态,于是发送的RST BPDU中把proposal置1。
  4. S2收到根桥发送来的携带proposal的RST BPDU,开始将自己的所有端口进入sync变量置位。
  5. p2已经阻塞,状态不变;p4是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口p3。
  6. 各端口的synced变量置位后,p2、p3进入Discarding状态,p1进入Forwarding状态并向S1返回Agreement位置位的回应RST BPDU。
  7. 当S1判断出这是对刚刚发出的Proposal的回应,于是端口p0马上进入Forwarding状态。

        上述P/A机制协商过程是华为官方资料描述,说明了两个RSTP交换机端口之间新加链路的P/A协商过程,没有讲述整个RSTP网络如何进行P/A协商的?生成树如何形成的?。

3. 举例说明RSTP的生成树形成过程

3.1 示例环境要求

        组网如下图所示,提前配置SW为根交换机,所有交换机都配置成RSTP模式。为便于网络数据抓取,每两台交换机之间用两台集线器hub相连,先开启所有集线器,然后在集线器间的节点上抓取数据,最后选中所有交换机点击开启设备。

3.2 RSTP的生成树形成过程

        通过抓包分析根交换机、根端口、指定端口、预备端口和备份端口的选举,RSTP的生成树形成过程。

3.2.1 SW和SW1之间链路上抓包分析


        SW的Eth 0/0/1和SW1的Eth 0/0/3两个端口马上都先成为指定端口,并处于Discarding状态,发送Proposal位置位1的RST BPDU。

        SW1的Eth 0/0/3口收到更优的Proposal位置位1的RST BPDU:
        (1)马上意识到自己将成为根端口,而不是指定端口;
        (2)阻塞除SW1的Eth 0/0/3口和边缘端口外的所有端口;
        (3)给SW的Eth 0/0/1口回复Agreement位置位1的RST BPDU;
        (4)SW1所有非边缘端口发送Topology Change位置位1的RST BPDU,更新Mac地址表;
        (5)停止发送RST BPDU。

        SW交换机收到P/A请求的回应后:
        (1)SW的Eth 0/0/1端口马上进入Forwarding状态;
        (2)SW的所有指定端口发送Topology Change位置位1的RST BPDU,更新Mac地址表。

        到此SW的Eth 0/0/1端口和SW1的Eth 0/0/3端口之间的链路P/A协商完成,SW为根交换机,SW的Eth 0/0/1为指定端口,SW1的Eth 0/0/3为根端口。

3.2.2 SW和SW2之间链路上抓包分析

        分析过程和SW的Eth 0/0/1端口至SW1的Eth 0/0/3端口之间的链路P/A协商一样,不再赘述,确认SW为根交换机,SW的Eth 0/0/2为指定端口,SW2的Eth 0/0/3为根端口。

3.2.3 SW1和SW2之间链路上抓包分析


        SW1的Eth 0/0/1和SW2的Eth 0/0/1两个端口马上都先成为指定端口,并处于Discarding状态,发送Proposal位置位1的RST BPDU。

        上述图说明P/A协商失败,SW2交换机发送了约15秒的P置位 RST BPDU,SW2的Eth 0/0/1端口进入Learning状态,15秒后进入forwarding状态。

        一旦P/A协商不成功,指定端口的选择就需要等待两个Forward Delay,协商过程与STP一样,SW1和SW2交换机根交换机ID和根路径开销都一样,所以按照STP指定端口选举规则进行选举,需要通过比较各自的交换机ID(BID)选举指定端口,SW1的ID是32768.4c1f-ccbe-6957,SW2的ID是32768.4c1f-cc16-6c7a,SW1的ID大于SW2的ID,所以SW2的Eth 0/0/1口为指定端口,SW1的Eth 0/0/1口为预备端口。

3.2.4 SW2和SW3之间链路上抓包分析

        分析过程和SW的Eth 0/0/1端口至SW1的Eth 0/0/3端口之间的链路P/A协商一样,不再赘述,确认SW为根交换机,SW2的Eth 0/0/2为指定端口,SW3的Eth 0/0/1为根端口。

3.2.5 SW1和SW3之间链路上抓包分析

        SW1的Eth 0/0/2和SW3的Eth 0/0/2两个端口马上都先成为指定端口,并处于Discarding状态,发送Proposal位置位1的RST BPDU。

        上述图说明P/A协商失败,SW1交换机发送了约15秒的P置位 RST BPDU,SW1的Eth 0/0/2端口进入Learning状态,15秒后进入forwarding状态。

        一旦P/A协商不成功,指定端口的选择就需要等待两个Forward Delay,协商过程与STP一样。SW1和SW3交换机根交换机ID一样,SW1根路径开销是200000,SW3根路径开销是400000,按照STP指定端口选举规则进行选举,SW1根路径开销小,所以SW1的Eth 0/0/2口为指定端口,SW3的Eth 0/0/2口为预备端口。

3.2.6 备份端口选举抓包分析

        如上网络拓扑图所示,在链路6和链路7上抓包:


        从上图可以看出,数据都是从SW3的Eth 0/0/3口发出的RST BPDU,说明SW3在发送RST BPDU前,因为根交换机ID、跟路径开销、当前交换机ID都一样,所以通过比较端口ID(PID),选择小端口ID的Eth 0/0/3端口为指定端口,大端口ID的Eth 0/0/4端口为备份端口。

SW3的Eth 0/0/3口P/A协商是失败的,是按照STP指定端口选举规则进行选举的。

  • RSTP的生成树是每条链路之间进行P/A协商,有更优RST BPDU立即更新。
  • Alternate端口就是由于学习到其它交换机发来的更优配置BPDU报文(更小的RID)而阻塞的端口。
  • Backup端口就是由于学习到自己发送的更优配置BPDU报文而阻塞的端口。

这篇关于华为---RSTP(三)---P/A机制及RSTP的生成树形成过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745703

相关文章

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解

SpringKafka错误处理(重试机制与死信队列)

《SpringKafka错误处理(重试机制与死信队列)》SpringKafka提供了全面的错误处理机制,通过灵活的重试策略和死信队列处理,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、Spring Kafka错误处理基础二、配置重试机制三、死信队列实现四、特定异常的处理策略五

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生