STP理论基础
目的
防止二层环路及防止环路造成的广播风暴以及引起的MAC表震荡
方法
首先,所有配置了STP的交换机互相向相邻交换器(配置了STP的)发送BPDU(协议数据单元),选举根桥(根交换机),根交换机上所有端口都为指定端口,指定端口的对端都为根端口,其他交换机相连链路,互相发送BPDU对比交换机优先级或背板MAC地址(越小越优先),优先级“好”的成为根端口或指定端口,“不好”的成为指定端口或阻塞端口。
BPDU(协议数据单元)
用于传递STP协议相关报文,分为两种:
1、配置BPDU,用于传递STP的配置信息
2、TCN BPFU,用于通告与拓扑变更信息
要求
在所有交换机中必须要有一台交换机作为根桥
每个非根桥都要有一个根端口
每个物理网段必须要有一个指定端口
其他不能成为根端口和指定端口的端口就是阻塞端口
选举规则
1、选举根桥:通过BPDU中的桥ID,BID标识交换机身份,在通过优先级+Mac地址(优先级默认32769,必须是4096的倍数)
2、选举根端口:在非根桥上,距离根桥最近的端口就是本交换设备的根端口,由于根桥上全是指定端口,所以和根桥相连的端口在“正常环境”都是根端口,但由于链路开销(带宽越大,开销越小)有可能不同,所以相连端口也有可能成为阻塞端口,具体为:
1、选择到达根桥开销小的优先
2、对端交换机PID小的优先(优先级+端口号)
3、端口ID小的优先
3、选举指定端口:由于一台交换机只能有一个根端口,所以其他端口不是指定端口就是阻塞端口,而指定端口的选举具体为:
1、选择到达根桥开销小的优先
2、交换机BID小的优先
3、端口ID小的优先
4、选举阻塞端口:当本交换机存在根端口,物理连接对端已经成为指定端口,
初始化流程
disable:禁用状态,端口被关闭。
blocking:阻塞状态,接收BPDU,但不发送BPDU,不学习MAC地址,不转发数据包。
listening:监听状态,接收并发送BPDU,不学习MAC地址,不转发数据包,当状态想要变化时,处于该状态15秒时转换到学习状态。选举端口角色的时候在这个状态。
learning:学习状态,接受并发送BPDU,学习MAC地址,不转发数据包,当状态想要变化时,处于该状态15秒时转换到转发状态。
forwarding:转发状态,接收并发送BPFU,学习MAC地址,转发数据包。
计时器
hello time:2秒,配置BPDU的发送周期。
Max age:20秒,10个hello time的时间,如果在这些时间内没有收到BPDU报文,则认为链路故障。
Forwarding delay:15秒,状态切换延迟,就是监听状态、学习状态、转发状态之间的切换。
链路故障
多数情况下不是物理层发生故障,物理层故障链路直接会直接down掉,交换机可以直接检测到链路变化,所以不需要等待一个max age。
而是协议层面或由于某种原因使交换机无法收到bpdu。
状态变化
当链路发生故障(到达Max age时)或有新的接口加入时(变为转发状态-个人认为有待研究),判断为拓扑发生了变化,需要向根桥发起TCN BPDU,其他交换机收到TCN BPDU时,继续向根交换机转发TCN BPDU,直到到达根桥为止,当根桥收到TCN BPDU后,向所有的端口发送一个TC置位的配置BPDU,这个BPDU会使收到该BPDU的报文将自己的Mac表清空(实际上是将Mac地址表的老化时间缩短为15秒,原本是300秒),也就是加快故障切换速度。
之所以要改变mac表原因是链路故障不一定是链路down掉,链路down时该条链路自动从mac表中消失,而由于各种原因收不到bpdu,这条链路依旧会存在于mac表中,所以需要重新清空学习。
STP的问题
收敛速度慢,故障切换时间太长,短则30秒(监听-学习-转发),长则50秒(max age-监听-学习-转发)。
网络中大量主机频繁上下线,会导致TCN BPDU大量发送。
断掉链路会浪费资源
RSTP
快速生成树协议
可以将故障恢复时间直接缩短到1秒左右
端口状态减少到3种
Discarding:将Disabled、Blocking、Listening结合为Discarding状态,不学习MAC地址,不转发数据包,肯定是接受但不发送BPDU。
Learning:学习状态,接受并发送BPDU,学习MAC地址,不转发数据包。
Forwarding:转发状态,接收并发送BPFU,学习MAC地址,转发数据包。
端口角色增加到4种(算上边缘端口其实有5种)
1、根端口和指定端口不变
2、闭塞端口非为两种:
1)Alternate,替代端口--根端口的备份,当根端口故障后,马上成为根端口,并进入转发状态。
2)Backup,备份端口--指定端口的备份,当指定端口故障后,会等待一段时间后成为指定端口。
边缘端口机制
当链路激活后,边缘接口直接进入转发状态,不参与STP计算
边缘端口的UP/DOWN不会触发拓扑变更
一般把连接PC的端口配置位边缘端口
同样浪费资源
MSTP
多生成树协议,我喜欢叫多实例生成树协议,方便学嘛
将多个vlan捆绑到一个生成树实例,每个实例分别独立计算生成树
基于STP计算结构不同,实现不同vlan的流量负载均衡
MSTP使用RSTP的三种端口状态,定义与RSTP中相同
端口角色有7种,不再这里介绍,其他机制不再这里介绍。
作者: 千纪
出处: https://www.cnblogs.com/diyudewudao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, https://www.cnblogs.com/diyudewudao/ 如有问题, 可邮件(diyudewudao@qq.com).
注:不要在意标题,在某些情况下名字都只是个代号不是。