一、环路的产生
- 网络中通过多交换机、多条链路来提高链路的冗余性,避免单点故障导致业务中断,虽然能够提升网络可靠性,但同时也会带来环路问题。
二、环路引发得问题
- 广播风暴:
当交换机收到一个从主机发过来的单播帧(或者广播帧)时,假如交换机没有该目的主机的MAC地址表项,此时交换机会在除了接收端口以外的端口泛洪出去,而其他交换机在接受到也会做同样的操作。这样会导致同样的帧在不停地被转发,形成广播风暴。
- MAC地址表翻转(震荡)
交换机MAC地址更新是基于报文的接收端口的,像上面所述,交换机之间形环之后,最终报文还是会转发回到第一个接收的交换机(从主机接收报文的交换机),那么这时交换机会把与主机连接的端口和MAC更新为最近接收到报文的端口和MAC地址,因为环路可能是多向的,所以会导致MAC地址表不停在更新。
三、STP原理
生成树协议STP(Spanning Tree Protocol),在提供高可靠性的同时又能避免环路带来的问题。STP通过阻塞端口来消除环路,使用网络链路冗余备份。在形成环路的网络交换机会根据STP的协议具体规定来阻塞某端口,来消除环路, 当在环路上发生故障,会释放阻塞端口实现备份链路传输。
- 根桥选举:每个交换机上都会有 桥ID(Bridge ID),桥ID由16位的桥优先级(Bridge Priority)和48位的MAC地址构成,在选举根桥时交换机会互发BPDU报文,通过比较里面的优先级(0-65535,默认32768),数值小的优选,如果优先级相等,则会比较MAC地址,同样数值小的优选。
STP定义了三种端口角色分别是:根端口、指定端口、备份端口
- 根端口选举:非根交换机在选举根端口时分别依据该端口的根路径开销、对端BID、对端PID和本端PID。选举时会比较根路径开销,如果相同,则会比较对端BID;如果对端BID相同,则比较对端PID,如果还相同,则比较本端PID,小者优先。一般与根交换连接的端口都是根端口。
- 指定端口选举:在选举了根端口之后其他的端口会再次进行比较来选择指定端。每个网段都应该有一个指定端口,根桥的所有端口都是指定端口(除非根桥在物理上存在环路)。
- 预备端口:选择完根端口和指定端口,剩下的就是预备端口。其他端口为预备端口,被阻塞,不能转发数据,只能够从所连网段的指定交换机接收到BPDU报文,并以此来监视链路的状态。
STP协议的设备上端口状态有5种:
- Forwarding:转发状态。端口既可转发用户流量也可转发BPDU报文,只有根端口或指定端口才能进入Forwarding状态。
- Learning:学习状态。端口可根据收到的用户流量构建MAC地址表,但不转发用户流量。增加Learning状态是为了防止临时环路。
- Listening:侦听状态。端口可以转发BPDU报文,但不能转发用户流量。
- Blocking:阻塞状态。端口仅仅能接收并处理BPDU,不能转发BPDU,也不能转发用户流量。此状态是预备端口的最终状态。
- Disabled:禁用状态。端口既不处理和转发BPDU报文,也不转发用户流量。
两类BPDU:
- BPDU:包含桥ID、路径开销、端口ID、计时器等参数,交换机通过STP协议来交换BPDU来选举根桥,并定义端口角色。
在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。
- TCN BPDU:指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知
计时器:
- Message Age:配置BPDU在网络中传播的生存期。配置BPDU报文每经过一个交换机,Message Age都加1。
- Max Age:配置BPDU在设备中能够保存的最大生存期。如果Message Age大于Max Age(Max Age的超时默认值为20秒),非根桥会丢弃该配置BPDU。
- Hello Time:配置BPDU发送的周期。
- Forward Delay:端口状态迁移的延时。
故障分析:
- 根桥故障
STP拓扑中交换机通过周期性的BPDU来监视链路状态,如果下游交换机收不到根桥对的BPDU,那么会在计时器Max age(20秒)超时后,重新选举根桥,也就是SWB和SWC会重新进行选举。
到 forwording状态大概需要50秒(Max Age 20 s+两倍Forward Delay 15s×2 = 50s )
- 直连链路故障
SWB检测到直连链路物理故障后,会将预备端口转换为根端口。SWB新的根端口会在30 秒(Alternate端口会迁移到Listening、Learning、Forwarding)后恢复到转发状态。
- 非直连链路故障
非直连链路故障(非物理层故障),SWB因此一直收不到来自SWA的BPDU报文,SWC的Alternate端口再也不收到包含原根桥ID的BPDU报文,SWC会切换Alternate端口为指定端口并且转发来自其根端口的BPDU报文给SWB。所以,Max Age定时器超时后,SWB、SWC几乎同时会收到对方发来的BPDU。SWC的预备端口恢复到转发状态大约需要50秒。
- 拓扑改变导致MAC地址表错误
MAC地址表项的默认老化时间是300秒。在这段时间内,SWB无法将数据从G0/0/2端口转发给主机B。
本例中,SWB中的MAC地址表项定义了通过端口GigabitEthernet 0/0/3可以到达主机A,通过端口GigabitEthernet 0/0/1可以到达主机B。由于SWC的根端口产生故障,导致生成树拓扑重新收敛,在生成树拓扑完成收敛之后,从主机A到主机B的帧仍然不能到达目的地。这是因为MAC地址表项老化时间是300秒,主机A发往主机B的帧到达SWB后,SWB会继续通过端口GigabitEthernet 0/0/1转发该数据帧。
- 拓扑改变导致MAC地址表变化(加速老化)
拓扑变化过程中,根桥通过TCN BPDU报文获知生成树拓扑里发生了故障。根桥生成 TC用来通知其他交换机加速老化现有的MAC地址表项。
拓扑变更以及MAC地址表项更新的具体过程如下: SWC感知到网络拓扑发生变化后,会不间断地向SWB发送TCN BPDU报文。
SWB收到SWC发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的TCA位设置1,然后发送给SWC,告知SWC停止发送TCN BPDU报文。
SWB向根桥转发TCN BPDU报文。 SWA把也配置BPDU报文中的Flags的TC位设置为1后发送,通知下游设备把MAC地址表项的老化时间由默认的300秒修改为Forward Delay的时间(默认为15秒)。
最多等待15秒之后,SWB中的错误MAC地址表项会被自动清除。此后,SWB就能重新开始MAC表项的学习及转发操作。
四、STP常用配置命令
stp mode stp // 生成树的工作模式 stp root primary | stp priority 0 | stp instance 0 root primary // 手配根桥 stp priority 4096 |…… // 改优先级 ,手配备份根桥(其他primary改为secondary) stp edged-port enable // 配置边缘端口 dis stp topology-change // 查看stp震荡状态 display stp brief // 查看接口角色 display stp interface // 命令查看端口的STP状态