连接中断原因也可能是增加了新的链路,导致其中一台交换机重新选举根端口,最终认为新链路所连端口是根端口,RSTP在点到点链路上使用提议/同意(Proposal/Agreement)过程,让类似这种链路迅速开始工作,并且不会造成临时的交换环路,也不会造成明显的通信中断。
新链路端口选为根端口,其他端口为指定端口。邻居还没来得及被告知这种变更,于是两边都是指定端口,造成环路。要避免这种环路可以在将新的根端口置为转发状态之前,把所有非边界指定端口置为丢弃状态。这可以保证无环但也会造成明显的通信中断。需要等待一定时间。
 
提议/ 同意( Proposal/ Agreement)。
提议表示一个端口想要成为指定转发端口的意愿,而同意表示允许立即执行。在两台交换机之间增加了新的点到点链路后,两端的端口一开始都是指定丢弃状态,这是非边界端口的默认角色和状态。
任何处于丢弃或学习状态的指定端口需要发送设置了提议位的BPDU。因此两台交换机都会尝试交换设置了提议位的BPDU(或简称为提议),假设它们都有权成为指定端口。
然而,如果其中一个接收到提议的端口发现这个提议构成了这台交换机收到的最优结果BPDU,这个端口的角色就会从指定端口变为根端口(状态仍保持为丢弃状态)。交换机上的其他端口也会随之更新。
进一步说,交换机如果在根端口接收到了提议,它会立刻把所有非边界指定端口设置为丢弃状态。这个操作称为同步(Sync)。处于同步状态的交换机被从网络中隔离,避免任何交换环路穿其而过:它的根端口仍处于丢弃状态(即使已处于转发状态,邻居的指定端口也仍处于丢弃或学习状态),它的指定端口被有意设置为了丢弃状态。现在可以安全地将新根端口移至转发状态,并通知上行交换机:可以将指定端口从转发或学习状态变更为转发状态了。这是在交换机在执行同步之后,通过其根端口发送设置了同意位BPDU(或简称为同意)实现的。上行交换机在指定丢弃端口或指定学习端口上收到协议BPDU时,会立刻把端口变为转发状态,完成两台交换机之间的提议/同意交换。
因为所有的指定转发端口和指定学习端口都会发送提议,提议/同意交换过程其实是从“上层”交换机移至“下层”(根交换机是生成树的“顶”),造成传递的效果,

在交换网络中造成运行中断的原因可以是直接链路故障(交换机失去了根端口)、间接链路故障(邻居失去了根端口)、增加新的根链路,或变更了根交换机。RSTP对于每种事件都有响应机制:针对直接链路故障,把最优的替换端口变为新的根端口;针对间接链路故障,允许接受来自指定交换机的次优BPDU;针对增加新的根链路,使用提议/同意机制进行应对;针对根交换机的更替,由以上机制组合处理。
在提议/同意的交换过程中,所有非边界指定端口都会被移至丢弃状态(也就是同步操作)。如果工程师没有使用接口命令spanning-tree portfast,或全局命令spanning-tree portfast default(都只对Access端口有效),将面向终端主机的端口明确配置为边界端口,它们将在同步过程的中被设置为丢弃状态。因为终端主机不能发送RSTP协议,因此这些端口会在两个转发延迟间隔之后,再次变为转发状态,终端主机将经历明显的连接性中断。在RSTP中,将面向终端主机的端口配置为边界端口是至关重要的;否则网络的性能可能比802.1D STP还差。
 

STP-8-RSTP中的提议/同意过程的更多相关文章

  1. STP详解-STP、RSTP、MSTP

    STP详解 01 冗余链路中存在的问题 如图所示LSW1和LSW2之间有两条线路相连,它们之间任何一条链路出现故障另外一条线路可以马上顶替出现故障的那条链路,这样可以很好的解决单链路故障引起的网络中断 ...

  2. JVM中对象的创建过程

    JVM中对象的创建过程如以下流程图中所示: 对其主要步骤进行详细阐述: 为新生对象分配内存: 内存的分配方式: 指针碰撞:假设Java堆中内存是绝对规整的,所有用过的内存放在一边,空闲的内存在另一边, ...

  3. Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 onMeasure方法简述 附有自定义View例子 Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android fr ...

  4. Android系统在新进程中启动自定义服务过程(startService)的原理分析

    在编写Android应用程序时,我们一般将一些计算型的逻辑放在一个独立的进程来处理,这样主进程仍然可以流畅地响应界面事件,提高用户体验.Android系统为我们提供了一个Service类,我们可以实现 ...

  5. 【转】Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布 ...

  6. Android Multimedia框架总结(二十二)MediaCodec中C++中创建到start过程及状态变换

    上一章介绍MediaCodec中创建到start过程(到jni部分),从今天开始,将深入源码中看看其c++过程,看下Agenda如下: mediacodec.h CreateByType initMe ...

  7. JVM中对象的回收过程

      当我们的程序开启运行之后就,就会在我们的java堆中不断的产生新的对象,而这是需要占用我们的存储空间的,因为创建一个新的对象需要分配对应的内存空间,显然我的内存空间是固定有限的,所以我们需要对没有 ...

  8. 有谁知道Delphi中"窗口"的创建过程?

      求助:有谁知道Delphi中窗口的创建过程,此“窗口”不仅仅指 TForm 类型, 还包括一般的窗口控件,如TButton,TEdit等等,希望有能够十分详细的运作 过程,比如说CreatPara ...

  9. oracle中使用函数控制过程是否执行(结合job使用)

    oracle中使用函数控制过程是否执行(结合job使用时候,循环时间不好写的时候,可以此种方法比较方便) CREATE OR REPLACE FUNCTION wsbs_pk_date_validat ...

随机推荐

  1. BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居:队列 + multiset + 并查集【曼哈顿距离变形】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1604 题意: 平面直角坐标系中,有n个点(n <= 100000,坐标范围10^9) ...

  2. j2ee项目Java代码性能优化要点(抄书)

    亚信联创科技出版的. 1.与log4j有关的性能问题 Logger对象的标准定义方式: private static transient Logger log=Logger.getLogger(cre ...

  3. Map功能简化Python并发代码

    <转摘>Python 并行任务技巧 支持Map并发的包文件有两个: Multiprocessing,还有少为人知的但却功能强大的子文件 multiprocessing.dummy. Dum ...

  4. sed 中带变量的情况

    #teststr="IBM" #sed -n '/' "$teststr" '/=' testfile.txt 在sed中使用变量 通常,我们使用sed进行变量 ...

  5. Cloudera Manager 5 和 CDH5 本地(离线)安装指南

    http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.0.0/RPMS/x86_64/ http://archive-primary.clouder ...

  6. ACM学习历程——UVA11111 Generalized Matrioshkas(栈)

    Description   Problem B - Generalized Matrioshkas   Problem B - Generalized Matrioshkas  Vladimir wo ...

  7. 洛谷P2530 [SHOI2001]化工厂装箱员

    题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...

  8. UltraEdit注册机原理简单说明

    UltraEdit注册机原理 By:大志若愚 UltraEdit 是 Windows 下一款流行的老牌文本/HEX 编辑器(非开源).UltraEdit 正被移植到 Linux 平台.该移植名为 UE ...

  9. 数据库关键字 (Oracle, SQL Server, DB2)

    Oracle SQL Server DB2 ! @@IDENTITY   DETERMINISTIC & ADD   DISALLOW      ( ALL   DISCONNECT    ) ...

  10. javascript私有属性失效及解决方案

    1.js创建私有属性的方法 在 javascript 中所有对象的成员是公有的 构造函数也是如此: function Gadget ( ) { this.name = ' jack '; this.p ...