一.MAC地址震荡
原因
MAC地址表震荡也称为MAC地址漂移,是由网络环路造成的:
二层环路
假设现在网络还没收敛,主机X要去ping网段2。由于主机X不知道目标MAC,所以先是发送ARP请求。
先看交换机A收到了帧,查看了源MAC对应的是主机X,更新MAC地址表。查看目标MAC是FF,复制原数据帧N份,进行泛洪。从交换机A出来的帧其一到了网段2,这里都是正常的ARP请求。
但是从交换机出来的帧其二到了交换机B,交换机B和交换机A一样做相同的操作,更新MAC地址表,记录的是主机X和对应的端口。交换机B一看帧的目的MAC是FF,又进行泛洪,传回主机X和交换机B
上面的数据帧的传输已经是有问题了,再看主机X假设ping报文数据帧到B,B这个时候已经有刚刚A传来的对于主机X的MAC信息,但是B收到了新的帧,马上就更新了。但是,从主机B和交换机A,交换机B和主机X连的端口肯定不是同一个。这就导致了主机B的MAC表不断更新,而且还不稳定....
上面说的都是ARP,是广播帧。要是单播帧呢?交换机A和交换机B假设都已经学到了MAC表,主机X发出来的一个数据帧会传到A和B,然后它们又会传递网段2,这样就有了两个数据包。
除了会产生MAC地址震荡外,还会产生广播风暴:
当网络中存在环路(交换机A,B的两个端口,通过网线相互连接),就会造成每一帧都在网络中重复广播,引起广播风暴。
三层环路
三层环路是两个路由器之间的多个端口相互连接,形成一个环路导致的
正常路由
目的地址是:114.114.114.114
R2匹配默认路由,将数据包发送给R1,R1匹配默认路由发送给运营商。
产生环路路由
目的地址是:192.168.100.1
R2匹配默认路由,将数据包发送给R1,R1匹配192.168.0.0/16路由发送给R2,R2又发送给R1....R1和R2对此数据包来回发送直到ttl=0。
在三层转发时会自动引入ttl( Time To Live),每经过一次三层转发,减少1。
ttl值范围(0~255),ttl=0时数据包丢弃。
假如ttl=10,那么经过一次三层转发变为9,再次三层转发变为8....直到到达目标或者ttl=0丢弃
避免三层环路的方法
1.最小化路由汇总
用192.168.0.0/22替代R1指向R2的回程(192.168.0.0/16),包含的范围就比较小,192.168.0~3.0~255
其中R2直连的有192.168.1.0/24、192.168.2.0/24;
其中不存在的有192.168.0.0、192.168.3.0,如果此时访问192.168.100.1,R1因为没匹配到路由直接丢弃。
如果此时访问的目的地址是192.168.0.1
同样的环路问题又次出现,但此番汇总环路的目的ip地址范围只剩下192.168.0.0/24、192.168.3.0/24
2.null0路由
为了让这些网段可能产生三层的环路,可以配置null0路由
让192.168.0.0/24、192.168.3.0/24指向null0
目的地址是:192.168.0.1
R2匹配默认路由发送给R1;
R1根据最长掩码匹配原则匹配到192.168.0.0/24为最优,下一跳为null0,所以直接丢弃,避免了环路问题。
二.STP震荡
原因
为了避免环路,所以引入了STP生成树协议,但是当STP配置不正确或网络拓扑发生变化时,可能会导致STP计算出不同的生成树,交换机之间频繁地切换端口的状态,就会导致STP震荡
STP震荡与MAC地址震荡的区别与联系
联系
两者都与网络环路有关
区别
1.
MAC地址震荡是在数据包转发层面上的问题。
STP震荡是在网络拓扑计算和链路状态切换层面上的问题。
2.
STP震荡会导致交换机端口频繁变化,可能导致网络中断。
MAC地址震荡则会导致大量重复的数据包传播,消耗带宽和资源。
三.路由协议震荡
OSPF路由协议震荡
OSPF是动态路由协议,当某个链路一直down/up,OSPF就会一直更新,路由器就会一直重新计算路由,这就是OSPF路由震荡
1.多区域,区域间做路由汇总,解决区域内路由震荡带来的全网路由重新计算。
2.合理利用 stub 区域,比如 stub/totally stub/nssa/totally nssa 区域,让区域成为 stub 区域,其他区域的路由对该区域而言就是默认路由,其他区域动荡和该区域无关。
3.外部路由重发布到 OSPF,先做好汇总,比如静态路由指向 null0,然后重发布这条静态路由到 OSPF,这时,外部路由带来的震荡仅在外部路由域有影响,对 OSPF 路由域毫无影响。
BGP路由震荡
1.发布路由时,可先汇总好后指向 null0,然后 network 进 BGP,减少发布路由的条目。
2.BGP 有路由惩罚措施,一条路由频繁震荡,会惩罚为不可用路由,直到其稳定后,才可成为可用路由。
总的来说,防止路由协议震荡:
1.减小路由域
2.做好汇总
3.一定的震荡路由惩罚措施