生成树
STP/RSTP引入
以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为了在保持冗余的同时解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol)。
运行STP协议的设备通过彼此交互信息发现网络中的环路,并有选择的对某个端口进行阻塞,最终将环形网络结构修剪成无环路的树形网络结构,从而防止报文在环形网络中不断循环,避免设备由于重复接收相同的报文造成处理能力下降。
由于STP拓扑收敛速度慢,IEEE在2001年发布了802.1w标准定义了RSTP(Rapid Spanning Tree Protocol)。RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。
生成树协议的作用:
在以太网交换网中部署生成树协议后,如果网络中出现环路,生成树协议通过拓扑计算,可实现:
- 消除环路:通过阻塞冗余链路消除网络中可能存在的网络通信环路。
- 链路备份:当前活动的路径发生故障时,激活冗余备份链路,恢复网络连通性。
环路
网络环路,信息技术术语,也分为第二层环路和第三层环路,所有环路的形成都是由于目的路径不明确导致混乱而造成的,例如第二层,一个广播信息经过两个交换机的时候会不断恶性循环的产生广播,造成环路,而第三层环路则是原路由意外不能工作,造成路由通告错误,形成一个恶性循环。

在现实中,冗余链路会引起环路,还有一些人为错误也会导致环路。
二层环路会带来两大问题:
- 广播风暴:根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧,或者是一个未知单播帧,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧。
- MAC地址表震荡:当环路中产生广播报文的转发时,交换机处于同一环路的不同端口将会不停的收到源MAC地址相同的广播帧,因此需要不断地学习、修改MAC地址表中MAC地址和端口的映射关系,从而引起了MAC地址表的抖动。如此下去,最终导致MAC地址表项被破坏。
STP的基本概念和工作原理(以下的网桥/桥指的是交换机)
桥ID(BID)
IEEE 802.1D标准中规定BID由16bit的桥优先级(Bridge Priority)与48bit的桥MAC地址构成,例如:4096.4c1f-aabc-102a,每一台运行STP的交换机都拥有一个唯一的BID。在STP网络中,桥优先级是可以配置的,取值范围是0~65535,默认值为32768,可以修改但是修改值必须为4096的倍数。优先级最高的设备(数值越小越优先)会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先(根桥可抢夺)。
根桥
树形的网络结构必须有树根,于是STP引入了根桥(Root Bridge)概念,作为STP交换网络的树根。
在STP网络中,桥ID最小的设备会被选举为根桥。
在初始化过程中,每个桥都主动发送配置BPDU,但是在网络拓扑稳定后,只有根桥主动发送配置BPDU,其他桥在收到上有传来的配置BPDU后,才触发发送自己的配置BPDU。对于一个STP网络,根桥在全网中只有一个,它是整个网络的逻辑中心,但不一定是物理中心。根桥会根据网络拓扑的变化而动态变化。网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备收到该配置BPDU后,如果优先级比自己的配置BPDU高,则非根桥设备会根据收到的配置BPDU中携带的信息更新自己STP端口存储的配置BPDU信息,否则会丢弃该配置BPDU。
Cost和RPC
每一个激活了STP的接口都维护着一个Cost值,接口的Cost主要用于计算根路径开销,也就是到达根的开销(根路径开销(Root Path Cost))。缺省情况下,华为交换机使用IEEE 802.1t标准来计算路径开销。
路径开销是两桥之间某条路径上所有链路开销的总和,非根桥通过对比多条路径的路径开销,选出到达根桥的最短路径,这条最短路径的路径开销被称为RPC,一台设备从某个接口到达根桥的RPC等于从根桥到该设备最短路径沿途所有入方向接口的Cost累加。
Port ID
运行STP的交换机使用接口ID来标识每个接口,接口ID主要用于在特定场景下选举指定接口。接口ID由两部分构成的,高4 bit是接口优先级,低12 bit是接口编号。激活STP的接口会维护一个缺省的接口优先级,在华为交换机上,该值为128。用户可以根据实际需要,通过命令修改该优先级。例如:128.1(抓包时可能为16进制——0x8001)
BPDU(Bridge Protocol Data Unit,网桥协议数据单元)
为了计算生成树,交换机之间需要交换相关的信息和参数,这些信息和参数被封装在BPDU中,BPDU是STP的协议报文。
BPDU有两种类型:
- 配置BPDU:包含桥ID、路径开销和端口ID等参数,配置BPDU是STP进行拓扑计算的关键,STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态。在初始化过程中,每个桥都主动发送配置BPDU。在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。
- TCN BPDU:下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知,只在网络拓扑发生变更时才会被触发。
其中,配置BPDU的报文格式为:

运行STP协议的网络中非根桥设备收到配置BPDU报文后,将报文中的Message Age+1,并和Max Age进行比较,如果Message Age 小于Max Age,则该非根桥设备继续转发配置BPDU报文。如果Message Age 等于Max Age,则该非根桥设备忽略此BPDU,不会转发。因此,Max Age具有限制stp网络规模的作用。
STP协议的选举机制
- 选举根桥,全网BID最小的交换机成为根桥,具备抢夺性,具备唯一性。
- 除根桥外,其他交换机为非根桥,每个非根桥选举一个根端口(根端口是接收来自根桥最好BPDU的端口。在一个运行STP协议的交换机上最多只有一个根端口,但根桥上没有根端口)。
- 每个链路(冲突域)选举一个指定端口,负责在链路转发来自根桥的最好BPDU(注意是来自根桥的)。一般情况下,根桥的每个端口总是指定端口。
- 剩下的是阻塞端口。
什么是最好BPDU(BPDU比较)?
答:STP按照如下顺序选择最优的配置BPDU:最小的根桥ID(交换机在刚启动时都认为自己是根桥)->最小的RPC->最小的网桥ID->最小的接口ID
STP接口状态
前提:启用STP
- 禁用(disable)不能收发BPDU,也不能收发业务数据帧,也不会进行MAC地址学习,例如接口为down
- 阻塞(blocking)不能发送BPDU,但是会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习
- 侦听(Listening)STP初步认定该接口为根接口或指定接口,但接口依然处于STP计算的过程中,可以收发BPDU,但是不能收发业务数据帧,也不会进行MAC地址学习
- 学习(Learning)可以收发BPDU,但是不能发送业务数据帧,可以进行MAC地址学习
STP接口状态迁移:

注:
1.阻塞和转发是稳定的接口状态,其他状态只是过渡。侦听、学习状态是为了让BPDU充分交换
2.阻塞到监听状态的变化是极快的,一旦接口认为自己是根端口、指定端口,它会立即进入监听状态
3.侦听到学习、学习到转发的时间根据转发延迟的不同而不同,一般一共30秒。由于其他状态的迁移时间可以忽略不计,故接口从阻塞到转发共需30S
4.接口之间最本质的区别并不在于接口状态,而是在于接口扮演的角色
补充:https://blog.51cto.com/u_14360585/2437398
RSTP
stp存在的问题:
- 网络拓扑收敛慢,影响了用户通信质量。
- 如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断。(当指定接口进入转发状态,则认为拓扑发生变化)
- 根接口和指定接口可以都处于Listening状态,也可能都处于Forwarding状态,无法通过端口角色判断端口状态,反之亦然,接口角色和接口状态是解耦的。
- STP端口角色确立的非常快,但是端口状态的转变慢,依赖定时器,收敛速度慢。
RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。当交换网络拓扑结构发生变化时, RSTP可以通过Proposal/Agreement机制更快地恢复网络的连通性。
RSTP新增两种端口角色:预备端口(ap)和备用端口(bp),前者作为根端口的替代端口,后者作为指定端口的替代端口。
RSTP引入边缘接口,用于连接终端设备,不与交换设备连接,不会因为接入终端设备而进行拓扑变化的通知,避免了因为终端设备频繁连接造成的网络拓扑变化,MAC地址表频繁清空的问题。
RSTP的状态规范把原来的5种状态缩减为3种,如果不转发用户流量也不学习MAC地址,那么接口状态就是Discarding状态。如果不转发用户流量但是学习MAC地址,那么接口状态就是Learning状态。如果既转发用户流量又学习MAC地址,那么接口状态就是Forwarding状态。
生成树进阶
STP/RSTP存在的问题:STP/RSTP都是单生成树协议,只有一个根,只能维护一棵树。局域网内所有的VLAN共享一棵生成树,容易造成链路资源浪费。
结局方案:
VBST
华为提出了VBST,该方案中,生成树的形成是基于VLAN的,不同VLAN间可形成相互独立的生成树,不同VLAN内的流量沿着各自的生成树转发,进而可实现流量的负载分担。但是网络中VLAN的数量较多时,为每个VLAN执行独立的生成树计算将耗费交换机大量的资源。(不常用)
MSTP(最常用)
IEEE于2002年发布的802.1s标准定义了MSTP,MSTP将VLAN映射到一个生成树的实例,若干个VLAN可共用一棵生成树。例如,共有40个VLAN,将0-20映射到实例1,将21-40映射到实例2,因此网络只需维护两颗生成树。
堆叠
堆叠iStack(Intelligent Stack),是指将多台支持堆叠特性的交换机设备组合在一起,从逻辑上组合成一台整体交换设备,而在物理上依然是多台交换机。
部署了堆叠后的汇聚交换机,将形成逻辑意义上的单台设备,再在汇聚交换机与接入交换机之间部署链路聚合,就可以将拓扑进一步简化为“树形结构”,消除二层环路(物理上依然是冗余的),同时充分提高链路带宽利用率。
Smart Link
Smart Link是一种为双上行组网量身定做的解决方案,一条为主链路,一条为备用链路,当网络正常时,两条上行链路中,主链路处于活跃状态,备用链路则处于备份状态(不承载业务流量)。如此一来二层环路就此打破。当主链路发生故障后,流量会在毫秒级的时间内迅速切换到备用链路上,保证了数据的正常转发。Smart Link配置简单,便于用户操作,无需协议报文交互,收敛速度及可靠性大大提升(也可以实现负载分担)

浙公网安备 33010602011771号