以太网中交换机之间不正确的端口连接会导致网络环路。如果相关交换机不开启STP功能,这种循环会导致数据包无休止的重复转发,造成广播风暴和网络故障。
有一天,我们在校园网的网络性能监控平台上发现一栋楼的VLAN有问题。其接入交换机和校园网之间的连接中断。检查放置在网络中心的汇聚交换机,发现与其相连的100base-FX端口有大量的入站流量,但出站流量很小,这是异常的。不过这个融合开关性能好像还可以,感觉不出什么问题。因此,我们在这个汇聚交换机上镜像这个异常端口,并使用协议分析工具Sniffer来捕获数据包。我们最多每秒能抓到10万多个包。通过对这些数据包的简单分析,我们发现了一些共同的特征。
当时我们急着想尽快修复网络。我们没有深入研究这些数据包的特征。我们只看到了第一点,认为网络受到了不明来源的Syn Flood攻击。据估计,这是由一种新的网络病毒引起的。我们立即禁用了该聚合交换机上的端口,以避免网络性能下降。
排除故障
为了在现场测试网络的连通性,在网络中心,我们将连接到该建筑接入交换机的多模尾纤通过带有双绞线的光电转换器连接到一台PC,并将其模拟为问题VLAN的网关。然后,我们去现场找了大楼的网络管理员,想让他尽快帮我们找到并隔离感染了未知病毒的主机。据该楼网络管理员介绍,昨天网络正常。然而,当时大楼的一个部门正在进行网络调整。今天上班的时候发现网络不通。不知道跟他们有没有关系。我们认为调整网络应该和病毒感染关系不大。在大楼的主配线间,我们拔掉了接入交换机上的所有网线,接上了笔记本电脑,接上了网络中心的测试主机。在我们确认链路没有问题后,我们每次都将剩下的一半网络电缆插回交换机。如果测试后没有问题,我们就继续,否则就插上另一半,逐步减少疑似网线的数量。最后,我们发现了一根会引起问题的网线。只要插上这条网线,大楼的网络就会和模拟网关断开。据该楼网络管理员介绍,这根网线连接的是昨天正在做网络调整的部门。他还说,以前部门拉了两根网线,一根主电缆,一根备用电缆,应该还有一根电缆,亲自在那个交换机上找到了另一根电缆。随便插上这两根网线中的一根,网络都没问题,但是只要同时插上就会有问题。如何在一台交换机上同时接入两个网络?
线路会激活网络病毒的SYN Flood攻击吗?这个时候我们觉得这个现象更像是网络中的一个环路。到了那个部门,发现有三台非托管交换机,都是串联的。但是,其中两个通过这两条网络电缆连接到接入交换机,这导致了网络环路。显然,施工人员没有清楚地了解网络拓扑。当时大楼的网络管理员有事要出去,就自以为是的接错了线,造成了网络事故。很容易找到原因。只需拔掉一根上行网络电缆即可恢复网络连接。经过一番波折,网络已经恢复正常,但我们还在疑惑,到底是什么干扰了我们的判断?
故障分析
典型的网络环路故障。协议分析工具Sniffer捕获了这么多数据包。经过一番分析,没有发现问题。很明显,第一眼看到大量的SYN包,给了我们一种是SYN Flood攻击的错觉。事后,我们回顾了这次网络环路的故障排除过程,再次仔细分析了捕获到的数据包,并解释了前面提到的这些数据包的五个共同特征,以便以后遇到类似问题时做出及时正确的应对。先看前四个特征:汇聚交换机是网络层设备,大楼所属的VLAN的网络层接口就设置在这个汇聚交换机上。为了实现网络管理策略,将已注册或未注册的IP地址与mac地址绑定。三次握手后才能建立TCP。这里启动连接的SYN数据包有28个字节长,加上14个字节的以太网报头和20个字节的IP报头。Sniffer捕获的帧长总共62字节(不包括4字节的检错FCS域)。当时,访问VLAN的单播帧恰好是来自外部网络的TCP请求包。根据以太网桥的转发机制,通过CRC正确性测试后,因为静态ARP配置,这个汇聚交换机会将单播帧的源MAC地址转换为本地MAC地址,根据绑定参数替换其目的MAC地址,重新计算CRC值,更新FCS域。重新封装后,它将被转发到该建筑的接入交换机。
看最后一个特性:网桥是一种存储转发设备,用于连接类似的局域网。这些网桥监控所有端口上传输的每个数据帧,并使用网桥表作为数据帧的转发基础。网桥表是一个“MAC地址-端口号”列表,列出了MAC地址和用于到达该地址的端口号,并通过使用数据帧的源MAC地址和接收该帧的端口号来刷新它。网桥像这样使用网桥表:当网桥从端口接收到数据帧时,它会首先刷新网桥表,然后在其网桥表中查找该帧的目的MAC地址。如果找到,则从该MAC地址对应的端口转发该帧(如果该转发端口与接收端口相同,则丢弃该帧)。
如果找不到,它会将帧转发到除接收端口之外的其他端口,即广播帧。这里假设在整个转发过程中,网桥A、B、C、D在它们的网桥表中找不到数据帧的目的MAC地址,也就是说这些网桥不知道从哪个端口转发该帧。当网桥A从上行端口接收到来自上行网络的单播帧时,它会广播该帧,网桥B和C在接收到该帧后也会广播该帧。网桥D从网桥B和C接收单播帧,并分别通过网桥C和B将其发送回网桥A,直到网桥A接收到该单播帧的两个副本。在这个循环转发过程中,A桥在不同的端口(此时不涉及上行端口)持续接收同一帧。当接收端口改变时,网桥表也改变“源MAC -端口号”的列表内容。假设网桥的网桥表中没有该帧的目的MAC地址。网桥A收到这两个单播帧后,只能再次向除接收端口以外的其他端口广播该帧,所以该帧也会被转发到上行端口。
就每个单播帧而言,网桥A重复上述过程。理论上,它将在一次广播后接收21帧,在两次广播后接收22帧,和第n次广播后的2n帧。总之,如果A桥一直这样转发下去,很快就会形成广播风暴,这个单播帧的副本最终会消耗掉100BASE-X的端口带宽。虽然在此期间,上行端口的很多数据帧会相互碰撞,变得不完整,无法被嗅探器捕捉到,但可以想象这个单播帧重复出现的次数还是会非常多。我们再次检查了那些包,几乎所有的包都发现了我们当时没有注意到的重复标记。按照64字节的包长计算,以太网交换机的100BASE-FX端口的转发线速可以达到144000pps。在这种网络环路状态下,Sniffer完全有可能以每秒66字节的包长捕获超过100,000个包。
基于以上原因,由于当时四台交换机的桥表都没有该报文的目的MAC地址,上游网络中的汇聚交换机向大楼发送TCP请求报文后,会不断收到大楼接入交换机转发回来的TCP报文的副本,数量非常大(形成大流量)。但是,它不会重新发送收到的数据包;Internet网络应用基于请求/响应模式,只有发送和接收通道都畅通,才能进行端到端的通信。一旦这个网络应用中的某个通道被阻塞,应用就会因为无法进行而结束。申请结束后,一般来说,请求方不会自动再次发出该申请的请求包。所以在网络环路状态下,会出现一个通道流量大,另一个通道几乎没有流量的现象。由于VLAN具有隔离广播域的功能,这些大流量不会穿越网络层,所以不会对汇聚交换机造成很大压力。实际上,由于这种网络环路是数据链路层的故障,只涉及源MAC地址和目的MAC地址,所以无论更高层封装的是什么类型的包,都有可能引起广播风暴。也就是说,那时候用Sniffer可以捕捉到各种数据包。
防止事故
校园网的接入层是面向用户的网络接口,有很多不可控的成分,情况非常复杂。要有专人管理,设备的可靠性也要有保证。这个接入交换机是可管理的,有STP功能,其他交换机是无STP功能的非管理交换机。本来接入交换机上提前配置了STP功能,这次网络事故是完全可以避免的,但不知何故没有做到,事后再做也只能算是‘聊胜于无’。因此,即使接入交换机开启了STP功能,下游网络也会因为某种原因形成环路,产生广播风暴,冲击上游网络的VLAN。因此,接入交换机还应该具有广播包抑制功能,以便将影响限制在局部区域。这些要求对于下游网络中的交换机是相同的,但这只是成本问题。总之,排除网络故障,技术和经验固然重要,但更重要的是平时要注意维护网络的标准连接,落实基本的防范措施。