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都拥有各自的生成树实例,实例与拓扑之间独立不相关。(此生成树只在特定交换机平台支持,不建议使用)
概念: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有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收敛慢30-50秒
华为对STP的优化:
1、使用新端口角色及状态;
2、RP失效,AP立即成为新RP;
3、接收次的BPDU,端口不需要等待max-age,就立即计算端口角色;
4、若收不到BPDU,不再使用max-age来判定链路失效,3个hello间隔后重新收敛,检测网络故障时间变短。
STP不足:
1、STP算法为被动算法,状态迁移依赖定时器,最短需要30s;
2、若拓扑变化频繁,反复清空桥表,会导致过量单播报文泛洪。