APP下载

一种基于NDIS中间层驱动的园区网流量控制方案

2010-11-27陈知新张智勇

湖南师范大学自然科学学报 2010年1期
关键词:网络应用中间层园区

陈知新, 张智勇, 施 游

(湖南师范大学网络中心,中国 长沙 410006)

传统的分类方式一般根据网络的规模而划分为局域网、城域网和广域网,其中局域网一般指包含数十至数千个接入信息点的网络.而在实际中,一般的高校、大型企业的内部网络往往覆盖数十栋建筑,拥有数万至数十万的信息点,我们将这种网络称为园区网,它的规模介于局域网和城域网之间,并且有以下共同的特性:(1)一般采用经典的3层结构,包含接入层、汇聚层与核心层;(2)一般为以太网络;(3)共享一个或多个网络出口;(4)对于接入信息点的管理是弱管理,对于用户的行为无法有效控制[1-11].这样的园区网有非常明显的优势,比如能够支持100 M~1G的接入带宽,能够最大化地利用出口资源等,但是也受其组网技术的影响,存在很多不可避免的问题,出口拥塞就是其中最迫切需要解决的问题.

拥塞的发生是网络带宽不满足用户使用需求而导致的,但是无限制的扩充网络带宽并不可行,使用传统的组网设备也无法实现资源的优化分配.针对这一问题,部分园区网采用购置流控(Traffic Control)设备的方式来解决,但是这类设备由于内置诸多功能和算法,运行效率很难适应需求,极易形成新的瓶颈,并且价格昂贵,难以推广.综合上述方面的考虑,我们认为基于客户端软件来实现流量控制功能是针对园区网络的最佳方案.

NDIS(Network Driver Interface Specification)是Windows平台下编写网络驱动程序的接口规范,基于NDIS编写的网络驱动程序又分为协议驱动、MiniPort驱动和中间层驱动,TCP/IP协议在Windows系统中就是通过协议驱动实现的.中间层驱动工作在协议驱动和MiniPort驱动之间起桥梁作用,因此,实现网络流量的控制功能最直接的方法就是编写一个NDIS中间层驱动安装到操作系统中,这个中间层驱动程序需要受到客户端应用程序的管理,并且接受中心服务器的统一调度;另外,为了强制用户计算机安装该驱动,还需要整合接入控制功能.

1 系统构成

基于上述考虑,整个系统需要包含以下部分:

1.1 用户认证中心.认证中心保存和维护园区网中需要联网的用户信息,用户接入园区网时,首先向认证中心发送一个接入请求,认证中心收到接入请求后根据定义的规则来决定是否允许用户的接入.用户的接入控制需要接入设备的支持,可以采用802.1X协议或下发访问控制列表的形式来实现,一般支持网络管理的交换机都包含这样的功能.

1.2 调度中心.调度中心保存和维护一套流量控制规则,用户通过接入审核之后,调度中心将针对该用户的流控规则下发到用户计算机中,从而实现针对该计算机的流量控制;调度中心还需要实时的采集用户计算机上报的流量情况以及出口负载情况,并根据定义的规则进行调整.

1.3 流控客户端.客户端部分包含中间层驱动、接入认证模块和调度代理模块.其中接入认证负责与认证中心通信以获得接入许可,并且检查客户端模块的完整性,防止非法接入;调度代理负责与调度中心通信,接收流控规则并下发给中间层驱动,最后由中间层驱动实现都带宽的管理功能.

2 核心算法

2.1 应用识别

过去对网络应用的识别一般是通过会话层协议的端口号来进行判断,随着网络技术的发展,越来越多的网络应用不再使用固定的端口号;同时,端口复用技术的出现也使得利用端口号识别网络应用的方法不再有效,因此我们必须采用较复杂的方式来识别.

NDIS中间层驱动工作在OSI 7层模型的传输层之下,识别到的数据包是以NDIS_PACKET结构表示,事实上是数据分块组成的链表.对该结构进行处理最终实现对其承载应用的识别需要经过逐层归纳,归纳流程如下:

图1 逐层归纳流程

详细步骤:

i. 对NDIS_PACKET进行链表遍历,得到Raw Packet.

ii. 以上方法得到的Raw Packet可能不包含2层帧头,如果包含则进行2层帧头分析并过滤非法Packet,并将IP协议的Packet送往3层包头分析,其余合法Packet直接放行.此步骤可以防止各种2层攻击行为,比如arp sproofing.

iii. 对具有合法2层帧头的Packet进行3层包头分析,此步骤将Packet依照4层协议进行分类,有会话状态的协议(TCP/UDP)送往会话表进行分析,否则送往逐包分析.

iv. 将七元组(源地址,目的地址,源端口,目的端口,协议号,应用标记,数据缓存)作为会话表项存入会话表中,Packet进入会话表分析器时,分析器将得到它所属的会话表项,如果该表项应用标记非空,则可直接判定Packet所属的应用类别;如果应用标记为空,则尝试将Packet数据附加到数据缓存尾端并针对数据缓存进行应用分析,之后将得到的结果写入应用标记字段.应用分析流程描述如下:

Application GetApplication(Packet p,Sessions)

{

Application R;

If (s.Application!=null) returns.Application;

If (s.Cache.isFull= =true)

{

//缓存已满,转为逐包分析

R= GetApplicationByStream(p.ToStream);

s.Application=R;

return R;

}

Else

{

s.Cache.Append(p);

R= GetApplicationByStream(s.Cache.ToStream);

s.Application=R;

return R;

}

}

以上代码中使用GetApplicationByStream函数来识别网络应用.决定应用的核心是特征,我们作如下定义:

定义1f是(x,λ)到{true,false}的映射,其中x是原始流量数据,则称f是判定函数,λ是特征参数,f(x,λ)为原子判定命题,(f,λ)为原子特征;若有f(x,λ) = true,则称x具有原子特征(f,λ).

定义2若对于(f2,λ2)…(fk,λk),以及逻辑运算F,有F(f2(x,λ2)…fk(x,λk))=true,则称x具有特征F((f2,λ2)…(fk,λk)).

在本系统中,中间层驱动工作在系统的派遣层(Dispatch Level),应用程序与之交互都要使用DeviceIoControl函数来进行,也不能使用动态链接库(DLL)技术.所以,后定义的判定函数只能通过内置虚拟机的方式实现,工作效率难以保证,并不适合过多的使用.因此我们预定义了两个判定函数,分别做基于掩码的特征判定与基于正则表达式的特征判定,基于掩码的特征判定算法如下:

bool MatchPattern(Streamx, Patternp)

{

Streamt; //分配临时空间

t.SetLength(p.Length); //设置临时空间长度

memcpy(t,x+p.Offset,p.Length); //将原始数据中需要比较的段落复制到临时空间

if (memcmp(t&p.Mask,p.Stamp &p.Mask)= =0) //和掩码做与运算后同特征值比对

return True;

else

return False;

}

bool MatchRegExp(Streamx, RegExpr)

{

returnr.Match(x);

}

由于大部分网络应用协议都使用TCP/UDP作为承载协议,并且在数据区域内定义了自己的协议规范,这些协议或者是基于二进制结构的,如ed2k、BitTorrent等,或者是基于文本的,如HTTP等.这两者的区别是,基于二进制结构的协议,字段都存放在固定的位置上,一般可以用基于掩码的特征判定函数进行判定;而基于文本的协议,则可以用正则表达式的模式进行匹配.所以,这两个预定义的判定函数能够用于识别绝大多数的网络应用.

系统为了识别众多的应用,必然定义了一个庞大的特征库,为此,我们设置了两种机制以提高运行效率.先是对特征库进行预处理,用于检测原子特征之间的推理关系,这样可以避免执行不必要的判定函数,例如:

可看出,如果x具有(MatchPattern,p1)特征,则必然也具有(MatchPattern,p2),而且不会具有(MatchPattern,p3)特征.

其次是对特征分配了缓存区,开始对一个原始数据进行判定之前,初始化缓存区,判定一个特征前,先检查缓存区内是否已经保存了该特征的判定结果,如果没有才执行判定函数并将判定结果写入缓存区.比如:

特征a=(f,λ2),b=(f,λ2),c=a∧b,d=a

使用缓存区前,共需执行函数5次,使用缓存区后,判定c、d时将直接从缓存区读取,故只需执行两次;如果预处理时能得到a、b的推理关系,那么执行次数还可能更少.

2.2 流量控制策略

i)带宽管道.流量控制采用管道策略,管理人员将带宽划分成若干个流量管道,指定的应用被导向某一管道中,接受流量监管.当发现占用的带宽超过管道容量时,采用缓存并延迟发送的方式来处理.如果缓存区满,则直接丢弃封包.

ii) 弹性机制.采用弹性机制的方式进行带宽管理可以提高带宽的使用率.在策略许可的情况下,可以借用其他管道尚未占满的带宽;允许突发流量超过阀值,这可以提高某些网络应用的用户体验,比如视频点播.

3 总结

本文针对园区网络的特点提出一套完整的流量控制软件方案,系统的大部分模块已经编写完成.我们主要就NDIS中间层驱动做了一些测试,验证了应用识别算法的可行性;在网络流量较大的计算机上进行测试时,没有发生CPU使用率上升较大或网络延时变大的现象,证明性能方面能符合一般用户的使用需求.下表给出了一组统计数据,用于比较启用流量控制前后的区别:

表1 流量控制方案的比较

这组实验是在本机上打开迅雷软件进行BT下载,同时进行网页的浏览,时长为10 min.如此重复3次,为了让实验结果更有说明性,我们尽可能的保持一样的操作.第1次不启用任何流量控制规则,第2次启用的方案1是对所有流量限制带宽为300 KBps,第3次启用的方案2是对BT规则限制带宽为300 KBps.

很明显,启用流量控制方案对带宽控制起到了很大的作用,同时通过对这组实验的数据进行定性分析后我们发现,如果采用方案1的模式进行限制,也就是在带宽控制时不进行应用识别,HTTP这类应该予以保障的应用反而被BT等应该限制的应用所挤占;而采用方案2之后,HTTP协议的网页浏览未受影响,因此用户能获得更好的上网体验.

值得提出的是,本文给出的网络应用识别算法并不是一种精确算法,识别应用时不可能精确到每个数据包或每个会话,并且,由于很多应用协议具有相似特征,导致误判的情况是不可避免的.事实上,目前也没有任何一种算法能实现对网络应用的精确识别,我们通过与行业内的其他硬件或软件方案比较后发现,本文提出的方案具有很大的优势与应用价值.

参考文献:

[1] 王变琴.基于机器学习的网络应用识别研究[J]. 计算机科学,2009,1(36): 19-23.

[2] 孙知信.一种基于流特性描述的P2P流量模糊识别方法[J].计算机学报,2008,7(31):1 254-1 260.

[3] SEN S,WANG J.Analyzing peer-to-peer traffic across large networks[J]. IEEE/ACM Trans on Network,2004,12(2):219-232.

[4] 吴 伟.一种基于行为模式的Skype流量识别方法[J].计算机工程与应用,2009,45(27): 92-95.

[5] PATRICK H,SEN S, SPATSCHECK O. ACAS: Automated construction of application signatures:proceedings of ACM Sigcomm,Philadelphia:PA, Aug 2005[C]. New York:ACM, 2005.

[6] 郭长金.基于网络流量控制策略的研究与实现[J]. 微计算机信息, 2007,10 (23): 163-167.

[7] 郑淑晖.基于自学习模式下的网络流量控制研究[J]. 北京理工大学学报, 2003,2(23): 202-206.

[8] 章 淼.互联网端到端拥塞控制研究综述[J]. 软件学报,2002,3(13): 354-363.

[9] 汪 涛.面向高校网络流量控制的策略研究[J]. 南京工业职业技术学院学报,2009,9(2):72-74.

[10] 陈 岭.基于Passthru的网络控制[J].电脑知识与技术,2009,8(5):6 383-6 385.

[11] 吴企渊.计算机网络[M].北京:清华大学出版社,2005.

猜你喜欢

网络应用中间层园区
一种十七股子午胎钢丝帘线
苏通园区:激荡开放潮 十年再出发
交通领域中面向D2D的5G通信网络应用探析
园区的开放样本
从园区化到国际化
大气环境质量评价工作中基于MATLAB的BP神经网络应用探究
网络应用识别系统的研究与实现
镍基高温合金TLP扩散焊中间层材料研究进展
B含量对IC10合金TLP焊接用中间层材料及接头组织的影响
园区开发Ⅱ个股表现