为什么需要STP?
为了提高网络可靠性,交换网络中通常使用冗余链路。但是冗余链路会给交换网络带来环路风险,并导致广播风暴以及多帧复制,MAC地址不稳定等问题,STP生成树协议可以在提高可靠性的通知又能避免环路带来的各种问题。
STP一般厂商都默认开启,但因为STP收敛慢,无法做负载均衡,所以一般上使用堆叠将多台设备组合成理论上一台设备和链路聚合做到单点链路,避免环路问题。


STP的选举机制 流程
- 选择根网桥
- 在所有交换机中选举出一台作为根网桥(root bridge);
- 选举规则:
- Bridge-ID小的优先。Bridge-ID(桥ID,BID),用来标识交换机身份。格式:优先级+mac地址,优先级默认是32768,4096倍数。比如:32768.aabb-ccdd-eeff
- Bridge-ID小的优先。Bridge-ID(桥ID,BID),用来标识交换机身份。格式:优先级+mac地址,优先级默认是32768,4096倍数。比如:32768.aabb-ccdd-eeff
- 选举规则:
- 在所有交换机中选举出一台作为根网桥(root bridge);
- 选择根端口
- 每台非根网桥(交换机)选举出一个根端口(root port);
- 选举规则:
- 到达根网桥开销小的优先;
- 对端交换机BID小的优先;端口ID小的优先。 开销(cost),代表路径耗费的代价和成本,带宽越大,开销越小。
- 在非根桥上选举出离根桥最近的根端口,看去根桥的cost开销,越小越优先,先比开销如果开销一样,比对端BID(也就是交换机ID),再比对端最后本端PID(也就是接口ID)同样越小越优先。
- 选举规则:
- 每台非根网桥(交换机)选举出一个根端口(root port);
- 选择指定端口
- 每个网段选举出一个指定端口(Designated port)。
- 选举规则:
- 到达根网桥开销小的优先;
- 根桥的端口都是指定端口,以为到达自身根桥的cost都是0
- 本交换机BID小的优先;端口ID小的优先。 开销(cost),代表路径耗费的代价和成本,带宽越大,开销越小。
- 选举规则:
- 每个网段选举出一个指定端口(Designated port)。
- 阻塞其它端口
- 剩下没有角色的端口就是备用端口(Blocked port)
- 备用端口是因为每两秒一直收到来自根桥的BPDU,端口判断收到的BPDU比我们的端口更优先,所以一直保持20S的阻塞状态,如果20S后没有收到BPDU或者没有比自己更优的BPDU那么它就会经过两个15S进入转发状态。
- 备用端口是因为每两秒一直收到来自根桥的BPDU,端口判断收到的BPDU比我们的端口更优先,所以一直保持20S的阻塞状态,如果20S后没有收到BPDU或者没有比自己更优的BPDU那么它就会经过两个15S进入转发状态。
- 剩下没有角色的端口就是备用端口(Blocked port)
STP端口状态


- disable:禁用状态,被关闭的端口
- blocking:阻塞状态:接受BPDU,但不发送BPDU,不学习mac地址,不转发数据
- listening:监听状态,接受BPDU并发送BPDU,不学习mac地址,不转发数据,持续15秒——开始STP选举工作
- learning:学习状态,接受BPDU并发送BPDU,学习mac地址,不转发数据,持续15秒
- forwarding:转发状态,接受BPDU并发送BPDU,学习mac地址,转发数据。
STP计时器
- hello time,2秒,配置BPDU的发送周期;
- max age,20秒,判断链路故障的时间,10个hello time周期;
- forwarding delay,15秒,状态切换延迟。(STP初始化流程中的两个15秒,总计30秒)
BPDU – 桥协议数据单元
使用组播:01-80-c2-00-00-00

根桥收到TCN后向所有端口发送携带TC置位的configuration BPDU,交换机收到TC置位的配置BPDU后将MAC地址表老化时间缩短为15秒;
在链路故障导致端口角色切换后,MAC地址表默认老化时间为300S,为了更快的更新MAC地址表所以就有了STP的拓扑变更机制加速MAC地址表老化时间。


STP配置

stp cost * 这条命令会影响下游交换机的cost的合,指定阻塞或者指定端口需要注意。
stp port priority * 在cost和bid一致的情况下想要修改阻塞或根端口下使用。
STP的不足

所以有了RSTP和MSTP
作者:Zleoco,如若转载,请注明出处:https://www.zleoco.com/?p=1788