STP知识点总结

STP(Spanning Tree Protocol) 一、STP概述 STP是一个用于局域网中消除环路的协议。
没有生成树协议会引起:1、广播风暴导致网络不可用;2、 MAC地址表震荡导致MAC地址表被破坏
生成树模型:1、单生成树实例模型;2、多生成树实例模型;3、基于VLAN生成树实例模型。
1、单实例模型:SST(Singles STP),交换机上所有vlan只能使用相同的一个拓扑,华为单实例模型只有STP和RSTP模式
2、多实例模型:MST(Multiple STP),可以自定义实例的数量,可手工指定哪些vlan使用哪些实例。华为默认生成树协议为MSTP。
3、基于vlan实例模型:VBST(vlan-based STP),每个vlan都拥有各自的生成树实例,实例与拓扑之间独立不相关。(此生成树只在特定交换机平台支持,不建议使用)
二、STP基本概念 概念:BID、端口ID、端口成本、端口角色、端口状态
2.1、网桥ID(Bridge ID)
理论上:由16位桥优先级和48位桥MAC地址构成。
实际上:高16位桥优先级中,仅高4位用于优先级,低12位用户扩展(systemID)。
STP中,BID最小值被选为根桥。
2.2、端口ID(Port ID)
PID可能影响指定端口的选举。PID最小值被选为指定端口。
理论上:Port ID长度为2字节,1字节为端口优先级,1字节为端口号
实际上:优先级仅占高4位,低12位为端口号
默认端口优先级为128,即1000,修改优先级可影响端口PID,进而影响指定端口的选举。
华为命令 stp port priority。
2.3、端口成本
每个端口都有端口成本
端口成本计算方法命令 :stp pathcost-standard{ dot1d-1998 | dot1t | legacy } 默认为dot1t
路径开销值命令 :stp cost
路径开销是生成树协议用于选择链路的参考值,端口成本值的取值范围由路径开销计算方法决定。
路径成本:当前交换机到根交换机的路径上所有RP端口的端口成本之和,最小值端口是RP端口

dot1d-1998 dot1t legacy
10M 100 2,000,000 200,000
100M 19 200,000 200
1000M 4 20,000 20
10G 2 2000 2
40G 1 500 1
10M 100M列出的数值为半双工端口成本,全双工减1。
2.4、端口角色
根端口/Root port
指定端口/Designated port
替代端口/Alternate port
备份端口/Backup port
BPDU包含:{根桥ID、到根桥的成本、邻居交换机BID(收时为邻居、发时为自己)、邻居交换机PID},最小值最优
注意:刚启动时交换机认为自己时根交换机,此时BPDU的根桥ID和邻居交换机BID都为自己的ID
(1)RP端口
最终状态:转发状态
交换机收到最优BPDU的端口为根端口,也是到根桥最近的端口。
1、非根交换机有且只有一个RP端口,根交换机没有RP端口
2、RP端口所在网段的上游对应端口一定是DP端口
3、交换机先确定RP端口,再确定其他角色端口
4、STP模式下,RP端口迁移到转发状态需等待2个forward-delay
(2)DP端口
最终状态:转发状态
网段内通告BPDU的端口为指定端口,拥有指定端口的交换机是该网段的指定交换机。
1、每个网段有且只有一个DP端口,
2、STP模式下,DP端口迁移到转发状态需等待2个forward-delay
(3)AP端口和BP端口
最终状态:丢弃状态
IEEE802.1D-1998中为BP端口(阻塞端口BlockingPort)
IEEE802.1D-2004和802.1w中,阻塞端口细分为AP端口和BP端口,华为不再有阻塞端口概念
AP端口是RP端口的备份端口
BP端口是DP端口的备份端口
在STP和RSTP模式下,AP、BP、RP端口靠持续接收BPDU来保持端口角色,如果收不到BPDU,端口会在超时后发生角色变化。
BP端口(Backup Port)是指当一个接口收到来自自身网桥另一个接口发送的更优BPDU,此端口选为备份端口。
2.5、端口状态
IEEE802.1D-1998标准中定义了5种端口状态Forwarding、 Learning、 Listening、 Blocking、 Disable
IEEEE802.1D-2004和802.1w标准中定义了3中端口状态Forwarding、 Learning、 Discarding
STP模式下,DP和RP在迁移到 forwarding状态过程中,先保持15s的discarding 状态,再保持15s的learning状态(IEEE802.1D-1998中先保持15s的listening状态,再保持15s的learning状态),AP和BP端口一直处于discarding状态。
端口状态 目的 说明
Forwarding 端口既转发用户流量,也处理BPDU报文 只有根端口或指定端口才能进入Forwarding状态
Learning 设备会根据收到的用户流量构建MAC地址表,但不转发用户流量 过渡状态,增加Learning状态防止临时环路
Listening 确定端口角色,将选举出的根桥、根端口和指定端口 过渡状态
Blocking 端口仅接收并处理BPDU,不转发用户流量 阻塞端口的最终状态
Disable 端口不处理BPDU报文,不转发用户流量 端口处在非操作状态
802.1d-1998 802.1d-2004、802.1w 是否参与生成树计算 是否学习MAC地址
Disable Discarding
Blocking Discarding
Listening Discarding
Learning Learning
Forwarding Forwarding
2.6、计时器
STP和RSTP 中用到了Hello、Forward Delay 和 Max Age 这3个计时器,它们会影响端口状态迁移和收敛时间,可在全局下修改
举例:
stp timer hello 30 (3秒)
stp timer forward-delay 2000 (20秒)
stp temer max-age 3000 (30秒)
默认为 2s 15s 20s
注意:调整计时器一定要在“根交换机”上配置,其他交换机使用根交换机的计时器工作,根交换机通过BPDU把时间通告到全网。
华为交换机STP/RSTP实现中,若收到次的BPDU,端口户立即处理并计算新的端口角色。若接收不到BPDU,端口角色也会在至少3个hello 间隔后重新计算,整个过程MAX Age不再参与。
三、STP报文类型 STP有2种报文结构:
一种是配置BPDU(Configuration BPDU)
一种是拓扑变化通知BPDU(TCN BPDU)
配置BPDU是一种心跳报文,只要端口使能STP,则配置BPDU会被周期通告,
TCN BPDU是在设备检测到网络拓扑发生变化时才发出。
3.1、802.3帧结构
BPDU报文被封装在802.3帧中,目的MAC是组播MAC:0180-C200-0000,Length/Type 字段为其后内容长度(不考虑CRC),后面是LLC头,LLC之后是BPDU报文头。
6Bytes 6Bytes 2Bytes 3Bytes 38-1492Bytes 4Bytes
DMAC SMAC Length LLC Data CRC
LLC由DSAP、 SSAP、 Control 组成,各占1Byte
3.2、配置BPDU
通常所说的BPDU报文多数指配置BPDU
在初始化过程中,每个根交换机都会主动发送配置BPDU。在网络拓扑稳定后,只有根桥主动发送配置BPDU,其他桥在收到上游传来的配置BPDU后,才转发自己的配置BPDU。配置BPDU的长度要35个Byte,包含了 桥ID、路径开销、端口ID等参数。只有当发送者的BID或端口的PID两个字段中至少有一个和本桥接收端口不同,BPDU报文才会被处理,否则丢弃,避免处理和本端口信息一致的BPDU报文。
配置BPDU会在以下3种情况下产生:
1、只要端口使能STP,配置BPDU就会按照Hello Time 定时器规定的时间间隔从指定端口发出。
2、当根端口收到配置BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份配置BPDU。
3、当指定端口收到比自己差的配置BPDU时,立刻触发向下游设备发送自己的BPDU。
配置BPDU报文基本格式
大小 字段
2Bytes Protocol Identifier
1Bytes Protocol Version Identifier
1Bytes BPDU Type
1Bytes Flage
8Bytes Root Identifier
4Bytes Root Path Cost
8Bytes Bridge Identifier
2Bytes Port Identifier
2Bytes Message Age
2Bytes Max Age
2Bytes Hello Time
2Bytes Forward Delay
5-8字段用于检测最优配置BPDU
配置BPDU的Flag位中,仅位7和位0有定义,其他未定义
Bit7 Bit0
TCA TC
TCA (Topology Change Acknowledgement flag)置位的配置BPDU用来确认收到TCN BPDU
TC(Topology Change flag)配置的BPDU用来通知交换机清空桥表
3.3、TCN BPDU
大小 字段
2Bytes Protocol Identifier
1Bytes Protocol Version Identifier
1Bytes BPDU Type(0x80)
TCN BPDU 是在下游拓扑发生变化时用来通知根交换机网络某处拓扑发生变化。仅用户通告变化,不含拓扑信息。
TCN 工作方式可靠,TCN BPDU会受到TCA置位的配置BPDU用作确认,否则一直发。
TCN BPDU在两种情况下产生
1、端口状态变为Forwarding状态,且该设备上至少有一个是指定端口。
2、指定端口收到TCN BPDU,复制TCN BPDU发往根桥
四、拓扑收敛计算 1、当交换机RP端口失效,交换机所有端口角色重新计算,并把自己当成根桥,端口初始化为DP/Discarding,开始通告自己的BPDU。
2、当交换机收到次的BPDU后,会比较端口缓存的BPDU:
若比缓存的BPDU好,则端口接收BPDU并重新计算端口角色;
若没有缓存的好,则忽略,端口角色不变,并等待Max-Age超时(默认20s);
3、若链路DP失效后,对端/本端交换机超过Max-Age仍未收到BPDU,则重新计算端口角色。
华为
1、在STP实现中,若交换机有AP端口,则RP端口失效时,最好的AP端口会立即成为RP端口,此时状态为Discarding,不需要重新计算角色,但状态迁移所需时间仍要等待2个forward-delay(30s)
2、交换机对于只存在RP端口,DP端口,无AP端口的交换机,当RP端口断开时交换机把自己当成根交换机并通告自己的BPDU,此时BPDU相对原根交换机为次的BPDU,从DP端口发出,对端若为AP端口则不等待端口缓存的最好BPDU超时,而是立即接收并重新计算端口角色,没有等待Max-Age超时,端口立即计算成为DP端口,但状态由Discarding迁移到Forwarding仍需等待30s。
3、在该网段DP端口失效后,会长时间收不到BPDU,交换机在收不到BPDU至少3个Hello间隔后,端口角色成为DP/Discarding,不再等待Max-Age超时。
华为超时时间计算公式:超时时间=Hello Time×3×Timer Factor
Timer Factor默认为3可设置1-10
五、拓扑变化通知 STP可以在拓扑变化时,通过算法快速计算出新的转发链路,但交换机桥表却没有这么快进行调整,旧MAC和端口指向关系会影响数据正常转发。所以需要拓扑变化通知机制去加快转发桥表更新,减少中断时间。
1、拓扑变化后,下游设备会不间断向上游设备发送TCN BPDU报文。TCN从RP端口发出,间隔2s,不受根交换机Hello间隔的影响。
2、上游设备收到下游设备发来的TCN BPDU后,只有指定端口处理TCN BPDU,其他端口有可能收到但不处理。
3、上游设备会把配置BPDU报文中的Flags的TCA位置1,然后发送给下游设备,充当收到TCN的确认,否则下游设备会一直发送TCN BPDU报文。
4、上游设备重复该过程,把TCN BPDU继续向其他RP端口发送,直到从上游收到TCA置位的配置BPDU.
5、TCN BPDU会一直向上发送,直到送至根桥。
6、根桥收到网络拓扑变化后,会把配置BPDU报文中的Flags的TC置位后发送,TC置位的配置BPDU会泛洪到全网,收到的华为交换机会直接删除桥MAC地址表项。
7、根桥持续发送TC置位的BPDU,时间为forward-delay+max-age,共35s。
华为STP拓扑通知机制区别于传统STP的拓扑变化行为:
1、华为的STP实现中,触发产生拓扑变化通知是当端口(非边缘端口)进入转发状态的时候,而端口down时并不触发拓扑变化通知。
2、当TC置位BPDU被交换机收到后,将交换机的桥表清空。这种方法能及时清除错误MAC表项,但会导致网络产生过多单播泛洪报文。
六、STP设计改进及不足 【STP知识点总结】STP收敛慢30-50秒
华为对STP的优化:
1、使用新端口角色及状态;
2、RP失效,AP立即成为新RP;
3、接收次的BPDU,端口不需要等待max-age,就立即计算端口角色;
4、若收不到BPDU,不再使用max-age来判定链路失效,3个hello间隔后重新收敛,检测网络故障时间变短。
STP不足:
1、STP算法为被动算法,状态迁移依赖定时器,最短需要30s;
2、若拓扑变化频繁,反复清空桥表,会导致过量单播报文泛洪。

    推荐阅读