一种在大流量下进行深度包检测的方法

文档序号:7886800阅读:545来源:国知局
专利名称:一种在大流量下进行深度包检测的方法
技术领域
本发明涉及一种在大流量下进行深度包检测的方法,属于数据通信领域。
技术背景
在数据通信网络中,深度包检测技术的应用很广泛,经常用于数据包应用类型分析、用户行为分析,以及入侵检测、病毒/蠕虫检测等方面。
深度包检测技术的实现方法分为软件和硬件两种。软件方法利用各种模式匹配算法来进行特定关键字的匹配,但软件进行深度包检测的速度有限,不能保证线速处理。而采用硬件的方法实现深度包检测,可以在大流量下实现线速处理。
使用硬件进行深度包检测的方法很多,当关键字量大,且需要在运行时更新时,常采用“现场可编程门阵列”(FPGA)加上“三相式内容寻址存储器”(TCAM)的实现方式,将数据包输入到FPGA的缓存中,然后发送给TCAM进行匹配,TCAM将匹配结果返回给FPGA继续处理。虽然TCAM的运算速度非常快,当前主流的TCAM的查找速度能达到300M次查找/ 秒。但在大流量网络环境下,例如IOG 40G,该查找速度仍然达不到每次查找只偏移1个字节。而在需要查找浮动关键字的场合,由于关键字的起始位置不固定,因此查找过程需要每次仅偏移一个字节进行比对。这时,单纯使用TCAM不能满足系统要求。
另一种常用的规则匹配方法是使用布隆过滤器(Bloom Filter)进行匹配。布隆过滤器是由Burton Bloom在1970年提出,其基本工作方法如下
首先是配置过程生成一个位串,并清0,位串中的每个存储单元对应一个地址。 然后,对需要进行匹配的每个关键字都用多个散列(hash)函数进行计算,并把计算结果作为配置地址,把位串中相应的存储单元置为1。
需要进行匹配时,把待匹配内容用同样的多个hash函数计算,将多个结果作为位串中的查询地址与配置地址进行匹配。若查询到的所有结果不是都为1,说明匹配不成功; 若结果都为1,说明匹配有可能成功,且成功的概率可以计算得到。但是当不匹配的待匹配内容的hash运算结果和关键字的hash运算结果相同时,可能会报告匹配成功(假阳性)。发明内容
本发明针对上述FPGA+TCAM方式实现深度包检测的过程中,大流量时遇到的问题,提出了一种在大流量下进行深度包检测的方法,充分利用了 FPGA的特点,在操作系统的主控单元(由用户控制)的内存中和FPGA中分别设置不同种类和数量的布隆计数器,利用布隆过滤器进行初步过滤,使得关键字的增加、删除、匹配过程方便易行。
本发明的硬件环境采用主控单元的内存+FPGA+TCAM。在主控单元的内存中实现关键字统计,在FPGA内部实现布隆过滤器进行粗匹配,随后在TCAM中实现精匹配。
具体技术方案为
1)在FPGA内部搭建3个层次结构的过滤模块。
a)并行放置L个结构、大小相同的第一层过滤模块,待匹配内容在通过这L个过滤模块进行匹配时依次偏移I个字节,从而使待匹配内容在每个时钟周期内都可以偏移L个字节。L的值由需要进行深度包检测的数据流量和FPGA的工作时钟决定。
b)第一层过滤模块内部并行放置M个第二层过滤模块,用于匹配多种长度的关键字。M的值由关键字的长度分布情况决定。
c)第二层过滤模块内部并行放置N个第三层过滤模块,每个第三层过滤模块由块状随机存储器组成基础布隆过滤器,其中每个布隆过滤器的每个存储单元所存储的内容是 lbit。N的值由根据关键字长度采用的hash算法的种类除以2得到。
2)主控单元根据用户的添加及删除操作初始化配置地址。
a)在操作系统的主控单元的内存中保存有一个过滤模块的存储空间,同样分为3 个层次,其中第三层是计数型布隆过滤器,即,在第三层的每个存储单元中所存储的内容并不是lbit,而是包含多bit的一个整数。
b)当添加关键字时,若关键字长度为m个字节,则在主控单元的存储空间中找到匹配长度为n个字节的第二层过滤模块,n为小于等于m的最大值,对关键字的前n个字节 (n字节前缀)进行hash运算,并把运算结果作为初始化地址,查询N个第三层计数型布隆过滤器,修改相应配置地址内的值(通常是加I)。若第三层计数型布隆过滤器的存储单元内的值发生变化(如从0变为非0),则对应更新FPGA内L个对应的存储单元的值(如变为 I)。
c)当删除关键字时,若关键字长度为m,则在主控的存储空间中找到匹配长度为n 的第二层过滤模块,n为小于等于m的最大值,对其n字节前缀进行hash运算,并把运算结果作为地址,查询N个第三层计数型布隆过滤器,修改相应地址内的值(通常是减I)。若第三层计数型布隆过滤器的存储单元内的值发生变化(如从非0变为0),则对应更新FPGA 内L个对应的存储单元的值(如变为0)。
3)进行关键字匹配操作。
a)当某个待匹配内容在FPGA的第三层基础布隆过滤器内的各个hash运算查询存储单元的值为全部命中(如都为I),说明粗匹配成功。对应的第一层过滤模块所在的偏移位置被记录下来,存储进FPGA的缓存器中。每个时钟周期有0 L个粗匹配成功结果。
b)将与第一层过滤模块中粗匹配成功的偏移位置对应的待匹配内容,从数据包中重新提取出来,送入TCAM进行精匹配。
M值由关键字的长度分布情况决定。若关键字的长度分布范围较大,则并不需要对每一种关键字长度都提供一个第二层过滤模块。对于长度介于两个第二层过滤模块的存储空间大小之间的关键字,仅取其字节前缀进行配置。
所述步骤2c)中,每个第三层布隆过滤器对应2种hash运算的结果,这利用了 FPGA中双端口存储器每个时钟周期可以进行2次查找的特性。
根据关键字的数量及长度分布情况,合理设置L/M/N的值,以及每个第三层布隆过滤器的大小,可以把粗过滤的误命中率降低到TCAM匹配能力范围内。
本发明通过两步匹配的方法,既实现了精确匹配,又减少了 TCAM的压力。在布隆过滤器的实现过程中,采用了层次化的设计方法,并充分利用了 FPGA内丰富的双端口随机存储器配置方式灵活的特点。设计中充分考虑了关键字量大且长度不同的问题,并且该方法能够方便的进行关键字的增加、删除操作。


图1为主控单元+FPGA+TCAM进行深度包检测的结构;
图2为粗匹配模块内部结构;
图3为第一层过滤模块内部结构;
图4为第二层过滤模块的内部结构;
图5为第三层基础布隆过滤器内部结构;
图6为主控单元中存储的计数型布隆过滤器。
具体实施方式
为让本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合附图作如下详细说明。
本发明的硬件环境采用操作系统的主控单元+FPGA+TCAM的结构,如图1所示。主控单元实现关键字统计,根据用户的添加/删除关键字的操作初始化配置地址,数据包进入FPGA后,输入到缓存器,然后进行粗匹配(布隆过滤器)、精匹配(TCAM匹配),最后经过处理后输出。
首先在FPGA内部搭建3个层次结构的过滤模块。
FPGA内粗匹配模块结构如图2所示。L个第一层过滤模块并行排列(L的值由需要进行深度包检测的数据流量和FPGA的工作时钟决定,这里以L = 4为例,但并不以此为限),当数据输入到相邻的两个第一层过滤模块时,彼此偏移1个字节,也就是说每个第一层过滤模块对应一个偏移位置。由于内部采用流水线操作,第一层过滤模块每个时钟周期都可以输入新的数据,因此,相当于输入数据每个时钟周期可以偏移4个字节GB)。因此, 假设FPGA工作频率为300MHz时,L = 4可以处理的数据流量为300M*4*8bit = 9. 6Gbps。 图中以关键字粗匹配最长前缀为8进行示例,但并不以此为限。
L个第一层过滤模块的内部结构完全相同,其结构如图3所示。图中,某个第一层过滤模块内设置M个第二层过滤模块,且并行排列(这里以M = 3为例)。3个第二层过滤模块分别处理不同长度的关键字。这里,我们假设,最小的关键字长度为4B。3个第二层过滤模块进行“或操作”后输出结果。
M个第二层过滤模块的内部结构大致相同,但每个第二层过滤模块包含不同的存储单元数。事实上,是根据存储空间的大小来设置包含不同存储单元数的第二层过滤模块结构。图3的第二层过滤模块的结构如图4所示。对于任一第二层过滤模块,若需要使用的hash算法为2N个,则需要在该第二层过滤模块中并联使用N个第三层过滤模块(这里以N = 2为例,但不以此为限),由块状随机存储器构成基础布隆过滤器。将输入的数据分别按照2N个hash算法进行运算后,使用基础布隆过滤器进行运算结果的查找。基础布隆过滤器的匹配结果需要进行“与运算”后输出。
基础布隆过滤器的内部结构如图5所示,由FPGA的块状随机存储器组成,配置成宽度为Ibit的模式。利用该存储器能够同时进行双端口操作的优势,可以同时进行两个 hash结果的查找。查找结果经过“与操作”后输出。其中一个端口可以在进行关键字更新时进行配置操作。
布隆过滤器可能出现误匹配的现象,为了减少误匹配导致的TCAM负载过重,需要在一定的关键字数量下,尽量利用FPGA内的存储器,加大布隆过滤器的存储空间。并且,还可以根据关键字的长度分布,对多个第二层过滤模块,采用不同大小的存储空间。
在FPGA内部实现布隆过滤,需要一个主控单元作为用户进行添加、删除关键字的操作接口,因此在FPGA外部通过接口与主控单元连接。而在主控单元的内存中,也保存有一个存储空间,该存储空间只包括一个第一层过滤模块,及该层过滤模块内部的第二层和第三层结构,如图6所示。主控单元的内存中的第三层过滤模块,由块状随机存储器构成计数型布隆过滤器。在计数型布隆过滤器中,每个存储单元存储的都是包含多bit的一个整数,每次添加操作会使数据加1,删除操作会使数据减1,因此计数型布隆过滤器实际记录的是对关键字进行hash运算后得到的相同结果的重复次数。
下面详细描述添加、删除操作的过程
系统初始化过程中进行添加关键字操作时,主控单元首先分析该关键字的长度, 由于第二层过滤模块处理的长度并不覆盖所有的关键字长度,因此,某些关键字(如本身特别长的,或是超过设置时定义的最长长度的关键字)需要取其前缀。如图2中所示的三个第二层过滤模块,其存储单元分别为4B、6B、8B,若关键字长度为5B,则需要取其4B前缀, 对应1号第二层过滤模块;若关键字长度为7B,则需要取其6B前缀,对应2号第二层过滤模块;若关键字长度在8B以上(含8B),则需要取其8B前缀,对应3号第二层过滤模块。(第二层过滤模块的存储单元可以根据实际情况自行设置,并不局限于上述情况。)然后,主控单元使用与FPGA中完全相同的hash运算,将结果作为配置地址,查询到第三层的计数型布隆过滤器的相应位置,并把该位置的数据加1。若N次加1运算使得某位置的数据由0变为非0,则把FPGA中L个第一层过滤模块对应的第三层布隆过滤器中相应的配置地址都修改成1 ;若这些运算没有从0到非0的跳变,则不需修改FPGA内的存储值。随后,主控单元把该关键字添加到TCAM中。
系统初始化过程中进行删除操作时,主控单元同样要分析该关键字的长度并视情况取其前缀,其步骤与添加操作时一样,故不再赘述。之后,进行与FPGA中完全相同的hash 运算,将结果作为配置地址,查询到内存中的计数型布隆过滤器的相应位置,并把该位置的数据减1。若N次减1运算使得某位置的数据由非0变为0,则把FPGA中L个第一层过滤模块对应的第三层布隆过滤器中的相应的配置地址都修改成0。随后,主控单元把该关键字从TCAM中删除。
添加或删除操作关键字的操作,在匹配过程中也能随时进行,其步骤与系统初始化时一致,故不再赘述。
匹配过程如下
匹配过程中,输入数据按照一字节的偏移分别送到L个第一层过滤模块中,如图2 所示。在每个第一层过滤模块内部,输入数据截取相应的字节前缀,同时送入M个第二层过滤模块。例如输入数据为“一种新的检测方法”,则在图3中即表现为截取“一种”送入1 号第二层过滤模块(一个汉字占2个字节长度),同时截取“一种新的”送入2号第二层过滤模块,以及截取“一种新的检测”送入3号第二层过滤模块。(第二层过滤模块的存储单元可以根据实际情况自行设置,并不局限于上述情况。)
在第二层过滤模块内部,截取的字节前缀分别进行2*N次hash运算,并根据hash结果查询第三层的基础布隆过滤器的配置地址并进行匹配。利用FPGA中双端口存储器每个时钟周期可以进行2次查找的特性,每个第三层的布隆过滤器对应2种hash运算的结果。当查询地址对应的配置地址均显示为1,则表示匹配成功。匹配后,所有的查询结果进行“与操作”,并在第二层过滤模块输出后进行“或操作”,只有当结果均为I才表示粗匹配成功。若第一层过滤模块显示当前粗匹配成功,则其对应的偏移位置送入精匹配模块,从该偏移位置开始的数据在精匹配模块控制下送入TCAM进行精匹配。
最后,TCAM将精匹配结果反馈给FPGA作处理,然后FPGA将最终的匹配结果输出。
权利要求
1.一种在大流量下进行深度包检测的方法,包括在FPGA内部搭建3层过滤模块,并行放置L个第一层过滤模块;每第一层过滤模块内部并行放置M个第二层过滤模块;每第二层过滤模块内部并行放置N个第三层过滤模块,由多个块状随机存储器组成基础布隆过滤器;在主控单元的内存中保存一个过滤模块的存储空间,构建与FPGA对应的3层结构,其中第三层组成计数型布隆过滤器;主控单元对关键字取其字节前缀作运算,把运算结果配置为初始化地址,并根据第三层计数型布隆过滤器的存储单元内的值的变化更新FPGA内L个对应的存储单元的值; 以及检测过程,步骤包括a)输入数据分别送到L个第一层过滤模块中,并截取相应的字节前缀,同时送入M个第二层过滤模块;b)在第二层过滤模块内部,截取的字节前缀分别进行hash运算,并根据结果查询第三层的基础布隆过滤器的配置地址并进行匹配;c)根据待匹配内容在FPGA的第三层基础布隆过滤器内的各个运算结果,记录对应的第一层过滤模块所在的偏移位置,存储进FPGA的缓存器中;d)将被记录下来的偏移位置对应的待匹配内容,从数据包中重新提取出来,送入TCAM 进行精匹配。
2.如权利要求I所述的方法,其特征在于,所述L个第一层过滤模块结构、大小相同。
3.如权利要求I所述的方法,其特征在于,待匹配内容输入所述L个第一层过滤模块时依次偏移I个字节。
4.如权利要求I所述的方法,其特征在于,初始化过程包括对关键字的添加或删除操作。
5.如权利要求I所述的方法,其特征在于,L的值由需要进行深度包检测的数据流量和 FPGA的工作时钟决定;M的值由关键字的长度分布情况决定;,N的值由根据关键字长度采用的hash算法的种类除以2得到。
6.如权利要求I所述的方法,其特征在于,所述字节前缀的截取值为存储空间中小于关键字字节的最大匹配长度。
7.如权利要求I所述的方法,其特征在于,每个第二层过滤模块包含不同的存储单元数。
8.如权利要求I所述的方法,其特征在于,所述第二层过滤模块进行“或操作”后输出结果;所述基础布隆过滤器的匹配结果需要进行“与运算”后输出。
9.如权利要求I所述的方法,其特征在于,所述第三层过滤模块同时进行双端口匹配操作,其中一个端口在进行关键字更新时进行配置操作。
10.如权利要求I所述的方法,其特征在于,所述主控单元使用与FPGA中完全相同的 hash运算。
全文摘要
本发明提出了一种在大流量下进行深度包检测的方法,针对FPGA+TCAM方式实现深度包检测的过程中,大流量时遇到的问题,在操作系统的主控单元的内存中和FPGA中分别构建不同种类和数量的层次化布隆计数器,利用布隆过滤器进行初步过滤,在主控单元的内存中实现关键字统计,在FPGA内部实现布隆过滤器进行粗匹配,随后在TCAM中实现精匹配。本发明通过两步匹配的方法,既实现了精确匹配,又减少了TCAM的压力,并充分考虑了关键字量大且长度不同的问题,使得关键字的增加、删除、匹配过程方便易行。
文档编号H04L29/06GK102546299SQ20121000478
公开日2012年7月4日 申请日期2012年1月9日 优先权日2012年1月9日
发明者岳培培 申请人:北京锐安科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1