“ The more you know the more you know you don't know”
背景
近期在交换机配置中发生了一次接线错误导致交换机环路,从而引发广播风暴的一个例子。所以特意花时间了解一下交换机产生广播风暴的原理,并整理了此篇文章lan交换机用于转发决定,一来可以梳理自己的知识,二来也希望能通过此文章帮助到你。
01
—
交换机正常转发请求过程
在搞清楚广播风暴之前,需要先梳理一下在二层网络世界中,数据包是如何被转发的。
正常情况下的网络接线图
访问流程图
访问流程详解
Core Switch收到数据包后,首先查询目的IP是否在arp表中缓存若被缓存,则直接将请求转发到对应端口若未被缓存,则发起arp广播,问询全部端口若服务器收到该请求,则查询是否为本地IP,若是则响应,若不是则直接丢弃该报文若是其他交换机(My Switch)收到请求后,先查询是否有arp缓存,若没有,则进行泛洪(将请求转发给除接收口外的其他全部端口)My Switch连接的服务器收到请求后,同第四步交换机收到请求后,将信息缓存后回应该请求
细节
核心交换机收到的响应请求端口为端口40(核心与接入互连在核心端的端口),mac地址为Server的网卡Mac地址
接入交换机收到的响应请求端口为端口13(接入与server互连,接入的端口),mac地址为Server的网卡Mac地址
02
—
交换机发生环路时细节
异常接线图
访问流程图
发生环路的细节
当核心和接入两个交换机通过两根线相连时,核心交换机发起arp广播时,先由CW1发送给接入的SW1端口,接入交换机收到请求后,又通过SW2端口泛洪回了核心交换机。于是发生了死循环,导致广播风暴。
03
—
QA
问题1:交换机泛洪指的是什么?
二层交换机收到广播包后,将该请求转发至除接收口外的其他全部端口,在本例中,接入交换机是不会通过SW1端口将广播请求转发给核心交换机
问题2:如何发现交换机环路?
网络延迟增大。交换机负载增高若两交换机之间有两根线互连,则通过交换机端口信息可发现两个端口流量正好相同通过抓包可发现大量的广播包
问题3:如何避免交换机环路?
划分vlan(将两个互连端口分到不同的vlan下)交换机端口聚合(将两个端口认为是一个端口)
问题4:为什么一个广播请求导致的交换机环路就能使得网络瘫痪?
因为虽然单个请求量小,但是在交换机高速运转下,也会占用非常多的局域网资源。交换机负载被迅速吃光
问题5:arp表的过期时间默认是多少?
交换机arp表过期时间正确的应答默认20分钟过期,非正常的应答默认3分钟过期(例如无人应答的情况)
问题6:如果一直有正常请求,是否还会更新ARP表?
不会,除非缓存过期,更新ARP表有以下几种情况
主动发起arp广播,收到对应主机应答时(清空arp缓存、缓存到期等情况)收到其他人的广播请求,将源IP源Mac信息更新到本地arp表
问题7:如果mac地址发送改变lan交换机用于转发决定,交换机如何得知?
mac地址发送改变时,需要重启网卡并通过免费arp广播的方式通知局域网内所有主机更新arp缓存,此时交换机也会更新自己的arp缓存,若该广播交换机未收到,并且该网卡从未向外界发送过数据包,则交换机会一直将数据转发到错误的端口上,导致有损
总结
导致交换机环路的原因很简单,无非就是两个交换机通过两根网线连接后导致的循环转发,但如果想要知道事情是如何发生的,则需要深入了解网络原理,以及数据转发时的细节,正是这些原理和细节的理解,才能在下一次出现相同的问题时,快速定位到问题的root cause,并能举一反三。
本文到此结束,希望对大家有所帮助!