高速网络环境下的流量采集系统设计
2017-05-12江天宇胡洋瑞
江天宇,胡洋瑞
(四川大学计算机学院,成都 610065)
高速网络环境下的流量采集系统设计
江天宇,胡洋瑞
(四川大学计算机学院,成都 610065)
为了使网络异常检测系统能够在高速网络环境中正常工作,实现一种高效的流量采集系统。它利用双缓冲机制减少多线程锁的开销,使用多线程技术提高系统处理效率,并且该系统具有很好扩展性,可以迁移到其他平台,最终将该系统应用在高速网络环境下的网络数据包在线捕获处理。
网络流量;异常检测;网络安全
0 引言
随着互联网变得越来越庞大,网络也越来越复杂,网络中的各种恶意软件、病毒、木马也越来越多。网络异常检测系统架设在系统边界,对边界流量进行审计、检测,随着网络流量的增大,采集系统压力也越来越大。因此,研究高速网络流量采集系统对提升网络异常检测系统的性能非常关键。
在目前的网络异常检测检测领域,网络流量数据通常有两种格式,一种是基于会话流数据,一种是基于数据包数据。根据C.Barakat等人[1]给出的定义,会话流是一个由源IP地址和端口、目标IP地址和端口以及应用协议组成的五元组(源IP地址、源端口、目标IP地址、目标端口、应用协议);后者是使用原始数据包来进行网络流量分析[2]。基于会话流的异常检测是目前的主流,目前流行的NetFlow、NetStream等协议都提取了会话流信息,因为它最大限度地保留了网络流量的摘要信息,同时又不涉及隐私问题。
1 Winpcap工作原理
在Windows平台上,捕获数据包的途径有很多种,例如,Raw Socket、Winpcap等。通过Raw Socket方式捕获的数据包是完整的网络层数据包,不包含链路层信息,它不能接收到与IP层相同层次的网络层数据包。而通过使用Winpcap则可以捕获到数据链路层的数据包,并且还能实现过滤。
Winpcap是用于网络封包抓取的一套工具[3],可适用于32/64位的Windows操作系统上捕获网络数据包,包含了内核层的数据包过滤,一个底层动态链接库,和一个高层系统函数库。大多数网络应用程序访问网络是通过操作系统提供的Socket(套接字)方式。利用这种方式实现网络通信比较容易,因为操作系统负责底层的细节以及向上层提供了类似于文件读写的调用接口,程序员只需要调用Socket进行编程就可以实现网络通信,而网络中复杂的协议实现被完全屏蔽。
从图1可以看出,Winpcap由一个核心态的包过滤器和两个动态链接库组成,NPF(Netgroup Packet Filter)网络组包过滤器首先负责从网络中采集数据包,完成数据的过滤,拷贝到内核层缓冲区,然后调用应用层动态链接库文件将数据传递到应用层缓冲区,最后交由应用程序处理。具体工作原理如下所示:
①当数据包到达时,网卡接收数据到达的信号,然后产生硬件中断,通知CPU调度处理,中断服务程序判断数据包的有效性,若有效则分配一个缓冲。
②BPF模块根据用户的规则过滤数据包,并把数据包插入到内核的网卡驱动缓冲队列中。Winpcap和通常的TCP/IP协议驱动处于同一等级。这里Winpcap采用环状缓冲区,可以有效提高效率,减少读写次数。在BPF工作的模块中,数据包先经过过滤器过滤然后才决定是否写入缓冲区,这个大大提高了效率。
③用户程序通过系统调用来读取内核缓冲区的数据包,完成数据采集。
图1 Winpcap的原理图
2 高速网络环境下的流量采集
流量采集不仅仅只是捕获到网络中的所有分组,还必须能够还原出用户的网络行为,为后期用户行为分析提供依据。如果前期数据采集的过程中丢失了太多关于网络流量的信息,将会导致后期分析出现特征不足的问题,但是如果完全保留原始网络信息对存储是巨大压力,而且也是一种浪费存储空间的表现,因为并不是所有的原始数据信息都需要保存并对后期分析有用的[4]。本文采集的网络流量元数据主要是TCP/UDP会话流,定义如下:
定义1 TCP会话流 假设所有五元组〈源IP,源端口,目的IP,目的端口,TCP协议〉相同或者反转相同的数据包的集合为C,并且C中的数据包以发送第一个SYN数据包开始,到服务端接收最后一个FIN或者RST数据包结束,并且满足数据包的时间间隔不超过时间T,本文设置T为2分钟,则集合C所有的数据包构成一条TCP会话流。
定义2 UDP会话流 假设所有五元组〈源IP,源端口,目的IP,目的端口,UDP协议〉相同或者反转相同的数据包集合为C,并且,满足所有数据包时间间隔不超过时间T,本文设置T为2分钟,则集合C中所有的数据包构成一条UDP会话流。
在高速的网络环境中,需要对采集程序进行优化。本文采取的优化措施主要包括以下4点:
①使用双缓冲机制技术减少采集程序线程锁的开销。
②使用多线程技术。
③将从网卡捕获的数据包根据传输层协议还原成会话流的形式保存。提取网络流量元数据,减少了对原始数据包的存储。
④设计Hash算法,使用哈希表完成会话流的快速查找、删除工作。
在高速的网络环境中,完全存储原始数据包将会对磁盘存储造成巨大压力,然而后期的实际分析中只需要原始数据包中的一部分,这就造成了大量的磁盘空间的浪费,而且还需要额外的计算资源来处理这些数据。
图2 双缓冲多线程技术
图2是本文设计的系统双缓冲多线程技术,它采用了双缓冲机制,减少了多线程锁的开销,而且使用多线程技术,避免应用层来不及处理而造成丢包。具体流程如下:
①数据包到达时,网卡接收数据到达信号,产生硬中断,通知CPU进行调度处理。
②中断服务程序判断数据包的有效性,若有效则分配一个缓冲,并把数据包插入到内核的NIC Buffer队列中;否则直接返回。
③程序通过系统调用将内核中的数据包拷贝到用户空间,由于数据包到达速率很快,这里使用双缓冲机制。即当数据包到达时,存入缓冲队列1中。
④后台处理线程启动,数据包捕获线程将捕获到的数据存入缓冲队列2中,后台处理线程开始处理缓冲队列1中的数据包,两个线程交替进行,减少了内存使用上的冲突,提高了效率。后台处理线程根据数据包的〈源IP,目的IP,源端口,目的端口,传输层协议〉计算出它的Hash值,并且从Conversation池中找出Hash值对应的会话流信息,并判断流当前状态。如果Conversation已经结束,就将Conversation移入待转移流池,反之,将数据包加入流中。
图3 采集程序流程图
如图3所示,这是实际的流量采集程序工作流程图,为了达到实时捕获的要求,数据包捕获速度与数据包处理速度相匹配,本文使用多线程进行处理,程序中比较关键的有以下几个线程。
①Winpcap数据包捕获线程:调用底层Winpcap捕获数据包,并将原始数据包存入队列中。这里采用两个缓冲区,数据包存入队列1时,后台线程处理队列2,避免了内存的同步互斥,大大提高了效率。
②后台线程:每隔0.2秒扫描原始包队列,将数据包加入处理队列,并通知数据处理线程进行处理。
③数据处理线程:根据数据包五元组〈源IP,目的IP,源端口,目的端口,传输层协议〉的HASH值在Conversation池中找到对应的Conversation,根据TCP的标志位(SYN,FIN,RST)决定一条流是否结束。如果流结束,将流移出内存,通知数据库保存线程存入数据库。
④内存管理线程:一直后台运行,扫描Conversation池,移出超时的会话流(120s内没有新包到达)。
⑤数据库保存线程:负责将流写入数据库。
3 实验
本文采用的系统采用C#编程实现,并且分别在Windows平台和Linux平台进行了测试,在Windows平台使用.NET、SharpPcap和Winpcap技术,而在Linux平台采用Mono,SharpPcap和PF_RING进行抓包。
表1 真实网络环境丢包率
如上表1所示,前两项是使用Windows平台的Winpcap对校园网络的流量进行抓取产生的丢包率,第三项是采用Linux平台下的PF_RING抓包的效果。从表中可以看出,采用PF_RING之后,比Winpcap取得了更好的效果,这是因为PF_RING利用内存中的环状缓冲区减少了内存拷贝,提高了效率。在用户空间,分别采用单线程和多线程进行会话流重组统计,在千兆以太网环境下,单线程丢包十分严重,而多线程则明显改善了效率。
4 结语
本文首先研究了网络流量采集组件Winpcap的原理,然后利用双缓冲机制减少了多线程锁的开销,利用多线程技术提高了数据包处理效率。实验证明,该系统可以有效地减少利用的丢包率,在千兆以太网环境下,利用PF_RING替换Winpcap,实现了零丢包。
参考文献:
[1]Barakat C,Thiran P,Iannaccone G,et al.A Flow-Based Model for Internet Backbone Traffic[C].Proceedings of the 2nd ACM SIGCOMM Workshop on Internet measurment.ACM,2002:35-47.
[2]Fraleigh C,Moon S,Lyles B,et al.Packet-Level Traffic Measurements from the Sprint IP Backbone[J].Network,IEEE,2003,17(6):6-16.
[3]Winpcap技术文档[EB/OL].http://www.Winpcap.org/,2014.
[4]谢鲲,张大方,文吉刚,等.基于 Winpcap的实时网络监测系统[J].湖南大学学报(自然科学版),2006,33(2).
Design of Network Traffic Capture System on High Speed Network
JIAGN Tian-yu,HU Yang-rui
(College of Computer Scicece,Sichuan University,Chengdu 610065)
In order to let network anomaly detection system to work in high speed network environment,implements a network traffic collection system.Uses double buffering mechanism to reduce the overhead of thread lock and uses multithreading to improve system efficiency.The system also has good scalability,and can migrate to other platforms.Eventually the system is used to solve packets online capture problem in high speed network.
Network Traffic;Anomaly Detection;Network Security
1007-1423(2017)09-0137-04
10.3969/j.issn.1007-1423.2017.09.032
江天宇(1991-),男,江苏无锡人,在校学生,研究方向为信息安全
胡洋瑞(1991-),男,四川成都人,在校学生,研究方向为信息安全
2017-03-06
2017-03-15