STP协议
一、STP(生成树 协议)简介
1.1 STP(生成树 协议)使用场景
STP(Spanning Tree Protocol IEEE 802.1D)是用来消除以太网二层环路的关键协议,通过逻辑阻塞冗余的链路构建无环路的树状拓扑,同时提供链路的备份。
二、STP(生成树协议)结构
2.1 STP帧格式
二层通过IEEE 802.3 LLC以太帧进行封装的关于目的组播01:80:c2:00:00:00,配置了生成树协议的交换机都会接受并处理。STP帧格式也是一种慢协议帧封装,仅转发至参与生成树计算的端口,非STP端口丢弃。
2.1.1 配置BPDU(Configuration BPDU)帧格式
用来进行生成树计算和维护生成树拓扑的报文。
字段 长度 说明 Protocol Identifier 2字节 协议ID=“0”。 Protocol Version Identifier 1字节 协议版本标识符,STP为0x00,RSTP为0x02,MSTP为0x03。 BPDU Type 1字节 BPDU类型:
0x00:STP的Configuration BPDU
0x80:STP的TCN BPDU(Topology Change Notification BPDU)
0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU)Flags 1字节 标记域。对于STP:第一个bit(左边、高位bit)表示“TCA(拓扑改变响应)”,最后一个bit(右边、低位bit)表示“TC(拓扑改变)”,其他字段预留。
对于RSTP和MSTP:Bit7:TCA (Topology Change Acknowledgement)
Bit6:Agreement
Bit5:Forwarding
Bit4:Learning
Bit3和Bit2:端口角色00:未知01(低位为1高位为0):Alternate / Backup10(低位为0高位为1):根端口11:指定端口
Bit1:Proposal
Bit0:TC (Topology Change)选路原则 Root Identifier(RID) 8字节 网桥ID都是8个字节
Priority 2字节 默认32768
Mac地址 6字节Root Path Cost(RPC) 4字节 根路径开销,本端口累计到根桥的开销。 Bridge Identifier (BID) 8字节 发送者BID,本交换机的Bridge ID。 Port Identifier(PID) 2字节 发送端口PID,发送该BPDU的端口ID。 时间参数 Message Age 2字节 该BPDU的消息年龄,以秒为单位。 Max Age 2字节 消息老化年龄,以秒为单位,超时则认为到根交换机的链路故障。 Hello Time 2字节 发送两个相邻BPDU间的时间间隔,以秒为单位。 Forward Delay 2字节 控制Listening和Learning状态的持续时间,以秒为单位。
2.1.2 TCN BPDU(Topology Change Notification BPDU)帧格式
TCN BPDU的结构与配置BPDU基本相同,但Payload部分只有Protocol Identifier(协议号)、Protocol Version Identifier(协议版本)和BPDU Type(BPDU类型)。类型字段是固定值0x80,长度只有4个字节。
三、STP(生成树协议)机制
3.1 STP的端口角色和端口状态
端口状态 说明 Disabled 端口状态为Down,不处理BPDU报文,也不转发用户流量。 Listening 过渡状态,开始生成树计算,端口可以接收和发送BPDU,但不转发用户流量。 Learning 过渡状态,建立无环的MAC地址转发表,不转发用户流量。 Forwarding 端口可以接收和发送BPDU,也转发用户流量。只有根端口或指定端口才能进入Forwarding状态。 Blocking 端口仅仅接收并处理BPDU,不转发用户流量。
3.2 STP的设备角色
角色类型 角色名称 描述 根交换机 Root Bridge 全网的逻辑中心,所有其他交换机以此为中心构建无环树状拓扑 非根交换机 Non-Root Bridge 网络中除根桥外的其他交换机,需通过路径计算确定端口角色
3.3 STP的状态机
- 端口Up或使能了STP,会从Disabled状态进入到Blocking状态。
- 端口被选举为根端口或指定端口,会进入Listening状态。
- 端口的Forward Delay定时器超时,会进入Learning/Forwarding状态。
- 端口不再是根端口或指定端口时,会进入Blocking状态。(如果指定端口接收到BPDU,则会进行重新选举)
- 端口Down或者去使能STP时,就进入Disabled状态。
3.4 STP的选举流程
3.4.1 最优BPDU的选举
优先级顺序 比较项 描述 示例说明 1 Root Bridge ID 全网选举最小的桥ID(优先级+MAC地址)作为根桥 优先级4096+MAC 00:11:22的交换机优于优先级8192 2 Root Path Cost 到根桥的累计路径成本小优先 100M链路的Cost=19,1G链路Cost=4 3 Bridge ID 当路径成本相同时,发送方桥ID较小优先 比较路径上游交换机的BID 4 Port ID 当桥ID相同时,选择发送端口ID较小(优先级128+接口号) Port ID 128.10 < 128.20 5 Local Port ID 最后比较本地接收端口的ID(仅当所有上游参数相同) 本地Gi0/1优先于Gi0/2
3.4.2 端口角色选举
角色类型 端口角色 描述 数据帧处理 BPDU处理 通信方向 指定端口 Designated Port (DP) 每个网段上离根桥最近的端口,负责转发流量 发送和接收数据 发送 BPDU DP ⟶ 其他端口 根端口 Root Port (RP) 非根交换机上到根桥的最优路径端口 发送和接收数据 接收 BPDU RP ⟵ DP(来自根桥方向) 阻塞端口 Blocking Port 冗余路径中被逻辑阻塞的端口 不转发数据 仅接收 BPDU 监听状态,不参与数据转发 stp=>operation: 1.存储最优BPDU compare=>operation: 2.计算此链路的bpdu,要累加入向cost,与其他端口进行比较 forward=>operation: 3.把最优bpdu向其他接口转发,改变BID和PID end=>end: 完成拓扑收敛 stp->compare->forward->end
3.5 STP的选举流程
所有的端口都处于Listening状态
选举演示我学习过两种,这两种分别是先抉择出RP,还是先抉择出DP,文档参考是RP,但是先抉择DP更好理解。
3.5.1 DP先抉择
本地抉择RP端口,线路抉择DP端口
第一步 各自发送BPDU,都认为自己是根桥
第二步 失败者保存BPDU, 成功者成为DP,双DP的设备LSW3成为Root交换机(一条链路的竞争选举一个DP)
第三步 自己的端口修改保存的BPDU,加入自身入口Cost竞争成为RP,失败的保存。(RP是接受到BPDU最好的接口,本地竞争)
[!WARNING]
一个设备上已经成为的DP的接口没意义竞争RP接口,在比较原则下DP接口的Cost值永远会最大。可以说一端是DP,另一端自动为RP。
第四步 初始化结束,比较Cost的值 Cost的值会影响RP的选择
[!CAUTION]
LSW1的G0/0/10的接口保存了G0/0/5接口的信息,如果G0/0/5接口的Cost大于G0/0/10,会发生下述情况
根据LSW2发送得BPDU和LSW1的BPDU作出比较。
3.5.2 RP先抉择
第一步 各自发送BPDU,都认为自己是根桥
第二步 各自发送BPDU,都认为自己是根桥
第三步 本地抉择根端口
第四步 配置DP端口数据
第五步 配置DP端口数据,进行阻塞
3.6 STP计时器
Hello Time
运行STP协议的设备发送配置BPDU的时间间隔。计时器的修改只有在根桥修改后才有效。
Forward Delay
设备状态迁移的延迟时间。新选出的根端口和指定端口要经过2倍的Forward Delay延时后才能进入转发状态,Forward Delay Timer指一个端口处于Listening和Learning状态的各自持续时间,默认是15秒。即Listening状态持续15秒,随后Learning状态再持续15秒。防止Mac地址表漂移。
Max Age
端口的BPDU报文老化时间,可在根桥上通过命令人为改动老化时间。 Hello间隔时间 2s * 3 + 层数(默认7) * 2s (每层2s)。
3.7 STP-TCM
3.7.1 产生原因
当拓扑变更时,Mac地址表没有同步,导致流量转发发生问题,所以需要清理MAC地址,重新收敛整个网络。
TCM:Topology Change Mechanism 拓扑变更机制。
3.7.2 触发原因
端口从非转发到转发、从转发到非转发(端口的UP 或 Down )触发向RP发送TCN bpud,发给上游交换机。
3.7.3 触发流程
当T节点发生故障时,这台交换机的RP端口会向上发TCN BPDU报文。
上游设备收到后会发送配置 BPDU报文,将FLAG中的TCA设置为1,通过DP端口告知下游设备停止发送TCN BPDU报文(注意Flags位,STP与RSTP和MSTP相反)
[!CAUTION]
我觉得可能是Ensp的实现有问题,注意前文的报文格式的STP的Flags位、与RSTP和MSTP的位是相反的。但是Ensp的实现的具体功能上是用用RSTP/MSTP的报文做的STP。Wireshark的Flags解析没问题。
继续向上游通告,根收到后会发送TCA和TC置位的报文,来告知下游删除MAC地址表项,完成快速收敛
根桥发送的TC位置1是为了通知下游设备直接删除MAC地址表项,TCA位置1是为了通知下游设备停止发送TCN BPDU报文。
四、STP(生成树协议)经典故障
4.1 根桥故障
当根桥故障时,SW2和SW3都没有办法收到根桥发送的BPDU。等待Max_Age的20秒之后,SW2和SW3重新选举根桥。在新的根桥选举之后,交换机端口从Blocking状态到Forwarding状态,需要再等待两个Forward Delay时间,也就是30秒。因此,根桥故障,需要20秒+30秒共计50秒的时间才能恢复网络。
4.2 直连故障
如图所示,SW1和SW3之间链路发生故障。阻塞端口在SW3上,当SW3和根桥SW1之间的链路故障时,对于SW3而言属于直连链路故障。(对于阻塞端口而言的故障)
SW3可以立刻检测到链路故障,并且SW3可以从SW2收到BPDU,因此无需等待Max_Age,直接将阻塞端口切换成转发端口。端口状态从Blocking到Forwarding,共计两个Forward Delay时间,共计30秒。
4.3 非直连故障
如图所示,SW1和SW2之间链路发生故障。阻塞端口在SW3上。对于SW3而言,属于非直连链路故障。(对于阻塞端口而言的故障)
SW2会发送次级BPDU,成为伪ROOT,思科的SW3会等待次级BPDU的一个老化时间,将Blocked接口转换为Listerning状态,发送自己保存的BPDU,告知SW2,当前网络中根桥是SW1。并继续等待两个Forward Delay时间之后,将G0/0/2的状态转换为Forwarding状态。同时SW2的G0/0/2接口变为根端口。因此,非直连链路故障,共计需要50秒的时间恢复网络。
华为交换机则收到次级BPDU,直接告知,只要30s。(不等待一个老化时间)
五、STP(生成树协议)经典配置
5.1 汇聚与接入
SW1: stp root primary --- 主根 priority=0 SW2: Stp root secondary----备份根 priority=4096
5.2 选择链路
[!TIP]
想将G0/0/1口切换到G0/0/2口
5.2.1 修改Cost值
# cost值是入向增加,在非DP端口修改才有意义 [Huawei-GigabitEthernet0/0/1]stp cost ? INTEGER<1-200000000> Port path cost
5.2.2 修改端口优先级
# 在DP端口上修改值才能影响其他端口的本地选举 [Huawei-GigabitEthernet0/0/1]stp port priority ? INTEGER<0-240> Port priority, in steps of 16
























浙公网安备 33010602011771号