一种基于应用层检测的对等网络流量控制方法

文档序号:7946038阅读:616来源:国知局
专利名称:一种基于应用层检测的对等网络流量控制方法
技术领域
本发明是一种针对特定网络服务的流量识别与控制的方法。主要用来解决对等网络(P2P) 应用对网络资源争用,改善由此带来的网络阻塞情况,属T P2P流量识别与控制领域。
背景技术
P2P网络的流量有以下特点 不确定性
由于P2P应用的多样性导致其网络流量不仅在流量特征上,而且在行为特征上也表现出不确 定性。此外,P2P网络节点的动态性也增加了对等网络流量的不确定性。
海量性
P2P网络规模较大,给流量的实时检测带来了性能问题。
加密性
由于P2P网络属于应用层,因此为了躲避内容监管,现有P2P系统均对其载荷进行了加密处理。
现有的一些检测技术,可分为基于流量特征的识别方法(TLI)和基于深层数据包识别方法 (DPI)两类
(1) 基于流量特征的P2P流量检测方法的基本思想是通过对传输层数据包(包括TCP和UDP 数据包)进行分析,并结合P2P系统所表现出来的流量特征,来识别某个网络流是否属于P2P。但 是这类技术比较多,但普遍存在难以实际应用的缺点由于P2P多采用随机端口技术,因此TCP /UDP端口识别技术存在严重的漏报问题;网络直径的计算需要记录整个网络的连接状态,因此 不仅存储和计算开销大,而且也不支持P2P流量的实时识别与过滤;节点角色分析技术也需要记 录整个网络的连接状态,因此同样面临存储与计算开销大、无法供P2P流量的实时识别与过滤功 能等问题;由于域名服务器(DNS)等应用也会同时使用TCP协议和UDP协议,因此协议对分析技术 存在严重的误报问题;地址端口对具有性能高的优点,但是缺乏实时识别与过滤的能力。
(2) 基于应用层数据检测的P2P流量识别技术是通过协议分析与还原技术,通过对具体的 P2P协议及其对应的P2P系统的载荷进行特征提取,建立特征库。对于流经的实时网络流,采用 模式匹配算法,判断其中是否包含特征库中的特征串。如果特征匹配成功,该网络流就是P2P 数据。该方法对新P2P应用的流量识别具有滞后性,即在未升级特征库前无法检测新的P2P应用, P2P软件修改加密方案将导致旧的特征库失效。所以这种方案存在可扩展性差、缺乏分析加密数 据功能等问题。

发明内容
技术问题本发明的主要目的是提供一种基于应用层检测的对等网络流量控制方法,本 发明相比以往的方案,显著的提高了识别准确率,改善了扩展性差的问题,具有实时性强、部 署成本低的优点。技术方案本发明分成两个模块分别部署在主机和路由器上,主机在应用程序调用插口层 编程接口时对P2P数据进行识别,并对P2P数据包加标签,路由器收到数据包后做相应的分析 处理,并根据控制规则对P2P数据加以处理。
基于应用层检测的P2P流量控制方法由基于文件信息分析的主机识别方法和基于Linux路 由器的分层令牌桶(HTB)流量控制方法组成,其中,基于文件信息分析的主机识别方法实现步 骤为
步骤1).编写自定义套接字服务接口 (Windows Sockets SPI)框架,取代默认的SPI 链接库,
步骤2).分析目前主流P2P软件的文件信息,将它们的源文件名添加到识别库, 步骤3).将主机识别软件和识别库发布到网内各个主机上, 步骤4).当主机连网时,发出P2P数据包被加上标记, 步骤5).根据出现的新的P2P软件更新识别库,并发布到主机, 步骤6).如果主机没有安装主机识别插件,则无法上网,并在其连网时自动转到步骤
3);
基于Linux路由器的HTB流量控制方法实现步骤为
步骤21).路由器安装流量控制模块,配置HTB队列的参数,
步骤22).收到主机发来的数据包,检査服务优先级(TOS)字段,为零则说明主机没有安 装P2P识别插件,将数据包丢弃,
步骤23).根据数据包的源/目的地址分类,
步骤24).源/目的地址均属内网的数据包,根据TOS字段送入相应的HTB队列, 步骤25).对于内网发往外网的P2P数据包,提取其源地址/端口 ,査询P2P端口映射表, 如果没有找到,则作将其为新的表项插入,然后将此数据包送入HTB队列;经过协议地址转换 (NAT)转换后的数据包,如果是内网发往外网的,则对其进行逆向协议地址转换(De-SNAT)操作, 得到源地址/端口,然后以此查询P2P端口映射表,找到对应的表项后,将该数据包的源地址/ 端口,分别填到路由器地址/端口字段,
步骤26).对于外网发往内网的数据包,取出其目的地址/端口并査询P2P端口映射表,即 可获知该数据包是否为P2P数据包,然后将其送入HTB队列。
有益效果本发明提出了一种控制P2P流量的方法,相对以往的方法有一些显著的优点
(1) 识别准确率达到100%,消除了误判。软件的版本信息是在程序编译时生成的,普通用 户无法修改,对版本信息中的源文件名识别,不会出现漏判、误判等情况,而传统的在路由器 上进行识别的方式一般仅能达到90 % 95 %的识别命中率。
(2) 实现对P2P管理的细分,可以针对不同的P2P软件釆取不同的流量控制策略。比如QQ, MSN 等聊天工具也是基于P2P技术的,它们并不会造成带宽紧张,但按照一些传统的控制方法,有的 无法将这类软件区分出来,有的即使能做到也存在误判问题。
(3) 扩展性强。不需要进行数据包的协议分析,因此不需要跟随P2P软件协议而更新识别库, 对运行时可变多协议P2P软件也能实现控制。由于不需要协议解密,对网络管理员的要求也非常 低,仅需对新出现的P2P软件发布新的识别库即可,相对以往的方法,大大降低了管理成本。
(4) 完全实时控制,对可变端口P2P软件也能实现控制,识别效率极高。本发明在P2P软件发 送第一个数据包时就能识别出来,消除传统方法的滞延性,对主机P2P端口的变化全程跟踪。相对传统方法,本发明将识别操作分布到各个主机进行,路由器仅实现控制策略,减轻了路由器 的压力,仅对P2P数据进行相关操作,对非P2P数据的传输完全没有影响,效率大大提高。


图1是主机识别模块的结构示意图。图2是主机识别模块的流程图。图3和图4是分类队列的具体策略。图5是路由器流量控制模块的示意图,其中三种箭头代表三类不同数据包的处理流程,以 及处理过程中需要访问的资源。图中①处为PREROUTING拦截点,图中②处为POSTROUTING拦 截点。
具体实施方式
体系结构自定义Winsock 2 SPI框架Windows Sockets 2. O版本提供了SPI编程接口,这种接口可以在Socket中插入一层,从而 实现传输质量控制(QOS),扩展TCP/IP协议栈等功能。Winsock是为上层应用程序提供的一种标 准网络接口。上层应用程序不关心其实现细节,它只为上层应用程序提供透明的服务。Winsock 2. O引入的SPI编程接口就是打破服务提供者的透明,让开发人员可以编写自己的服务提供者接 口程序。SPI以动态链接库的形式存在,工作在应用层,为上层API调用提供接口函数。本发明将自己编写的SPI程序安装到系统中,所有的Winsock请求都会发送到这个程序,并 由它完成P2P识别和标记工作。系统提供的SPI能够完成传输功能,所以在本模块中,只是将它 们隐藏起来,在识别过程结束之后,再调用它们完成网络传输。Linux路由器HTB带宽管理队列本发明釆用Linux提供的带宽管理功能进行P2P流量控制。Linux系统提供了多种队列管理机 制,本发明使用的是HTB队列。HTB (Hierarchical Token Bucket,分层的令牌桶)是一种分类队 列,相对无类队列更加复杂,但能利用分类器实现数据包调度,从而使非P2P数据包优先于P2P 数据包传输。另外HTB队列相比其他分类队列配置比较简单,并支持带宽分割和带宽借用功能。数据包分类标签模块本模块的功能是将路由器收到的数据包分三类做不同处理[内网]端〈一一〉端[内网],[内 网]端<——〉端[外网],[外网]端〈一一〉端[内网]。Linux核心里的Netfilter子系统所提供了 五个拦截点,分别是PRER0UTING、 INPUT、 F0RWARD、 P0STR0UTING以及0UTPUT。本发明在 PRER0UTING点,截获刚刚到达路由器的数据包,提取出其源目的地址加以分类。P2P—NAT端口映射表路由器产品提供NAT机制(Network address and port translators)来解决协议地址不足 的问题。NAT以及防火墙,将丢弃由外网主动向内网发送的数据包,保证连接从内部发起,即 先出后进。位于某个NAT后面的主机向另一个NAT后面的主机发送的数据包会被丢弃,P2P软 件利用NAT穿透技术来解决这一问题。NAT穿透技术是指,如果主机A想向另一个NAT后的主 机B发送数据包,那么主机A首先需要向公网上的服务器S发起连接,然后由服务器S将主机 A经过NAT转换后的协议地址ia与端口 pa发送给主机B,这样主机B就可以向ia/pa发送数据 包,但这个数据包会被主机A的路由器丢弃,然而这时候,主机A^主机B的单向路由已经建立起来,只要服务器S将主机B经过NAT转换后的协议地址ib与端口 pb发送给主机A,主机A 就可以向ib/pb (即主机B)发送数据了。同样的方式建立主机B+A主机的路由,则两台主机 完成NAT穿透,可以互相发送数据。根据NAT穿透技术的原理,P2P软件与外网主机通信,必须先在路由器上建立端口映射。 本发明利用P2P软件的这一特点,自定义了一个P2P端口映射表,用于记录路由器传输P2P数 据的端口,该表的表项包含路由器的IP地址和端口号,该端口所处理的P2P服务类型,以及与 之对应的主机IP和端口。方法流程本发明由主机对P2P发起连接请求的数据包进行识别,由路由器上的分类标签模块处理,利 用路由器上配置的HTB队列进行流量控制。具体流程如下(1) P2P识别与标记在应用程序加载SPI动态链接库的时候,可以得到应用程序的进程名,并根据进程名査询该 应用程序的版本信息(FileVersionlnfo),取出其源文件名,源文件名无法被用户修改,且一 般不会随着软件版本升级而变化,这时可依据进程的源文件名进行识别,如果是P2P软件,则给 该进程加上标记,每当有进程调用SPI发送数据的时候,只需要检査该标记,即可判断是否为P2P 数据。但这样做只能实现数据包的放行和丢弃两种操作,而无法实现流量控制。路由器可以提 供完美的流量控制策略,所以必须通知路由器哪些数据是P2P。 Winsock 2.0的SPI提供了原始 套接字功能(RawSocket),通过它可以直接控制Windows下的多种协议,而且能够对网络底层 的传输机制进行控制。本发明利用这一功能,穿越操作系统网络协议栈的分层机制,直接在应 用层对数据包的IP头进行设置。本发明使用IP头中的T0S字段对P2P数据包进行标识。这样,在 路由器接收到数据包的时候,只需要检查数据包的TOS字段即可。(2) 数据包分类当路由器收到数据包时,即提取其源/目的地址,进行分类后进行不同的处理。两端均为内网P2P数据包,处理过程很简单。只需要根据T0S字段判断是否是P2P数据, 如果是P2P数据,那么这个它就属于[内网]端〈一一〉端[内网]型P2P数据包,可直接根据TOS 字段所反映出的P2P软件类型,将其加入相应的HTB队列。对于[内网]端--一〉端[外网]型P2P数据包,首先提取其源地址及端口号,以此査询上述 P2P端口映射表,如果没有找到,则作将其为新的表项插入,此时,该表项的路由器IP/端口两 个字段暂时为空,然后将此数据包送入HTB队列。在NAT链的P0STR0UTING拦截点分析经过NAT 转换后的数据包,如果是[内网]端----〉端[外网]型P2P数据包,则对其进行De-SNAT操作,得 到源IP/端口,然后以此查询P2P端口映射表,找到对应的表项后,将该数据包的源IP/端口, 分别填到路由器端口/IP字段。对于[外网]端----〉端[内网]型数据包,取出其目的IP/端口并査询P2P端口映射表,即 可获知该数据包是否为P2P数据包,然后将其送入HTB队列。(3) HTB队列分类后的数据包被送入不同的HTB类,本发明的具体分类策略如下 Classid 1:10这是最高优先权的类。这个类中的数据包拥有最低的延迟并最先取得空闲带宽,需设置这 个类的峰值速率。要求低延迟的服务归属到该类中ssh、 telnet、 dns、 quake3、 irc和带有SYN标记的数据包。 Classid 1:11这是用于放置大批量传输的类。包含比如用来处理从本地向WEB服务器发出和浏览网页 的数据包,邮件(SMTP、 pop3)相关及其他非P2P数据包。 Classid 1:12这个类中包含一些流量较小的P2P数据包,比如QQ, MSN等P2P聊天工具。 Classid 1:13这个类中包含数据流量较大的P2P软件产生的数据包,比如文件共享类软件。 通过设置上述四个分类的属性,门限速率rate,借用带宽限度ceil,优先级prio,可以 对P2P数据流量实施控制。即使链路中没有其他数据通过,P2P也不能借用所有的带宽,因为 对web的访问等操作属于突发行为,如果此时没有剩余带宽,则会造成访问延迟,所以要给P2P 数据设置可借用的最大带宽ceil;另外,非P2P数据包比P2P数据包的优先级高。为方便描述,假定如下网络环境主机A、 B通过路由器R访问Internet,路由器R加载了 流量控制模块,主机B安装了 P2P识别插件;主机C通过路由器R'访问Internet,三台主机 都使用Eiimle (P2P文件共享类软件)下载某个文件,Emule服务器为S。
具体实施方式
如下(1) 主机A打开Enmle,并向服务器S发起登陆请求。(2) 未安装P2P识别插件,主机A发出的数据包的包头TOS字段为零,被路由器R丢弃,登 陆失败,此时主机A无法连接Internet.(3) 主机A安装P2P识别插件。(4) 主机A重新打开Emule, Emule进程载入自定义Winsock SPI框架。(5) 主机A向服务器S发送登陆请求,数据包头在主机A发送前被重构,获得新的T0S值, 到达路由器R时,R根据T0S值发现P2P数据。(6) R记录该数据包的源IP/端口,即主机A用f跟服务器S通信的IP/端口 (Ia/Pa),并将 其加入P2P—NAT端口映射表,然后将数据包标记为Classid 1:13类并送入HTB队列。(7) R上的分类标签模块,提取经过NAT转换后的IP/端口 (Ira/Pra),对其进行De-SNAT 操作,得到(Ia/Pa),在端口映射表中找到刚才加入的表项,将经过NAT转换后的IP/端口添 入路由器IP/端口字段, 一个完整的映射表项建立起来。(8) 服务器S将(Ia/Pa)发送给主机C,将C经过路由器R' NAT转换后的(Ic/Pc)发送给 主机A。 A向(Ic/Pc)发送数据包,C向(Ia/Pa)发送数据包,完成NAT穿透。(9) 当路由器R接受到主机C向(Ia/Pa)发送的数据包时,査询P2P—NAT端口映射表,发 现其是P2P数据,于是将数据包标记为Classid 1:13类并送入HTB队列。至此,主机A相对于 其他路由器下的主机C的上下行流量均处于受控状态。鹏主机B已经安装了主机识别插件,因此主机B启动Emule时,与主机A的(4) (7)相同。 但它与主机A属于同一个内网,所以不需要进行NAT穿透操作。(11)主机A的Emule软件直接向主机B的IP地址/端口发送数据,当数据到达路由器R时, R根据T0S值发现其为P2P,将其标记为Classid 1:13类并送入HTB队列,此时主机A的上行 流量和主机B的下行流量处于受控状态。主机B的Emule软件直接向主机A的IP地址/端口发 送数据时,同理,主机B的上行流量和主机A的下行流量处于受控状态。肪主机A与内网和外网的主机之间的双向P2P流量均得到控制。
权利要求
1.一种基于应用层检测的对等网络流量控制方法,其特征在于该方法由基于文件信息分析的主机识别方法和基于Linux路由器的分层令牌桶HTB流量控制方法组成,其中,基于文件信息分析的主机识别方法实现步骤为步骤1).编写自定义套接字服务接口Windows Sockets SPI框架,取代默认的SPI链接库,步骤2).分析目前主流P2P软件的文件信息,将它们的源文件名添加到识别库,步骤3).将主机识别软件和识别库发布到网内各个主机上,步骤4).当主机连网时,发出P2P数据包被加上标记,步骤5).根据出现的新的P2P软件更新识别库,并发布到主机,步骤6).如果主机没有安装主机识别插件,则无法上网,并在其连网时自动转到步骤3);基于Linux路由器的HTB流量控制方法实现步骤为步骤21).路由器安装流量控制模块,配置HTB队列的参数,步骤22).收到主机发来的数据包,检查服务优先级TOS字段,为零则说明主机没有安装P2P识别插件,将数据包丢弃,步骤23).根据数据包的源/目的地址分类,步骤24).源/目的地址均属内网的数据包,根据TOS字段送入相应的HTB队列,步骤25).对于内网发往外网的P2P数据包,提取其源地址/端口,查询P2P端口映射表,如果没有找到,则作将其为新的表项插入,然后将此数据包送入HTB队列;经过协议地址转换NAT转换后的数据包,如果是内网发往外网的,则对其进行逆向协议地址转换De-SNAT操作,得到源地址/端口,然后以此查询P2P端口映射表,找到对应的表项后,将该数据包的源地址/端口,分别填到路由器地址/端口字段,步骤26).对于外网发往内网的数据包,取出其目的地址/端口并查询P2P端口映射表,即可获知该数据包是否为P2P数据包,然后将其送入HTB队列。
全文摘要
基于应用层检测的对等网络流量控制方法分成两个模块分别部署在主机和路由器上,主机在应用程序调用插口层编程接口时对P2P数据进行识别,并对P2P数据包加标签,路由器收到数据包后做相应的分析处理,并根据控制规则对P2P数据加以处理。基于应用层检测的P2P流量控制方法由基于文件信息分析的主机识别方法和基于Linux路由器的分层令牌桶(HTB)流量控制方法组成,本发明相比以往的方案,显著的提高了识别准确率,改善了扩展性差的问题,具有实时性强、部署成本低的优点。
文档编号H04L29/08GK101599897SQ200910033230
公开日2009年12月9日 申请日期2009年6月10日 优先权日2009年6月10日
发明者敏 吴, 博 宫, 徐小龙, 支萌萌, 李玲娟, 李致远, 王汝传, 韩志杰, 元 饶 申请人:南京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1