APP下载

SDLB技术在高速网络环境协议分析中的应用研究

2013-01-31

电视技术 2013年17期
关键词:会话引擎分流

马 晋

(重庆市气象局,重庆401147)

网络数据包的特殊传输形式使得协议分析技术在网络安全应用中具有特殊优势,例如,协议分析是网络入侵检测研究的主要技术[1],也是通信流量识别[2]的重要技术,其本质是根据协议规范分析网络数据包,确认数据包的协议类型。协议分析的前提是采集网络数据包,数据包的捕获能力是决定协议分析性能高低的首要因素。随着网络规模的不断扩大,网络带宽日益增长[3],从高速和海量的网络流量中实时采集数据包的难度很大。

1 问题分析

采用传统Libpcap库等普通模式下的数据包采集机制已经难以适应高速网络的发展,为了提高采集效率,高速网络环境下通常采用零拷贝技术[4],但它只是减小了由于数据拷贝带来的系统开销,存在着必须对网卡底层驱动程序进行改造的问题,也就是说数据包的采集一定要与特定的硬件系统相关,系统的可移植性将会受到很大程度的影响。

由于数据包采集的硬件处理器处理能力的增长远远低于网络流量增长的速度,在这种情况下,负载均衡技术被应用到采集系统来解决高速网络下的数据采集问题。但是当前的负载均衡策略主要有针对特定应用的策略和针对特定目标的策略。针对特定应用的负载均衡策略是指专门针对一种特定应用协议(HTTP、FTP或者SMTP等)进行分流,基于该策略,根据识别网络数据流中数据包的应用协议类型将数据包分发到相应的引擎中,但是当多种协议的数据流量不均匀时,就很难达到负载均衡的效果;基于主机源地址[5]的调度策略是针对特定主机的网络数据流进行分流,根据识别网络数据流中的主机IP地址将数据包分发到相应的引擎,但是同样的,当多个目标主机的数据流量不够均匀时,难以实现负载均衡。在对网络数据包的协议分析过程中,不仅仅是单独分析某个数据包的内容,更重要的是要考虑数据包的上下文关系,需要保证分流的正确性,即要避免将属于同一个会话的数据包被分流到多个引擎。如果不能保证被分流到同一个引擎会话的完整性,就可能造成入侵检测的漏报现象,例如Web请求“GET/cgi-bin/phf”是Unix系统下的一个Web入侵特征串,但如果攻击者将该请求分成多个网络数据包发送,比如一个数据包含有“GET/cgi-”,另一个数据包包含“bin/phf”,如果不能把这些网络数据包转发到某个固定的分析引擎,就无法正确检测到攻击行为的发生。

为了解决上述高速网络环境中协议分析存在的问题,本文给出了一种改进的基于会话的动态负载均衡技术,即SDLB(Session Dynamic Load Balance)技术。

2 解决方案

本文所提出的基于SDLB技术的高速网络环境中协议分析的解决方案应用了负载均衡、模式匹配、数据包分流、协议分析等技术,其参考模型如图1所示。

图1 基于SDLB技术的协议分析参考模型

基于SDLB技术的协议分析参考模型包括数据采集模块、Session分流模块、负载均衡模块和协议分析模块。首先需要将采集到的高速网络数据包分解成以Session会话为单位的数据流,通过Session分流模块的控制将同一Session的数据流分配到相同的协议分析引擎,再经负载均衡模块维持各协议分析引擎的负载均衡性,最后由协议分析模块实现协议解析。下面给出SDLB技术在协议分析中实现数据包的Session分流和维持数据包分流的负载均衡性的工作原理。

2.1 数据的Session分流

一个会话对应于TCP数据流的一个连接,本文使用一个〈源地址,目标地址,源端口,目标端口,协议类型〉五元组即〈Sip,Dip,Sport,Dport,Ptype〉来定义;对于UDP、ICMP等无连接协议的数据包以及不完整的TCP连接数据包,本文设定相近时间内具有相同五元组的所有数据包为一个会话单位。下面介绍SDLB技术保证同一会话分流到相同协议分析引擎的工作过程。

对网络数据包按照上述对会话的定义提取五元组信息进行计算,以8位长度为单位进行运算,即将32位的IP地址分割成4个8位数据,16位的端口号分割成2个8位数据,协议类型为8位则保持不变,将分割后的8位数据做二进制加法运算,这样同属一个会话的五元组所得到的和肯定是相同的,所以能够保证同一会话的数据包的完整性,但是不属于这个会话的数据包的五元组也有可能做加法运算后的和与该会话的和相同,例如,〈192.168.3.100,192.168.3.10,4000,80,6〉的五元组和〈192.168.3.90,192.168.3.10,80,4010,6〉的和值是相同的,但是他们不属于同一个会话。为了进一步细分不同的会话,引入异或运算,即将作和运算后值相等的五元组再进行按照8位二进制的异或运算,如果异或后的值相等则判定为属于同一会话。如果加法运算后的和相等,再将五元组做8位异或运算后的值也相等,则取加法运算的和值记为S,再进行取模运算,数据欲分配的引擎号按照E=S mod n计算,其中n为协议分析引擎的数量,E则为某个会话将被分配的引擎号。可以证明,属于同一个会话的五元组计算出的S是相同的,即如果S1=S2,则有E1=S1mod n=S2mod n=E2,即E1=E2,所以SDLB技术保证了属于同一会话的数据流被分配到同一个协议分析引擎中。

2.2 数据的负载均衡

SDLB技术可以通过动态地获取当前引擎的负载情况,将新的会话数据包分发给当前负载最小的引擎。用一个负载函数表示第i台协议分析引擎在时刻t的负载状态值

式中:a1,a2,a3,a4分别代表在t时刻第i台引擎正在处理的会话数Si(t)、尚未处理的数据包剩余量Pi(t)、CPU占用率Ui(t)、内存占用率Mi(t)对引擎负载的影响因子,它们满足式子,各影响因子应根据具体的流量环境确定。Li(t)的值越大,表明引擎的负载越重。

考虑到动态反馈需要额外的系统开销,所以还引入负载修正值的定义。引擎的负载修正值是指在t1时刻会话S的分配或完成导致的相应引擎增加或减少的负载量,其定义式为

式中:Li(t1)是指在t1时刻动态反馈得到的引擎负载,Si(t1)是指在t1时刻引擎正在处理的会话个数。

SDLB技术中定义两张表,即引擎负载表和数据包分发表,这两张表具有动态学习的功能。其中引擎负载表包含引擎号、正在处理的会话数、数据包剩余量、CPU占用率、内存占用率和负载量;数据包分发表包含〈Sip,Dip,Sport,Dport,Ptype〉五元组、引擎号和更新时间。通过引擎负载表和数据包分发表的动态学习,实现引擎负载表的定时更新、数据包分发表的定时更新以及数据包会话分流的功能。下面将介绍这3个功能的实现原理。

1)引擎负载表的更新

负载表的更新工作过程如下:

(1)将引擎负载表中的各项初始值置为0;

(2)设定时间间隔Tp;

(3)搜集各个引擎的负载信息,包括会话数、数据包剩余量、CPU占用率和内存占用率等;

(4)按照式(1)计算各个引擎的负载量;

(5)用上述最新的各个参数更新负载表中的表项;

(6)等待Tp时间到,跳转到(3)。

2)数据包分发表的更新

数据分发表的更新工作过程如下:

(1)将数据分发表中的各项初始值置为0。

(2)设定时间间隔Tp,设定时间阈值Ts。

(3)将数据分发表的指针指向表中的第一条记录。

(4)读取该记录的更新时间ti。

(5)将当前时间t与更新时间ti的差值Δt和Ts作比较,如果Δt>Ts,执行(6),否则执行(7)。

(6)读取该记录中的引擎号E,删除该记录(定时清除超时的会话记录),然后按照式(2)计算引擎E的负载修正值ΔLi;更新负载表引擎E的表项记录,会话数Si=Si-1,负载值Li=Li-ΔLi。

(7)将数据分发表的指针下移,判断是否表的结束,是结束位置执行(8),否则执行(4)。

(8)等待Tp时间到,跳转到(3)。

3)网络数据包的均衡分流

数据包分流过程基于数据分发表和引擎负载表工作。数据包分流的具体工作过程如下:

(1)新接收一个数据包,提取〈Sip,Dip,Sport,Dport,Ptype〉五元组信息。

(2)判断是否为TCP数据包,是TCP包,则提取TCP标志FIN和RST。

(3)在数据分发表中查找五元组〈Sip,Dip,Sport,Dport,Ptype〉所在的记录,查找成功执行(4),否则,执行(8)。

(4)读取该记录中的引擎号E。

(5)如果是TCP会话的最后一个数据包,即FIN=1或者RST=1,执行(6),否则执行(7)。

(6)删除该记录,然后按照式(2)计算引擎E的负载修正值ΔLi;更新负载表引擎E的表项记录,会话数Si=Si-1,负载值Li=Li-ΔLi,然后执行(1)。

(7)查询引擎负载表,如果由上面模运算得到的引擎号代表的引擎负载最小则直接发往该引擎;否则,找到负载最小的引擎E,即Li=min(Li),将数据包分发给对应的引擎E,并更新时间记录,然后执行(1)。

(8)查询引擎负载表,如果由上面模运算得到的引擎号代表的引擎负载最小则直接发往该引擎;否则,找到负载最小的引擎E,即Li=min(Li),将数据包分发给引擎E;在数据包分发表中增加对应五元组〈Sip,Dip,Sport,Dport,Ptype〉的记录:更新时间t,〈Sip,Dip,Sport,Dport,Ptype〉和引擎号E;按照式(2)计算引擎E的负载修正值ΔLi;更新负载表中引擎E的记录:会话数(Si=Si+1),负载值(Li=Li+ΔLi),然后执行(1)。

3 性能分析

为了测试SDLB技术的性能,在本单位数据中心机房将核心交换机所有流量分别镜像到两个千兆端口,分别以使用SDLB技术和未使用SDLB技术的组网方式进行数据采集和协议分析,为方便比较和分析,两种方式在同一时间进行测试。采用SDLB技术的组网环境以可编程的Intel网络处理器硬件平台作为数据包分流器,选用4台相同的带有2 Gbyte内存、250 Gbyte硬盘、主频2.0 GHz双核处理器的处理机作为协议分析引擎;未采用SDLB技术的组网方式是使用4台相同的处理机作为协议分析处理器,按照应用类型进行数据分流。实验共进行5次数据测试,每次测试时间为2 h,每5 min取一次采样值,取采样结果的加权平均值为测试结果。如图2所示,可以看出,采用SDLB技术的方式,数据包的丢包率大大降低,并且每台引擎内存和CPU占用率都比不采用SDLB技术的方式负载情况更加均衡,所以验证了SDLB技术的正确性和可行性。

图2 两种方式测试结果对比图

在此基础上,将SDLB技术应用到网络信息系统的运维管理工作中,把一台配置较高的服务器虚拟化出多台处理机作为协议分析处理器,通过SDLB技术进行数据分流,经过协议分析处理器对高速的数据流量进行协议分析,从而实现对高速网络数据进行实时统计监控和网络威胁报警,这对实际工作中信息网络的运维管理具有重要的意义。

4 小结

本文根据高速网络环境中的协议分析存在的问题,给出了一种改进的基于SDLB技术的协议分析模型,实验证明,SDLB技术可以提高协议分析引擎负载的均衡性和协议分析的完整性,适合应用在高速网络环境中的协议分析系统,对实现企业局域网高速网络数据的协议识别、流量监控和威胁发现具有重要意义。

[1]REED K D.Protocol analysis[M].Westland:WestNet Inc,2001.

[2]王超,张白愚.DVB-S中即时通信语音流量识别技术研究[J].电视技术,2010,34(9):13-16.

[3]肖寅东,王厚军,田书林.高速网络入侵检测系统中包头解析方法[J].仪器仪表学报,2012,33(6):1415-1419.

[4]李旭芳.网络信息审计系统中数据采集的研究与实现[J].计算机工程与设计,2007,28(3):550-552.

[5]周莹莲,刘甫.服务器负载均衡技术研究[J].计算机与数字工程,2010,38(4 ):11-14.

猜你喜欢

会话引擎分流
基于4G和5G上下行分流策略研究
涉罪未成年人分流与观护制度比较及完善
QQ和微信会话话轮及话轮转换特点浅析
NSA架构分流模式
蓝谷: “涉蓝”新引擎
基于集群节点间即时拷贝的会话同步技术研究①
汉语教材中的会话结构特征及其语用功能呈现——基于85个会话片段的个案研究
无形的引擎
基于Cocos2d引擎的PuzzleGame开发
肝胆胰外科手术与动、静脉自然分流