著录项信息
专利名称 | 一种基于应用层检测的对等网络流量控制方法 |
申请号 | CN200910033230.7 | 申请日期 | 2009-06-10 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2009-12-09 | 公开/公告号 | CN101599897 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04L12/56 | IPC分类号 | H;0;4;L;1;2;/;5;6;;;H;0;4;L;2;9;/;0;8;;;H;0;4;L;2;9;/;1;2查看分类表>
|
申请人 | 南京邮电大学 | 申请人地址 | 江苏省南京市新模范马路66号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 南京邮电大学 | 当前权利人 | 南京邮电大学 |
发明人 | 王汝传;宫博;吴敏;韩志杰;李玲娟;支萌萌;徐小龙;饶元;李致远 |
代理机构 | 南京经纬专利商标代理有限公司 | 代理人 | 叶连生 |
摘要
基于应用层检测的对等网络流量控制方法分成两个模块分别部署在主机和路由器上,主机在应用程序调用插口层编程接口时对P2P数据进行识别,并对P2P数据包加标签,路由器收到数据包后做相应的分析处理,并根据控制规则对P2P数据加以处理。基于应用层检测的P2P流量控制方法由基于文件信息分析的主机识别方法和基于Linux路由器的分层令牌桶(HTB)流量控制方法组成,本发明相比以往的方案,显著的提高了识别准确率,改善了扩展性差的问题,具有实时性强、部署成本低的优点。
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队列。
一种基于应用层检测的对等网络流量控制方法\n技术领域\n[0001] 本发明是一种针对特定网络服务的流量识别与控制的方法。主要用来解决对等网络(P2P)应用对网络资源争用,改善由此带来的网络阻塞情况,属于P2P流量识别与控制领域。\n背景技术\n[0002] P2P网络的流量有以下特点:\n[0003] ·不确定性\n[0004] 由于P2P应用的多样性导致其网络流量不仅在流量特征上,而且在行为特征上也表现出不确定性。此外,P2P网络节点的动态性也增加了对等网络流量的不确定性。\n[0005] ·海量性\n[0006] P2P网络规模较大,给流量的实时检测带来了性能问题。\n[0007] ·加密性\n[0008] 由于P2P网络属于应用层,因此为了躲避内容监管,现有P2P系统均对其载荷进行了加密处理。\n[0009] 现有的一些检测技术,可分为基于流量特征的识别方法(TLI)和基于深层数据包识别方法(DPI)两类:\n[0010] (1)基于流量特征的P2P流量检测方法的基本思想是:通过对传输层数据包(包括TCP和UDP数据包)进行分析,并结合P2P系统所表现出来的流量特征,来识别某个网络流是否属于P2P。但是这类技术比较多,但普遍存在难以实际应用的缺点:由于P2P多采用随机端口技术,因此TCP/UDP端口识别技术存在严重的漏报问题;网络直径的计算需要记录整个网络的连接状态,因此不仅存储和计算开销大,而且也不支持P2P流量的实时识别与过滤;节点角色分析技术也需要记录整个网络的连接状态,因此同样面临存储与计算开销大、无法供P2P流量的实时识别与过滤功能等问题;由于域名服务器(DNS)等应用也会同时使用TCP协议和UDP协议,因此协议对分析技术存在严重的误报问题;地址端口对具有性能高的优点,但是缺乏实时识别与过滤的能力。\n[0011] (2)基于应用层数据检测的P2P流量识别技术是通过协议分析与还原技术,通过对具体的P2P协议及其对应的P2P系统的载荷进行特征提取,建立特征库。对于流经的实时网络流,采用模式匹配算法,判断其中是否包含特征库中的特征串。如果特征匹配成功,该网络流就是P2P数据。该方法对新P2P应用的流量识别具有滞后性,即在未升级特征库前无法检测新的P2P应用,P2P软件修改加密方案将导致旧的特征库失效。所以这种方案存在可扩展性差、缺乏分析加密数据功能等问题。\n发明内容\n[0012] 技术问题:本发明的主要目的是:提供一种基于应用层检测的对等网络流量控制方法,本发明相比以往的方案,显著的提高了识别准确率,改善了扩展性差的问题,具有实时性强、部署成本低的优点。\n[0013] 技术方案:本发明分成两个模块分别部署在主机和路由器上,主机在应用程序调用插口层编程接口时对P2P数据进行识别,并对P2P数据包加标签,路由器收到数据包后做相应的分析处理,并根据控制规则对P2P数据加以处理。\n[0014] 基于应用层检测的P2P流量控制方法由基于文件信息分析的主机识别方法和基于Linux路由器的分层令牌桶(HTB)流量控制方法组成,其中,基于文件信息分析的主机识别方法实现步骤为:\n[0015] 步骤1).编写自定义套接字服务接口(Windows Sockets SPI)框架,取代默认的SPI链接库,\n[0016] 步骤2).分析目前主流P2P软件的文件信息,将它们的源文件名添加到识别库,[0017] 步骤3).将主机识别软件和识别库发布到网内各个主机上,\n[0018] 步骤4).当主机连网时,发出P2P数据包被加上标记,\n[0019] 步骤5).根据出现的新的P2P软件更新识别库,并发布到主机,\n[0020] 步骤6).如果主机没有安装主机识别插件,则无法上网,并在其连网时自动转到步骤3);\n[0021] 基于Linux路由器的HTB流量控制方法实现步骤为:\n[0022] 步骤21).路由器安装流量控制模块,配置HTB队列的参数,\n[0023] 步骤22).收到主机发来的数据包,检查服务优先级(TOS)字段,为零则说明主机没有安装P2P识别插件,将数据包丢弃,\n[0024] 步骤23).根据数据包的源/目的地址分类,\n[0025] 步骤24).源/目的地址均属内网的数据包,根据TOS字段送入相应的HTB队列,[0026] 步骤25).对于内网发往外网的P2P数据包,提取其源地址/端口,查询P2P端口映射表,如果没有找到,则作将其为新的表项插入,然后将此数据包送入HTB队列;经过协议地址转换(NAT)转换后的数据包,如果是内网发往外网的,则对其进行逆向协议地址转换(De-SNAT)操作,得到源地址/端口,然后以此查询P2P端口映射表,找到对应的表项后,将该数据包的源地址/端口,分别填到路由器地址/端口字段,\n[0027] 步骤26).对于外网发往内网的数据包,取出其目的地址/端口并查询P2P端口映射表,即可获知该数据包是否为P2P数据包,然后将其送入HTB队列。\n[0028] 有益效果:本发明提出了一种控制P2P流量的方法,相对以往的方法有一些显著的优点:\n[0029] (1)识别准确率达到100%,消除了误判。软件的版本信息是在程序编译时生成的,普通用户无法修改,对版本信息中的源文件名识别,不会出现漏判、误判等情况,而传统的在路由器上进行识别的方式一般仅能达到90%~95%的识别命中率。\n[0030] (2)实现对P2P管理的细分,可以针对不同的P2P软件采取不同的流量控制策略。\n比如QQ,MSN等聊天工具也是基于P2P技术的,它们并不会造成带宽紧张,但按照一些传统的控制方法,有的无法将这类软件区分出来,有的即使能做到也存在误判问题。\n[0031] (3)扩展性强。不需要进行数据包的协议分析,因此不需要跟随P2P软件协议而更新识别库,对运行时可变多协议P2P软件也能实现控制。由于不需要协议解密,对网络管理员的要求也非常低,仅需对新出现的P2P软件发布新的识别库即可,相对以往的方法,大大降低了管理成本。\n[0032] (4)完全实时控制,对可变端口P2P软件也能实现控制,识别效率极高。本发明在P2P软件发送第一个数据包时就能识别出来,消除传统方法的滞延性,对主机P2P端口的变化全程跟踪。相对传统方法,本发明将识别操作分布到各个主机进行,路由器仅实现控制策略,减轻了路由器的压力,仅对P2P数据进行相关操作,对非P2P数据的传输完全没有影响,效率大大提高。\n附图说明\n[0033] 图1是主机识别模块的结构示意图。\n[0034] 图2是主机识别模块的流程图。\n[0035] 图3和图4是分类队列的具体策略。\n[0036] 图5是路由器流量控制模块的示意图,其中三种箭头代表三类不同数据包的处理流程,以及处理过程中需要访问的资源。图中①处为PREROUTING拦截点,图中②处为POSTROUTING拦截点。\n具体实施方式\n[0037] 体系结构\n[0038] 自定义Winsock 2 SPI框架\n[0039] Windows Sockets 2.0版本提供了SPI编程接口,这种接口可以在Socket中插入一层,从而实现传输质量控制(QOS),扩展TCP/IP协议栈等功能。Winsock是为上层应用程序提供的一种标准网络接口。上层应用程序不关心其实现细节,它只为上层应用程序提供透明的服务。Winsock2.0引入的SPI编程接口就是打破服务提供者的透明,让开发人员可以编写自己的服务提供者接口程序。SPI以动态链接库的形式存在,工作在应用层,为上层API调用提供接口函数。\n[0040] 本发明将自己编写的SPI程序安装到系统中,所有的Winsock请求都会发送到这个程序,并由它完成P2P识别和标记工作。系统提供的SPI能够完成传输功能,所以在本模块中,只是将它们隐藏起来,在识别过程结束之后,再调用它们完成网络传输。\n[0041] Linux路由器HTB带宽管理队列\n[0042] 本发明采用Linux提供的带宽管理功能进行P2P流量控制。Linux系统提供了多种队列管理机制,本发明使用的是HTB队列。HTB(Hierarchical Token Bucket,分层的令牌桶)是一种分类队列,相对无类队列更加复杂,但能利用分类器实现数据包调度,从而使非P2P数据包优先于P2P数据包传输。另外HTB队列相比其他分类队列配置比较简单,并支持带宽分割和带宽借用功能。\n[0043] 数据包分类标签模块\n[0044] 本模块的功能是将路由器收到的数据包分三类做不同处理:[内网]端<---->端[内网],[内网]端<---->端[外网],[外网]端<---->端[内网]。Linux核心里的Netfilter子系统所提供了五个拦截点,分别是PREROUTING、INPUT、FORWARD、POSTROUTING以及OUTPUT。本发明在PREROUTING点,截获刚刚到达路由器的数据包,提取出其源目的地址加以分类。\n[0045] P2P-NAT端口映射表\n[0046] 路由器产品提供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穿透,可以互相发送数据。\n[0047] 根据NAT穿透技术的原理,P2P软件与外网主机通信,必须先在路由器上建立端口映射。本发明利用P2P软件的这一特点,自定义了一个P2P端口映射表,用于记录路由器传输P2P数据的端口,该表的表项包含路由器的IP地址和端口号,该端口所处理的P2P服务类型,以及与之对应的主机IP和端口。\n[0048] 方法流程\n[0049] 本发明由主机对P2P发起连接请求的数据包进行识别,由路由器上的分类标签模块处理,利用路由器上配置的HTB队列进行流量控制。具体流程如下:\n[0050] (1)P2P识别与标记\n[0051] 在应用程序加载SPI动态链接库的时候,可以得到应用程序的进程名,并根据进程名查询该应用程序的版本信息(FileVersionInfo),取出其源文件名,源文件名无法被用户修改,且一般不会随着软件版本升级而变化,这时可依据进程的源文件名进行识别,如果是P2P软件,则给该进程加上标记,每当有进程调用SPI发送数据的时候,只需要检查该标记,即可判断是否为P2P数据。但这样做只能实现数据包的放行和丢弃两种操作,而无法实现流量控制。路由器可以提供完美的流量控制策略,所以必须通知路由器哪些数据是P2P。\nWinsock 2.0的SPI提供了原始套接字功能(Raw Socket),通过它可以直接控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。本发明利用这一功能,穿越操作系统网络协议栈的分层机制,直接在应用层对数据包的IP头进行设置。本发明使用IP头中的TOS字段对P2P数据包进行标识。这样,在路由器接收到数据包的时候,只需要检查数据包的TOS字段即可。\n[0052] (2)数据包分类\n[0053] 当路由器收到数据包时,即提取其源/目的地址,进行分类后进行不同的处理。\n[0054] 两端均为内网P2P数据包,处理过程很简单。只需要根据TOS字段判断是否是P2P数据,如果是P2P数据,那么这个它就属于[内网]端<---->端[内网]型P2P数据包,可直接根据TOS字段所反映出的P2P软件类型,将其加入相应的HTB队列。\n[0055] 对于[内网]端---->端[外网]型P2P数据包,首先提取其源地址及端口号,以此查询上述P2P端口映射表,如果没有找到,则作将其为新的表项插入,此时,该表项的路由器IP/端口两个字段暂时为空,然后将此数据包送入HTB队列。在NAT链的POSTROUTING拦截点分析经过NAT转换后的数据包,如果是[内网]端---->端[外网]型P2P数据包,则对其进行De-SNAT操作,得到源IP/端口,然后以此查询P2P端口映射表,找到对应的表项后,将该数据包的源IP/端口,分别填到路由器端口/IP字段。\n[0056] 对于[外网]端---->端[内网]型数据包,取出其目的IP/端口并查询P2P端口映射表,即可获知该数据包是否为P2P数据包,然后将其送入HTB队列。\n[0057] (3)HTB队列\n[0058] 分类后的数据包被送入不同的HTB类,本发明的具体分类策略如下:\n[0059] Classid 1:10\n[0060] 这是最高优先权的类。这个类中的数据包拥有最低的延迟并最先取得空闲带宽,需设置这个类的峰值速率。要求低延迟的服务归属到该类中:ssh、telnet、dns、quake3、irc和带有SYN标记的数据包。\n[0061] Classid 1:11\n[0062] 这是用于放置大批量传输的类。包含比如:用来处理从本地向WEB服务器发出和浏览网页的数据包,邮件(SMTP、pop3)相关及其他非P2P数据包。\n[0063] Classid 1:12\n[0064] 这个类中包含一些流量较小的P2P数据包,比如QQ,MSN等P2P聊天工具。\n[0065] Classid 1:13\n[0066] 这个类中包含数据流量较大的P2P软件产生的数据包,比如文件共享类软件。\n[0067] 通过设置上述四个分类的属性,门限速率rate,借用带宽限度ceil,优先级prio,可以对P2P数据流量实施控制。即使链路中没有其他数据通过,P2P也不能借用所有的带宽,因为对web的访问等操作属于突发行为,如果此时没有剩余带宽,则会造成访问延迟,所以要给P2P数据设置可借用的最大带宽ceil;另外,非P2P数据包比P2P数据包的优先级高。\n[0068] 为方便描述,假定如下网络环境:主机A、B通过路由器R访问Internet,路由器R加载了流量控制模块,主机B安装了P2P识别插件;主机C通过路由器R′访问Internet,三台主机都使用Emule(P2P文件共享类软件)下载某个文件,Emule服务器为S。具体实施方式如下:\n[0069] (1)主机A打开Emule,并向服务器S发起登陆请求。\n[0070] (2)未安装P2P识别插件,主机A发出的数据包的包头TOS字段为零,被路由器R丢弃,登陆失败,此时主机A无法连接Internet。\n[0071] (3)主机A安装P2P识别插件。\n[0072] (4)主机A重新打开Emule,Emule进程载入自定义Winsock SPI框架。\n[0073] (5)主机A向服务器S发送登陆请求,数据包头在主机A发送前被重构,获得新的TOS值,到达路由器R时,R根据TOS值发现P2P数据。\n[0074] (6)R记录该数据包的源IP/端口,即主机A用于跟服务器S通信的IP/端口(Ia/Pa),并将其加入P2P-NAT端口映射表,然后将数据包标记为Classid 1:13类并送入HTB队列。\n[0075] (7)R上的分类标签模块,提取经过NAT转换后的IP/端口(Ira/Pra),对其进行De-SNAT操作,得到(Ia/Pa),在端口映射表中找到刚才加入的表项,将经过NAT转换后的IP/端口添入路由器IP/端口字段,一个完整的映射表项建立起来。\n[0076] (8)服务器S将(Ia/Pa)发送给主机C,将C经过路由器R′NAT转换后的(Ic/Pc)发送给主机A。A向(Ic/Pc)发送数据包,C向(Ia/Pa)发送数据包,完成NAT穿透。\n[0077] (9)当路由器R接受到主机C向(Ia/Pa)发送的数据包时,查询P2P-NAT端口映射表,发现其是P2P数据,于是将数据包标记为Classid 1:13类并送入HTB队列。至此,主机A相对于其他路由器下的主机C的上下行流量均处于受控状态。\n[0078] (10)主机B已经安装了主机识别插件,因此主机B启动Emule时,与主机A的(4)~(7)相同。但它与主机A属于同一个内网,所以不需要进行NAT穿透操作。\n[0079] (11)主机A的Emule软件直接向主机B的IP地址/端口发送数据,当数据到达路由器R时,R根据TOS值发现其为P2P,将其标记为Classid 1:13类并送入HTB队列,此时主机A的上行流量和主机B的下行流量处于受控状态。主机B的Emule软件直接向主机A的IP地址/端口发送数据时,同理,主机B的上行流量和主机A的下行流量处于受控状态。\n[0080] (12)主机A与内网和外网的主机之间的双向P2P流量均得到控制。
法律信息
- 2019-05-31
未缴年费专利权终止
IPC(主分类): H04L 12/56
专利号: ZL 200910033230.7
申请日: 2009.06.10
授权公告日: 2012.02.22
- 2018-02-09
专利实施许可合同备案的注销
合同备案号: 2016320000219
让与人: 南京邮电大学
受让人: 江苏南邮物联网科技园有限公司
解除日: 2018.01.16
- 2016-12-14
专利实施许可合同备案的生效
IPC(主分类): H04L 12/56
合同备案号: 2016320000219
专利号: ZL 200910033230.7
申请日: 2009.06.10
让与人: 南京邮电大学
受让人: 江苏南邮物联网科技园有限公司
发明名称: 一种基于应用层检测的对等网络流量控制方法
申请公布日: 2009.12.09
授权公告日: 2012.02.22
许可种类: 普通许可
备案日期: 2016.11.21
- 2012-02-22
- 2010-02-03
- 2009-12-09
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2006-10-25
|
2006-04-25
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |