生成树作为二层网络的一个重要协议有很多细碎的知识点,这些知识点的掌握有助于对二层网络的故障排查和对这个协议更深的理解,以下是我总结的一些点,想到什么就写什么,比较散,等到有时间再整理一下,希望能对学习网络的同学有所帮助。
为什么要用生成树?
在二层转发中,存在大量的广播,如果出现环路,广播风暴将会导致MAC地址表震荡,链路瘫痪,但是为了避免单点故障,又必须做设备冗余和链路冗余,这时候生成树协议就可以在众多链路中生成一个最优无环树,当出现链路故障时,生成树协议就会计算生成一课新树来使通信恢复正常。
生成树的两个关键概念:
- 网桥ID
- 链路开销=1000/链路带宽
BPDU网桥协议数据单元有两种:
- 配置BPDU 2.拓扑变更BPDU
配置BPDU字段(在健康的网络只有配置BPDU)
TCN BPDU不携带任何额外的信息,只有类型字段区分
BPDU的内容
1.ROOT ID-------------谁是根桥?
2.ROOT PATH COST----------根桥有多远?
3.SENDER BID------------发送这个BPDU的根桥是谁?
4.PORT ID-----------发送这个BPDU的是这个根桥的哪个端口?
活跃网桥每两秒发送一次配置BPDU直到端口收到更有吸引力(值更小)的BPDU,本地端口才停止发送,当本地端口在二十秒之内还没收到对端更有吸引力的BPDU,本地端口再次发送配置BPDU.
生成树收敛的三个步骤:
- 选举根桥(最小根桥号--BID)
- 选举根端口(每个非根桥中离根桥最近的端口)
- 选举指定端口(根桥的一个指定端口只转发一个指定网段的流量来避免环路)
记住:在生成树协议中,只有最小的才是最优的,只有最优的才会被保存
(无论是根桥还是根端口和指定端口都是这样)
端口行为
1.禁用
2.阻塞blocking--接收BPDU
3.监听listening--发送和接收BPDU,15s监听结束若没收到消息就宣称自己为根桥
4.学习learning--发送和接收BPDU,获悉MAC地址
(在角色确定后,开始登记各个终端的MAC地址和接口号)
5.转发forwarding--发送接收BPDU,发送接收数据帧
根桥每2s发一次配置BPDU
开销看接口(接收BPDU接口的成本累加)
show spanning-tree
拓扑变更过程
上游的网桥接收TCN BPDU,虽然一部分其他的网桥也可以收到TCN BPDU,但只有指定接口可以接收并处理TCN BPDU,上游的网桥接收到TCN BPDU会将配置BPDU中的TCN BPDU获知字段置一发送给下游网桥,这样下游的网桥就会停止向上游发送TCN BPDU。重复以上步骤直到根桥接收到TCN BPDU,根桥会将所有的配置BPDU中的拓扑变更获知字段置一在35秒(转发延迟15s+最大衰老时间20s)发送出去,这个标志会让所有的网桥他们的网桥表默认衰老时间300s缩短到15s(现在的转发延迟时间)。
配置根桥的命令:
只有spanning-tree vlan 10 priority 0可以始终确保该交换机为vlan 10的根桥,而spanning-tree vlan10 root primary只能确保该交换机的优先级比引入网络的其他网桥优先级低
配置BPDU的点:
- 由根桥向下发
- 根接口接收配置BPDU
- 根接口不发送配置BPDU
- 阻塞端口不发送配置BPDU
- 一旦根桥失效,配置BPDU停止发送,配置BPDU的缺席时间一旦达到另一个网桥的老化时间,那个网桥就会充当根桥
- 一旦去往根桥的路径失效,当有可替代路径时,配置BPDU会等替代路径由阻塞状态变成转发状态时继续发送,当没有可替代路径时,网桥网络会被分区,新的根桥会在这个隔离区域选举出来
生成树负载均衡:
- 根桥优先级
- 网桥优先级
- 端口在vlan下的优先级
- 端口开销
加速生成树收敛:
- 调整老化时间
- 调整转发延迟
- 降低hello时间间隔
- 快速端口
- 上行速链路
- 快速骨干
查看命令:
show spanning-tree 端口/VLAN/summary/…
STP提示和技巧:
- 手动选择根桥----为了保证网络的稳定性和弹性
- 至少有一个备份根桥
- 将根桥放在大流量的目的地附近