生成树协议(Spanning Tree Protocol)
交换机在目的地址未知或接收到广播帧时是要进行广播的。如果交换机之间存在回路/环路,那么就会产生广播循环风暴,从而严重影响网络性能。
而交换机中运行的STP协议 能避免 交换机之间发生广播循环风暴。
只使用交换机,构建如下拓扑:
这是初始时的状态。我们可以看到交换机之间有回路,这会造成广播帧循环传送即形成广播风暴,严重影响网络性能。
随后,交换机将自动通过生成树协议(STP) 对多余的线路进行自动阻塞(blocking),以形成一棵以Switch4为根(具体哪个是根交换机有相关的策略)的具有唯一路径树即生成树。
经过一段时间,随着STP协议成功构建了生成树后,Switch5的两个接口当前物理上是连接的,但逻辑是不通的,处于Blocking状态(桔色)如下图所示。
在网络运行期间,假设某个时候 Switch7 与 Switch6 之间的物理连接出现问题(将 Switch7 与 Switch6 的连线剪掉),则该生成树将自动发生变化。Switch7 上方先前 Blocking 的那个接口现在活动了(绿色),但下方那个接口仍处于 Blocking 状态(桔色)。如下图所示:
交换机的STP协议即生成树协议始终自动保证交换机之间不会出现回路,从而形成广播风暴。
再详细讲讲:
STP(Spanning Tree Protocol)是一个用于局域网中消除环路的协议。它的标准是IEEE 802.1D。STP通过将部分冗余链路强制为阻塞状态,其他链路处于转发状态,将环形网络结构修剪成无环路的树形网络结构,可实现消除环路。当处于转发状态的链路不可用时,STP重新配置网络,并激活合适的备用链路状态,恢复网络连通性。
一、STP的工作原理
1、每个网络设备(交换机)都有一个桥优先级(Bridge Priority)和一个桥ID(Bridge ID)
2、每个设备通过发送BPDU(Bridge Protocol Data Unit)消息来与其他设备进行通信。
3、每个设备根据接收到的BPDU消息来确定根桥和最短路径。
4、设备选择根桥,并将自己的端口设置为根端口和非根端口
通过协议计算(依赖于BPDU报文),从逻辑上阻塞端口,从而实现防环,当链路一旦出现故障时,阻塞端口重新恢复转发。STP适用于较小规模的网络,但它的收敛速度较慢,对网络中的拓扑变化反应不够迅速。
二、STP基本概念
1、桥ID(Bridge ID)
每台交换机在出厂的时候都有一个不一样的标识,就是桥MAC,在STP里面使用了桥ID来标识不同的交换机,每一台交换机运行了STP就有一个对应的桥ID,桥ID由两部分组成,一个2字节的桥优先级,默认32768(可以管理员自行修改)。一个6字节的桥MAC,通常为默认VLAN1的MAC地址。
2、根桥(Root Bridge)
STP要在整个二层网络中计算出一棵无环的树,树就形成了,网络中的无环拓扑也就形成了。其中最重要的就是树根,树根明确了,"树枝"才能沿着网络拓扑进行延伸。STP的根桥就是这棵树的树根。当STP启动后,第一件事就是在网络中选举出根桥。在一个二层网络中,根桥只有一个,其余设备都是非根桥。当网络的拓扑发生变化时,根桥也可能发生变化。
3、根路径开销
非根桥到达根桥可能有多条路径,每条路径都有一个总开销值,也就是根路径开销(RPC),**这个值是通过这条路径所有出端口的开销值累加而来的。STP不会计算入端口的开销,**只在数据通过端口发出时,才计算这个端口的开销。对于根桥来说,根路径开销是0。
STP上的交换机每一个接口都有对应的一个开销值,用于表示数据通过该端口发送时的开销,开销值越小表示带宽越高,技术发展到现在有2个公有标准,华为华三自己一个私有版本。
4、端口ID
运行STP的交换机使用端口ID 标识每个端口,端口ID主要用于选举指定端口。端口ID长度为16比特,其中前4比特是端口优先级 ,后12比特是端口编号。在进行比较时,先比较端口优先级,优先级小的端口优先;在优先级相同时,再比较端口编号,编号小的端口优先。通常情况下,端口编号无法改变,可通过设置端口优先级来影响生成树的选路。
5、BPDU(桥协议数据单元)
交换机毕竟是一个独立的个体,想要把一个二层网络 (二层网络就是OSI模型中的数据链路层。)里面的交换机形成一颗大树一样的树状结构,那就少不了需要相互"沟通",来了解整个二层网络的结构拓扑,正是依赖BPDU,**它包含了STP协议里面相关的所有信息,通过这些信息来完成生成树的计算,**这里要注意,BPDU发送的是组播帧,目的地址为0180-C200-0000,运行了STP交换机会产生、发送、接收、处理BPDU,其余未运行的则不参与。
选举要求:
根桥ID:优先级+mac地址
1、比较优先级:
默认为32768,数值越小越优先,可调整,只能为4096的倍数。
2、比较mac地址,数值越小越优先:
如果设备收到比本身差的BPDU报文,直接丢弃,如果设备收到比本身优的BPDU报文,将其放入端口存储并且转发出去
全网泛洪的BPDU报文的根桥ID一致时说明交换网络中已经选出根桥交换机。
2、选举根端口
根端口(RP): 转发数据的端口,**用于接收最优的BPDU报文,只在非根桥交换机上有且只有一个。**非根桥交换机与根桥交换机直连接口都为RP端口。
选举要素:
根路径开销:
选择根路径开销(RPC)最小的端口;
如果RPC相同,那就选对端桥ID(BID)最小的端口;
如果对端桥ID相同,那就选对端端口ID(PID)最小的端口;
跟接口的带宽有关,根路径开销越小越优先。
3、选举指定端口
根端口确保了交换机到根桥的路径是唯一的,也是最优的。**网络中的每条链路与根桥之间的路径也要是唯一且最优的。当一条链路中有两条或两条以上的路径到达根桥,就必须确定出一个唯一的指定端口,防止出现二层环路。**指定端口不但是这条链路内所有端口中到达根桥的最优接口,还会向链路内发送BPDU。
选举要素:
1、发送者桥ID设备在转发BPDU报文,都会将本身的桥ID字段填充到发送者桥ID中。
2、比较规则与根桥ID比较规则完全一致。
虽然选举指定端口的范围和根端口不同,但是选举的原则是一致的。指定端口的选举同样会按照以下过程进行:
4、阻塞端口
在确定了根端口和指定端口后,交换机上剩下的非根端口和非指定端口都叫做备用端口**。备用端口是打破环路的关键,STP会对这些备用端口进行逻辑阻塞。**逻辑阻塞,是指端口不会接收或发送任何数据,但是会监听BPDU。当网络的一些端口出现故障时,STP会让备用端口开始转发数据,用来恢复网络的正常通信。
选举要素:
端口ID:优先级+端口编号。
优先级: 默认为128,数值越小越优先,可调整,只能调整为16的倍数。
端口ID:数值越小越优先。
四、STP端口状态机和时间参数
STP不但定义了3种端口角色:根端口、指定端口、备用端口, 还定义了5种端口状态:禁用状态、阻塞状态、侦听状态、学习状态、转发状态。
disable: 说明端口未启用STP协议;
blocking: 阻塞状态,属于AP端口正常状态,进行根桥的选举;
**listening:**侦听状态,进行端口角色的确定;
**learning:**学习状态,学习mac地址表;
**forwarding :**转发状态,转发数据,学习mac地址。
STP定义了3个重要的时间参数
**Hello Time(Hello 时间):**STP交换机发送配置BPDU的时间间隔,默认是2秒。如果要修改时间参数,那么必须在根桥上修改才有效。
**Forward Delay(转发延迟):**接口从侦听状态进入学习状态,或从学习状态进入转发状态的延迟时间,默认值是15秒。避免在STP树的生成过程中可能出现的临时环路,或短暂的数据帧泛洪现象,分别在侦听和学习的端口状态各停留一个转发延迟时间。对于STP而言,一个阻塞端口选举为根接口或指定接口后,进入转发状态至少需要经历30秒的时间。
**Max Age(最大生存时间):**BPDU的最大生存时间,也称为BPDU的老化时间,Max Age的值由根桥指定,默认值是20秒。如果端口在20秒内收到BPDU,最大生存时间会重新计时;如果端口一直没收到BPDU,那么BPDU将会老化,设备会重新在端口上选择最优BPDU,也就是重新进行根接口的选举。
由于时间参数的设计,一个STP接口从阻塞状态进入到转发状态,可能需要30 ~ 50秒的时间,这段时间内,网络无法正常使用。