STP(Spanning Tree Protocol,生成树协议):当网络中部署生成树之后,交换机之间便会开始交互相关协议报文,并在网络中进行一系列计算,经计算得到一个无环的网络拓扑。当网络中存在环路时,生成树会将网络中的一个或多个接口进行阻塞(Block),从而打破二层环路。
STP的基本概念:
1.桥ID(Bridge Identification):每一台运行STP的交换机都拥有一个唯一的桥ID,桥ID共8byte,包含16bit的桥优先级(Bridge Priority),和48bit的桥MAC地址,其中桥优先级占桥ID的高16bit,而MAC地址占据其余的48bit。
2.根桥(Root Bridge):STP最主要的作用之一是在网络中计算出一棵无环的“树”,这棵树一旦形成,网络中的无环拓扑也就形成了。对于这棵树而言,树根是非常重要的,而根桥就相当于这棵树的树根。
3.开销(Cost)与根路径开销(Root Path Cost,RPC):每一个激活了STP的接口都维护者一个Cost值,接口的Cost主要用于计算RPC,也就是计算到达根的开销。接口的缺省Cost除了与其速率、工作模式有关,还与交换机使用的STP Cost计算方法有关。
4.接口ID(Port Identification):运行STP的交换机使用接口ID来标识每个接口,接口ID主要用于在特定场景下选举指定接口。接口长度为16bit,由两部分组成,其中高4bit是接口优先级,低12bit是接口编号。
STP通过4个步骤来保证网络中不存在二层环路:
1.在交换网络中选举一个根桥(Root Bridge,RB):STP以根桥来作为生成的无环“树”的重要参考点。桥ID最小的交换机将成为根桥。对于一个交换网络而言,正常情况下只会存在一个根桥。根桥的地位是具有可抢占性的。当新根桥抢占旧根桥后,STP将重新收敛、重新计算网络拓扑,在这个过程中有可能引发网络震荡,从而对业务流量的整车厂转发造成影响,因此,根桥角色的稳定性是很重要的。
2.在每个非根桥上选举一个根接口(Root Port,RP):在一个交换网路中,除了根桥之外其它交换机都是非根桥,STP将为每个非根桥选举一个根接口,所谓根接口,实际上是非根桥上所有接口中收到最优BPDU的接口,可以简单地将其理解为交换机在STP树上“朝向”根桥的接口。非根桥可能会有一个过多个接口接入共一个交换网络,STP将在这些接口之中选举一个(而且只会选一个)根接口。在STP收敛完成后,根桥依然会周期性地向网络中发送BPDU,而非根桥则会周期性地在自己的根接口上收到BPDU,并沿着STP树向下游转发。
3.选举指定端口(Designated Port,DP):STP将在每个网段中选举一个指定接口,这个接口是该网段内所有接口中到达根桥的最优接口。此外,指定接口还负责向该网段发送BPDU。
对于非根桥而言,其所有接口中收到最优BPDU的接口将成为该设备的根接口,随后该非根桥使用自己接收的最优BPDU,为本设备上的其他接口计算一个BPDU,然后使用计算出的BPDU与接口上所维护的BPDU(接口自身也会从网络中收到BPDU,并将BPDU保存起来)进行比较,如果前者更优,那么该接口将成为指定接口,并且其所保存的BPDU也被前者替代,交换机将替代后的BPDU从该指定接口转发给下游交换机;如果后者更优,那么该接口将成为非指定接口(既不是指定接口也不是根接口)。
综上所述,对于非根桥而言,根接口的选举过程是非根桥将自己所收到的所有BPDU进行比较,而指定接口的选举过程则是非根桥用自己计算出的BPDU跟别的设备发过来的BPDU进行比较。
4.阻塞非指定接口,打破二层环路:经STP计算后,如果交换机某个(或某些)接口既不是根接口又不是指定接口,那么该接口将被STP阻塞,如此一来网络中的二层环路也就被打破了。
STP报文
在一个交换网络中,STP能够正常工作的基本前期是BPDU的正常交互。STP的BPDU有两种类型:配置BPDU(Configuration BPDU)及TCN BPDU(Topology Change Notification BPDU)。BPDU载荷被直接封装在以太网数据帧中,数据帧的目的MAC地址时组播MAC地址:0180-c200-0000。
配置BPDU:
配置BPDU是STP进行拓扑计算的关键。在交换网络的初始化过程中,每台交换机都从自己激活了STP的接口向外发送配置BPDU。当STP完成收敛后,只有根桥才会周期性地发送配置BPDU,而非根桥则会在自己的根接口上收到上游发送过来的配置BPDU,并立即被触发而产生自己的配置BPDU,然后从自己的指定接口发送出去。
配置BPDU:包含“协议ID”“协议版本”“BPDU类型”“标志”“根桥ID”“根路径开销”“网桥ID”“接口ID”“消息寿命”“最大寿命”“Hello时间”“转发延迟”字段。
标志(Flag):用于网络拓扑变化标志。
网桥ID(Bridge Identifier):发送本BPDU的交换机的桥ID。
接口ID(Port Identifier):发送本BPDU的接口的接口ID。
消息寿命(Message age):本BPDU的寿命。本字段指示的为BPDU所经过的交换机的交换设备的个数。
最大寿命(Max age):BPDU的最大存活时间,也被称为老化时间,缺省为20S。
Hello时间(Hello time):BPDU的发送时间间隔,缺省为2S。
转发延迟(Forward Delay):接口在侦听和学习状态所停留的时间,缺省为15S。
TCN BPDU
TCN BPDU:包含“协议ID”“协议版本ID”“BPDU类型”字段。TCN BPDU用于在网络拓扑发生变化时向根桥通知变化的发生。
对于STP而言,当拓扑发生变更时,远离变更点的交换机无法直接感知到变化的发生,此时它们的MAC地址表项还是老旧的,如果依然通过这些MAC地址表项来知道数据转发,便有可能出现问题。因此STP需要一种机制,用于在网络中发生拓扑变更时促使全网的交换机尽快老化自己的MAC地址表项,以便适应新的网络拓扑。当拓扑稳定时,网络中只会出现配置BPDU,当拓扑发生变更时,STP会使用TCN BPDU,以及两种特殊的配置BPDU。
当网络中拓扑发生变化时,STP的收敛过程:
1.TCN BPDU:用于在网络拓扑发生变化时向根桥通知变化的发生。TCN BPDU需要从发生拓扑变更的交换机传递到根桥,而该交换机与根桥之间可能隔着多台交换机,感知到拓扑变化的交换机会从其根接口发送TCN BPDU,也就是朝着根桥的方向发送TCN BPDU,该报文会一跳一跳地向上游传递,直至抵达根桥。
2.“标志”字段中TCA比特位被设置为1的配置BPDU:STP要求TCN BPDU从发现拓扑变更的交换机传递到根桥的过程是可靠的,因此当一台交换机收到下游发送上来的TCN BPDU后,需使用“标志”字段中TCA比特位被设置为1的配置BPDU回应对方并向自己的上游发送TCN BPDU。这个过程将一直持续,直到根桥收到该TCN BPDU。
3.“标志”字段中TC比特位被设置为1的配置BPDU:根桥收到TCN BPDU后,也就意识到了拓扑变化的发生,接下来它要将该变化通知到全网,它将向网络中泛洪“标志”字段中TC比特位被设置为1的配置BPDU,网络中的交换机收到该配置BPDU后,会立即将其MAC地址表的老化时间从原有的值调整为一个较小的值,使MAC地址表能够尽快刷新,以便适应新的网络拓扑。
STP的时间参数
STP定义了三个重要的时间参数:包含“Hello Time”“Forward Delay”“Max Age”。
Hello Time(Hello时间):运行了STP的交换机发送配置BPDU的时间间隔,缺省为2S。所有的非根桥都与根桥对其该时间。
Forward Delay(转发延迟):运行了STP接口从侦听状态进入学习状态,或者从学习状态进入转发状态的延迟时间,缺省为15S。为了避免在生成树收敛过程中网络中可能出现临时环路,或者短暂的数据帧泛洪现象,STP定义了侦听及学习这两种接口状态,并要求接口从阻塞状态进入转发状态前必须先经历这两个状态,而且分别在这两个状态各停留一个转发延迟时间。这意味着一个被阻塞的接口被选举为根接口或指定接口后,进入转发状态之前至少需经历30S的时间。
Max Age(最大生存时间):BPDU的最大生存时间,也被称为BPDU的老化时间,缺省为20S。
BPDU的比较原则
STP按照如下顺序选择最优的配置BPDU
最小的根桥ID:主要用于根桥的选举。
最小的RPC(根路径开销)
最小的网桥ID
最小的接口ID
STP的接口状态
STP定义了5中接口状态:“禁用”“阻塞”“侦听”“学习”“转发”
禁用(Disable):该接口不能收发BPDU,也不能收发业务数据帧。
阻塞(Blocking):该接口被STP阻塞。处于阻塞状态的接口不能发送BPDU,但是会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习。
侦听(Listening):当接口处于该状态时,表明STP初步认定该接口为根接口或指定接口,但接口仍然处于STP计算的过程中,此时接口可以收发BPDU,但是不能收发业务数据帧,也不会进行MAC地址学习。
学习(Learning):当接口处于该状态时,会侦听业务数据帧(但是不能转发业务数据帧),并且在收到业务数据帧后进行MAC学习地址。
转发(Forwarding):处于该状态的接口可以正常地收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态。
RSTP(Rapid Spanning Tree Protocol,快速生成树协议)
RSTP:引入了新的接口角色,其中替代接口的引入使得交换机在根接口失效时,能够立即获得新的路径到达根桥。RSTP还引入了P/A机制,使得指定接口被选举产生后能够快速地进入转发状态,而不用像STP那样经历转发延迟时间。另外,RSTP还引入了边缘接口概念,使得交换机连接终端设备的接口在初始化之后能够立即进入转发状态,提高了工作效率。
替代接口:
替代接口可以简单理解为根接口的备份,它是一台设备上,由于收到了其他设备所发送的BPDU从而被阻塞的接口。如果根接口发生了故障,替代接口可以成为新的根接口,加快了网络的收敛过程。
备份接口:
备份接口是一台设备上由于收到了自己所发送的BPDU从而被阻塞的接口。如果一个交换机拥有多个接口接入同一个网段,并且在这些接口中有一个被选举为该网段的指定接口,那么这些接口中的其他接口将被选举为备份接口,备份接口将作为该网段到达根桥的冗余接口。
RSTP接口状态:包含“丢弃(Discarding)”“学习(Learning)”“转发(Forwarding)”。
处于丢弃状态的接口既不会转发业务数据帧,也不会学习MAC地址。
BPDU
RSTP的配置BPDU被称为RST BPDU(Rapid Spanning Tree BPDU),它的格式与STP的配置BPDU大体相同。在RST BPDU中,在“协议版本ID”字段值为0x02,“BPDU类型”字段的值也为0x02。在“标志”字段中,STP只使用了其中的最低比特位和最高比特位,而RSTP在STP的基础上,使用了剩余的6个比特位,并且分别对这些比特位进行了定义。
RST BPDU“标志”字段:
TCA + Aggrement + Forwarding + Learning + Port Role + Proposal + TC
STP只使用了该字段的TCA和TC用于描述“拓扑变更确认”和“拓扑变更”,在RST BPDU中这两个比特位的定义及作用不变。另外,Aggrement(同意)以及Proposal(提议)比特位用于RSTP的P/A(Proposal/Aggrement)机制,该机制大大地提升了RSTP的收敛速度。Port Role(接口角色)比特位长度为2bit,它用于标识该RST BPDU发送接口的接口角色,01表示根接口,10表示替代接口,11表示指定接口,而00则被保留使用。最后Forwarding(转发)以及Learning(学习)比特位用于表示该RST BPDU发送接口的接口状态。
RSTP与STP不同,在网络稳定后,无论是根桥还是非根桥,都将周期性地发送配置BPDU,也就是说对于非根桥而言,它们不用再根接口上收到BPDU之后,才被触发而产生自己的配置BPDU,而是自发地、周期性地发送BPDU。
RSTP在BPDU的处理上的另一点改进是对于次优(Inferior)BPDU的处理。运行STP的交换机在每个接口上保存一份BPDU,对于根接口及非指定接口而言,交换机保存的是发送自上游交换机的BPDU,而对于指定接口而言,交换机保存的是自己根据根接口的BPDU所计算出的BPDU。如果接口收到一份BPDU,而且该接口当前所保存的BPDU比接收的BPDU更优,那么后者对于前者而言,就是次优BPDU,在STP中,当指定接口收到次优BPDU时,它将立即发送自己的BPUD,而对于非指定接口,当其收到次优BPDU时,它将等待接口所保存的BPDU老化之后,再重新计算新的BPDU,并将新的BPDU发送出去,这将导致非指定接口需要最长约20S的时间才能启动状态迁移。在RSTP中,无论接口的角色如何,只要接口收到次优BPUD,便立即发送自己的BPUD,这个变化使得RSTP的收敛更快。
边缘接口(Edge Port):
边缘接口缺省不参与生成树计算,当边缘接口被激活后,它可以立即切换到转发状态并开始收发业务流量,而不用经历转发延迟时间。另外,边缘接口的关闭或激活并不会触发RSTP拓扑变更。
如果边缘接口连接了交换设备并且收到了BPDU,则该接口立即变成一个普通的生成树接口,在这个过程中,可能引发网络中的RSTP重计算。
一个接口被配置为边缘接口后,该接口仍然会周期性地发送BPUD,此时可在接口的配置视图下增加stp bpdu-filter enable命令,激活该接口的BPDU过滤功能,该接口将不再发送BPDU,而当其收到BPDU时,也会直接忽略。
P/A机制
假如有A、B两台交换机通过链路与各自1口相连并运行RSTP协议。初始时,、B两台交换机都认为自己是根桥互发BPDU报文,此时,假如通过BPDU报文交互后,A被选举被根桥,则A1则为指定接口,B1则为根接口。但这时两个接口都处于丢弃状态并开始P/A过程,首先A1接口发送Proposal置位的BPDU,B收到Proposal置位的BPDU后,立即启动一个同步过程,及将B本地所有的非边缘接口全部阻塞。完成同步后,B立即将B1接口切换为转发状态,并从该接口向A发送Agreement置位的BPDU,A收到Agreement置位的BPDU后,立即将A1接口切换到转发状态,此时,A、B两台交换机便可以实现通信了。由于B的其他接口此时依然处于丢弃状态,因此该接口也将向下游交换机发起一个P/A过程。
RSTP的保护功能:
BPDU保护:激活该功能后,交换机所有边缘接口收到BPDU时,交换机会立即把接口关闭。缺省时被关闭的接口不会自动恢复。
系统视图:stp bpdu-protection
根保护:
根保护功能只有在指定接口上激活才会生效。当激活了根保护功能的指定接口收到更优的BPDU时,它将忽略这些BPDU,并立即将接口切换到丢弃状态。如果接口不在收到更优的BPDU,则一段时间后(通常为两倍的转发延迟时间),它将会自动恢复到转发状态。
接口视图:stp root-Protection
环路保护:
1.在根接口上激活了环路保护功能后,如果过该接口长时间没有收到BPDU,那么交换机将会重新选举根接口并将该接口的角色调整为指定接口,此时交换机会将该接口的状态切换到丢弃状态,从而避免环路的发生。
2.在替代接口上激活了环路保护功能后,如果该接口长时间没有接收到BPDU,那么交换机将会将该接口的角色调整为指定接口,但是其状态保持在丢弃状态,从而避免环路的出现。
接口视图:stp loop-protection
拓扑变更保护
MSTP
MSTP能够兼容STP及RSTP,在该协议中,生成树不是基于VLAN运行的,而是基于Instance(实例)运行的。所谓Instance,即是一个或多个VLAN的集合。
网络管理员可以将一个或多个VLAN映射到一个Instance,然后MSTP基于该Instance计算生成树。基于Instance的生成树被称为MSTI(Multiple Spanning Tree Instance,多生成树实例),MSTP为每个Instance维护独立的MSTI。映射到同一个Instance的VLAN将共享同一棵生成树。
MSTP Instance使用Instance-ID进行标识,在华为交换机上,Instance-ID的取值范围是0~4094,其中Instance0是缺省便已经存在的,而且缺省时,交换机上所有的VLAN都映射到了Instance0。
MSTP引入了域(Region)的概念,我们可以将一个大型的交换网络划分成多个MST域(Multiple Spanning Tree Region),一个MST域内可以包含一台或多台交换机,同属一个MST域的交换机必须配置相同的域名(Region Name)、相同的修订级别(Revision Level),以及相同的VLAN与Instance的映射关系。