获取有效数据源

网络流量分析,顾名思义在分析之前首先要做的就是获取网络流量数据,这里我们暂且把这些网络流量数据称为被分析的数据源。

也许有些朋友会觉得,这不是一件很简单的事情么,交换机上端口镜像一开,网络流量就源源不断。没错,交换机端口镜像确实是一个简单、快捷的数据源获取方式,也是我们最常用的方式,足以应对简单网络环境下的分析需求。然而在一些复杂的网络环境下,或者是在有更高级的分析需求的前提下,仅仅凭靠简单的交换机端口镜像恐怕就心有余而力不足了。

在上周,我和同事去拜访一家Sniffer 产品的用户,在交流中聊起他们在获取数据源时遇到的问题和应对的方法,这些问题十分具有代表性。

首先一个问题是数据源的缺失。他们部署了分布式Sniffer 的网络流量分析产品,用交换机端口镜像的方式获取网络量数据,数据在不断的被捕获和存储,这看上去一切运行良好,等到有异常问题发生的时候回溯分析的功能将会立竿见影。可是事情并没有那么顺利,后来真的有问题发生了,才发现捕获的数据有部分缺失。问题的原因也十分明确,数据源来自于一台核心交换机的镜像端口,而这台交换机与另外一台配置了热备和负载均衡,所以一部分目标数据源没有经过其配置端口镜像的交换机,自然就缺失了。在Sniffer网络流量分析产品上的具体表现就是一部分应用层的会话对,只有单方向的流量数据,即这些会话对所缺失的另外一个方向的流量数据是经过另外一台交换机的。也许有朋友会说,那么我们在两台交换机上同时都做端口镜像流量不就全了吗?这样获取完整的数据源当然没有问题,可是这样做带来另外一个需要解决的问题,两个镜像端口上流出的两部分数据如何汇聚在一起呢?问题的关键是一个会话对的IN、 OUT 两个方向的流量不合在一起做分析是没有意义的。

第二个问题是镜像端口超负荷。在有些环境里,特别是在服务器区,我们要分析的目标数据源的数据量会很大,总量甚至会超出千兆镜像端口,而这种情况也恰恰在这个用户这里发生了,数据源总量有时超出镜像端口带宽,造成无规律的数据包丢失。

第三个问题是部分镜像端口流量小,流量分析设备监视端口的利用率很低。我们知道每一个镜像端口要连接到一个后端分析设备的监视端口上,也就是一对一的对应关系。在这种情况下,即使流量再小,一个镜像端口也要占用一个后端分析设备的监视端口资源。而对应分析设备的监视端口成本,长期低下的利用效率显然是一种不合理的资源分配。

这三个问题是比较典型的,在很多企业网络环境里面都会存在,其实还有更多复杂的情况,比如要面向应用建立全路径的流量分析解决方案该如何获取所有节点的有效数据,以及如何避免重复的数据源等等。所以如果企业需要的不仅仅是一个临时的流量分析工作,而是长期的网络流量分析解决方案,那么我们就十分有必要考虑到这些因素,做好分析前的数据获取工作。

面对这些情况,我们可以利用一些专用的设备来优化数据源,比如TAP,这种名为TAP的设备最早是简单的用来复制一条链路的流量并用一对一的方式,把数据原原本本的提供给后端的分析设备。然而时代变化太快,基于网络流量分析的各种解决方案风生水起,网络环境和分析需求也日新月异,早期TAP 那种一对一的模式无法适应更复杂的使用环境。所以在数据源和后端的分析设备之间的数据获取环节也成为大家关注的重点,一些厂商也相继推出了对应的产品,比如 VSS 推出的各种多端口并附带各种功能的分布式TAP,以及Gigamon 推出的数据访问交换机,依据它们实现的功能我暂且统称这类产品为数据源采集优化设备。这一类处在原始数据源和后端流量分析解决方案之间的数据采集优化设备完成了数据源的采集和优化工作,原始数据源经过这些设备的优化之后,更加高效、准确的被交付给后端流量分析设备。这类设备可以实现非常多的功能,这里我们只讨论最重要的几点:

流量汇聚——利用这类设备,可以把原始数据源汇聚在一起提供给后端的分析设备,这个功能就可以很好的解决之前提到的第一个问题,即在负载均衡的环境下如何获得完整的网络流量。通过分别在负载均衡的交换机上做端口镜像我们已经有了全部的数据源,后面要做的工作就是要把分开的流量汇聚在一起。当然可以把两个镜像端口连接到分析设备上,再由分析设备做逻辑上的汇聚,也就是通过占用两个监视端口资源的方法来完成,但是额外提供一个监视端口所投入的成本是我们要考虑的一个重要因素。另外一个方法就是利用数据源优化设备提供的流量汇聚功能,在中间层完成负载均衡数据源的汇聚,用一个端口把完整的流量数据输出给后端分析设备。汇聚功能同时也可以解决镜像端口流量小,流量分析设备监视端口利用率低的问题。这些数据采集优化设备往往具备多个输入端口,所以我们可以在中间层通过这样的设备把原本流量小的镜像端口流量汇聚在一个输出端口上一起交付给后端分析设备,从而提高后端分析设备的资源利用率。

流量过滤——原始数据源在经过这些采集优化设备的同时,可以按照用户的需求被过滤,去除掉海量数据源中我们不关心的内容,只留下真正需要的目标数据再交付给后端分析设备,提高后端分析设备每个监视端口的有效利用率。

流量分发——这些数据源采集优化设备同时能够提供多个输出端口,原始数据源经过汇聚、过滤,最后按照不同类别被分发到不同的目标输出端口,提供给后端不同用途的分析设备(或者直接把相同的流量复制成两份,一份给Sniffer 之类的流量分析设备,另一份给IDS 之类的安全设备)。也可以把原本负荷较高的输出端口上的流量分担给多个输出端口,组成更合理的资源分配。

汇聚、过滤、分发,在原始数据和后端分析设备之间做了一系列的预处理,原始数据源已经在数据量、数据内容、交付方式上被优化(这很像F5之类现代应用程序前端的应用交付类产品,在 客户端和服务器之间完成负载均衡等性能、功能优化处理),最终提高后端分析设备的性能、利用率,并保障数据源的有效性。而从使用成本的角度来看,增加这一类数据源采集优化设备的成本显然要低于增加后端分析设备监视端口的成本。

本文没有涉及具体的产品和案例,只为大家提供一个解决流量数据获取问题的思路。面对各种复杂的网络环境和分析需求,每一种境况我们都有可能采取不同的综合解决方案,这需要我们有针对性的分析和设计。

总而言之,获取有效的数据源是一个不可小视的环节,做好这个铺垫工作,后面的流量分析工作才能发挥出其应有的作用,甚至事半功倍。

Ricky