专利名称:一种深度包检测方法
技术领域:
本发明涉及一种在硬件深度包检测过程中处理关键字的方法,属于数据通信领域。
背景技术:
深度包检测技术在数据通信领域的应用很广泛,经常用于数据包应用类型分析、 用户行为分析,以及入侵检测、病毒/蠕虫检测等方面。传统的深度包检测经常使用软件实现,利用各种模式匹配算法来进行特定关键字的匹配,但软件进行深度包检测的速度有限,不能保证线速处理。而采用硬件的方法实现深度包检测,可以在大流量下实现线速处理。使用硬件实现深度包检测,最常用的方法是采用“现场可编程门阵列,,(FPGA)加上 “三相式内容寻址存储器”(TCAM)的实现方式。TCAM是一种进行关键字匹配的专用芯片,输入一条待匹配内容后,TCAM会自动对比待匹配内容与存储器内保存的所有关键字,当发现存储器内有相同的关键字存在时,说明命中,返回命中结果,即该关键字的地址,且该过程为流水线方式进行。使用FPGA+TCAM的方式实现深度包检测的过程为首先把关键字配置进TCAM。开始深度包检测时,由FPGA进行数据的接入,并提取数据包中的负载,作为待匹配内容进入 TCAM进行检测。若命中,则FPGA使用TCAM返回的地址到“静态随机存储器”(SRAM)中读取,SRAM返回内容即数据包的处理方式,FPGA使用该处理方式对数据包进行相应的操作。虽然硬件实现速度非常快,但TCAM也有使用限制。一个是硬件速度的限制,在大流量下,例如IOG 40G的环境时,处理速度还达不到每次匹配对数据包负载仅偏移1个字节,匹配时需要每次偏移多个字节(假设每次偏移N个字节)。另一个是匹配位宽的限制, 由于TCAM能力限制,每次匹配的关键字位宽有限(假设每次匹配的位宽为M字节)。由于以上限制,某些固定偏移位置的关键字,特别是长关键字,有可能不能放入 TCAM的一条匹配规则内。对于这个问题,现有的主要解决方法有以下几种1,采用多个 TCAM级联使用来扩展每次匹配的位宽,这无疑增大了系统复杂度和成本;2,使用TCAM进行前缀匹配,后续再使用一个“同步动态随机存储器”(SDRAM)来进行精确对比,这种方式也同样有实现复杂度问题;3,把关键字分割成多个子关键字,放在TCAM的多个匹配规则中,在深度包检测过程中,进行多次匹配操作,并在最后把各个子命中结果再送入TCAM进行一次匹配,来确定是否命中,这种方法的子命中结果个数不固定,由负载包长度决定,使子命中结果的匹配不易操作。综上所述,现有的关键字分割方法不易操作,成为硬件进行深度包检测的瓶颈。
发明内容
本发明针对上述问题,提出了一种在硬件深度包检测过程中处理关键字的方法, 使关键字的处理分割、匹配易于操作。
本发明针对FPGA+TCAM方式实现深度包检测的过程中,关键字的分割、匹配不易实现的问题,提出了一种分割、匹配关键字的方法,使该过程便于实现。一种深度包检测方法,其步骤为,1)建立现场可编程门阵列(FPGA)模块用于接收待测数据包,所述FPGA模块连接一三相式内容寻址存储器(TCAM)用于接收待测数据包负载并对关键字进行匹配,所述 TCAM中支持关键字的匹配长度为M,;2)在FPGA模块外连接一静态随机存储器(SRAM);3)分割关键字,所述关键字分割长度N按照N = M/2进行分割;4)根据关键字偏移位置和结束位置满足的设定条件重组步骤幻中所述关键字, 得到该关键字匹配规则;5)将分割重组后的关键字存入TCAM和SRAM存储器中,完成关键字预处理;6) FPGA模块提取数据包负载,对所述负载进行分割重组处理,处理完成后FPGA将结果送入TCAM存储器进行匹配,并将匹配结果返回FPGA模块;7) FPGA通过读取SRAM存储器内的匹配地址将对应的数据包的处理操作方式返回 FPGA模块,输出数据包数据。若关键字偏移位置和结束位置满足的设定条件为,当关键字偏移位置> N*i,关键字结束位置< N* (i+2),其中i = 0,1……,i是整数,对某个关键字是固定的,N是关键字长度,关键字占用一条TCAM匹配,该匹配规则的M字节长度对应N*i到N* (i+2)-1,关键字按照匹配规则进行处理。若关键字偏移位置和结束位置满足的设定条件为,当N*i <关键字偏移位置 <N*(i+l) ;N*j彡关键字结束位置<N*(j+l);其中i = 0,l……,i是整数,对某个关键字是固定的,j ^ i+2,N是关键字长度,关键字占用i_i条TCAM规则,该关键字按照匹配规则进行重组。关键字M字节对应的匹配规则为子匹配规则1 :M字节对应N*i到N* (i+2);子匹配规则2 =M字节对应N* (i+1)到N* (i+3);子匹配规则j-i =M字节对应N* (j-Ι)到N* (j+Ι)。所述i-i条子匹配规则在TCAM存储器中位于连续地址空间内。所述处理数据包负载方法为,按照关键字长度N字节进行切割,并把相邻的两个N 字节拼装成M字节送入TCAM存储器进行匹配。即第一次匹配的M字节对应负载的0到N*2_l第二次匹配的M字节对应负载的N到N*3_l第三次匹配的M字节对应负载的N*2到N*4_l分割到数据包的结尾停止。若关键字在TCAM存储器匹配,且在SRAM存储器中显示该匹配结果不属于长关键字,则直接按照SRAM存储器中的处理方式对数据包进行处理。若关键字在TCAM存储器匹配,且在SRAM存储器中显示该匹配结果占用了关键字占用多条TCAM规则,则需要进行多次地址连续匹配。在FPGA模块中用现有匹配地址替换上次匹配地址并保存,用于与下次匹配结果进行对比。若关键字偏移位置和结束位置满足的设定条件为,当N*i <关键字偏移位置 <N*(i+l) ;N*j彡关键字结束位置<N*(j+l);其中i = 0,l……,i是整数,对某个分割关键字是固定的,当j = i+2时,N*i彡关键字偏移位置<淋(丨+1),淋(丨+2)彡关键字结束位置< N* (i+3),对于所述关键字长度M,所使用的两条子匹配规则为子匹配规则1 :M字节对应N*i到N* (i+2);子匹配规则2 =M字节对应N* (i+1)到N* (i+3)。所述的M由TCAM器件特性、系统流量决定,这里不做限定。本发明对关键字的处理,即对关键字的分割、配置到TCAM的连续地址及匹配结果判断的方式,简化了关键字的处理过程。并且,由于保障了关键字切割成子关键字时,各子关键字的长度都大于TCAM匹配长度的一半,因此大大降低了子关键字过短导致的误命中, 且易于逻辑实现及流水线处理。
图1是本发明FPGA和TCAM进行深度包检测流程。图2是本发明处理关键字的一种匹配规则和关键字的表示方式。图3是本发明处理关键字的另一种匹配规则关键字的表示方式。图4是本发明处理关键字的优选实施方式中匹配规则和关键字的表示方式。图5是本发明负载数据包分割示意图。其中,①-数据包输入②-数据包负载进入TCAM进行匹配③-匹配结果返回 ④-使用匹配地址读取SRAM⑤-SRAM内容返回⑥-数据包处理后输出
具体实施例方式该方法工作环境如图1所示。在数据包接入之前,首先由FPGA把需要进行匹配的关键字配置进TCAM,同时把该匹配规则对应的数据包处理方式配置进对应地址的SRAM。关键字也可以在数据包进行深度包检测的过程中进行更新。关键字有两个特征偏移位置和内容,偏移位置即该条关键字的开始位置偏移数据包负载开始位置的值。在配置关键字时,若TCAM支持的匹配长度为M,则关键字按照长度 N = M/2进行分割。按照关键字的偏移位置和长度分成两种分割及配置类型。类型1 当固定位置的关键字的偏移位置及结束位置满足关键字偏移位置彡N*i ;关键字结束位置< N* (i+2);i = 0, 1......;即图2所示的情况。此时,关键字占用1条TCAM规则,该条匹配规则的M字节对应N*i到N*(i+2)_1,即图2所示的匹配规则χ。类型2 当固定位置的关键字的偏移位置及结束位置满足N*i彡关键字偏移位置< N* (i+1);
6
N*j彡关键字结束位置< N*(j+1);i = 0, 1......,j 彡 i+2 ;即图3所示的情况,这种情况称为长关键字情况。此时,关键字占用i-i条TCAM规则,各条规则的M字节对应
匹配规则1 =M字节对应N*i到N* (i+2);匹配规则2 =M字节对应N* (i+1)到N* (i+3);......匹配规则j-i =M字节对应N* (j-Ι)到N* (j+Ι)。即图3所示的匹配规则y 匹配规则y+j-i-1。这i-i条匹配规则在TCAM中位于连续地址空间内,且在SRAM的对应内容中标注这是长关键字,并在匹配规则1和匹配规则y+i-i-Ι对应的SRAM中标注这是长关键字的开头和结尾。类型2的特例图4所示的情况是类型2的特例。当j = i+2时,即N*i彡关键字偏移位置< N*(i+1)N*(i+2)彡关键字结束位置< N*(i+3)i = 0,l......此时,即使关键字的长度不足M,但仍然不能只用一条匹配规则来表示。所使用的两条子匹配规则为匹配规则1 :M字节对应N*i到N* (i+2)匹配规则2 =M字节对应N* (i+1)到N* (i+3)即图4所示的匹配规则ζ及匹配规则z+1。在上述分割方法下,每条分割后的子关键字的有效长度都大于N,因此,大大降低了子关键字过短导致的误命中。当匹配规则成功写入TCAM和SRAM后,就可以进行数据包的深度包检测了。如图 1的第①步所示,数据包在接入FPGA之后,首先需要进行数据包的解析,提取出需要进行过滤的数据包负载内容,然后在第②步中把该负载送入TCAM进行匹配。在第③步中TCAM返回匹配结果。如果匹配成功,则在第④步中把命中结果(匹配地址)送入SRAM进行相应查找。在第⑤步中SRAM返回查找结果,即数据包处理方式。数据包经过相应处理后在第⑥步中从FPGA输出。该处理过程采用流水线的方式实现。在图1的第②步中,数据包的负载需要按照图5所示的格式进行分割及拼装后送入TCAM。数据包从负载的起始位置开始,按照N字节的长度进行分割,分割后的数据块,每相邻两块组合成一个M字节的内容,依次送入TCAM进行匹配操作。即,除了开头的N字节外,其他字节都在TCAM中进行两次匹配。在图1中的第③步中,若显示当前命中,且第⑤步中显示命中结果不属于长关键字,则说明命中了类型1的关键字,按照SRAM中的处理方式对数据包进行处理并输出。在图1的第③步中,需要对比本次命中结果和上次命中结果,若两次匹配返回的结果都命中,且匹配的规则地址增加了 1,说明连续命中了相邻规则。待到第⑤步结束后,若 SRAM显示命中的是长关键字的开头、且随后又连续命中了相邻规则,最后SRAM又显示命中的是长关键字的结尾时,说明该长关键字命中。按照最后一次SRAM的查找结果进行处理并输出。 按照上述方案,可以实现大流量下数据包的深度包检测,且关键字的长度没有限 制。
权利要求
1.一种深度包检测方法,其步骤为,1)建立现场可编程门阵列(FPGA)模块用于接收待测数据包,所述FPGA模块连接一三相式内容寻址存储器(TCAM)用于接收待测数据包负载并对关键字进行匹配,所述TCAM中支持关键字的匹配长度为M,;2)在FPGA模块外连接一静态随机存储器(SRAM);3)分割关键字,所述关键字分割长度N按照N= M/2进行分割;4)根据关键字偏移位置和结束位置满足的设定条件重组步骤幻中所述关键字,得到该关键字匹配规则;5)将分割重组后的关键字存入TCAM和SRAM存储器中,完成关键字预处理;6)FPGA模块提取数据包负载,对所述负载进行分割重组处理,处理完成后FPGA将结果送入TCAM存储器进行匹配,并将匹配结果返回FPGA模块;7)FPGA通过读取SRAM存储器内的匹配地址将对应的数据包的处理操作方式返回FPGA 模块,输出数据包数据。
2.如权利要求1所述的深度包检测方法,其特征在于,若关键字偏移位置和结束位置满足的设定条件为,当关键字偏移位置>N*i,关键字结束位置<淋(1+2),其中i =0, 1……,i是整数,对某个关键字是固定的,N是关键字长度,关键字占用一条TCAM匹配,该匹配规则的M字节长度对应N*i到N*(i+2)-l,关键字按照匹配规则进行处理。
3.如权利要求1所述的深度包检测方法,其特征在于,若关键字偏移位置和结束位置满足的设定条件为,当N*i <关键字偏移位置< N*(i+1) ;N*j <关键字结束位置 < N*(j+1);其中i = 0,1……,i是整数,对某个关键字是固定的,j彡i+2,N是关键字长度,关键字占用j_i条TCAM规则,该关键字按照匹配规则进行重组。
4.如权利要求3所述的深度包检测方法,其特征在于,关键字M字节对应的匹配规则为子匹配规则1 :M字节对应N*i到N* (i+2); 子匹配规则2 :M字节对应N*(i+1)到N*(i+3);子匹配规则j-i =M字节对应N* (j-Ι)到N* (j+Ι)。所述i_i条子匹配规则在TCAM存储器中位于连续地址空间内。
5.如权利要求1所述的深度包检测方法,其特征在于,所述处理数据包负载方法为,按照关键字长度N字节进行切割,并把相邻的两个N字节拼装成M字节送入TCAM存储器进行匹配。即第一次匹配的M字节对应负载的0到N*2-l 第二次匹配的M字节对应负载的N到N*3-l 第三次匹配的M字节对应负载的N*2到N*4-l 分割到数据包的结尾停止。
6.如权利要求1所述的深度包检测方法,其特征在于,若关键字在TCAM存储器匹配,且在SRAM存储器中显示该匹配结果不属于长关键字,则直接按照SRAM存储器中的处理方式对数据包进行处理。
7.如权利要求1所述的深度包检测方法,其特征在于,若关键字在TCAM存储器匹配,且在SRAM存储器中显示该匹配结果占用了多条TCAM规则,则需要进行多次地址连续匹配。
8.如权利要求1所述的深度包检测方法,其特征在于,在FPGA模块中用现有匹配地址替换上次匹配地址并保存,用于与下次匹配结果进行对比。
9.如权利要求1所述的深度包检测方法,其特征在于,若关键字偏移位置和结束位置满足的设定条件为,当N*i <关键字偏移位置< N*(i+1) ;N*j <关键字结束位置 < N* (j+Ι);其中i = 0,1……,i是整数,对某个分割关键字是固定的,当j = i+2时,N*i ( 关键字偏移位置<淋(1+1),N*(i+》<关键字结束位置<淋(1+3),对于所述关键字长度 M,所使用的两条子匹配规则为子匹配规则1 :M字节对应N*i到N* (i+2); 子匹配规则2 =M字节对应N* (i+1)到N* (i+3)。
全文摘要
本发明涉及一种深度包检测方法,其步骤为,建立现场可编程门阵列(FPGA)模块所述FPGA模块连接三相式内容寻址存储器(TCAM)接收待测数据包负载并对关键字进行匹配,所述TCAM中支持关键字的匹配长度为M。1)分割关键字,所述关键字分割长度N按照N=M/2进行分割;2)根据关键字偏移位置和结束位置满足的设定条件重组步骤1)中所述关键字,得到该关键字匹配规则;3)将分割重组后的关键字存入TCAM和SRAM存储器中,完成关键字预处理;4)FPGA模块提取数据包负载,对所述负载进行分割重组处理,处理完成后FPGA将结果送入TCAM存储器进行匹配,并将匹配结果返回FPGA模块;5)FPGA通过读取SRAM存储器内的匹配地址将对应的数据包的处理操作方式返回FPGA模块,输出数据包数据。
文档编号H04L12/26GK102437937SQ20111045244
公开日2012年5月2日 申请日期2011年12月29日 优先权日2011年12月29日
发明者刘钧凯, 岳培培, 李树佳 申请人:北京锐安科技有限公司