以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol)。
运行STP协议的设备通过彼此交互信息发现网络中的环路,并有选择的对某个接口进行阻塞,最终将环形网络结构修剪成无环路的树形网络结构,从而防止报文在环形网络中不断循环,避免设备由于重复接收相同的报文造成处理能力下降。
RSTP(Rapid Spanning Tree Protocol)协议基于STP协议,对原有的STP协议进行了更加细致的修改和补充,实现了网络拓扑快速收敛。
STP是一个用于局域网中消除环路的协议。 运行该协议的设备通过彼此交互信息而发现网络中的环路,并对某些接口进行阻塞以消除环路。
STP在网络中运行后会持续监控网络的状态,当网络出现拓扑变更时,STP能够感知并且进行自动响应,从而使得网络状态适应新的拓扑结构,保证网络可靠性。 由于局域网规模的不断增长,生成树协议已经成为了当前最重要的局域网协议之一。以下是对生成树发展的由来:
二层交换机网络的冗余性与环路
人为错误导致的二层环路
二层环路带来的问题
初识生成树协议
STP的基本概念及工作原理
桥ID(Bridge ID,BID)
IEEE 802.1D标准中规定BID由16位的桥优先级(Bridge Priority)与桥MAC地址构成。 每一台运行STP的交换机都拥有一个唯一的BID。 BID桥优先级占据高16bit,其余的低48bit是桥MAC地址。 在STP网络中,BID最小的设备会被选举为根桥。
备注:此处网桥(Bridge ),或者桥也就是交换机。
根桥(Root Bridge)
STP的主要作用之一是在整个交换网络中计算出一棵无环的“树”(STP树)。
根桥是一个STP交换网络中的“树根”。 STP开始工作后,会在交换网络中选举一个根桥,根桥是生成树进行拓扑计算的重要“参考点”,是STP计算得出的无环拓扑的“树根”。
在STP网络中,桥ID最小的设备会被选举为根桥。
在BID的比较过程中,首先比较桥优先级,优先级的值越小,则越优先,拥有最小优先级值的交换机会成为根桥;如果优先级相等,那么再比较MAC地址,拥有最小MAC地址的交换机会成为根桥。
开销(Cost)
每一个激活了STP的接口都维护着一个Cost值,接口的Cost主要用于计算根路径开销,也就是到达根的开销。 接口的缺省Cost除了与其速率、工作模式有关,还与交换机使用的STP Cost计算方法有关。 接口带宽越大,则Cost值越小。 用户也可以根据需要通过命令调整接口的Cost。
Cost计算方法
接口Cost是已经激活了STP的接口所维护的一个开销值,该值存在默认值,与接口的速率有关联,并且设备使用不同的算法时,相同的接口速率对应不同的Cost值。
根路径开销(Root Path Cost)
在STP的拓扑计算过程中,重要的环节就是“丈量”交换机某个接口到根桥的“成本”,也即RPC。
一台设备从某个接口到达根桥的RPC等于从根桥到该设备沿途所有入方向接口的Cost累加。
在本例中,SW3从GE0/0/1接口到达根桥的RPC等于接口1的Cost加上接口2的Cost。
接口ID(Port ID,PID)
运行STP的交换机使用接口ID来标识每个接口,接口ID主要用于在特定场景下选举指定接口。 接口ID由两部分构成的,高4 bit是接口优先级,低12 bit是接口编号。 激活STP的接口会维护一个缺省的接口优先级,在华为交换机上,该值为128。
用户可以根据实际需要,通过命令修改该优先级。
BPDU(Bridge Protocol Data Unit,网桥协议数据单元)
BPDU是STP能够正常工作的根本。BPDU是STP的协议报文。 STP交换机之间会交互BPDU报文,这些BPDU报文携带着一些重要信息,正是基于这些信息,STP才能够顺利工作。 BPDU分为两种类型: 配置BPDU(Configuration BPDU) TCN BPDU(Topology Change Notification BPDU) 配置BPDU是STP进行拓扑计算的关键;TCN BPDU只在网络拓扑发生变更时才会被触发。
对于STP而言,最重要的工作就是在交换网络中计算出一个无环拓扑。在拓扑计算的过程中,一个非常重要的内容就是配置BPDU的比较。在配置BPDU中,有四个字段非常关键,它们是“根桥ID”、“根路径开销”、“网桥ID”以及“接口ID”,这四个字段便是交换机进行配置BPDU比较的关键内容。
STP按照如下顺序选择最优的配置BPDU:
(1)最小的桥ID
(2)最小的RPC
(3)最小的网桥ID
(4)最小的接口ID
配置BPDU的转发过程
STP的计算过程
一、在交换网络中选举一个根桥
STP在交换网络中开始工作后,每个交换机都会向网络中发送配置BPDU。配置BPDU中包含交换机自己的桥ID。 网络中拥有最小桥ID的交换机成为根桥。
在一个连续的STP交换网络中只会存在一个根桥。 根桥的角色是可抢占的。
为了确保交换网络的稳定,建议提前规划STP组网,并将规划为根桥的交换机的桥优先级设置为最小值0。
二、在每台非根桥上选举一个根接口
每一台非根桥交换机都会在自己的接口中选举出一个根接口(PR)。非根桥交换机上有且只会有一个根接口。 当非根桥交换机有多个接口接入网络中时,根接口是其收到最优配置BPDU的接口。
可以形象地理解为,根接口是每台非根桥上“朝向”根桥的接口。
三、在每条链路上选举一个指定接口
根接口选举出来后,非根桥会使用其在该接口上收到的最优BPDU进行计算,然后将计算得到的配置BPDU与除了根接口之外的其他所有接口所收到的配置BPDU进行比较:
如果前者更优,则该接口为指定接口(DP);
如果后者更优,则该接口为非指定接口。
一般情况下,根桥的所有接口都是指定接口。
四、非指定接口被阻塞
一台交换机上,既不是根接口,又不是指定接口的接口被称为非指定接口。 STP操作的最后一步是阻塞网络中的非指定接口(AP)。这一步完成后,网络中的二层环路就此消除。
STP的接口状态
STP的接口状态迁移
(1)接口初始化或激活,自动进入阻塞状态
(2)接口被选举为根接口或指定接口,自动进入侦听状态
(3)转发延迟计时器超时且接口依然为根接口或指定接口
(4)接口不再是根接口或指定接口或指定状态
(5)接口被禁用或者链路失效
拓扑变化故障及相应的恢复过程
根桥故障恢复过程
SW1根桥发生故障,停止发送BPDU报文。
SW2等待Max Age计时器(20 s)超时,从而导致已经收到的BPDU报文失效,又接收不到根桥发送的新的BPDU报文,从而得知上游出现故障。
非根桥会互相发送配置BPDU,重新选举新的根桥。
经过重新选举后,SW3的A端口经过两个Forward Delay(15 s)时间恢复转发状态。
(1)非根桥会在BPDU老化之后开始根桥的重新选举。
(2)根桥故障会导致50 s左右的恢复时间。
根桥故障恢复过程
当交换机SW2网络稳定时检测到根端口的链路发生故障,则其备用端口会经过两倍的Forward Delay(15s)时间进入用户流量转发状态。
(1)SW2检测到直连链路物理故障后,会将预备端口转换为根端口。
(2)直连链路故障,备用端口会经过30s后恢复转发状态。
非直连链路故障
非直连链路故障后,SW3的备用端口恢复到转发状态,非直连故障会导致50s左右的恢复时间。
拓扑改变导致MAC地址表错误
如图,SW3的根端口发生故障,导致生成树拓扑重新收敛,在生成树拓扑完成收敛之后,从主机A到主机B的帧仍然不能到达目的地。这是因为交换机依赖MAC地址表转发数据帧,缺省情况下,MAC地址表项的老化时间是300秒。那么该怎么快速恢复转发?
TCN BPDU在网络拓扑变化的时候产生。 报文格式: 协议标识、版本号和类型。 拓扑变化:会使用到配置BPDU中Flags的TCA和TC位。
RSTP对STP的改进
STP协议虽然能够解决环路问题,但是由于网络拓扑收敛慢,影响了用户通信质量。如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断,这是用户无法忍受的。
STP没有细致区分接口状态和接口角色,不利于初学者学习及部署。
网络协议的优劣往往取决于协议是否对各种情况加以细致区分。
从用户角度来讲,Listening、Learning和Blocking状态并没有区别,都同样不转发用户流量。
从使用和配置角度来讲,接口之间最本质的区别并不在于接口状态,而是在于接口扮演的角色。 根接口和指定接口可以都处于Listening状态,也可能都处于Forwarding状态。
STP算法是被动的算法,依赖定时器等待的方式判断拓扑变化,收敛速度慢。
STP算法要求在稳定的拓扑中,根桥主动发出配置BPDU报文,而其他设备进行处理,传遍整个STP网络。这也是导致拓扑收敛慢的主要原因之一。
RSTP概述
IEEE 802.1w中定义的RSTP可以视为STP的改进版本,RSTP在许多方面对STP进行了优化,它的收敛速度更快,而且能够兼容STP。
RSTP引入了新的接口角色,其中替代接口的引入使得交换机在根接口失效时,能够立即获得新的路径到达根桥。备份端口作为指定端口的备份,帮助链路上的网桥快速获得到根桥的备份路径。RSTP的状态规范根据端口是否转发用户流量和学习MAC地址把原来的5种状态缩减为3种。 另外,RSTP还引入了边缘接口的概念,这使得交换机连接终端设备的接口在初始化之后能够立即进入转发状态,提高了工作效率。
RSTP对STP的其他改进
配置BPDU的处理发生变化:
拓扑稳定后,配置BPDU报文的发送方式进行了优化
使用更短的BPDU超时计时
对处理次等BPDU的方式进行了优化
配置BPDU格式的改变,充分利用了STP协议报文中的Flag字段,明确了接口角色 RSTP拓扑变化处理:相比于STP进行了优化,加速针对拓扑变更的反应速度
端口状态不同
RSTP的状态规范把原来的5种状态缩减为3种。
如果不转发用户流量也不学习MAC地址,那么接口状态就是Discarding状态。
如果不转发用户流量但是学习MAC地址,那么接口状态就是Learning状态。
如果既转发用户流量又学习MAC地址,那么接口状态就是Forwarding状态。
边缘端口
如果指定端口位于整个域的边缘,不再与任何交换设备连接,这种端口叫做边缘端口。
边缘端口一般与用户终端设备直接连接,可以由Disabled状态直接转到Forwarding状态。