广播风暴的袭击,可使一个园区网的部分区域瘫痪。而对于一个层次结构不好的园区网来说,甚至可以使核心交换机不堪负荷而导致整个园区网全部瘫痪。引发广播风暴的原因可有多种,其中一种可能是由于交换机或集线器的自环引起的问题。所谓"自环",是指用户在联网时有意或无意地将交换机或集线器通过通信介质(如双绞线)接成环路。它是园区网的网管员轻易碰到或潜在的问题。那么"自环"会引发什么后果呢?先让我们来看看下面的一个案例。
某园区网出现故障,其外部特征是核心交换机不堪负荷致使整个园区网都瘫痪了。当用超级终端登录到该交换机,经检查发现某个端口收到大量的广播包,是单播包的l0万倍以上,这显然是碰到了来历不明的广播风暴的袭击,因为只要一禁止该端口,整个园区网就恢复了正常。根据该端口所连接的网段,通过物理手段逐级排查,最后锁定故障点,是安装在某公共计算机房里的一台24口非治理型交换机。再仔细检查后发现,该交换机上有一条跳线的另一端也插在同一台交换机上,把它一拿掉,园区网又可回复正常状态。可见,这种交换机的"自环"现象所造成的后果相当严重,排查起来也比较麻烦。事后了解到,这条交叉线是用于级联另一台交换机的。交换机拿走了,级联线却留了下来,最终酿成这起网络事故。
产生广播风暴的原因:
交换机的基本功能相当于一个透明网桥,为了更好地分析"自环"问题的产生气理,以便得出针对这类问题的解决方案,我们先来简单地了解一下透明网桥的功能:
* 网桥不能修改所转发的数据帧;
* 网桥通过在端口上侦听数据帧中的源MAC地址来获得与该端口相连的设备的MAC地址,并建立一张源MAC地址和获得该地址的端口号的对照表,也称MAC地址表;
* 网桥必须将接收到的广播帧转发到除接收端口以外的所有端口;
* 网桥必须将接收到MAC目的地址的未知的单点传送帧转发到除接收端口以外的所有端口;
* 网桥必须过滤掉目的地位于接收端口所在网段上的数据帧,而转发目的地位于其它端口上的数据帧。
假如园区网还只是一个基于第二层的交换式快速以太网络,全网属于同一个广播域,在这样的局域网上通信,源站必须知道目的站的MAC地址,即使源站有了目的站的ip地址。否则,源站要与目的站通信,就得通过地址解析协议ARP来获取与该目的IP地址对应的MAC地址。在这里假定源站的ARP表中没有目的站的MAC地址,那么源站就会建立一个ARP请求帧,并将它发送给局域网中的所有站点。由于ARP请求帧是以广播方式发送的,该局域网中所有站点都会接收到这个帧,然后传送给网络层检验。假如某个站点的IP地址和请求帧中的目的IP地址相同,该站点就会作出应答,将其MAC地址以单播方式发送应答帧给源站。一旦源站收到ARP应答帧,就可用目的站的MAC地址更新自己的ARP表,并知道了目的站的MAC的IP地址。
需要注重的是,ARP广播包一般是不能跨越路由器的,只能受限于同一广播域,即同一IP子网。因此,假如源站与局域网外的(另一1P子网)目的站通信,源站只需获得网关的MAC地址,然后将分组发往该网关。网关收到相应分组后,再根据目的IP地址来决定路由策略。
在进行ARP的过程中,涉及到数据链路层上的广播处理。 当交换机与源站和目的站连接时,根据透明网桥的定义,该交 换机必须将接收到的广播帧转发到除接收端口以外的所有端口。假如该交换机意外自环了,如图1所示,一有ARP发生,这两个端口也会同时接收到广播帧,并会向其它端口转发。这时,就这两个端口而言,都会形成两个方向相反的广播帧转发环路,而且这种重复转发是永无止境地进行下去。
当自环交换机快速地把广播帧不断地向其它端口转发时,形成的广播风暴在很短的时间内就会导致交换机出现超负荷运转(如CPU过渡使用、内存耗尽等),最终耗尽所有带宽,使网络连接中断,严重地影响了与该交换机相连的设备间通信。这 种广播冈暴还不断地冲击上游交换机,上游交换机的抗广播风暴能力不强的话,就更加大了受影响的范围,最终将整个园区网搞垮。
对于前面所提到的故障,安装交换机需要一段时间,等装好后,源主机中的ARP表早就没了,也就是说源主机不知目的主机的MAC地址,而且交换机中的MAC地址表又没建立起来。所以连接在该交换机端口上的主机要与其它主机通信,必然要通过ARP查询对方网卡的MAC地址,以便进行主机之间的数据帧的传输。只要主机一发出ARP广播帧,故障马上就会产生。以太网交换机的lOOMbp,端口的转发速率可达148800bps,当端口带宽被广播包占满时,出现广播包是单播包的l0万倍也就不足为怪了。
预坊广播风暴的几种配置方法
自环故障因产生广播风暴而造成的影响这么大,又如此轻易发生,如何才能缩小这种影响呢?
限制广播包转发数量
我们可以考虑使用兵有控制广播风暴功能的交换机,这类交换机可对其端口定义广播门限值,当端口接收的广播包超过了该值时,该端口便会马上处于挂起状态以避免出现循环广播状态。
提高上联带宽冗余
我们还可以考虑增大上联带宽,提高交换机中继链路之间的吞吐量,实行主机100M接入、交换机10OOM上联,使链路有足够的带宽冗余,不至于因这种广播包的连锁反应而堵塞上联链路。
缩小广播域,隔离故障组件
对于大型的交换型园区网而言,全网属于一个广播域,极其轻易引起广播风暴的问题。我们可以考虑把一个物理上的大网在逻辑上细分为若干个较小的IP子网(VLAN),以减小广播域,即使出现了广播风暴也仅是局限在一个小范围内,从而大大地抑制了广播风暴扩散范围。此外,采用VLAN技术还可实现对故障组件的隔离,例如一台出故障的设备、广播密集型的应用,当然还有网间的环路故障。但是,当某个子网中的交换机发生自环,虽然采用了VLAN技术抑制了广播风暴扩散范围,但还是会对本子网造成巨大影响。为了对付此种网络环路问题,性能稍好的交换机都具备生成树协议(IEEE802.ID)功能,它对稳定网络运行具有重要作用。
下边我们具体介绍一种利用生成树协议来预防广播风暴的方法。
用生成树协议屏蔽网络环路
生成树协议(IEEE802.ID)的主要功能是为了解决由于冗余备份连接所产生的环路问题,它使用网桥协议数据单元(BPDU)产生一个只有单个根和多个分支的无环路的树型拓扑(生成树)。
交换机自环是一种非凡的环路问题,故同样可以利用生成树协议来预防这种自环故障对网络造成的不利影响。这里的BPDU是一个长度为64字节的数据帧,分为通知BPDU(见表1)和配置BPDU(见表2).
通知BPDU主要包含有BPDU类型等域,用于当拓扑发生改变时子网桥通知父网桥;配置BPDU主要包含有BPDU类型、根网桥ID、到根网桥的路径开销、发送网桥ID、端口ID等域,用于生成树的产生和维持过程。下面我们就来简单分析一下生成树的产生过程,这个过程共分四个步骤:
l.选举单个网桥作为根网桥;
2.在每个网桥上选举提供到根网桥最短路径的一个端口(称为根端口);
3.在每个局域网网段上,选举一个离根网桥最近的网桥(指定网桥)以及该网桥上离根网桥最近的端口(指定端口);
4.用局域网上被选举出来的所有根端口和指定端口产生一个生成树。
当网桥第一次启动时,它就假定自己是根,在每个端口上发送BPDU。在前3个选举步骤中都需要基于最好的BPDU进行。为了确定最好的BPDU,网桥按下面的次序检查:最小的根网桥ID、到根网桥的最小路径开销、最小的发送网桥ID、最小的端口ID,值越小它的BPDU就越好。假如网桥在一个端口上收到了一个更好的BPDU,就会停止在那个端口上发送BPDU,表示退出根网桥的选举。当没有收到比自己的BPDU更好的BPDU时,其它网桥都退出根网桥的选举,并一致同意该网桥是这个局域网上的根网桥。假定图2中的网桥B先启动并开始发送BPDU,公布自己是根网桥。一段时间后,网桥A启动并公布自己是根。一旦网桥A的BPDU到达网桥B,网桥B就会同意网桥A是根,因为网桥A的根网桥ID比网桥B的小。
图2有两个网桥的简单网络
在确定了根网桥之后,每个非根网桥就要确定一个离根网桥最近的端口作为根端口。网桥使用开销的概念来判定到根的远近,它是一个到根网桥的所有链路开销值的总和。假定网桥A和网桥B之间的连接链路均相同(例如100Mbps),而作为根网桥的网桥A在发送BPDU时,公布到根的开销为0。当网桥B在两个端口上分别收到来自根网桥的这些消息时,均加上相同的链路开销(例如19),即认为到根网桥是一样近的。考虑到是同一个网桥上的两个端口,故选举出最小的端口忆的端口为根端口。非根网桥比较两个端口上的BPDU,具有最好BPDU的那个端口被确定为根端口。
在桥接网络中的每个网段都有一个指定网桥,以及在指定网桥上的一个指定端口,其目的是确保只有一个端口为该网段处理流量,从而避免环路。在网桥A和网桥B之间的网段1上有两个网桥端口,一个在网桥A上,一个在网桥B上。两个网桥端口都同意网桥A是根,所以网桥A上的端口1是指定端口,同时网桥A也是这个链路的指定网桥。在网桥A和网桥B之间的网段2,网桥A上的端口再次获胜成为指定端口。可见,根网桥就是指定网桥,一般来说,它的每个活动端口都是指定端口。
利用以上过程选举出来的所有根端口和指定端口所形成的逻辑树是没有环路的,数据流量只在该树上流动。这些端口承担着转发流量的工作,其它端口则阻塞流量。图3显示了例子中的生成树收敛的最后结果。注重网桥B上的端口2是阻塞流量的,这样就打破了环路。
一旦形成了这个逻辑树,BPDU流量仍会不断发出。根网桥定期从它的所有活动端口发送BPDU到其下游网桥的根端口,这些网桥在它们的指定端口冉往其下游网桥的根端口发送BPDLJ,如此发送下去,直至碰到阻塞端口为止。根端口和阻塞端口只接收 "配置BPDU"而不发送 "配置BPDU"。当拓扑发生改变时,这些端口很可能就收不到"配置BPDU",或端口从阻塞状态进入转发状态,或端口从转发状态进入阻塞状态,相关网桥就会通过其根端口逐级上传"通知BPDU",让根网桥知道拓扑发生了改变,需要刷新生成树。网桥通过定期发送和接收RPDLJ,维持着生成树在逻辑上的一致性。
假如网桥A上的两个端口之间存在物理回路连接,如图4所示,根据以上的讨论,网桥A仍是根网桥,它的端口1和端口2分别会收到对方的BPDU。因为在较大端口号的端口上收到了一个更好的BPDU,所以它停止再发送BPDU并转为阻塞端口,而较小端口号的端口则被选举为指定端口。在这里我们看到了一个有自环的网桥,但在生成树协议的作用下,已经不会产生广播风暴了。
[[The No.6 Picture.]]
交换机开启了生成树协议后,假如出现端口之间的物理环路,则只有一个端口是指定端口,另一个端口被置于阻塞状态。处于阻塞状态的端口不能发送或接收数据帧,从而避免了自环所带来的问题。
中、高端交换机一般都会支持生成树协议。但要注重的是,交换机对生成树协议的默认状态可能是关闭的,这一点往往是许多网络工程师和网管员所疏忽的。为了避免交换机的自环问题,必须开启交换机的生成树协议。生成树协议可以彻底解决交换机自环带来的问颧,但是性能不高的低端交换机或集线器不具备生成树协议的功能,也可能不具备其它能抑制广播风暴的功能。碰到这种情况时,网络治理员的自身素质就非常重要。
其实,再好的设备还得由人来使用,最直接的交换机自环故障预防措施就是了解这些网络连接设备的工作原理,保证其正确的连接。