STP链路故障MAC地址表错误复现
在上边这个例子中,B交换机的MAC地址表项定义了通过端口g0/0/3可以到达主机A,通过端口g0/0/1到达主机B,但是由于C交换机的RP端口产生故障,导致生成树拓扑重新收敛,此时A主机发往B交换帧后,B交换机会先查MAC地址表,还是会先把A主机的帧数据从g0/0/1发出去(MAC地址表老化时间是300s,远远超过了STP链路故障恢复时间)。交换机A此时由于g0/0/2端口故障,找不到目标地址,就会把这个单播帧在其他端口进行泛洪,网络中断。这样的转发是错误的,那如何避免?
我们在上节聊到,STP协议在有一个端口是AP的根桥故障后,AP端口会从Blocking转变为listening,Listening-->learning-->Forwarding,两个15s后变为Forwarding状态。
在这个例子中,C交换机g0/0/2变为Forwarding的同时(确切的说是当AP的状态从blocking到listening状态)向对端发送TCN的BPDU,用来告知网络拓扑发生变更。
上游交换机收到后,会发送TCA比特位置1的配置BPDU报文,同时,会继续将TCN BPDU(复习一下,stp协议一共有两种BPDU第一种是配置BPDU,第二种是拓扑改变通知BPDU(TCN BPDU))向根桥转发TCN BPDU报文。
根桥收到TCN BPDU后,向其他端口所有端口发送TC=1的配置BPDU,通知全网交换机,网络拓扑已经发生改变,将下游设备把MAC地址表项的老化时间由默认的300s修改为转发延时时间(默认15s)。
最多等待15s,B交换机的错误MAC地址表项就会自动清除,然后B交换机可以重新开始MAC表项的学习及转发操作。
从上边这个过程我们能够发现,华为设备STP协议几种发送TCN BPDU报文的情况
1、第一种就是过渡到forwarding状态后,发送TCN BPDU
2、RP发送给根桥TCN BPDU
我们讲述了上边的案例,发现通过缩减MAC地址表项老化时间解决因为STP故障导致的MAC地址错误问题,但是还有一种情况我们不得不再次考虑,那就是对于边界STP设备,如果他接入的都是电脑主机,主机开关机,导致网络拓扑发生改变,根桥就会不断的发送TC=1的BPDU报文,不断地重置MAC地址表老化时间,新的问题产生了。
这个问题的避免,华为STP协议不得不对拓扑变化进行新的定义,什么情况下才算是拓扑变化呢?
1、当DP端口进入到forwarding状态认为是拓扑变化,华为设备新加边缘端口属性,如果设置STP交换机的其中一个端口为边缘端口,如果该端口进入到forwarding状态,则不认为是发生了拓扑改变。
2、RP失效或者RP进入Fordwarding状态认为是拓扑变化(就是解决STP故障后的MAC地址表错误问题)
3、非根桥DP端口失效不认为是拓扑改变(比如非根桥交换机是一台终端接入交换机,当终端接入设备,端口变为DP时,此时终端关机,端口失效,就不认为是拓扑改变)
4、根桥的DP失效直接发送TC BPDU(如果是根桥的DP失效,那就直接发送TC,拓扑一定发生改变了)