RSTP Proposal-Agreement

一、RSTP定义了三种链路类型:
1)点对点:交换机间的连接
2)共享:交换机到hub的连接
3)边:交换机到用户设备的连接

RSTP link types都是点到点的。
点到点: 全双工
share: 半双工

强制该成点到点的模式
进入接口模式下:
spanning-tree link-type X

对于边链路类型的处理方式,与前面所述的ProtFast类似(配置也一样)。对于点对点链路,RSTP直接向相邻交换机查询状态,这与BackboneFast类似,只不过这里使用的是IEEE的标准消息罢了。
**********************************************************************************************************
二、基本工作机制
Example one:
RSTP能够快速收敛取决于网桥之间能进行明确的握手会话
在flag中。。第6位的Agreement(同意)和第1位的proposal(请求)是RSTP协议的根本的原因
在RSTP中是分段同步收敛的,STP收敛时间30s....

P0: designated port DP frowding
P1: nes root port frowding
P2: Alternative port bork
P3: designated port
P4: Edae port(接着都是非交换机)

在RSTP中把所有的端口置为同步状态:
当交换机收到一个Proposal时,把下面连接的端口都给阻塞掉,后在返回一个Agreement信息
这样就是一个段络的收敛。这一段收敛非常的快一般一到二秒
简单的说就是,本交换机收到一个proposal把其它的接口都置为同步,再回一个Agreement

sw1  f0/23------------f0/23 sw2
sw1 ------提议------>sw2  (BPDU)
       <----------------
sw2发现sw1优先级要低(假设),f0/23置为RP,返回一个Agreement
sw1 -----------------> RP sw2  (BPDU)
       <----------------Agreement

RSTP有效利用了交换网络的拓扑结构,因而可以加速收敛。

提议/同意握手机制
RSTP使用提议/同意握手机制来完成端口的快速收敛。下面以图中的变化为例说明

假设SW-1有一条新的链路连接到根桥。链路起来时,根桥的P0口和SW-1的P1口同时进入指定阻断状态,而且P0和P1同时发布带有提议标志位的RSTP BPDU ,同时P1成为新的根端口。

  SW-1开始同步新的消息给其他的端口,P2为替换端口,同步中保持不变,P3为指定端口,同步中必须阻断P3。P4为边缘端口,同步中保持不变 ;SW-1 通过新的根端口P1给根桥发送一个提议BPDU同意消息,将标志位有提议给为同意,P0和P1握手成功,P0和P1直接进入转发状态;这时P3端口为指定端口,还处于阻断状态,同样按照P0和P1的提议/同意握手机制,SW-1和SW-2快速进入转发状态。

  提议/同意握手机制收敛很快,状态转变中无须依赖任何定时器;如果指定阻断端口发送提议消息后没有收到同意消息,此时进入STP的监听、学习机制,这种可能出现在对方网桥不知道RSTP的BPDU,或者端口是关闭状态。
选举的原则:和STP完全一样


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
三、满足同步的条件
Proposal-Agreement机制(提议/同意机制) p2p
        注1: Proposal-Agreement必须在Point-to-Point链路上进行。
        注2:若交换机的端口工作在 [全双工],则缺省认为是Point-to-Point链路。       
       
例子:spanning-tree link-type point-to-point
若交换机的端口工作在 半双工,  则缺省认为是Share链路。          

      从根桥开始,由DP端口向下游交换机的端口发出Proposal消息,下游交换机的端口必须满足一些条件才可以回复 Agreement消息,一个端口己经被选举成为DP / RP,想进入转发状态,使用"提议/同意机制" 结果: 双方都想进入转发状态需要满足什么条件?
     下游交换机除了接收Proposal消息以外的所有其他端口必须满足sync条件,才可以回复Agreement消息

  注:一个端口怎样才算满足sync条件?
     1)该端口是edge-port(这种端口通常连接的是终端设备,它的收敛时间为0, 类似 portfast)
            或
    2)该端口是阻塞的
**********************************************************************************************
四、RSTP,STP在收敛上的区别
    当一个端口被选举成为了指定端口之后,在STP中,该端口还要等待至少一个Forward Delay(Learning)时间才会迁移到forwarding状态。
    而在RSTP中,这样的端口角色会先进入Discarding状态,尔后马上通过Proposal/Agreement机制快速的进入Forwarding状态。这种机制必须在点到点链路上使用
**************************************************************************************************


五、端口变量
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状态。


举例子说明:如图11,根桥SW1和SW2之间新添加了一条链路(注:本例来源于Cisco的小文档“Understanding RSTP”,图有变化)。在当前状态下,SW2的另外几个端口p2是Alternate端口,p3是指定端口且处于Forwarding状态,p4是边缘端口。一旦新链路连接,p0和p1两个端口马上都先成为指定端口,发送RST BPDU。SW2的P1口收到更好的BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送BPDU。这时SW1的p0进入Discarding状态,满足条件指定端口处于Discarding状态,于是发送的RST BPDU中把proposal置1。SW2收到根桥发送来的携带proposal的BPDU,于是开始让自己的将所有端口进入sync变量置位。P2已经是阻塞的了,状态不变;p4是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口p3。当p2、p3、p4都进入Discarding状态之后,各端口的synced变量置位,根端口p1的synced也置位,于是便向SW1返回Agreement位置置位的回应BPDU。该BPDU携带和刚才根桥发过来的BPDU一样的信息,除了Agreement位置置位之外(Proposal位清零)。SW1判断出这是对刚刚发出的Proposal的回应,于是端口p0马上进入Forwarding状态。
这个P/A过程是可以向下游继续传递的。
事实上,经典的STP协议指定端口的角色选择是很快的,主要的速度瓶颈在于超时等待:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定,在协议中就是至少要等待一个Forward Delay后所有端口才能进行转发。而RSTP的主要目的就是消除这个瓶颈。通过阻塞自己的非根端口来保证不会出现环路。而使用P/A这种积极的手段来加快“上游”端口转到Forwarding状态的速度。
这里要强调的是,P/A机制要求两台交换机之间链路必须是点对点的全双工状态。要注意的是,一旦P/A协商不成功,就会等待正常的STP中的两个Forward Delay,此时的行为就回到了STP。


*****************************************************************************************

RSTP的快速收敛原理
RSTP可以在一个交换机,或者一个交换端口,甚至一个VLAN失效时快速恢复网络的连通性。所采用的机制就是"建议-同意握手"(proposal-agreement handshake)机制。它为以下边缘端口、新的根端口,以及通过点到点链路而连接的端口提供了快速收敛:
边缘端口(Edge port):"边缘端口"是直接连接终端站点的网桥端口。如果在一个RSTP交换机上通过使用spanning-tree portfast接口配置命令把一个端口配置为边缘端口,则这个边缘端口会立即转变为转发状态。一个边缘端口同时作为一个启用了端口快速(PortFast)功能的端口,应当在它仅与单一终端站点连接时启用它。
根端口(Root Port):如果RSTP选举一个新的根端口,它将阻塞旧的根端口,并且立即转变这个新的根端口为转发状态。
点对点链接(Point-to-point Link):如果你通过一个点对点链路把一个端口与另一个端口连接起来,并且本地端口成为指定端口,则该端口将使用"建议-同意握手"机制与其他端口进行协商,以确保有一个可用的环路。
图9-15是一个RSTP端口角色转换示例,在图中的DP为"指定端口",RP为"根端口",F代表相应端口处于转发状态。

图9-15?快速收敛的建议-同意握手过程
在图(1)中,Switch A是通过一个点对点链路与Switch B连接的,并且所有端口是处于阻塞状态的。假设Switch A的优先权高于Switch B,所以Switch A成为"根网桥"。Switch A先通过它的一个"指定端口"(根网桥上的端口都是"指定端口")发送一个建议消息(一个配置有建议标记设置的BPDU)到Switch B,建议由它自己作为指定交换机。
在Switch B收到这条建议消息(Proposal Message)后,它就会选举接收这条建议消息的端口作为它的新根端口(如图(2)所示),强迫所有非边缘端口置于阻塞状态,并通过这个新的根端口发送一个同意消息(Agreement Message,一个配置有同意标记设置的BPDU),如图(2)所示。
在Switch A接收到了Switch B发来的同意消息后,立即转变连接的两个端口为转发状态。因为Switch B阻止了它上面的所有非边缘端口,在Switch A和Switch B之间就成了一条点对点链路,这样一来在网络中不会形成环路。
当Switch C再与Switch B连接时,同样会存在像Switch A与Switch B之间的握手消息交换。Switch C首先通过接收从中得来的建议消息,选举与Switch B连接的端口作为它的根端口,如图(3)所示。然后Switch C向Switch B发送一条同意消息,在Switch B收到这条同意消息后,就把连接Switch C与Switch B的这两个端口立即转变为转发状态。
在新交换机加入到这个活跃的拓扑结构中时,会重复以上的握手过程。作为网络汇聚,这个"建议-同意"握手进程是从根网桥指向生成树叶(也是生成树的最末端)的,一级级进行。
交换机从端口双工模式中学习到链路类型:一个全双工模式端口被认为具有一个点对点连接,半双工模式的端口被认为具有一个共享的连接。可以通过使用spanning-tree link-type接口配置命令进行的默认双工设置。

9.5.4?RSTP端口角色同步原理
这里同样以一个示例进行介绍,如图9-16所示。当一个交换机一个端口上接收到一个建议消息(Proposal Message)时,这个端口就被选举为新的"根端口",如图9-16中的1、6、7。RSTP强迫所有其他端口与这个新的"根端口"信息同步(本节所讲的"同步"是指"根端口"信息的同步,因为一台交换机上只能有一个"根端口")。如果所有其他端口是同步的,则交换机使用在"根端口"上接收到的上级根信息进行同步,但以下类型端口是不在同步之列的:
处于阻塞状态的端口
边缘端口(配置在边缘网络中)

图9-16?RSTP端口角色同步的过程
如果一个"指定端口"是在转发状态,而不是配置为"边缘端口",在RSTP强迫与新的根信息同步时,同时转变该端口将为阻塞状态,如图中的2和3。通常,在RSTP强迫一个端口去与根信息同步,而端口并不信任根信息中的环境时,该端口将转变为阻塞状态。
在确保所有端口(除阻塞端口状态端口和边缘端口外)同步后,交换机会在其"根端口"上发送一个建议消息(Agreement Message)到与之相连的交换机上的"指定端口"上,如图中的4、8、10。当通过点对点链路进行连接的交换机在端口角色方面达成一致时,RSTP立即转变点对点链路上的交换机端口为转发状态,如图中的5、9、11。也就是原来是阻塞状态的端口可以通过一次握手协商立即转变为转发状态,不要再经过由阻塞状态到侦听状态,再由侦听状态到学习状态,最后由学习状态到转发状态这三次握手过程。整个过程由STP中的两倍转发延时变为一个转发延时了。这也就是"快速生成树协议"中"快速"的真正含义了。


Lab 

加上sw3,如果是STP,SW2的阻塞端口会变成指定端口。
如果是RSTP,SW2的阻塞端口不变。

原文地址:https://www.cnblogs.com/cyrusxx/p/12615690.html