STP---生成树协议
(注意,OSPF与其有许多相似的地方,OSPF在许多方面都有去借鉴STP)
首先是在建设企业网络时会产生的冗余:
1.设备冗余
2.线路冗余
3.UPS冗余(不间断电源)
4.网关冗余
在来学习STP生成树协议之前,我们来想一想
在二层环路中产生的问题:
1.广播风暴===广播帧在二层环路中会形成一个顺时针和逆时针的环路,并且会无线循环下去,最终导致宕机
2.MAC地址表翻摆(飘移)===因为数据帧环路的存在,交换机的MAC地址表中会不断更新MAC地址的接口对应关系
3.多帧复制===重复收到相同的数据帧
最短路径生成树
最短路径生成树===在二层交换网络中,逻辑上堵塞部分接口,实现从根交换机到所有节点的最短路径的拓扑结构,生成一个没有环路的拓扑,当其中最佳的路径出现故障时,刚将个别堵塞的接口打开,实现链路资源的备份。
简单介绍一些关于STP的一些版本
STP===802.1D
PVST、PVST+====恩科私有生成树协议
802.1W===RSTP===快速生成树协议
802.1S===MSTP===多生成树协议
BPDU(Bridge Protocol Data Unit,桥协议数据单元)是生成树协议(STP)中用于交换机之间传输信息的数据单元。它的主要作用是帮助构建无环的网络拓扑,确保在物理上存在环路的网络中不会出现广播风暴或MAC地址表震荡等问题。
BPDU的主要功能
选举根桥:通过BPDU中的信息(如桥ID、根路径开销等),选举出网络中的根桥。
确定端口角色:帮助确定每个网段的指定桥和根端口,确保网络中只有一条路径到达根桥。
维护网络拓扑:定期发送BPDU来维护网络的生成树结构,确保网络拓扑的稳定。
通知拓扑变化:当网络拓扑发生变化时,通过TCN BPDU(拓扑变化通知BPDU)通知其他交换机
在STP中,BPDU分为两种,一种是配置BPDU,另外一种是TCN BPDU
在这个表中,我们首先来确认几个比较重要的部分:
根网桥ID 根路径开销 网桥ID 接口ID
这四部分是我们需要多去理解记忆的重要部分
消息寿命也类似于TTL
最后的三部分内容也是保活的重要配置
根网桥ID(root Identifier)===在这个生成树中,作为根的交换机的身份ID===802.1D中,一个交换机网络中只有一棵树
网桥ID===BID===每一台交换机的身份标识===8位字节数构成
前2个字节===优先级(数值越小的,优先充当RB即根网桥)
后6个字节===MAC地址(数值越小的,优先充当RB)
因为需要支持生成树协议,所以交换机至少拥有一个MAC地址,则可以使用这个MAC地址,但是如果三层交换机,可能拥有多个MAC地址,则会选择其中数值最小的作为BID中的MAC地址。
根路径开销===RPC===发出该BPDU的设备到达根网桥的开销
接口ID===2字节===用来区分和标识交换机不同的接口,发出该BPDU设备接口
前4位===优先级===取值范围理论上是0-65535,实际上为0-61440,默认32768,优先级只能使用前四位,后12位为拓展系统ID,只有在802.1S中启用===优先级修改需要按照4096的倍数来修改。
后12位===接口的标识
以上的参数会参与到生成树的角色选举
接下来,我们来具体学习配置BPDU和TCN BPDU
配置BPDU:
配置BPDU(Configuration BPDU)是生成树协议(STP)中用于进行生成树计算和维护生成树拓扑的报文。
配置BPDU的作用
选举根桥:通过配置BPDU中的根桥ID(由根桥的优先级和MAC地址组成)来确定网络中的根桥。
确定端口角色:根据配置BPDU中的信息(如根路径开销、指定桥ID、指定端口ID等)来确定端口的角色(根端口、指定端口、阻塞端口等),从而构建生成树。
维护生成树拓扑:定期发送配置BPDU以维护生成树的拓扑结构,确保网络的稳定运行。
只有根网桥可以发送,在一开始,交换网络的初始阶段,所有设备都认为字节是根网桥,则都会从自己所激活STP协议的接口发出配置BPDU,基于收到BPDU进行角色选举,选出真正的根,之后所有的非根网桥不再主动发送配置BPDU,仅转发根网桥的配置BPDU,根网桥会每隔2秒周期发送,此外还有20s老化时间
根路径开销在转发时,计算方法是将接收到的BPDU中的RPC加上接口的开销值,可以通过以下的图表来的熟悉一下这个流程。
在这个表中,MAC地址的老化时间有360S缩小到15S,也就是我们所说的转发延迟同步。,表中的TCA和TC是配置BPDU
TCN BPDU:
TCN BPDU(Topology Change Notification BPDU)是生成树协议(STP)中的一种特殊报文,用于在网络拓扑发生变化时通知相关设备。以下是关于TCN BPDU的详细介绍:
定义
TCN BPDU是拓扑变化通知BPDU,当网络中的交换机检测到拓扑结构发生变化时,会生成并发送TCN BPDU。它是一种非常简单的BPDU,内容仅包含协议号、版本和类型字段,类型字段固定为0x80,长度为4个字节。
作用
TCN BPDU的主要作用是将拓扑变化的信息从下游设备逐级上报到根桥。根桥收到TCN BPDU后,会通过配置BPDU将拓扑变化信息广播到整个网络,以便所有交换机能够重新计算生成树并更新MAC地址表。
触发条件
TCN BPDU在以下两种情况下产生:
端口状态变为Forwarding状态。
指定端口收到TCN BPDU,复制TCN BPDU并发往根桥。
传播过程
当非根桥检测到拓扑变化后,会生成TCN BPDU,并从自己的根端口发送出去。
沿途收到TCN BPDU的交换机会向下游回应TCA(拓扑变更确认)标记位置1的配置BPDU,以阻止下端持续发送TCN BPDU,同时从自身根端口向上游转发TCN BPDU。
最终,TCN BPDU会逐级上报到根桥。
与配置BPDU的关系
配置BPDU用于生成树的计算和维护,而TCN BPDU用于通知拓扑变化。
根桥收到TCN BPDU后,会在配置BPDU中设置TC(拓扑变更)标志位,将拓扑变化信息广播到整个网络。
STP的选举规则
根端口===RP
所有非根网桥有且仅有一个距离根网桥最近的端口,用来接受根网桥的BPDU
1.选择在接受根网桥BPDU是RPC最小的端口作为根端口
2.如果多个接口到达根网桥的开销值相同,则比较接口对端设备的BID,优先选择BID小的设备所对应的接口为根端口
3.如果对端的BID也相同,则比较对端的PID,优先选择PID小的接口为根端口
PID===2字节===前四位优先级,后12位为接口标识
先比较优先级,优先选择数值小的,默认128,每一位代表16,修改优先级也需要按照16的倍数修改,如果优先级相同,则比较接口标识
4.对端的PID也相同,则比较本地接口的PID,选择PID小的为根端口。
指定端口===DP
每一个链路上有且仅有一个端口为指定端口,用来发送或转发根网桥的BPDU,根网桥所有的根网桥所有的接口都是指定端口,根端口的对端一定是指定端口
1.优先选择发出根网桥BPDU时,RPC最小的端口作为指定端口
2.如果发出的开销值相同,则比较接口链接设备的BID,优先选择BID小的设备接口作为指定端口
3.如果本端的BID也相同,则比较接口的PID,优先选择PID小的作为指定端口
4.如果本端的PID也相同,则直接阻塞
非指定端口==NDP
此时在这个网络中,没有被赋予角色身份的端口就被叫做非指定端口。接下来发送几个图片来作为练习,找出图中网络的根端口,指定端口,非指定端口以及最短路径生成树。
大家可以尝试练习一下。
通过我们在上面的学习过程中,我们也发现接口也存在好几种状态,那我们接下来就继续学习
接口的状态
1.禁用
- 接口关闭
- 接口没有激活生成树
2.阻塞
接口激活生成树后第一个进入的状态,只能侦听BPDU,不能发送BPDU,不能发送BPDU也不能处理业务数据帧。
在设备20s没有侦听到BPDU,则认为根网桥不存在或者失败,则进入下一个状态。
3.侦听----(角色选举过程)
可以接受和发送BPDU,但是不能处理数据帧,15s后(转发延迟时间)将进入下一个状态,部分接口将会被阻塞,将会回退阻塞状态
为什么设置15s这么长的时间呢?
其主要目的是为了防止部分角色也没有选出来
4.学习
开始接收业务数据帧,但是只记录MAC地址和接口的信息,并不去转发业务数据帧,停留时间15s
15s目的:尽可能多的去记录MAC地址信息,以减少未知单播帧的泛洪
5.转发
可以进行BPDU的处理,也可以转发业务数据帧
最终可能提留的状态:转发和阻塞
侦听和学习是两个过渡状态,首次收敛-----50s
如果结构发生了突变,那么重新收敛需要多久呢?
结构突变
- 根网桥故障====50s
- 直连网桥故障====30s
- 非直连链路故障====50s
大家可以根据以上的状态来推测这个重新收敛的时间是怎么得出的。