1.须知
1.1.角色
首先了解STP运行中使用的角色
1.2.STP运行的接口状态
2.ROOT根桥设备怎么选出来?
为了达到了解整个二层交换的情况,STP会让设备产生一种特殊的报文BPDU在交换中进行流转,BPDU携带很多信息,比如COST值,ROOT ID,MAC地址,优先级等等。
每台设备都会产生BPDU,然后选举一个主要设备,相当于主要所有交换的脑子设备,这个设备我们叫做根桥(ROOT),这个设备产生的BPDU我们叫做最优的BPDU(后面都叫做BPDU)。
2.1.优先级
0-61440,以4096的倍数为优先级,默认为32768
越小越优,比如4096就比32768来的优。
2.2.MAC地址
越小越优
选举出来ROOT设备,选完ROOT之后正常情况下就只有ROOT发送BPDU了,相当于整个网络中的所有人都要听老大的话
3.RP端口(根端口)怎么选出来?
根端口在每台非ROOT设备上只有一个,选举ROOT端口的目的是为了能选出最快的一条链路来收到老大(ROOT)发送的命令(BPDU)以下是选举规则
3.1.Cost Path Root 根路径开销
这个属性表示了从本身的某个接口出发到ROOT的距离,当然是越小越优先,毕竟开销是体现链路质量的一种参考值。
文中开销值计算方式
带宽 | COST |
10M | 100 |
100M | 19 |
1000M | 4 |
例如:
此时网络中的根桥为SW1
SW2直连SW2的端口到达根桥开销最小所以成为SW2的RP端口
SW3直连SW1的端口到达根桥的开销大于SW3直连SW2的端口到达根桥的开销,所以SW3直连SW2的端口成为RP端口
3.2. 上游桥ID(MAC地址)
这个属性用于当我们发现有两条以上链路开销相同的时候,到达root经过的第一台设备的桥ID值,越小越优先
例如:
SW4左右两边到达根桥SW1经过的开销一致,选择经过SW2到达根桥的接口成为RP端口,因为SW2的桥ID小于SW3的桥ID
3.3.上游端口ID(接口大小)
如果两台设备连接两条链路,这时候两个接口到根桥的路径开销和上游桥ID是相同的,所以此时我们要用接口优先级来判断,当然不能判断自己的接口,要判断上游接口,且默认情况下接口的编号越小优先级就越小。
例如:
SW2到达根桥的两条链路开销和经过的设备都是一致的,所以这时候要判定上端设备的端口哪个比较小,G1的端口优先级小于G2的端口优先级,所以SW2连接G1的G4端口成为了RP端口。
4.选举DP、NDP端口
RP端口用来接收BPDU信息,那对应的就需要有接口发送BPDU信息,发送BPDU指定(DP)端口,此时RP选择完成后可以同时确定,RP对端的接口就是DP接口,同时因为根桥是整个网络的BPDU发送者,所以根桥上有所端口都是DP端口。那么STP解决环路就在这一步进行,因为如果有环路风险的链路上会碰到两端的接口都要成为DP端口的情况,此时根据前和RP端口选举相同的规则就可以判定哪个接口能成功成为DP接口,成为DP接口失败的就是阻塞端口我们可以称为非DP接口或者备份端口(AP)。
4.1.COST值
根据到达根桥的开销选举DP口和阻塞口
例如:
此时由于SW2和SW3的RP口已经确定,RP端口的对端成为DP接口,由于一台设备只能有一个RP端口其他只能DP接口或者非DP接口,SW1和SW3互联的接口都想要成为DP接口,此时SW1的接口到达根桥开销0(到自己),SW3从RP口出发到根桥开销38,所以SW1连接SW3的接口成为DP接口,SW3的接口成为了阻塞端口。
4.2.MAC地址
根据桥ID(MAC地址)大小选举DP口和阻塞口
例如:
此时由于SW2和SW3的RP口已经确定,RP端口的对端成为DP接口,由于一台设备只能有一个RP端口其他只能DP接口或者非DP接口,SW2和SW3互联接口都想要成为DP接口,且两台设备从RP出发到达根桥的开销相同,所以此时比较SW2和SW3的桥ID大小,SW2更优先,所以SW2的接口成为DP端口,SW3的端口成为阻塞端口。
4.3.接口ID
根据接口ID大小选举DP口和阻塞口
这种情况往往只会发生在交换机的两个接口接环时
例如:
此时SW1自身两条链路接入HUB,或者认为一根网线连自己两个端口也行,此时G1端口编号小默认端口优先级小,所以G1成为DP,G2成为NDP
5.端口状态
STP在一个网络中收敛需要时间,这个时间大概是35s左右,在选举的过程中二层依然存在环路,此时如果进行数据转发,任然产生数据环路,当交换机性能较差时,可能导致交换机直接宕机;
为了防止上述情况发生,将端口分为多个状态,只有当STP将产生环路的端口阻塞完成之后,才将端口数据放行;
STP的端口状态如下:
Disable | 不转发任何信息 |
Listening | 接收且发送BPDU信息,不学习MAC地址,不转发数据 |
Learning | 接收且发送BPDU信息,学习MAC地址,不转发数据 |
Forwarding | 接收且发送BPDU信息,学习MAC地址,转发数据 |
Blocking | 接收但不发送BPDU信息,不学习MAC地址,不转发数据 |
注意:STP端口状态中Listening与Learning两个状态有固定等待时间,这个固定等待时间称为:Forwarded delay(转发延迟) 默认15 s,这就是为什么STP收敛时间大概需要经过35s的原因;
Blocking状态的接口会继续监听BPDU信息,如果超过连续的20s时间仍然没有收到来自root的最优BPDU信息,端口将开始进入listening,进行STP重新计算;
STP端口状态迁移过程;
6.故障恢复过程
当STP网络中的接口发生故障或者新接入接口的时候都会触发网络的重新计算,我们可以分成三种情况讨论
6.1.案例一,连接PC场景
不影响故障前的STP网络环境
像交换机连接电脑、打印机、路由器等,这些不需要参与生成树计算的端口产生了UP/DOWM的情况,不需要进行STP的重新计算。
什么是边缘端口?:
如何使端口不参与STP计算,在STP中有一种端口称为边缘端口(edge),主要用于交换机连接终端设备,默认所有交换机端口需要参与生成树计算,那么无论任何端口需要经过30s的时间才能进入转发状态,但是终端设备不需要进行STP计算,所以将连接终端的设备置为边缘端口,可以直接进入转发状态,不需要参与端口状态的迁移,从而加速收敛时间,并且,该端口的UP/DOWM不会影响到STP的计算;
6.2.案例二,单向链路故障
情况2:接口灯不灭但是数据无法正常发送的故障
由于网络中单向链路故障(SW1无法发送信息到SW2,SW2成功发送信息到SW1),但是端口处于up状态,无法直接检测到网络端口发生变化,需要等待老化时间,才能开始进行STP的计算,这种故障发生的情况大概率是物理层故障,比如光纤问题,光模块问题,网线问题等;
1、SW2产生单向链路故障,无法接收到由root发送的最优BPDU信息,SW2无法触发向下游交换机转发最优的BPDU,开始进入最优BPDU老化周期20s,同时由于SW2DP端口无法继续发送BPDU信息,Blocking端口无法继续接受到任何的BPDU信息,也开始等待20s老化时间;
2、SW2 20s老化时间结束,将从root接收的最优BPDU删除,认为自身为根桥,发送以自己为根的BPDU信息,同时SW3的 AP端口已经经过20s等待,进入Listening 状态;
3、SW3收到同时两个root信息,由 SW1通告的root具有最小桥ID,由SW2通告的root具有次优桥IDS,SW3进行对比,发现,最优的root为SW1,SW3将最优的根桥信息转发给SW2,并且产生TCN BPDU信息从RP端口持续转发,上游交换机收到TCN BPDU信息,会立即回应一个TCA BPDU,确认对方的TCN BPDU,通时阻止对法继续发送TCN BPDU,其他交换机继续向root,当root收到TCN BPDU,立即回应TCA,并且开始向网络中发送TC BPDU,网络中所有交换机收到TC BPDU后,将MAC地址表老化时间设定为15s(默认为300s) ,进行MAC地址的重新学习;
4、等待NDP端口迁移到Forwarding状态,网络即可正常进行数据转发;
拓扑收敛时间:
6.3.案例三,物理接口down
-
当运行稳定的STP网络中,SW2检测到自身参与STP计算的端口从Forwarding状态迁移到disable,SW2检测到自身端口状态发生改变,从可以转发端口不间断(2s/次)发送TCN BPDU,通告给其他交换机;
-
若其他交换机正常端口收到TCN BDPU,直接回应TCA BPDU以阻止TCN BPDU,且向上游的root方向转发TCN BPDU给其他交换机;若收到TCN BDPU消息由NDP端口收到,NDP端口立即从Blocking进入listening,并回复TCA BPDU 终止TCN BPDU的发送,并向上游的root方向转发;
-
Root收到TCN BPDU,立即回应TCA BPDU阻止对方继续发送TCN BPDU,然后root立即发送TC BPDU 通告网络中的所有交换机,网络拓扑发生变化,将MAC地址老化时间设定为15s(默认300s),让MAC地址15s后可以重新学习;
-
等待NDP端口迁移至转发状态,网络即可恢复正常的通讯;
拓扑收敛时间:
7.总结
生成树原理虽然多,但配置简单,可以说生成树算是交换内容里面比较难理解的,越难理解的技术越能拉开差距,希望大家好好研究,尽早成才。
-------------------------------------------
关注微信公众号从此学网络不迷路
funnetyoo