基于TCAM的非确定性有限自动机的匹配方法和装置制造方法及图纸

技术编号:8980724 阅读:179 留言:0更新日期:2013-07-31 22:49
本发明专利技术涉及一种基于TCAM(ternary?content?addressable?memory,三态内容寻址存储器)的NFA(non-deterministic?finite?automaton,非确定性有限自动机)的匹配方法和装置。该方法主要包括:对NFA的状态和同时活跃的状态子集进行编码,将NFA的每个状态转移边用一个TCAM条目表示,将NFA的源活跃状态子集的编码和输入字符的编码的拼接作为搜索关键词,按照所述搜索关键字在NFA的所有TCAM条目中进行搜索,将获取的目的活跃状态子集的编码作为输出结果,所述源活跃状态子集为NFA当前所有同时活跃的状态的集合,所述目的活跃状态子集为在NFA中输入所述输入字符、进行状态转换后,得到的同时活跃的状态的集合。本发明专利技术实施例使得NFA的一次状态转换仅需要一次TCAM并行查找就能完成,实现了和基于DFA的正则表达式匹配技术一样的匹配速度,同时利用TCAM的三态存储能力对NFA的TCAM条目进行压缩,减少了NFA所需的TCAM存储空间。

【技术实现步骤摘要】

本专利技术涉及计算机应用
,尤其涉及一种基于TCAM(ternary contentaddressable memory,三态内容寻址存储器)的 NFA(non-deterministic finiteautomaton,非确定性有限自动机)的匹配方法和装置。
技术介绍
从最早的 grep(global search regular expression and print out theline,全面搜索正则表达式并把行打印出来),到现在非常流行的PCRE (Perl CompatibleRegular Expressions, peri语言兼容正则表达式),正则表达式因其强大、便捷、高效的文本处理能力,得到了广泛的使用。目前,几乎所有主编程流语言都支持正则表达式;在软件开发和日常数据处理工作中,正则表达式更是人们不可或缺的得力助手。正则表达式是一种“通用的模式语言”,它由两种字符构成:特殊字符和普通字符。特殊字符称为“元字符”,普通字符称为“文字”。“文字”就像语言中的单词,“元字符”则像文法;把单词按文法组织起来,就有了语义。正如文章由句子段落构成一样,一个完整的正则表达式也是由小的模块单元组成的。虽然模块单元各自都很简单,但它们的组合却千变万化。正是这种简单模块的复杂组合,使得正则表达式具有了强大的表达能力。例如,正则表达式a+b可以用来描述ab, aab, aaab,......等一系列特征的字符串。正则表达式匹配技术是一项用于检测给定的输入字符流中是否包含特定的正则表达式所描述的模式的技术,它计算机网络系统的一项核心基础技术,被广泛应用于如入侵检测和防护、签名匹配、蠕虫检测、深度包检测、流量分析、协议识别等等。正则表达式的匹配通过有限自动机实现,即将正则表达式的规则编译成一个等价的有限自动机,包括NFA (non-deterministic finite automaton,非确定性有限自动机)和DFA (deterministic fin ite automaton,确定性有限自动机)。基于自动机的正则表达式匹配技术急需解决的两大难题是自动机的存储体积和匹配速度。在这两个关键性能指标上,DFA和NFA各自具有不同的优点和缺点。DFA的每个状态对于每个输入字符都只转移到一个唯一的目的状态,使得在DFA运行的时刻,都只有一个状态是活跃的,因此DFA实现正则表达式匹配的过程非常简单:一次DFA状态转换即可处理一个输入字符。DFA因此具有确定的匹配速度,但是DFA所需的状态空间可能呈现指数膨胀,在最坏情况下,具有η个状态的DFA,其等价的DFA可能多达2η个状态,在实际的网络应用中,几十个具有结构(表示匹配任意多数量的任意字符)的正则表达式组合在一起,就会使得编译得到的DFA因为状态空间发生指数膨胀而无法存储。而随着网络应用和流量的快速发展,需要同时检测的正则表达式规则往往成千上万,基于DFA的正则表达式技术往往变得不可行。NFA的优点在于它的存储体积小,其体积与正则表达式规则集大小(即规则集中字符数)成线性增长关系,即使成千上万条规则,所生成的NFA占用的体积也很小。但NFA的状态转移具有不确定性,对于NFA的每一个状态和每一个字符,它所到达的目的状态的数目是不唯一的,也就是说一个NFA状态可以经过一个字符激活多个NFA状态,而这多个NFA状态被同时激活以后,在处理下一个输入字符时,又可能进一步激活更多的状态。因此在NFA运行的过程中,总是会有一组数目不确定的状态同时活跃。由于同时活跃的状态所组成的集合始终是NFA全体状态集合的一个子集,我们把NFA运行时可能出现的活跃状态组成的集合称之为活跃状态子集,NFA的一次状态转换的过程也就是一个源活跃状态子集经过一个输入字符激活一个目的活跃状态子集的过程。目前,NFA的上述特征导致其匹配速度变得缓慢和不可预测。实际应用中,通常需要几十次内存访问甚至更多才能完成一次NFA状态转换,远不能满足网络线速。
技术实现思路
本专利技术的实施例提供了一种基于三态内容寻址存储器的正则表达式的匹配方法和装置,以提高基于NFA的正则表达式匹配的速度。为实现上述的专利技术目的,本专利技术采用下述的技术方案:一种基于TCAM的非确定性有穷状态自动机的匹配方法,包括:对非确定性有穷状态自动机NFA的状态和活跃状态子集进行编码,将所述NFA的每个状态转移边用一个三态内容寻址存储器TCAM条目表示,每个TCAM条目由匹配域和目的域组成,所述匹配域包括:源状态域、输入字符域,所述目的域包括目的状态域或者包括目的状态域和掩码域;将所述NFA的源活跃状态子集的编码和输入字符的编码的拼接作为搜索关键词,按照所述搜索关键字在所述NFA的所有TCAM条目中进行搜索,将获取的目的活跃状态子集的编码作为输出结果,所述源活跃状态子集为所述NFA当前所有同时活跃的状态的集合,所述目的活跃状态子集为在所述NFA中输入所述输入字符、进行状态转换后,得到的同时活跃的状态的集合。一种基于TCAM的非确定性有穷状态自动机的匹配装置,包括:编码处理模块,用于对非确定性有穷状态自动机NFA的状态和活跃状态子集进行编码;TCAM条目构造模块,用于将所述NFA的每个状态转移边用一个三态内容寻址存储器TCAM条目表示,每个TCAM条目由匹配域和目的域组成,所述匹配域包括:源状态域、输入字符域,所述目的域包括目的状态域或者包括目的状态域和掩码域;搜索匹配模块,用于将所述NFA的源活跃状态子集的编码和输入字符的编码的拼接作为搜索关键词,按照所述搜索关键字在所述NFA的所有TCAM条目中进行搜索,将获取的目的活跃状态子集的编码作为输出结果,所述源活跃状态子集为所述NFA当前所有同时活跃的状态的集合,所述目的活跃状态子集为在所述NFA中输入所述输入字符、进行状态转换后,得到的同时活跃的状态的集合。本专利技术实施例通过将正则表达式等构造的NFA的每个状态用若干TCAM条目表示,使得NFA的一次状态转换仅需要一次TCAM条目并行查找就能完成,从而提高了 NFA的匹配速度和效果,实现了和基于DFA的正则表达式匹配技术一样的匹配速度。 附图说明图1为本专利技术实施例一提供的一种基于三态内容寻址存储器的NFA的匹配方法的具体处理流程图;图2为本专利技术实施例二提供的一种用于匹配正则表达式ab.*cd的和ef.*gh的NFA的示意图;图3为本专利技术实施例二提供的对图2所示的NFA中的状态划分得到的“兼容组”的示意图;图4为本专利技术实施例二提供的图2所示的NFA中的各状态的“活跃码”的示意图;图5为当目的域”不包含“掩码域”时,本专利技术实施例四提供的对“活跃状态子集” {0}和{0,3}产生的状态转移进行编码的TCAM条目的示意图;图6为当“目的域”包含“掩码域”时,本专利技术实施例四提供的对“活跃状态子集” {0}和{0,3}产生的状态转移进行编码的TCAM条目的示意图;图7为本专利技术实施例五提供的对字符b的所有状态转移进行编码的TCAM条目的示意图;图8为本专利技术实施例六提供的对图7中的TCAM条目进行压缩的结果的示意图;图9为本专利技术实施例七提供的用于匹配正则表达式ab.*cd的和ef.*gh的TCAM条目的不意图;图10为本专利技术实施例八提供的一种基于TCA本文档来自技高网
...

【技术保护点】
一种基于TCAM的非确定性有穷状态自动机的匹配方法,其特征在于,包括:对非确定性有穷状态自动机NFA的状态和活跃状态子集进行编码,将所述NFA的每个状态转移边用一个三态内容寻址存储器TCAM条目表示,每个TCAM条目由匹配域和目的域组成,所述匹配域包括:源状态域、输入字符域,所述目的域包括目的状态域或者包括目的状态域和掩码域;将所述NFA的源活跃状态子集的编码和输入字符的编码的拼接作为搜索关键词,按照所述搜索关键字在所述NFA的所有TCAM条目的匹配域中进行搜索,将获取的目的活跃状态子集的编码作为输出结果,所述源活跃状态子集为所述NFA当前所有同时活跃的状态的集合,所述目的活跃状态子集为在所述NFA中输入所述输入字符、进行状态转换后,得到的同时活跃的状态的集合。

【技术特征摘要】
1.一种基于TCAM的非确定性有穷状态自动机的匹配方法,其特征在于,包括: 对非确定性有穷状态自动机NFA的状态和活跃状态子集进行编码,将所述NFA的每个状态转移边用一个三态内容寻址存储器TCAM条目表示,每个TCAM条目由匹配域和目的域组成,所述匹配域包括:源状态域、输入字符域,所述目的域包括目的状态域或者包括目的状态域和掩码域; 将所述NFA的源活跃状态子集的编码和输入字符的编码的拼接作为搜索关键词,按照所述搜索关键字在所述NFA的所有TCAM条目的匹配域中进行搜索,将获取的目的活跃状态子集的编码作为输出结果,所述源活跃状态子集为所述NFA当前所有同时活跃的状态的集合,所述目的活跃状态子集为在所述NFA中输入所述输入字符、进行状态转换后,得到的同时活跃的状态的集合。2.根据权利要求1所述的基于TCAM的非确定性有穷状态自动机的匹配方法,其特征在于,对所述NFA的状态和活跃状态子集进行编码,包括: 将所述活跃状态子集编码为一个活跃向量,该活跃向量由所述活跃状态子集中包括的每个状态所归属的兼容组中的活跃码进行拼接得到,所述兼容组是 由若干NFA状态组成的集合,该集合中的状态两两之间都不能同时活跃,每个自循环状态单独组成一个自循环兼容组,所述自循环状态是NFA中转移到自身的边超过了一定阈值的状态,所述活跃码为所述兼容组为组内每个状态各自分配的一个唯一的非全O的编码。3.根据权利要求1所述的基于TCAM的非确定性有穷状态自动机的匹配方法,其特征在于,所述的将非确定性有穷状态自动机NFA的每个状态转移边用一个三态内容寻址存储器TCAM条目表示,每个TCAM条目由匹配域和目的域组成,包括: 将所述TCAM条目的目的域分两种方法表示:方法一,所述目的域仅由目的状态域组成,所述目的状态域存放的是目的活跃状态子集的活跃向量;方法二,所述目的域由目的状态域和掩码域组成,所述掩码域的长度为自循环兼容组的数目,即为每个自循环兼容组依次分配一个比特;若所述自循环兼容组在所述掩码域中的掩码值为“1”,则在目的状态域中存储所述自循环兼容组在目的活跃状态子集中的活跃码与所述自循环兼容组在源活跃状态子集中的活跃码的异或结果,否则直接存储所述自循环兼容组在目的活跃状态子集中的活跃码; 所述编码NFA中所有的状态转移的方法为: 枚举所述NFA中所有的状态转移,将每一个状态转移所对应的源状态域、输入字符域和目的域存储在一个TCAM条目中,所述源状态域中存储源状态的编码,所述输入字符域中存储输入字符的编码,所述目的域中的目的状态域中存储目的状态的编码; 或者; 获取所述NFA中的每个输入字符c的有效集E。,该E。是所有自循环状态以及所有对所述输入字符有转移边的NFA状态的集合,针对每个输入字符计算E。与所述NFA中每一个活跃状态子集S的交集,这些交集组成的集合记为I。,即I。= U s (Ec Π S),将I。中的各个交集按集合大小的非递增顺序进行排序; 依次处理排过序的所述I。中的每一个交集Ε。η S,为每一个交集ε。n s生成一个新的TCAM条目,在所述新的TCAM条目的输入字符域中存储输入字符的编码; 所述ε。n s的活跃向量按如下方式生成,对ε。n s中的每一个状态S,设置S所在的兼容组的编码为S的活跃码,对每一个自循环状态s',若s' eE。但Yg1S,则设置s'所在的兼容组的编码为“O”,其他的兼容组的编码均设置为全“*”,将所有兼容组的编码组合成活跃向量,在所述新的TCAM条目的源状态域中存储所述活跃向量; 对E。n S中的所有状态,计算它们经过所述输入字符所转移到的目的状态的集合记为D,在所述新的TCAM条目的目的状态域中存储所述D的活跃向量; 当所述目的域中包含掩码域时,则对Ε。H S中的每一个自循环状态s',在掩码域中为s'分配一个比特,判断s'是否存在一条边经过所述输入字符转移到自身,如果是,则在s'的掩码域中设置s'所在的兼容组的编码为I;否则,在s'的掩码域中设置s'所在的兼容组的编码为O ; 当所述目的域包含掩码域时,则对E。n S中的每一个自循环状态S',若S'所在的兼容组在掩码域中的值为1,则V的目的状态域中存储V在目的状态域中的编码与V在源状态域中的编码的异或结果。4.根据权利要求1所述的基于TCAM的非确定性有穷状态自动机的匹配方法,其特征在于,所述的方法还包括: 当所述NFA的一个TCAM条目Ti和另一个TCAM条目Tj的目的状态域相同、匹配域相差共m位比特,生成一个新TCAM条目T' k, Ti k初始化为Tj,在T' k的匹配域中将1\和1^之间相异的比特位的值置为“ * ”,若在TCAM中用T' k代替Ir并删除Ti后不影响TCAM的语义正确性,则在TCAM中用T' k代替Ir并删除凡。5.根据权利要求1或2或3或4所述的基于TCAM的非确定性有穷状态自动机的匹配方法,其特征在于,所述的将所述NFA的源活跃状态子集的编码和输入字符的编码的拼接作为搜索关键词,按照所述搜索关键字在所述NFA的所有TCAM条目中进行搜索,将获取的目的活跃状态子集的编码作为输出结 果,包括: 按照所述搜索关键字在所述NFA的所有TCAM条目中进行并行搜索,一次NFA状态转换只需要一次TCAM并行搜索,当TCAM条目的目的域仅由目的状态域组成时,则搜索得到的所有目的状态域的编码的组合即为目的活跃状态子集的编码; 当TCAM条目的目的域由目的状态域和掩码域组成时,对于源状态域中的每一个自循环兼容组,当所述自循环兼容组在搜索得到的掩码域中的值为I时,将搜索得到的目的状态域的编码与所述自循环兼容组的编码做异或,将异或的结果作为最终搜索得到的目的状态域的编码,将最终搜索得到的所有目的状态域的编码的组合作为目的活跃状态子集的编码; 将上一次TCAM并行搜索得到...

【专利技术属性】
技术研发人员:董群峰彭坤杨
申请(专利权)人:中国科学技术大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1