生成树STP
STP的基本概念以及工作原理
在二层交换机相连中,我们往往会为了防止单个路由坏掉导致网络中断,在旁边引入一个新的交换机相连,但是如此一来这三个交换机就形成一个回环了,回环的交换机会导致广播报文不停的循环(有可能),就像一条咬住自己尾巴的蛇,徒劳的耗尽通信资源,为了避免这种情况,引入STP,STP会断开某个链路,使其不再回环,最后就像数据结构里的某棵树一样,所以叫做生成树。STP会根据开销和优先级等等来规划。不得不说这真是非常复杂麻烦和琐碎的东西
STP的几个概念,桥ID:由IEEE 802.1D标准中规定桥ID(Bridge ID,BID,桥也就是交换机),由16位的桥优先级与桥MAC地址构成
每一台运行STP的交换机都有一个唯一的id,在STP网络中,BID最小的设备会被选为根桥。
优先级占据高16bits,剩余的低48位由MAC地址组成,诸如4096.4c1f-aabc-102a,虽然我很不理解为什么都是4096
根桥(Root Bridge),充当这个树的根,作为拓扑计算的参考点。根桥的选举过程中,首先比较优先级,优先级的值越小,则越优先,越优先级相等,MAC地址小的交换机会成为根。
开销(cost),每一个激活了STP的接口都维护着一个cost值,用于计算到根的路径,可以手动设置,缺省的cost则由速率,工作模式以及交换机所使用的计算方法决定,一般来说,带宽越大,则开销越小。我觉得这个说接口真是糖丸了,不如说是链路
根路径开销:RPC ,root path cost,也就是设备从某接口到根桥的cost累加
接口ID 运行STP的交换机使用接口id(port id,pid)来标识每个接口,高4bit是接口优先级,低12bit是接口编号,优先级可由用户手动更改
BPDU(Bridge Protocol Data Unit,网桥协议数据单元),BPDU是STP能够正常工作的根本,BPDU是STP的协议报文。嗯,类比下的话,就像ospf的协议报文?这些报文会携带一些信息,比如自己的桥id,根桥的桥id,开销等。分为两种类型,配置BPDU,TCN BPDU。配置BPDU是STP进行拓扑计算的关键;TCN BPDU用于网络拓扑发生变更的状况,多了两位,TC和TCA

大概的工作顺序就是大家先互发BPDU报文,一开始都默认自己是根桥,然后逐项对比id,选出一个根桥。
选出根桥后,每一台不是根桥的交换机会在自己的接口中选举出一个根接口(一般的,是和根相连的接口,通俗的说是离根最优的接口),形象的理解就是朝向根的接口,在根据上述所提到的一些原则,离开销最小,接口的优先级较高,会开始计算生成树。
生成树的计算需要时间,报文的传送也可能会出现一些临时的回环,所以引入STP的接口状态来决定何时能正常通信

这个很麻烦的我感觉。。。禁用状态相当于滚木,被阻塞的情况下也是滚木。当初步认定为指定接口后,进入侦听状态,但是不会学习MAC地址,也不会发业务数据。在15s的时间后,如果确认是指定接口,就进入学习状态,再过15s时间,可以正常转发,就进入我们所熟悉的网路环境啦(可喜可贺!)

接下来有几种典型的故障状态:

前面的报文中有一个MAX AGE的值,BPDU 中包含 Max Age,交换机会周期性发送 BPDU,使其他交换机不断更新所保存的生成树信息;如果一段时间内没有收到更新的 BPDU,旧的 BPDU 信息超过 Max Age 后就会被认为失效,交换机据此认为原来的拓扑信息可能已经失效,并重新计算生成树。
如这里,SW2会意识到上游故障了,于是非根桥会互相发送BPDU,重新选出根桥,最后经过两个Forward Delay,重新恢复正常,MAX AGE的20s计时加上这30s延迟,大概需要50s左右恢复时间

直接检测到链路故障,会转换到备用端口,大概30s时间恢复

此处的SW2和SW1并不直链,中间经过其他网络,但接口依旧正常,当出现故障后,和第一种情况类似,也是MAX AGE,接受不到报文,于是开始重新进行报文交流,也是大概50s恢复

当连通重新恢复后,拓扑会发生改变,由于拓扑变了,原本使用的端口也不一样,MAC表也会发生变化。要修正这个错误的MAC地址,原本MAC地址的老化时间是300s,过于漫长,于是发送TCN BPDU报文,告诉大家拓扑变更,就很自然的会改变加速MAC老化,时间为15s