STP(生成树) 基础
一、STP产生的背景
对于任何一个商用的网络来说,冗余性都是一个必须考虑的问题。为了避免某个关键设备或某段链路在生产环境中出现故障,导致业务不能正常工作,为了保证数据传输的健壮性和网络的可靠性,需要对关键设备和链路进行备份,以便在设备和链路出现故障时业务依然可以正常的工作。
但是冗余的设备和链路也带来了二层环路(layer 2 Loop)。二层环路会造成广播风暴、MAC地址表抖动、多帧复制的问题😭。
那有没有一种方法即能保证冗余的同时又不会有环路的危害呢?因此STP(Spanning Tree Protocol,生成树协议)应用而生。🧐
二、STP是什么?
STP(Spanning Tree Protocol,生成树协议),当然是个协议啦😝,不过STP是早期的生成树协议,它在IEEE 802.1D中定义。
三、STP都干了啥?
简单的说,当网络中部署生成树(STP树)之后,交换机之间便会开始交互相关协议报文(BPDU),并在网络中进行一系列的运算,经计算最终得到一个无环的网络拓扑。当网络中存在环路时,生成树会将网络中的一个或多个接口进行阻塞(Block),从而打破二层环路。
在此之后,生成树依然会监视网络的拓扑状况,当网络拓扑发生变更时,生成树能够及时感知,并且动态地调整被阻塞接口,这个过程无需人工干预,自动完成。
如下图所示(已部署STP),当LSW1和LSW2之间的链路发生故障时,生成树能够感知到变化的发生,并将原先阻塞的接口GE 0/0/3切换到转发状态,这样一来,LSW3的上行流量又可以从右侧的链路进行转发,因此生成树不仅可以在网络中解决二层环路的问题,还可以保证网络的冗余性。😎
总结:
- 使冗余端口置于"阻塞状态"
- 网络中的计算机在通信时,只有一条链路生效
- 当链路出现故障时,将处于"阻塞状态"的端口重新打开,确保网络连接稳定可靠
四、STP 基本概念
1.桥ID/网桥ID(Bridge Identification)
早期的交换机被称为"桥(Bridge)“或"网桥”,桥ID就是交换机的身份标识,每一台交换机都拥有唯一的桥ID。
桥ID一共 8byte,包含 16bit 的桥优先级(Bridge Priority)和 48bit 的桥MAC地址,桥优先级占据桥ID的高16bit,MAC地址占据其余的48bit。
2.根桥(Root Bridge)
STP的主要作用之一是在整个交换网络中计算出一棵无环的"树"(STP树),这颗树一形成,网络中的无环拓扑也就形成了。对于这棵树而言,树根是非常重要的,树根明确后,"树枝"才能沿着网络拓扑进行延展。STP树的树根就是根桥(Root Bridge)。
STP的一系列计算均以根桥为参考点。当STP开始工作时,第一件事就是选举根桥。在一个交换网络中,根桥具有唯一性。
3.接口ID(Port Identification)
运行STP的交换机的接口标识就是接口ID(G0/0/1),接口ID主要用于在特定场景下选举指定接口。
接口ID长度为16bit,由两部分组成,高4bit是接口优先级,低12bit是接口编号。优先级取值范围0~240,且必须时16的倍数。
4. BPDU是什么?
BPDU(Bridge Protocol Data Unit,网桥协议数据单元),STP正常工作的基本前提就是BPDU报文的正常交互。
4.1 BPDU分类
BPDU分为配置BPDU(Configuration BPDU)及TCN BPDU(Topology Change Notification BPDU)。
4.2 配置BPDU
配置BPDU用于STP进行拓扑计算。交换网络初始化过程中,每台交换机都会从自己激活了的STP接口向外发送配置BPDU,当STP收敛完成后,只有根桥才会周期性的发送配置BPDU(默认2s发一次),而非根桥会在自己的根接口上接收上游发送过来的配置BPDU,并立即被触发而产生自己的配置BPDU,然后从指定接口发送出去。
4.3 TCN BPDU
TCN BPDU的格式只有表10-2 的"协议ID",“协议版本ID”,"BPDU类型"三个字段,TCN BPDU用于在网络拓扑发生变化时向根桥通知变化的发生。
4.3.1 STP 网络拓扑发生变更
对于STP而言,当网络拓扑发生变更时,远离变更点的交换机无法直接感知到变化的发生,此时它们的MAC地址表项还是老旧的,如果依然通过这些老旧的MAC地址表项来指导数据转发,便有可能出现问题。因此,STP需要一种机制,用于在网络种发生拓扑变更时促使全网的交换机尽快老化自己的MAC地址表项,以便适应新的网络拓扑。当网络拓扑稳定时,网络中只会出现配置BPDU,当拓扑发生变更时,STP会使用TCN BPDU,以及两种特殊的BPDU(TCA、TC)。
TCN BPDU:用于在网络发生变化时向根桥通知变化的发生
"标志"字段中TCA 比特位置位为1的配置BPDU:给下游的交换机予以回应,确认收到下游发来的TCN BPDU,然后继续向上游发送给TCN BPDU,这个过程持续到根桥收到 TCN BPDU
"标志"字段中TC 比特位,置位为1的配置BPDU: 根桥意识到拓扑变化的发生,现将变化通知到全网,让所有交换机尽快更新自己的CAM表
5. 开销(Cost)与根路径开销(Root Path Cost,RPC)
每一个激活了STP的接口都维护着一个Cost值,接口的Cost值主要用于计算RPC(到达根的开销),接口默认的Cost除了与其速率、工作模式有关,还与交换机使用的STP Cost计算方法有关。
如下图是华为的交换产品支持的3种计算方法。
6. STP的端口状态
- 阻塞状态(Blocking)
不收发任何报文- 阻塞状态(Blocking)
接收BPDU- 监听状态(Listening)
接收和发送BPDU- 监听状态(Listening)
接收发送BPDU,学习MAC地址- 转发状态(Forwarding)
发送和接收数据,接收发送BPDU,学习MAC地址
四、STP 选举过程(越小越优先)
1.选举一个根桥(Root Bridge,RB)
桥ID最小的交换机当选为根桥:
- 比较桥优先级
- 比较桥MAC地址
2.在非根桥(Non-Root Bridge)上选举一个根接口(Root Port,RP)
选举依据:
- 根路径成本/开销最小
- 发送网桥ID最小
- 发送端口ID最小
- 本地端口ID最小
补充:
在一个交换网络中,除了根桥之外的其他交换机都是非根桥。
STP将为每个非根桥都选举一个根接口,根接口是非根桥上所有接口中收到最优BPDU的接口。根接口同时也是交换机在STP树上"朝向"根桥的接口。
3. 选举指定接口(Designated Port,DP)
选举依据:
- 根路径成本最小
- 所在网桥ID最小
- 端口ID最小
补充:
STP在每个网段中选举一个指定接口,指定接口是该网段内到达根桥的最优接口。此外,指定接口还负责向该网段发送BPDU。
指定接口的选举过程是非根桥用自己计算出的BPDU跟别的设备发来的BPDU进行比较。若自己计算出的BPDU更优,则该接口成为指定接口,否则为非指定接口。
总结:
对于非根桥而言,其所有接口中收到最优BPDU的接口将成为该设备的根接口。随后该非根桥使用自己收到的最优BPDU,为本设备的其他接口各计算一个BPDU,然后使用计算出的BPDU与接口上所维护的BPDU(接口自身也会从网络中收到BPDU,并将其保存起来) 进行比较,如果前者更优,那么该接口将成为指定接口,并且其所保存的BPDU也被前者替代,交换机将替代后的BPDU从该指定接口转发给下游的交换机;如果后者更优,那么该接口将成为非指定接口(非指定接口指的既不是根接口,也不是指定接口的接口)。
4. 阻塞非指定接口,打破二层环路
经STP计算后,如果交换机的某个(或某些)接口既不是根接口又不是指定接口,那我们将这种接口称为非指定接口。
非指定接口将会被STP阻塞,以打破网络中的二层环路,被阻塞的接口既不会接收也不会转发业务数据,也不会发送BPDU,只会持续侦听BPDU,以便感知网络拓扑的变更情况。
结语😁
关于STP(生成树)基础知识就说到这里 ,由于作者水平有限,请大家多多指教,互相交流,一起学习,如果有错误或问题欢迎评论,指正,谢谢😊