【技术实现步骤摘要】
基于TCAM的确定性有穷状态自动机DFA的匹配方法和装置
本专利技术涉及计算机应用
,尤其涉及一种基于TCAM(ternarycontentaddressablememory,三态内容寻址存储器)的DFA的匹配方法和装置。
技术介绍
正则表达式技术是计算机网络系统的一项核心基础技术,被广泛应用于入侵检测和防护、签名匹配、蠕虫检测、包内容过滤、流量分析、协议识别等领域。正则表达式具有灵活、强大的描述字符串模式的能力,正则表达式的匹配通过有限自动机实现,该有限自动机包括NFA(non-deterministicfiniteautomaton,非确定性有限自动机)和DFA(deterministicfiniteautomaton,确定性有限自动机)。即可将正则表达式编译为一个NFA,然后可以进一步将此NFA编译为一个与之等价的DFA,通过NFA或者DFA的状态转换检查输入字符串中是否存在给定的正则表达式模式。NFA和DFA在存储空间和匹配速度两个方面拥有各自的优点和缺点。有限自动机存储的是一个状态转换表,给定一个当前活跃状态和一个输入字符,通过在状态转换表中查询,可得到下一时刻活跃的状态。自动机的存储空间取决于这个状态转换表的大小,由于字符表的大小通常是确定的(如ASCII表),所以自动机的存储空间主要取决于状态的个数。NFA所需存储空间小,其状态数与正则表达式的规则集大小(即规则集中字符数)成线性增长关系。但NFA的匹配速度很慢。由于NFA的不确定性,对于每个字符,NFA中的状态都有可能同时转移到多个目的状态,导致一次状态转换需要多次内存访问。对于这些同 ...
【技术保护点】
一种基于TCAM的确定性有穷状态自动机DFA的匹配方法,其特征在于,包括:将确定性有穷状态自动机DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由源状态域、输入字符域和目的状态域三个域组成,所述源状态域由模板ID域和私有ID域两个子域组成,分别用于存储源状态的模板ID编码和私有ID编码,所述目的状态域由模板ID域和私有ID域两个子域组成,所述模板ID域用于存储目的状态的模板ID编码和源状态的模板ID编码的异或结果,所述私有ID域用于存储目的状态的私有ID编码;以具体的所述源状态域和输入字符域的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,获取搜索得到的目的状态域,将所述目的状态域中的模板ID域的值与所述搜索关键词中的模板ID域的值进行异或,将所述异或结果作为所述目的状态域中的最终的模板ID域的值。
【技术特征摘要】
2012.02.28 CN 201210047854.61.一种基于TCAM的确定性有穷状态自动机DFA的匹配方法,其特征在于,包括:将确定性有穷状态自动机DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由源状态域、输入字符域和目的状态域三个域组成,所述源状态域由模板ID域和私有ID域两个子域组成,分别用于存储源状态的模板ID编码和私有ID编码,所述目的状态域由模板ID域和私有ID域两个子域组成,所述模板ID域用于存储目的状态的模板ID编码和源状态的模板ID编码的异或结果,所述私有ID域用于存储目的状态的私有ID编码;以具体的所述源状态域和输入字符域的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,获取搜索得到的目的状态域,将所述目的状态域中的模板ID域的值与所述搜索关键词中的模板ID域的值进行异或,将所述异或结果作为所述目的状态域中的最终的模板ID域的值;其中,所述的将确定性有穷状态自动机DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,包括:若对于某个输入字符,状态i和状态j各有一条出边经过该输入字符转移到某个相同的目的状态,则这两条出边是状态i和状态j之间的共享边;若对于某个输入字符,状态i和状态j各有一条出边经过该输入字符转移到不同的目的状态,则状态i的这条出边是关于状态j的非共享边,且状态j的这条出边是关于状态i的非共享边;每个DFA状态均用一对状态ID进行编号,所述状态ID对为模板ID和私有ID,全部的DFA状态被划分成多个状态集合,每个状态集合包含的是全部拥有相同私有ID的状态,且该状态集合以这个私有ID命名;如果两个状态分属于两个状态集合,且所述两个状态集合共享相同的模板ID,则所述两个状态集合互为彼此的亲属状态;对于私有ID为K的状态集合,若私有ID为J的状态集合同时满足下述条件,则状态集合K的所有状态都各自选择它们在状态集合J中的亲属状态作为模板状态:J<K;对于集合K中的每一个状态,其在集合J中都存在一个亲属状态;在所有满足上述两个条件的候选状态集合中,集合J与集合K的相似度最大;每个DFA状态最多只有一个模板状态,对于自循环状态不为之分配模板;若一个DFA状态有模板状态时,则该DFA状态的状态转移边只需存储该DFA状态关于其模板状态的非共享边;若一个DFA状态没有模板状态,则该DFA状态需要存储其全部的状态转移边;存在模板关系的两个DFA状态生成的TCAM条目之间的存储顺序如下:若状态i以状态j为模板,则状态i的状态转移边都必须存储在状态j的状态转移边之前;不存在模板关系的两个DFA状态生成的TCAM条目之间的存储顺序是任意的。2.根据权利要求1所述的基于TCAM的确定性有穷状态自动机DFA的匹配方法,其特征在于,所述的源状态域由模板ID域和私有ID域两个子域组成,分别用于存储源状态的模板ID编码和私有ID编码,包括:将转移到自身的出边的数目超过了一定的阈值的状态定义为自循环状态,每个DFA状态有且仅有唯一的(模板ID,私有ID)对;为每个自循环状态分配一个唯一的模板ID,为所有的自循环状态分配一个相同的私有ID;对于每个非自循环状态,其模板ID的取值为与其相似度最大的自循环状态的模板ID;其私有ID的取值按如下宽度遍历过程迭代进行:维护一个状态集合的队列,尝试为所有在同一个状态集合中的状态分配相同的私有ID,初始将由所有自循环状态组成的状态集合入队,并将该状态集合标记为已访问,每次取出队首的状态集合S直至队列为空:依次迭代检查S经每一个字符所达到的目的状态集合D:从D中删去所有自循环状态;若D中存在多个状态共享相同的模板ID,则只留下其中一个状态,其余的状态从D中删去;若存在一个已访问过的状态集合S',使得则跳出本次迭代;若存在一个已访问过的状态集合S’,S’中所有的状态已被分配相同的私有ID,使得则将S'中状态所分配的私有ID分配给D中所有状态;否则,D中所有状态分配一个尚未被分配过的私有ID;将D中所有状态从所有已访问的状态集合中删除;标记集合D为已访问;D入队。3.根据权利要求1所述的基于TCAM的确定性有穷状态自动机DFA的匹配方法,其特征在于,所述的源状态域由模板ID域和私有ID域两个子域组成,分别用于存储源状态的模板ID编码和私有ID编码,包括:对于存在模板关系的两个DFA状态i和j,若状态i以状态j为模板,则状态i的私有ID编码匹配状态j的私有ID编码;DFA状态间的模板关系将所有的DFA状态组织成多个树,每个树均以一个自循环状态作为根,每个DFA状态均以它的模板状态为父结点;在所述树中为每个状态分配一个子编码,如果一个状态有N个子结点,则这N个子结点所需的子编码比特数为每个子结点分配一个长度为n的互不相同的子编码;全“0”的编码保留不分配,叶子结点的子编码为空;私有ID相同的状态分配的子编码必须相同;每个状态的私有ID的编码即为该状态所有祖先结点的子编码与自身子编码的拼接,即从树根开始到每个状态,该状态的初始私有ID编码为空,沿途依次在后面拼接上所访问的父结点的子编码,最后拼接上该状态的子编码,作为该状态的私有ID编码;将所有状态的私有ID编码的长度设置为一致。4.根据权利要求1至3任一项所述的基于TCAM的确定性有穷状态自动机DFA的匹配方法,其特征在于,所述的方法还包括:若存在共享相同的目的状态域、源状态域的两个TCAM条目i和j且i和j的输入字符域只相差一个比特,则在TCAM条目i的输入字符域中,将与TCAM条目j相差的比特位的值置为“*”,删除TCAM条目j;若存在共享相同的目的状态域、输入字符域、源状态域的私有ID域的两个TCAM条目i和j且i和j的...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。