基于关键字分解Hash算法的快速流分类方法

文档序号:7721992阅读:195来源:国知局
专利名称:基于关键字分解Hash算法的快速流分类方法
技术领域
本发明涉及计算机网络技术,尤其是涉及高速网络的流量测量技术。
背景技术
近年来,物理链路速度飞快增长,根据研究机构Dataquest调查,在2004年的时 候,14%核心路由器间的链路速度达到了 0C768(40Gbps) ,21%的边缘路由器间链路速度达 到了 0C192 (10Gbps)。现在的速度比以前更快,所以,要适应这种发展的状况,要求对数据流 的处理速度比以往更加快速有效。 目前采用的流分类方法主要有4类。(l)BPF算法采用CFG模式进行包过滤,这种 方法编制过滤规则复杂;(2)利用SRL编写匹配规则集[2]类似一种高级语言,它将匹配的 规则用条件语句、转移语句的形式编制成匹配流程,采用的是线性匹配;(3)多域包分类算 法,如RFC算法。以上三种方法的共同缺点是不能支持大的匹配规则集,并且前两种方法匹 配速度慢,而RFC算法对内存要求太大,因此这三种方法不能很好满足高速网络中对大量 流进行匹配的需要。另一种多域包分类算法Grid of Tries的空间复杂度和时间复杂度是 较优的,但它只适合于二维的包分类。(4)Hash算法是通过一个Hash函数h = f (x)将大集 合的元素x映射成一个小集合的有序元素h,以便于快速查找。对于关键字x和y,当x # y 时,存在h(x) = h(y)。 Hash算法是网络流量测量的基础流分类算法之一,流分类算法是流量测量的重要 应用部分,流量测量主要是对网络中的"流"进行测量和分析,以掌握网络的流量特性。对网 络中的流进行测量的关键是要快速对到达的数据流进行分类匹配以确定它属于哪一个流。
Hash算法由于其运算简单、预处理时间短、内存消耗低、支持匹配规则数多等优点 被大量应用于流分类。但常规的的Hash算法用于高速网络中特定流匹配还存在一些问题, 主要有 (1)由于用于流分类的每条规则的比特数较长,因此要将这个完备空间值映射到 一个较小的空间,冲突率非常高,从而严重影响流分类速度。 (2)由于对流测量的分类规则库中每条规则的比特位可能有大量是相同的,采取 常规Hash算法,其结果不具有均匀分布特点。 (3)由于每条规则的比特数较长,而一般计算机数据宽度较短,因此常规的Hash 算法对于进行Hash运算时要多次平方或多次求和,运算量很大。 (4)常规的Hash算法不能针对不同的规则集通过优化来获得一个最低的冲突率。
与本发明最接近的用于流分类的哈希算法有Bob jenkins、CRC、IPSX等哈希算法。 Bob Jenkins算法对关键字进行多次异或,得出的关键值均匀,但运算速度较低;IPSX对关 键字分别异或操作,速度快,由于采用的异或比较简单,冲突率较高,无法满足网络流量测 量的需求;CRC hash算法首先构建哈希对照表,使得冲突率降低,但是由于在运算前需要构 建对照表,使得运算时间降低,无法满足快速计算匹配的要求。 保证哈希值的均匀性和算法的低时间复杂度是算法的关键。为了使Hash映射的
3结果更具有随机性,从而达到降低冲突率、提高运算速度的目的,我们提出了一种基于关键 字分解的异或哈希算法。

发明内容
本发明所要解决的技术问题是设计一种适合高速网络环境下基于关键字分解 Hash算法的快速流分类方法,针对高速网络流量测量中使用的Hash算法,计算速度、冲突 率控制和空间占用问题等, 本发明解决上述技术问题的技术方案是,提出一种基于关键字分解Hash算法的 快速流分类方法,该方法主要包括 通过异或哈希算法把输入的数据包头部多个关键字的数据块进行哈希计算并得 到哈希值;利用链表操作来简化并快速匹配规则库操作,通过底层抓包获取数据包,根据 IP数据包协议类型得到包中的关键字(如IP数据包中的源IP地址、目的IP地址等)连接 成一个整体的二进制串后进行等大小的数据块划分,根据关键字的数据类型来选择质素, 并将划分后的数据块的二进制串与优选的质数异或,得出哈希关键值;将哈希关键值通过 哈希函数处理得到规则集存放入哈希桶,将每条规则集简化成一个哈希待匹配值,存放在 待匹配的链表中,作为哈希链表中以待查询的索引值,将网络中抓取的数据包进行关键字 分解计算哈希值,与存放在hash桶中的规则集进行快速流匹配。 把传统的大的缓冲区利用一个指针数组来处理规则集的存放,能够有效的提高查 询效率,最优时可以直接匹配,不需要经过复杂的计算,克服了现有的分类Hash算法的上 述缺陷。 流匹配流程包括如下步骤 将每条规则集通过关键字分解哈希算法进行预处理(简化)得出哈希待匹配值;
将规则集中哈希待匹配值放入哈希桶中相应位置,等待匹配; 将网络中抓取的数据包进行关键字分解哈希计算,根据其哈希匹配值与放入hash 桶中的规则集待匹配值进行快速流匹配。 因为关键字分解哈希算法能大幅度减少常规流匹配哈希算法的缺点,所以在匹配 过程中更加适应高速流的情况。本发明与传统流分类方法比较具有以下优点支持多个关 键字,可以根据输入的关键字个数自动计算,适合于多种分类方式;速度快,冲突率低,适合 于高速网络流量测量;将匹配规则库通过该算法进行预处理,减少资源消耗,提高查询效 率;采用链表设计,能够快速地直接地匹配报文,并能够方便地增加或删除匹配规则。


图1关键字分解哈希算法工作原理
图2关键字分解哈希算法流程
图3关键字分解哈希算法处理匹配规则库图
图4高速流匹配的hash桶查找示意图
具体实施例方式
关键字分解哈希流匹配方法的工作步骤如下所示
本发明提出的关键字分解Hash算法包括,通过异或哈希算法把输入的数据包头 部多个关键字的数据块进行哈希计算并得到哈希值;利用链表操作来简化并快速匹配规则 库操作。根据关键字的数据类型选择质数的大小,提取通过底层抓包程序获取的数据包,根 据IP数据包协议类型得到包中的关键字(如IP数据包中的源IP地址、目的IP地址等), 直接把关键字连接成一个整体的二进制串后进行等大小的数据分块处理并与优选的质数 异或,得出哈希关键值,数据分块处理具体为根据对时间处理的要求不同可以划分成多个
小的数据块,数据块越多,则时间处理越慢,如果数据块中的二进制数字不能整除则补o。该
操作减少了移位、乘方等运算操作;采用哈希桶存放通过哈希函数处理的规则集待匹配值, 将哈希关键值通过哈希函数处理得到规则集存放入哈希桶,将每条规则集简化成一个哈希 待匹配值存放在待匹配的链表中。减少了匹配的复杂度;利用一个指针数组将传统的大的 缓冲区进行处理作为规则集的存放,能够有效的提高查询效率,最优时可以直接匹配,不需 要经过复杂的计算,克服了现有的分类Hash算法的上述缺陷。减少了匹配的复杂度;把传 统的大的缓冲区利用一个指针数组来处理规则集的存放。 关键字分解D-Hash算法的分类方法主要内容是将获取的IP数据包头部提取出源 IP、目的IP地址及端口号等关键字连接成一个大的数据块,然后分解成多个小数据块,将 每个小数据块二进制串与优选出的随机质数向量异或,并将异或得到的结果相乘得出哈希 值。该方法把一个比特数较长的数据分解成几个比特数较短的数据,并且和随机质数异或, 使得哈希值随机性较好,从而达到降低冲突率的目的。 如图1所示为关键字分解哈希算法工作原理框图,以IPv4类型的数据包为例进行 具体说明,取源IP地址及目的IP地址进行运算,由于IP地址向IPv6发展,源IP地址、目 的IP地址长度增加为128bit,因为是对关键字进行数据串操作,所以和数据长度无关,因 此本方法可以完全支持IPv6。在32bit机器中,设源IP地址、目的IP地址(32bit)使用 unsigned int (完全可以容纳关键字的长度,64bit)存放,根据前面所述,由数据包协议类 型所处的第几号位获取相应的关键字,把两个关键字分解成二进制串并数据格式存放到一 个数组中,按照顺序每8bit分解成一个十进制数,则IP地址能分解成8个十进制数(源IP 地址加目的IP地址为64bit,每一个数据块分解成8bit,则有8个数据块),8个数据块与 选择的8个质数一一进行异或,然后得到8个值,将上述8个值相乘,最后得出哈希Hash关 键值。 具体包括如下步骤, (1)在预处理时算法分解模块选取一个随机质数向量组R RJ ,数
组的元素为0 (232_1)之间的一个随机质数。 (2)数据包获取模块通过底层抓包程序获取网络中数据包,将获取的数据包中的 关键字连接成一个整体的二进制数据串x按比特bit分成n个块,每个块对应的值表示为 Xl,x2,…Xn,每个块的bit长度为1。 (3)将Xl, x2,…&这n个值分别与随机质数向量组中对应的向量R" R2, . . . , Rn
相异或得到相应随机数。 (4)将n个异或后的随机数进行相乘运算得到最终的哈希Hash关键值。 以上过程用公式表示为 h = g(f(Xi))........................ (1)
其中:f : (R「x" R2~x2,…,Rn~xn}............... (2) g :f (Xl) *f (x2) *f (xn)......(3) 函数f表示将输入变量Xi(l《i《n)经过随机质数异或后得到的一个随机数。 函数g表示将n个经过f函数变换的值进行相乘运算。 如图2所示为关键字分解哈希算法流程示意图,数据包中关键字(源IP地址、目 的IP地址等)为计算参数,连接成二进制数组并分解成多个值,与质数一一异或运算,最终 相乘得出哈希值。 哈希算法处理冲突率异常重要,较大的冲突率严重影响哈希算法的性能。本方法 采用上述方法控制冲突率,(1)优化规则库中的数据,减少冗余;(2)通过将随机质数向量 与关键字分解数据块异或降低冲突率,在1000条规则库中进行测试,冲突数不超过1条;
分类匹配。在一个规则库中匹配规则包括两个过程,一是预处理过程,二是匹配过 程。预处理过程中优化处理当前规则库采用关键字分解Hash算法,使之库中规则条目冗 余、冲突最小,匹配时可以获得最好的性能。 如图3所示为关键字分解哈希算法预处理匹配规则库图。 数据包获取模块输入数据包头部关键字,从哈希桶中提取匹配规则集,根据每一 条规则(一条数据包信息)进行关键字分解哈希后的哈希待匹配值当做待匹配的规则,即 简化了匹配规则。 通过关键字分解哈希函数处理得到哈希值,通过计算定位(如采用哈希匹配值除 以链表长度取余),若哈希桶链表中该位置无值,则将处理后得到的哈希值存放于此处等待 匹配;已经存在的关键字通过拉链法进行冲突处理,判断哈希桶申请位置是否存在值,如果 此处已经存在前面匹配规则生成的待匹配值,则比较该存在的待匹配值是否与新值相等, 如果不相等则存放于该值后面(如果有多值则一一 比较),挂于该值指针尾部,形成一个局 部链表;如果相等,则按照拉链法处理冲突。全部处理后的规则集形成一个哈希桶链表,每 条规则简化成一个哈希待匹配值。
规则库预处理过程如下
(1)设置规则库中条目数为M ;
(2)循环处理每一条规则; (3)如果该条目不为空,则按照以下步骤进行处理; (4)将规则集中的每条规则根据关键字分解哈希算法(每条规则也是IP数据包, 提取数据包中的源IP地址、目的IP地址等参数)将规则数据包中关键字连接成长二进制 串,并分成n块,此处举例为8块; (5)选取优选随机质数向量值8个,按照公式(1)与每块数据异或后得到哈希待匹 配值; (6)如果该哈希待匹配值在哈希桶链表中不存在; (7)将该哈希待匹配值存放在该位置,作为哈希桶链表中以待查询的索引值;如 果该位置存在值,则比较是否相等,若不等则挂于该值后形成局部链表;若相等,则使用拉 链法处理。 重复(2)_(7)直到所有规则条目处理完毕,则构建成一个以哈希值为索引值的哈 希链表。
采用直接寻址技术进行匹配,在理想情况下,无须任何比较就可以找到待查关键字。 如图4所示为高速流匹配的hash桶查找示例图。 (1)将获取的数据包进行上述规则库预处理过程中步骤(4) 、 (5)运算得到哈希匹配值; 2)将哈希匹配值与存放在哈希桶链表中的哈希待匹配值进行比较,(如果匹配(两两比较,如两值相等则匹配)则为同一个流,为空则是新的流,不匹配则不处理。
高速流匹配的整体匹配流程为 (1)如前所述将待匹配的规则集利用关键字分解哈希算法预处理成待匹配的数字
存放于哈希桶链表中,并存在局部链表(链表中的每一个值为一个小链表); (2)将网络中获取的数据包利用关键字分解哈希算法处理得出哈希匹配值; (3)利用简单定位函数(如哈希匹配值除以哈希桶长度取余),判断哈希匹配值与
哈希桶中定位的哈希待匹配值是否相等,如果该位置存在局部链表则与该局部链表中的待
匹配值一一进行比较; (4)如果相等则说明匹配;如果该局部链表(如果存在该局部链表)中每一个数字皆不与哈希匹配值相等,则说明不匹配,不进行处理。 图例中,设内存中哈希桶长度为N,经过关键字分解算法预处理后的待匹配规则集为桶1中存放1个值,桶2中存放3个值,桶3中为1值,桶4中为两个值….桶N为算法最坏情况,为n值,构成长链。当有数据报文经过时,取得每条数据流进行关键字分解哈希算法,得出哈希值,通过(哈希值/桶长)计算匹配该桶内的值,若相等则匹配;若不等,则遍历该桶号内的值,若无值匹配则是不匹配。
权利要求
基于关键字分解Hash算法的快速流分类方法,其特征在于,通过底层抓包获取IP数据包,根据IP数据包协议类型得到包中的关键字,把数据包头部多个关键字的数据块连接成一个整体的二进制串后划分为等大小的一系列数据块;根据关键字的数据类型选择质数;将一系列数据块的二进制串与质数中的向量异或,并将异或得到的结果相乘得出哈希关键值;将哈希关键值通过哈希函数处理得到匹配规则集存放入哈希桶,将每条匹配规则集简化成一个哈希待匹配值存放在待匹配的链表中;该哈希待匹配值作为哈希链表中以待查询的索引值,将网络中抓取的数据包进行关键字分解计算哈希值,与放入hash桶中的规则集进行快速流匹配。
2. 根据权利要求1所述的快速流分类方法,其特征在于,所述把数据包头部多个关键 字的数据块连接成一个整体的二进制串具体包括,在获取的IP数据包头部提取包括源IP、 目的IP地址及端口号的关键字,并将关键字连接成一个大的数据块。
3. 根据权利要求1所述的快速流分类方法,其特征在于,所述快速流匹配具体步骤为, 判断哈希桶申请位置是否已经存在前面匹配规则生成的待匹配值,如果存在,则比较该存 在的待匹配值是否与新值相等,如果不相等则将新值存放于该待匹配值后面,挂于指针尾 部,形成一个局部链表;如果相等,则按照拉链法处理冲突,形成一个哈希桶链表。
4. 根据权利要求1所述的快速流分类方法,其特征在于,如果存放的索引值存在拉链 时,则按拉链进行查找。
全文摘要
基于关键字分解Hash算法的快速流分类方法,涉及网络的流量测量技术。把数据包头部多个关键字的数据块连接成一个整体的二进制串后划分为一系列数据块,将一系列数据块的二进制串与质数异或,获得哈希关键值,通过哈希函数处理得到匹配规则集存放入哈希桶,将每条匹配规则集简化成一个哈希待匹配值存放在待匹配的链表中;该哈希待匹配值作为哈希链表中以待查询的索引值,将网络中抓取的数据包进行关键字分解计算哈希值,与放入hash桶中的规则集进行快速流匹配。本发明支持多个关键字,适合于多种分类方式;速度快,冲突率低,适合于高速网络流量测量。
文档编号H04L12/56GK101753445SQ20091025097
公开日2010年6月23日 申请日期2009年12月23日 优先权日2009年12月23日
发明者唐红, 徐川, 王影, 赵国峰, 闫亮 申请人:重庆邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1