当前位置:首页 > 四川大学学报工程科学版论文模板
NTCI-Flow:一种可扩展的高速网络流量处理框架
王煜骢1,陈兴蜀*,罗永刚,王岳
(四川大学 计算机学院,四川 成都 610065)
摘 要:针对当前基于软/硬件的流导出技术存在的数据失真、不易扩展等问题,提出了一种准确、通用、易扩展的高速网络流量处理框架NTCI-Flow。该框架通过增加高性能包抓取工具,改进与优化传输性能,引入消息系统将流量高速导入实时处理平台进行分布式的包解析与流重组,增加Hive流数据导入模块实时存储网络流量,实现了万兆流量的准确采集及可扩展处理,为大数据分析网络流量奠定基础。实验结果表明,NTCI-Flow可实现万兆流量的采集与处理,每秒可处理1260万个包,易于在大规模集群中部署,具有良好的扩展性,且得到的流量统计信息比NetStream更准确。 关键词:包抓取; 大数据; 分布式; Storm; 流重组
中图分类号:TP302 文献标志码:A
NTCI-Flow:A Scalable High-speed Network Traffic Processing Framework
WANG Yucong, CHEN Xingshu*, LUO Yonggang, WANG Yue
(School of Computer Sci.,Sichuan Univ.,Chengdu 610065,China)
Abstract:Current software-based and hardware-based network flow export technologies are lack of scalability and data accuracy. In order to solve these problems, a accurate, generic, scalable high-speed network traffic processing framework NTCI-Flow was presented.Firstly, the collection and forwarding of 10 Gbps network traffic was realized by adding high-performance packet capture tool and improving transmission performance;Secondly, the function of distributed packet parsing and flow restructuring was achieved by importing network traffic into real time processing platform with message system;Finally, network traffic was stored into Hive in real time by implementing streaming data storage module to achieve the goal of Big data analysis of network traffic. Experimental results showed that NTCI-Flow could realize the collection and handling of 10 Gbps network traffic and process 12.6 million packets per second. In addition, NTCI-Flow could be easily deployed in large-scale cluster with better scalability and traffic statistics accuracy then NetStream. Key Words: packet capture; Big Data; distributed; Storm; flow restructuring
网络流量信息是网络安全分析系统中的重要数据源,但随着网络流量规模的不断增加,处理网络流量变得更加困难。为应对该问题,已有解决方案大致可分为以下几类:
1)基于硬件的解决方案
基于硬件板卡采集网络流量是目前较通用的解决方案,即使用IPFIX[1]、NetFlow[2]或NetStream[3]采集板卡实现流量采集及网
收稿日期:2016-05-31.
络流导出。但是,该方案需网络设备(如路由器)支持,并且由于它使用采样的方式采集网络流量,牺牲了数据的准确性,导出的网络流信息与实际流量存在偏差,不适用于网络安全分析的场景。
2)基于软件的解决方案 随着x86平台的发展,已有许多机构研究利用单机多核的软件方式对网络流量进行采集与处理。
基金项目: 国家自然科学基金资助项目“基于动态多维特征的网络行为模型研究”(61272447) 作者简介:王煜骢(1991-),男,硕士生. 研究方向:大数据安全. E-mail:stwwxjs@163.com. *通信联系人E-mail:chenxsh@scu.edu.cn 网络出版时间:此位置必预留
10个五号字空位 网络出版地址:
1
DPDK[4]、PF_RING DNA[5]等基于零拷贝技术实现软件方式的高性能抓包,nProbe[6],YAF[7]则在高性能抓包工具的基础之上,实现了基于流的统计输出功能。为实现性能扩展,nProbe通过网卡的RSS(Receive Side Scaling)技术将网络包分组至多个队列存储,然后利用多进程采集每个队列中的网络包并实现流重组功能;YAF则使用单进程抓取并分发网络包,然后利用多进程并行处理,实现流重组功能。由于上述软件均采用单机架构实现,性能受单机的CPU核数限制。
此外,由其导出的流数据通常存储在本地磁盘,通过建立索引实现简单的检索及分析,如n2disk[8],SiLK[9]等,不具备与其他数据综合分析的能力。
针对当前研究存在的问题,本文提出了一种可扩展的高速网络流量处理框架,主要贡献如下:
1)基于高性能的包抓取技术实现万兆流量采集,利用批处理技术改进与优化导入性能,制定分发策略实现网络包的分组分发。
2)基于Storm实现包解析和流重组功能,采用分布式架构解决单机处理的性能受限问题。
3)解决Hive数据仓库不支持流数据导入的问题,实现包信息与流信息的实时存储,为大数据分析网络流量奠定基础。
1 NTCI-Flow框架
NTCI-Flow基于大数据平台构建,整体框架如图1所示,包括以下模块:
1)网络流量采集:实现高性能的网络
包抓取,并高速转发至消息系统缓存。
2)消息系统:使用高性能的分布式消息系统Kafka缓存数据,并作为数据总线负责数据收集层与实时处理层间的数据传输。
3)实时处理:基于Storm实现分布式的包信息提取及流重组功能。
4)分布式存储:使用HDFS分布式文件系统永久存储包信息和流信息,利用Hive管理元数据,与交互式分析平台集成。
5)离线/交互式分析:使用离线分析平台Spark或Hadoop实现复杂的流量分析建模;使用Spark SQL实现交互式分析。
分布式存储离线/交互式HDFSHive分析Spark网络流量采集实时处理SparkSQL包信息提取流重组Hadoop消息系统 图1 NTCI-Flow架构图
Fig.1 Overview of the NTCI-Flow architecture
1.1 网络流量采集
传统的网络包抓取方式通常是基于LibPcap[10]实现,具体实现如图2左部所示,网络包到达网卡驱动后首先通过DMA方式存入环形缓冲区,然后拷贝至内核态的抓取缓冲区,最后由用户程序拷贝至用户态缓冲区进行处理。该方式抓取一个网络包需要经过多次数据拷贝、一次中断和系统调用,抓取性能较低,在高速网络流量的环境下存在严重的丢包现象。
如图2右部所示,本文采用PF_RING DNA工具,通过使用内存预分配、自定义网络缓冲结构、内存映射等技术,实现了网络包零拷贝,解决了传统抓包方式存在的高丢包问题,保证了万兆网卡的线速包抓取能力。
2
传统抓包方式PF_RING DNA用户态应用缓冲区接收缓冲区(内存映射)抓取缓冲区内核态DMA缓冲区DMADMA驱动FIFOFIFO网络包网络包图2 网络流量采集实现示意图
Fig.2 Implementation of network traffic collection
1.2 高速流量导入
为解决单机处理性能受限的问题,需要将采集的网络流量分发至多个节点进行分布式处理。为了避免数据收集层与数据处理层耦合度过高,本文采用Kafka消息系统中间件构建分布式导入层,从而实现可扩展的网络流量导入。
本文选用Kafka作为中间件主要有以下两方面的考虑:
1)与MemcacheQ[11]和Redis[12]等内存消息系统不同,Kafka将所有消息持久化存储到容量较大的磁盘中。因此,Kafka可提供更高的存储能力,更适合大规模网络流量传输的场景。
2)Kafka使用主题来区分不同类型的消息,每个主题包含一个或多个分区,单个分区中的消息被顺序存储及消费[13]。由于Kafka采用分布式架构实现,分区可分布于多个节点,扩展性优于单机多队列方式。
为实现网络包的合理分发,本文设计如下发送策略,将属于同一条流的所有包发送至相同分区存储:
Pid?hash?t1,t2,t3,t4,t5?modn
其中,Pid为包存入的具体分区号,ti,i??1,5?为包中的五元组,
即源IP地址、目的
IP地址、源端口、目的端口、第3层协议类型,n为Kafka中存储原始包的分区数。
网络流量的导入性能不仅与Kafka自身吞吐率有关,还受限于发送进程的网络传输性能。经测试,若不考虑网络带宽,发送进程的传输性能与网络包大小成正比,即网络包越大,传输速率越快。然而抓取的网络包普遍较小,通常不超过1518字节,因此,本文利用批处理技术将多个网络包封装为一条大消息进行发送,从而提升传输性能。 1.3 分布式流处理
同一条流中的网络包具有相同的五元组,即源IP地址、目的IP地址、源端口、目的端口、协议类型[2]。因此,本文对流的定义为,在一定时间内具有相同五元组的网络包的集合。
同时,流老化条件定义如下:
? 流已经空闲了指定的时间长度
(Inactive Timer,默认为15秒) ? 长时间会话强制超时(Active
Timer,默认为30分钟) ? TCP标识包含FIN、RST。
本文采用基于流的方式记录网络流量信息,即将五元组相同的包进行汇总,收集其统计特征并输出。nProbe、YAF等通常在同一进程中实现包的采集、解析以及流重组,很难灵活地扩展性能。为解决该问题,本文将包的读取、解析以及流重组操作划分成多个功能组件,基于Storm平台实现分布式流处理,其拓扑图如图3所示。
通过采用Storm实时计算框架,各功能组件均可灵活配置并行度,其运行实例可运行在不同节点之上,基于不同的分组机制进行高效的数据传输,从而实现性能扩展。
读取包解析分发流重组存储
图3 分布式流处理拓扑图
3
Fig.3 Topology of distributed streaming data
processing
1)网络包读取组件
该组件负责从Kafka读取网络包,然后使用Storm的Shuffle分组机制均衡地分发给各个包解析实例;
2) 包解析组件
该组件负责对每个网络包进行解析,提取相应信息,如源IP地址、目的IP地址、源端口、目的端口、第3层协议类型、包大小等。
3)分发组件
该组件基于一定的策略对提取的包信息进行分发,主要完成以下两个功能:
a)基于流的转发:将包信息按其所属流进行转发,保证属于同一条流的所有包分发至同一流重组实例中处理。
b)包信息重用:将包信息同时分发给其他组件(如存储组件),实现包信息重用及功能扩展。
4)流重组组件
该组件的具体实现如图4所示,其中,流表基于Hash桶实现,由五元组构成的原始字节数组作为Hash桶的键,流的统计信息作为值保存在Hash桶中,主要包括五元组、包数、总字节数、流持续时间、流方向(连接发起方或接受方)等。
通过增加以下两个线程对流表进行操作,实现流的创建、更新及导出功能:
包信息线程1哈希、查找流表创建/更新/移除流输出遍历、移除线程2 图4 流重组实现示意图
Fig.4 Implementation of flow restructuring
a)线程1负责对包信息进行处理,利用
五元组构成的键从流表中查找对应的流,若
不存在,则创建新的流存入流表中;若存在,则检查该流是否已老化,若未老化,则对流中的统计信息进行更新;否则移除该流,并将其统计信息输出,然后创建新的流存入流表中。
b)线程2负责定期扫描流表,移除不活跃的流,并将该流的统计信息输出。
5)存储组件
该组件负责对提取的包信息或导出的流信息进行实时存储。 1.4 实时分布式存储
NTCI-Flow底层存储采用分布式文件系统HDFS以满足高吞吐量、高可靠性、低成本及可扩展等要求,并利用Hive数据仓库管理元数据,从而更好地与交互式分析平台Spark SQL集成。
由于流信息和包信息数据量较大,为减轻存储压力,需选择合适的文件编码和压缩方式。已有大量工作对比了Parquet、Avro、JSON、Sequence File、ORC等文件格式性能[14]。根据已有的测试结果,考虑到包信息产生速率较快,选用非压缩的Sequence File格式保证高写入速率;而流信息输出速率适中,选用面向分析型业务的列式存储格式Parquet,同时结合高效的Snappy压缩算法以优化分析效率。
Hive只支持批量导入数据到Hive表中,而NTCI-Flow需要将流信息逐条写入Hive表。因此,本文基于Kite SDK[15]开发流导入组件,实现Hive的实时流导入,同时提供基于时间的动态分区机制,减少按时间段分析中不必要的数据读取操作,从而减少交互式分析的响应时间。
2 扩展性分析
2.1 功能扩展
网络流量分析的技术、算法以及可以关联分析的数据源均在不断发展,为适应不断更新的需求,NTCI-Flow采用了解耦合的思想,通过添加Kafka中间件提升本框架的功能扩展性。
由于Kafka实现了数据在可配置时间内的持久化存储,定义了统一的数据存储格式
4
共分享92篇相关文档