stp/rstp/mstp详解

一 stp

网络的冗余性设计主要包括两个方面:关键设备冗余,以及关键链路冗余。

如何在保证网络的冗余性情况下,消除二层环路,是本章的重点。

Stp(生成树协议)在802.1D中定义,RSTP(快速生成树协议)在802.1w中定义,MSTP(多生成树协议)在802.1s中定义。

1 STP基本概念

(1)     桥ID:每一台运行STP的交换机都拥有一个唯一的桥ID,该值一共8byte,包含16bit的优先级(高16bit)和48bit的桥MAC地址。

(2)     根桥:STP的主要作用就是在整个交换网络中计算出一颗无环的STP树,其中树根即根桥很重要,STP的一系列计算均已根桥为参考点。一个交换网络中只有一个根桥。网络中最小桥ID的交换机将成为根桥,其次比较的是MAC地址,MAC地址最小的交换机将成为根桥。

(3)     开销(Cost)与跟路径开销(Root Path Cost,RPC):每一个激活了Stp的接口都会维护一个Cost值,用来计算RPC。接口的缺省Cost除了与其速率,工作模式有关,还与交换机使用STP Cost计算方法有关。华为交换机支持3种STP cost计算方法,分别为IEEE802.1D-1998标准,IEEE802.1t标准,以及华为的私有计算方法。

 

 

 

网络中所有STP设备使用的Cost计算方法要一致。

2 STP的基本操作过程

STP通过4个步骤来保证网络中不存在二层环路

(1)     在交换网络中选出一个根桥(Root Bridge,RB)

对于一个交换网络而言,正常情况下只会存在一个根桥,根桥的地位具有可抢占性。

(2)     在每个非根桥上选取一个根接口(Root Port,RP)

在一个交换网络中除了根桥,其他交换机都是非根桥,STP将为每个非根桥选举一个根接口,所谓根接口,实际上就是非根桥上所有接口中收到最优BPDU的接口,可以理解为交换机在STP树上朝向根桥的接口。非根桥可能会有一个或者多个接口接入同一个交换网络,STP将在这些接口中选举出一个根接口。STP收敛完成后,根桥依然会周期性的向网络中发送BPDU,而非根桥则会周期性的在自己的根接口上收到BPDU,并沿着STP树向下游转发。

(3)     选举指定接口

STP会在每个网段中选举一个指定接口,这个接口是该网段内所有接口中到达根桥的最优接口,此外指定接口还负责向该网段发送BPDU。对于非根桥而言,其所有接口中收到最有BPDU的接口将成为该设备的根接口,随后该非根桥设备使用自己接收的最有BPDU,为本设备上的其他接口各计算一个BPDU,然后使用计算出来的BPDU与接口上所维护的BPDU进行(接口本身也会从网络中收到BPDU并保存)比较,若前者更优,那么该接口将成为指定接口,并且其所保存的BPDU也被前者代替,交换机将新的BPDU从指定接口发送给下游交换机,若后者更优,那么该接口将成为非指定接口(非指定接口既不是根接口也不是指定接口)。

对于非根桥而言,根接口的选举过程是非根桥将自己所接受到的所有BPDU进行比较,而指定接口的选举过程则是非根桥用自己计算出的BPDU跟别的设备发过来的BPDU进行比较。

(4)     阻塞非指定接口,打破二层环路

经STP计算,如果交换机上的某个(或者某些)接口既不是根接口也不是指定接口(称之为非指定接口),那么该接口将被STP阻塞,如此网络中的二层环路就被打破了。被阻塞的非指定接不会发送BPDU报文,只会持续侦听BPDU报文,更不会发送业务数据。

3 STP报文

BPDU有两种:配置BPDU以及TCN BPDU。

BPDU报文直接封装在以太网数据帧内,数据帧的目的MAC地址是组播MAC地址:0180-c200-0000

(1)     配置BPDU

在收敛过程中,每台交换机都从自己激活了STP的接口向外发送配置BPDU。收敛完成后,只有根桥才会周期性的发送配置BPDU(缺省周期为2s),非根桥在自己的根接口上收到上游的配置BPDU后,立即被触发产生自己的配置BPDU,然后从指定接口上发送出去。

 

 

 

(2)     TCN BPDU

TCN BPDU的格式非常简单,只有上表中的协议ID,协议版本ID以及BPDU类型三个字段。TCN BPDU用于在网络拓扑发生变化时向根桥通知变化的发生。当网络拓扑发生变化时,远离变化点的交换机无法直接感知变化的发生,其MAC地址表项也就无法快速刷新。故STP需要一种机制,用于在网络拓扑发生变化时,促使全网交换机尽快老化自己的MAC地址表项。

1) TCN BPDU需要从发现拓扑变更的交换机传递到根桥,该报文会一级一级的通过上游交换机向上游传递至根桥。

2) 上有交换机在收到下游交换机发送的TCN BPDU后,需要使用TCA比特位为1的配置BPDU进行回应,以确保TCN BPDU传递过程的可靠性。

3) 根桥收到TCN BPDU后,会向全网泛洪“标志”字段中TC比特位被置为1的配置BPDU,网络中的交换机在收到该配置BPDU后,立即将其MAC地址表的老化时间从原有值调整为一个较小值,以便MAC地址表项尽快刷新。

 

 

 

4 STP的时间参数

Hello Time(hello时间):运行STP的交换机发送配置BPDU时间间隔,缺省为2s。如需要修改,必须在根桥上修改,修改完成后,所有非根桥都与根桥对其该时间。

Forward Delay(转发延迟):运行STP的接口从侦听状态进入学习状态,或从学习状态进入转发状态的延迟时间,缺省为15s。为避免在生成树收敛过程中形成临时环路,STP定义了侦听和学习两种接口状态,并要求接口从阻塞状态进入转发状态前必须经历这两个状态,而且分别在这两个状态停留一个转发延迟时间。

Max Age(最大生存时间):BPDU的最大生存时间,也被称为BPDU的老化时间,缺省为20s。

以非根桥的根接口为例,该设备将为所保存的来自上游的最有BPDU关联一个最大生存时间,如果在BPDU达到最大生存时间之前,接口再一次收到BPDU,其最大生存时间将被重置,如果一直到过了最大生存时间还没有收到新的BPDU,那么该BPDU会被老化,设备会在接口上重新选择最优BPDU,也就是重新进行根接口的选举。

受限于这几个时间参数的限制,一个STP口从阻塞状态进入转发状态可能需要花费30-50s左右,期间网络中的业务会受影响。

5 BPDU的比较原则

STP按照如下顺序选择出最优的BPDU

(1)     最小的根桥ID

(2)     最小的RPC

(3)     最小的网桥ID

(4)     最小的接口ID

第一条原则主要用于网络中根桥选举,后面的原则主要用于选举根接口以及指定接口。

6 BPDU的交互与拓扑计算

 

 

 

初始情况下,交换网络中的所有交换机都认为自己是根桥,这些设备开始运行后从自己所有激活了STP的接口发送BPDU。如山图示。(只展示BPDU中最重要的四个字段)

(1)     由于两者均认为自己是根桥,故他们在各自发送的BPDU中,根桥字段均为自己的桥ID,RPC字段均为0。网桥ID均为该BPDU发送者的桥ID,接口ID均为发送该BPDU的接口ID。

(2)     SW1和SW2都将收到来自对方的BPDU,接下来开始将对方的BPDU与自己接口上的BPDU进行比,该过程即为根桥选举。结果是SW1胜出。

(3)     接下来SW2将开始根接口选举。由于SW2在G0/0/3和G0/0/4接口上收到的BPDU都比自己本地BPDU更优,因此使用对方的BPDU来更新本地的BPDU。然后SW2将比较自己所有接口上的BPDU,拥有最有BPDU的接口成为根接口。

 

 

 

(4)     SW2根接口选举出来后,它使用当前在根接口上保存的最优BPDU为其他接口计算BPDU。如下图示,G0/0/4当前保存在BPDU比SW2为G0/0/4计算出来的BPDU更优,于是G0/0/4被认定为非指定接口,被阻塞。

 

 

 

(5)     至此收敛完成

 

 

 

 

 

7 STP接口状态

STP定义了五种接口状态

 

 

 

 

 

 

 

二 RSTP

STP是一个比较老旧的标准,它收敛慢,端口状态定义繁冗,对拓扑变化的感知依赖计时器。

RSTP即快速生成树协议,他引入了新的接口角色,其中替代接口的引入使交换机在根接口失效时,可以立即获得新的路径到达根桥。引入P/A机制,使得指定接口被选举产生后可以快速的进入转发状态,不用像STP一样经历转发延迟时间。它还引入了边缘接口概念,使交换机连接终端设备的接口在初始化之后可以立即进入转发状态。

1 RSTP接口角色

替代接口:可以理解为根接口的备份,他是一台设备上由于收到其他设备发送的BPDU从而被阻塞的接口。如果根接口发生故障,那么替代接口将成为新的根接口。

 

 

 

备份接口:备份接口是一台设备上由于收到了自己所发送的BPDU从而被阻塞的接口。如果一台交换机拥有多个接口接入同一个网段,并在这些接口中有一个被选为该网段制定接口,那么这些接口中的其他接口将被选举为备份接口,备份接口将作为该网段到达根桥的冗余接口,缺省为丢弃状态。

 

 

 

2 RSTP接口状态

 

 

 

3 BPDU

RSTP的配置BPDU称为RST BPDU,格式与STP的配置BPDU大体相同,只是个别字段做了修改。对于RST BPDU来说,协议版本ID字段值为0x02,BPDU类型字段值为0x02。标志字段共8bit,STP只使用了其中的最低和最高比特位,而RSTP将剩余的6bit也使用上了。

 

 

 

Aggrement以及Proposal比特位用于RSTP的P/A机制。Port Role用于标识RST BPDU发送接口的接口角色,01表示根接口,10表示替代接口,11表示指定接口,00保留。Forwarding以及Learning用于表示该RST BPDU发送接口的接口状态。

与STP不同的是,在RSTP中,无论是根桥还是非根桥,都会周期性的发送配置BPDU。也就是说对于非根桥而言,它不用在根接口上收到BPDU后才触发产生自己的配置BPDU,而是自发的周期性的发送BPDU。

RSTP在BPDU的处理上的另一个改进是对于次优BPDU的处理。STP的指定接口在收到次优BPDU时,将立即发送自己的BPDU,STP的非指定接口在收到次优BPDU时他将等待接口所保存的BPDU老化之后,再重新计算新的BPDU,并将新的BPDU发送出去,这将导致20s的状态迁移时间;在RSTP中,无论接口角色如何,只要接口接收到次优BPDU,便立即发送自己的BPDU,这使得RSTP收敛的更快。

4 边缘接口

一个接口配置为边缘接口后,该接口依然会周期性的发送BPDU(可使用stp bpdu-filter enable命令,使用后接口不再发送BPDU,当其收到BPDU后也会忽略)。边缘接口缺省不参与生成树计算,当边缘接口被激活之后,他可以立即切换到转发状态并开始收发业务流量,而不用经历转发延迟时间,另外边缘接口的关闭或者激活不会触发RSTP的拓扑变更。当某接口连接的是终端设备如服务器或者PC时,这些接口在启动过之后不需要经历状态迁移或者是经历转发延迟,此时可以直接将这些接口配置为边缘接口。

5 P/A机制

RSTP通过P/A(Proposal/Agreement)机制来保证一个指定接口得以从丢弃状态快速进入转发状态,从而加速生成树收敛,它是一种握手机制。

 

 

 

如上图示,网络中运行的是RSTP,当SW1和SW2之间新增一条链路后。

(1)     SW1和SW2立即在各自接口上发送BPDU,初始时双方均认为自己是根桥,如图10-25(一)。

(2)     经过BPDU交互后,SW1当选为根桥。SW1的G0/0/1为指定接口,SW2的G0/0/2为根接口,该接口立即停止发送BPDU,都进入丢弃状态。

(3)     接下来P/A机制将发生。由于SW1的G0/0/1接口为指定接口且处于丢弃状态,故SW1从G0/0/1发送Proposal置位的BPDU,如图10-25(二)

(4)     SW2收到Proposal置位的BPDU后,立即启动一个同步机制。此时RSTP的机制是确保指定接口(SW1的G0/0/1)可以快速进入转发状态,为了达到这个目的必须确保该接口进入转发状态后网络中无环路。故此时SW2要做的是先将本地所有非边缘接口全部阻塞,然后大幅SW1他这里不存在环路。

已经处于丢弃状态的接口缺省已完成同步,而边缘接口不参与该过程,除此之外,交换机处于转发状态的指定接口需要切换到丢弃状态以便完成同步,如图10-25(二)。

G0/0/3是边缘接口,G0/0/4是非边缘指定接口将进入丢弃状态。

(5)     现在SW2的所有接口都已完成同步,本地接口已不存在环路,他立即将根接口G0/0/2切换到转发状态,并向SW1发送Agreement置位的BPDU。

(6)     SW1在收到Agreement置位的BPDU后,立即将G0/0/1切换到转发状态,此时PC1和PC2便可实现通信。

(7)     整个P/A过程非常快,另外由于SW2的指定接口G0/0/4仍处于丢弃状态,因此该接口会向下游交换机发起一个P/A过程,具体操作不再赘述。

 

6 保护功能

(1)     BPDU保护

当边缘接口收到BPDU后,该接口立即变成一个普通RSTP接口,这个过程可能引发网络中RSTP重新计算,从而对网络产生影响。通过在交换机上激活BPDU保护功能可解决该问题。当交换机激活该功能后,如果边缘接口收到BPDU,则交换机立即把接口关闭,同时触发告警。

(2)     根保护

在一个RSTP网络中,根桥的地位很重要。如果根桥发生变化,势必导致RSTP重新计算。根桥是可抢占的。部署根保护功能可保证根桥的稳定性。

在根桥的指定接口上激活根保护功能后,该接口如果收到更优的BPDU,则会忽略这些BPDU,并且将该接口切换到丢弃状态,如果接口不再收到更优的BPDU,则过一段时间后(通常为两倍的转发延迟时间),接口会自动恢复到转发状态。注意,根保护功能只有在指定接口上激活才有效。

(3)     环路保护

对于交换机的根接口以及处于丢弃状态的替代接口,当网络正常时,这些接口会持续收到BPDU,而当网络中出现链路单向故障(如光纤单通)或者网络拥塞问题时,这些接口将无法持续收到BPDU,便会导致交换机重新计算RSTP,此时接口角色以及状态便会发生改变,有可能会引入环路。使用环路保护功能可以规避该问题。

1) 在根接口上激活环路保护功能后,如果该接口长时间没有收到BPDU,那么交换机会重新选举根接口并将该接口的角色调整为指定接口,此时交换机会将该接口的状态切换到丢弃状态,从而避免环路产生。

2) 在替代接口上激活环路保护功能后,如果该接口长时间没有收到BPDU,那么交换机会将该接口的角色调整为指定接口,但是将其状态保持在丢弃状态,从而避免环路。

(4)     拓扑变更保护

一个稳定的交换网络是不会频繁出现拓扑变更的,一旦网络出现变更,TC BPDU将会泛洪到全网,这些TC BPDU将会触发网络中的交换机执行MAC地址表删除操作。如果网络极不稳定,导致TC BPDU频繁泛洪,或者网络中存在攻击者发送大量TC BPDI攻击网络,那么交换机的性能将受到极大影响。交换机激活拓扑变更保护后,将在单位时间(缺省2s)内只进行一定次数的TC BPDU处理,对超出部分,则必须等待一段时间后进行处理。

三 MSTP

背景:如下图10-32所示。SW1,SW2,SW3都运行STP,后者RSTP,那么无论网络中存在多少个VLAN,这些VLAN都是用一颗相同的生成树,也就是说STP,RSTP不会针对不同VLAN执行单独的生成树计算。如下图示,所有流量均从SW3至SW1通过,而SW3,SW2这条链路几乎不承载任何业务,这样无法使资源得到有效的利用。

 

 

 

解决方法:IEEE 802.1s定义了MSTP(多实例生成树)协议。该协议兼容STP以及RSTP。该协议不是基于VLAN,而是基于Instance(实例)运行的。所谓Instance,也即一个或多个VLAN的集合。可以将一个或多个VLAN映射到一个Instance,然后MSTP基于该Instance计算生成树。基于Instance计算出的生成树被称为MSTI(多生成树实例),映射到同一个Instance的VLAN共享一颗生成树。可以针对MSTI进行主根桥,次根桥,接口优先级或cost等相关配置。MSTP引入了域的概念,可以将一个大型交换网络划分成多个MST域(多生成树域)。

posted @ 2020-01-01 13:53  一个不务正业的运维  阅读(8524)  评论(0编辑  收藏  举报