一种数据包分类方法

文档序号:6519079阅读:175来源:国知局
一种数据包分类方法
【专利摘要】本发明公开了一种数据包分类方法,包括如下步骤(1)区分上行数据包和下行数据包;(2)对数据包进行解析,剥离出链路层信息;(3)剥离出网络层信息,对上行数据包提取源IP地址,对下行数据包提取目标IP地址;(4)对步骤(3)所提取的地址进行散列计算,得出散列值;(5)将相同散列值的数据包存入同一个队列。本发明通过对数据包的IP地址或者数据包特定的偏移位置进行散列计算,实现“同源同宿”,保证了同一个用户的所有数据包都被放入同样的队列中,应用程序处理的时候,就不必在不同队列进行搜索,避免“访问竞争”的同时也就提升了数据包的处理效率。
【专利说明】一种数据包分类方法
【技术领域】
[0001]本发明涉及的是在互联网业务分析应用中一种数据包分类的方法。
【背景技术】
[0002]随着互联网在全球的迅速发展和各种互联网应用的快速普及,互联网已成为人们日常工作生活中不可或缺的信息承载工具。同时网络流量、数据包等概念的提出,让人们对网络有了新的认识。传统分类方法只需要考虑数据包的2层(链路层)、3层(网络层)、4层(传输层)特性,数据包的处理和转发更多在比较底层实现,最多只需要关心IP地址和端口即可。而随着应用变得越来越复杂,网络设备的处理流程变得也越来越复杂。除了需要处理传统的2-4层信息之外,还要处理7层应用协议以及用户相关的信息。数据包的分类方法如果还采用以前的方法就不能适应发展需要了,因此数据包分类方法也就变得更加复杂。人们对于提升应用分析系统的处理时间要求也不断提高。
[0003]传统的数据包分类方法如图5所示,网卡接收到用户A1、B2、C3、D4...Kn的数据包时,网卡驱动对数据包进行初步识别,如果能够识别,则将这些数据包通过一定的散列计算并将这些数据包放不同的队列中;如果不能识别,则全部放到同一个队列中。用户Al的数据包就可能存放在队列1、队列2、队列4...队列η中,当上层应用APPl要分析处理用户Al的数据包时,就需要在队列1、队列2、队列4...队列η中去逐个匹配,这样就降低了系统的整体性能。如图6所示,当进程APPl要在队列2取用户Al的数据包,进程ΑΡΡ2也同时在队列2取用户Β2的数据包的情况下,两个进程之间就会产生“竞争”。为了进行安全的数据访问,进程APPl就需要等待进程ΑΡΡ2处理完才能进行处理,这样就更加的降低了系统的处理效率。综上,传统的系统上,网卡接收到数据包后,会通过硬件对网卡接收到的所有数据包按照同一个规则进行初步分类:对标准以太网数据包进行解析,根据IP地址或端口号进行散列计算,将数据包分发到不同的队列,然后再交给应用层程序进行处理。但是,硬件只能够识别部分类型的数据包,对于不能识别的数据包类型则是将所有的数据包放入同一个队列里面。这样就会造成两个后果:(1)如果数据包都放到一个队列,应用程序必须单线程或单进程处理完所有这个队列的包,无法充分利用多核的优势,系统总处理性能下降;(2)对所有网口都使用相同计算规则,必然会导致同一个用户的流量出现在不同的队列上。这样虽然多个线程或进程能够同时工作,但是访问相同数据区的时候,会出现互锁等待的情况,这样就会大幅降低应用程序的性能。

【发明内容】
:
[0004]本发明要解决的技术问题是提供一种实现同源同宿快速进行数据包分类的一种的方法,在网卡接收到数据包以后,驱动程序根据事先的配置将各个不同网口的数据包分为上行和下行,然后对数据包进行解析并按照一定规则进行散列计算,将数据包分发到不同的队列。实现了在网络驱动层面实现对数据包的解析和分类,比较均匀的将数据包重定向到不同的队列。这样应用程序的各个线程就充分利用多核的处理方法,快速的对各自队列的数据包进行处理,不必进行等待,从而大幅提升应用程序的处理性能,提升整个系统的
吞吐率。
[0005]为了解决上述技术问题本发明的技术方案为:一种数据包分类方法,包括如下步骤:(1)读取系统配置信息,将物理网口分为上行网口和下行网口,上行网口收到的数据包为上行数据包,下行网口收到的数据包为下行数据包;(2)对数据包进行解析,剥离出链路层信息;(3)根据步骤(2)所得的数据帧类型剥离出网络层信息,对上行数据包提取源IP地址,对下行数据包提取目标IP地址;(4)对步骤(3)所提取的数值进行散列计算,得出散列值;(5)将相同散列值的数据包存入同一个队列。
[0006]较佳地,步骤(3)或者为依据步骤(2)所得链路层信息提取上行数据包的源MAC地址,提取下行数据包的目标MAC地址。
[0007]较佳地,步骤(3)或者为依据步骤(2)所得链路层信息剥离出网络层信息,进一步剥离出运输层信息,最后剥离出应用层信息,提取上行数据包应用层特定偏移位置的数值和下行数据包应用层特定偏移位置的数值。
[0008]较佳地,上行数据包应用层特定偏移位置的数值或下行数据包应用层特定偏移位置的数值为区分用户身份的特征字段。
[0009]较佳地,步骤(3)或者为依据步骤(2)所得链路层信息剥离出网络层信息,提取上行数据包的源IP地址和下行数据包的目标IP地址,进一步剥离出运输层信息,提取上行数据包的源端口号和目标端口号。
[0010]较佳地,步骤(4)中进行散列计算的方法是:将源IP地址和源端口号进行加权之后得到数字A,用数字A对特定数字B取模得到散列值;或者将目标IP地址和目标端口号进行加权之后得到数字C,用数字C对特定数字B取模得到散列值。
[0011]较佳地,特定数字B为队列个数。
[0012]较佳地,步骤(4)中进行散列计算的方法是:将所提取的数值进行加权运算得到散列值。
[0013]本发明通过提取数据包IP地址、MAC地址、应用层特定偏移位置地址或者IP地址加端口号进行散列计算,实现“同源同宿”,保证了同一个用户的所有数据包都被放入同样的队列中,应用程序处理的时候,就不必在不同队列进行搜索,避免“访问竞争”的同时也就提升了数据包的处理效率。并且考虑了各种复杂的应用场景提供了灵活的配置手段,对于应用层特定偏移位置地址,用户可以根据其实际应用场景进行灵活的调整来确定。传统方法只能针对不带任何封装或者简单VLAN封装的IPv4或IPv6报文进行识别,本发明的方法能够对各种复杂的封装报文都可以进行识别。
【专利附图】

【附图说明】
[0014]图1为本发明的实施例1的流程图
[0015]图2为本发明的实施例2的流程图
[0016]图3为本发明的实施例3的流程图
[0017]图4为本发明的实施例4的流程图
[0018]图5为传统的数据包分类方法数据包进入队列处理流程
[0019]图6为传统数据包分类方法不同进程在同一队列里的干扰现象[0020]图7为本发明数据包分类法采用IP地址进行散列计算经过分类的数据包进入队列处理流程
[0021]图8为本发明数据包分类法采用特定偏移位置地址进行散列计算经过分类的数据包进入队列处理流程
【具体实施方式】
[0022]现在参考附图描述本发明的实施例。
[0023]实施例1
[0024]步骤11,读取系统配置信息,将数据包分为上行数据包和下行数据包。
[0025]步骤12,对数据包进行解析,剥离出链路层信息中的数据帧类型;
[0026]步骤13,根据数据帧类型获取网络层类型,对上行数据包提取源IP地址,对下行数据包提取目标IP地址;
[0027]步骤14,对源IP地址或目标IP地址进行散列计算,计算方法如下:将源IP地址或目标IP地址进行加权之后取模运算得到散列值;
[0028]步骤15,将相同散列值的数据包存入同一个队列。
[0029]如图7所示网卡接收到数据包后,数据包进行解析,同时对上行链路数据包根据源IPv4或IPv6地址进行散列计算,对应的下行链路数据包根据目标IPv4或IPv6地址进行散列计算,实现“同源同宿”,将同一用户的所有数据包都放到相同的队列。当上层应用对用户数据进行分析、处理的时候,每个用户的数据包只会在同一个进程或线程中出现,从而避免了进程或线程的等待,从而大大提升了整个系统的处理能力。
[0030]一般情况下,上行端口和下行端口的数据包封装类型是完全一样的,这意味着在上行端口上主要分析源IP地址并计算散列值,得到散列值之后将相同散列值的数据包发送至相同的队列;对应的在下行端口上主要分析目标IP地址并计算散列值,得到散列值之后将相同散列值的数据包发送至相同的队列。采用这种方法计算,散列方法完全一样,IP地址也完全一样(上行端口的源IP地址在下行端口就是目标IP地址),所以计算出来的散列值也是一样的,保证了同一个用户的所有流量都会被分配到同一个队列上,从而实现了 “同源同宿”。
[0031 ] 本实施例在某些不对称流量环境比如A端口为上行口,B端口为下行口,且A端口和B端口的流量封装类型不一样时,如A端口接收的数据包全部是不带任何封装的IPv4报文,B端口接收的数据包则为加了 PPPOE或VLAN封装的IPv4报文。如果使用传统的方法就只能识别A端口的数据包将其分散到不同的队列,对B端口的流量无法进行解析识别所有数据包都被放到I个队列中,这应用程序的各个线程在处理B端口流量的时候就会出现访问竞争的问题而导致的性能低下的情况。
[0032]本实施例针对不同的端口提取不同的IP地址进行散列计算,如上段所述我们A端口和B端口的流量封装类型不一样时,将A端口的数据包根据源IP地址进行散列计算,得到散列值之后将相同散列值的数据包发送至相同的队列,将数据包分发到不同队列;对于B端口的数据包,先将PPPOE或VLAN包头接拆封,然后再找到目标IP地址的位置,根据目标IP地址再进行散列计算,得到散列值之后将相同散列值的数据包发送至相同的队列,从而将数据包分发到不同的队列。从而就保证了同一个用户的数据包都能够被分配到同样的队列。这样,隶属于同一个用户的数据包都能够被应用程序的同一个线程或进程处理,从而大大提升处理性能。
[0033]实施例2
[0034]步骤21,读取系统配置信息,将数据包分为上行数据包和下行数据包。
[0035]步骤22,对数据包进行解析,剥离出链路层信息。
[0036]步骤23,提取上行数据包的源MAC地址和下行数据包的目标MAC地址。
[0037]步骤24,对所提取的数值进行散列计算,计算方法为对所提取地址进行取模运算;
[0038]如,提取上行数据包的源MAC地址0x120x340x560x78。且队列个数为8,对所提取的源MAC地址进行取模运算0xl2345678%8得到散列值O。
[0039]提取下行数据包的目标MAC地址0x130x240x570x68。且队列个数为8,对所提取的目标MAC地址进行取模运算0xl3245768%8得到散列值O。
[0040]步骤25,将相同散列值的数据包存入同一个队列。
[0041]本实施例将链路层信息中提取的源MAC地址和目标MAC地址作为数据包的特定便宜地址进行计算,实现“同源同宿”,将同一用户的所有数据包都放到相同的队列。
[0042]实施例3
[0043]步骤31,读取系统配置信息,将数据包分为上行数据包和下行数据包。
[0044]步骤32,对数据包进行解析,剥离出链路层信息;
[0045]步骤33,依据所得链路层信息剥离出网络层信息,进一步剥离出运输层信息,最后剥离出应用层信息,提取上行数据包应用层特定偏移位置的数值和下行数据包应用层特定偏移位置的数值;这里的应用层特定偏移位置的数值为区分用户身份的特征字段,例如用户的QQ号码,网站域名地址等。
[0046]步骤34,对所提取的数值进行散列计算,计算方法为将所提取的数值进行加权得到散列值;
[0047]步骤35,将相同散列值的数据包存入同一个队列。
[0048]本实施例可以根据用户指定的某个偏移位置进行散列计算,可以设置在不同的网口上偏移位置不一样,指定特征位的长度,可以满足各种应用场景要求,不再简单的依赖于IP地址进行散列计算。
[0049]如图8所示,图中的应用特征也就是用户指定的某个偏移位置,根据上行和下行数据包的特定偏移位置的若干个字节进行散列计算后对数据包进行分类。网卡接收到数据包后,对接收到的所有数据包进行解析,对上行链路数据包应用层提取的区分用户身份的特征字段进行散列计算,同时对相应的下行链路数据包中某个特定偏移位置的若干个字节进行散列计算,实现“同源同宿”,将同一用户的所有数据包都放到相同的队列。当上层应用对用户数据进行分析、处理的时候,每个用户的数据包只会在同一个进程或线程中出现,从而避免了进程或线程的等待,从而大大提升了整个系统的处理能力。这种方法更加灵活,不再局限于根据IPv4或IPv6地址进行判别,还可以根据MAC地址进行判别,或者其他能够唯一区分用户身份的特征字段。
[0050]实施例4
[0051]步骤41,读取系统配置信息,将数据包分为上行数据包和下行数据包。[0052]步骤42,对数据包进行解析,剥离出链路层信息中的数据帧类型;
[0053]步骤43,链路层信息剥离出网络层信息,提取上行数据包的源IP地址和下行数据包的目标IP地址,进一步剥离出运输层信息,提取上行数据包的源端口号和目标端口号;
[0054]步骤44,对所提取的数值进行散列计算,计算方法如下:将源IP地址和源端口号进行加权之后得到数字A,用数字A对特定数字B取模得到散列值;或者将目标IP地址和目标端口号进行加权之后得到数字C,用数字C对特定数字B取模得到散列值;
[0055]如:提取出某上行数据包的源IP地址为192.168.1.1,端口号为12345。且队列个数为8,对源IP地址和端口号加权之后取模(3232235777+12345) %8得到散列值2。
[0056]提取出某下行数据包的目标IP地址为192.168.1.2,端口号为12345。且队列个数为8,对目标IP地址和端口号加权之后取模(3232235778+12345)%8得到散列值3。
[0057]步骤45,将相同散列值的数据包存入同一个队列。
[0058]以上结合最佳的实施例对本发明进行了描述,但本发明并不局限于以上揭示的实施例,而应当涵盖各种根据本发明的本质进行的修改、等效组合。
【权利要求】
1.一种数据包分类方法,包括如下步骤: (1)读取系统配置信息,将物理网口分为上行网口和下行网口,上行网口收到的数据包为上行数据包,下行网口收到的数据包为下行数据包; (2)对数据包进行解析,剥离出链路层信息; (3)根据步骤(2)所得的数据帧类型剥离出网络层信息,对上行数据包提取源IP地址,对下行数据包提取目标IP地址; (4)对步骤(3)所提取的数值进行散列计算,得出散列值; (5)将相同散列值的数据包存入同一个队列。
2.根据权利要求1所述的一种数据包分类方法,其特征在于:所述步骤(3)或者为依据步骤(2)所得链路层信息提取上行数据包的源MAC地址,提取下行数据包的目标MAC地址。
3.根据权利要求1所述的一种数据包分类方法,其特征在于:所述步骤(3)或者为依据步骤(2)所得链路层信息剥离出网络层信息,进一步剥离出运输层信息,最后剥离出应用层信息,提取上行数据包应用层特定偏移位置的数值和下行数据包应用层特定偏移位置的数值。
4.根据权利要求3所述的一种数据包分类方法,其特征在于:所述上行数据包应用层特定偏移位置的数值或下行数据包应用层特定偏移位置的数值为区分用户身份的特征字段。
5.根据权利要求1所述的一种数据包分类方法,其特征在于:所述步骤(3)或者为依据步骤(2)所得链路层信息剥离出网络层信息,提取上行数据包的源IP地址和下行数据包的目标IP地址,进一步剥离出运输层信息,提取上行数据包的源端口号和目标端口号。
6.根据权利要求5所述的一种数据包分类方法,其特征在于所述步骤(4)中进行散列计算的方法是:将源IP地址和源端口号进行加权之后得到数字A,用数字A对特定数字B取模得到散列值;或者将目标IP地址和目标端口号进行加权之后得到数字C,用数字C对特定数字B取模得到散列值。
7.根据权利要求6所述的一种数据包分类方法,其特征在于:所述特定数字B为队列个数。
8.根据权利要求1所述的一种数据包分类方法,其特征在于:所述步骤(4)中进行散列计算的方法是:将所提取的数值进行加权运算得到散列值。
【文档编号】G06F9/46GK103763198SQ201310571310
【公开日】2014年4月30日 申请日期:2013年11月15日 优先权日:2013年11月15日
【发明者】刘锋 申请人:武汉绿色网络信息服务有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1