STP用于局域网中消除环路的协议。用来解决
广播风暴导致网络不可用
MAC地址表震荡导致mac地址表项被破坏
IEEE802.1d和802.1w是目前使用的两种生成树的算法,主要区别是计算无环的树所花的时间不同。STP使用802.1d算法,而RSTP和MSTP使用802.1w算法。
BID(bridge ID)
IEEE802.1d中中规定BID是16位的桥优先级(bridge priority)与桥mac地址构成。高16位优先级中,低12位定义位扩展的systemID,在stp和RSTP中取0.
stp中桥ID最小的设备会被选举为根桥
端口ID
PID小的会被选举为指定端口。
PID:端口ID是2字节,端口优先级占1字节,端口号占1字节。配置时端口优先级仅配置高4位,后12位当成端口号(系统给,不可调),默认128
端口优先级的改变时,生成树协议会重新计算端口的角色并进行状态迁移。
端口优先级可以影响端口在指定生成树实例和进程中的角色。用户可以在不同生成树实例或进程中对同一端口配置不同的优先级,从而使不同的用户流量沿不同的物理链路转发,完成流量的负载分担。
端口成本
每个交换机的端口都有自己的端口成本,华为定义了3种端口成本的计算方法,默认是IEEE 802.1t
三种标准中,legacy是华为自己设计的计算方法,三种方法的默认成本值见表9-1;
若需要为不同的端口配置路径开销值,可单独执行命令stp cost;
建议同一网络内所有交换设备的端口路径开销应使用相同的路径开销计算方法。
端口角色
分为根端口、指定端口、替代端口和备份端口。
根端口:
非根交换机有且只有一个RP端口,根交换机没有RP端口
RP端口所在网段的上游对应端口一定是DP端口
根端口确定出现后,其最终的状态是转发状态,如果是STP模式,端口迁移到转发状态需等待2个Forward-Delay
指定端口:
每个网段有且只有一个DP端口,负责转发滴哦根桥的流量
DP端口的最终状态是转发状态,如果是STP模式需要等待2个forward-delay
AP端口和BP端口
AP端口是当前交换机到根交换机的次优路径,是交换机RP端口的备份端口,如果交换机有多个AP,则当RP端口失效时,最优的AP端口会立即成为RP端口。
BP端口是指当一个接口从网桥自身的另一个接口接收到自己产生的更优的BPDU时,此端口称为备份端口BP,备份端口是指定端口(DP)的备份,备份端口会一直处于discarding(丢弃)状态,直至DP端口失效。
BP端口、AP端口及RP端口都是接收BPDU的端口,AP端口是处在非指定交换机上的阻塞端口,同时,AP端口也是自身RP端口的备份。而BP端口则是出现在指定交换机上的阻塞端口,同时也是相同网段上DP端口的备份,即DP端口失效后,BP端口会成为新的DP端口。
计算过程会依次比较BPDU中拓扑信息,如BID、PathCost、指定桥ID及PortlD,数值越小越好。如果交换机的多个端口收到的BPDU一样,则根据接收端口的PortlD来决定最好的端口。
华为交换机在任何一种生成树模式下,端口状态都只有forwarding、learning、disable三种状态
在STP模式下,DP和RP端口最终的状态是Forwarding状态,其迁移过程是先保持15s的discarding状态,然后保持15s的learning状态(IEEE802.1D-1998中定义是15s的Listening,15s的Learning),RSTP模式下会快速进入转发状态,这是STP和RSTP的主要区别。
计时器
调整计时器一定要在“根交换机”上配置。根交换机会通过BPDU通过给全网
HelloTime
根交换机产生的BPDU的通告时间间隔,用于充当设备间检测链路的keepalive
STP模式下,TCN BPDU的发送不受这个计时器的管理,间隔时间一直是2s
Forward Delay
设备状态迁移的延迟时间。链路故障会引发网络重新进行生成树的计算。此时若立即将选出的根端口和指定端口置于数据转发的状态,可能会出现临时环路。所以STP使用一种状态迁移机制,要求新选出的根端口和指定端口要经过2倍的Forward Delay后,才能进入转发状态。
Forward Delay计时器是指一个端口迁移到转发状态前处于discarding和learning状态的各自持续时间,默认是15s,即discarding状态持续15s,随后learning状态再持续15s。
Max Age
BDPU的最大老化时间就是Max Age,默认时间是20s。
运行STP协议的网络种非根桥设备收到配置BPDU报文后,报文种的Message Age和Max Age会进行比较。
如果Message Age小于等于Max Age则该非根桥设备继续转发配置BPDU报文。
如果 Message Age大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败。
华为交换机不再使用MaxAge来决定端口角色变化需等待的超时时间。目前,华为交换机STP/RSTP实现中,若收到次的BPDU,端口会立即处理并计算新的端口角色。若接收不到BPDU,端口角色也会在至少3个Hello间隔后重新计算,整个过程Max Age不再参与。
STP报文类型
STP有两种报文结构,一种是配置BPDU(configuration BPDU),另一种拓扑变化通知BPDU(TCN BPDU)
配置BPDU从根交换机流出,下游交换机收到并转发,配置BPDU是一种心跳报文,只要端口使能STP。则配置BPDU会被周期通告,这份BPDU记录最好根桥的信息,并通告给全网。TCN BPDU是在设备检测到网络拓扑发生变化时才发出的。
配置BPDU:开始时都会发送BPDU,但在网络稳定后只有根桥主动发送,其他收到后才触发转发自己的配置BPDU。包含了桥ID、路径开销和端口ID等参数。只有当发送者BID或端口的PID两个字段至少有一个和本桥接收端口不同,BPDU才会被处理。
配置 BPDU在以下3种情况下会产生。
只要端口使能STP,配置 BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
当根端口收到配置 BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份配置 BPDU。
当指定端口收到比自己差的配置 BPDU时,立刻触发向下游设备发送自己的BPDU。(此机制可加速一个网段有次优设备接入时,加速其计算端口角色的过程)
配置BPDU的Flag位中,只有7和0有定义。TAC置位用来确认收到TCN BPDU,TC置为通知交换机清空桥表
TCN BPDU:再下游拓补发生变化时用来通知根交换机网络某处拓补发生变化。TCN仅用来通告拓扑的一种BPDU,不含有拓补信息。
TCN是可靠的,收到TCA置位的配置BPDU用作确认,否则TCN会一直发送。
TCN BPDU两种情况下的产生
端口状态变为forwarding状态,且设备上至少有一个指定端口
指定端口收到TCN BPDU,复制TCN BPDU并发往根桥
Timer factor默认值为3 超时时间默认为18s
华为交换机在STP下,若端口收不到BPDU时,等待至少3个 Hello间隔时间,端口角色重新计算,不再等待MaxAge,可降低网络重新收敛所需要的时间。
根桥持续发送TC置位的 BPDU,时间为Forward-Delay + MaxAge,共35s。
TCN BPDU报文主要用来向上游设备乃至根桥通知拓扑变化。
置位的TCA标记的配置BPDU报文主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送 TCN BPDU报文。
置位的TC标记的配置BPDU报文主要是上游设备用来告知下游设备拓扑发生变化,以使下游设备删除桥MAC地址表项,从而降低数据通信中断时间。
STP的不足之处
STP算法是被动算法,状态的迁移依赖于定时器,所以再拓补变化所需的时间最短仍是30s,这个时间一直存在,无法从根本改进STP
若拓扑变化频繁,反复清空桥表,会导致网络过量的单播报文的泛洪,加重网络负荷。