基于tcam的确定性有穷状态自动机的匹配方法和装置的制作方法

文档序号:6444190阅读:385来源:国知局
专利名称:基于tcam的确定性有穷状态自动机的匹配方法和装置的制作方法
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种基于三态内容寻址存储器的DFA(deterministic finite automaton,确定性有穷状态自动机)的匹配方法和装置。
背景技术
从最早白勺 grep(global search regular expression and print out theline,全面搜索正则表达式并把行打印出来),到现在非常流行的PCRE(Perl CompatibleRegular Expressions, perl语言兼容正则表达式),正则表达式因其强大、便捷、高效的文本处理能力,得到了广泛的使用。目前,几乎所有主编程流语言都支持正则表达式;在软件开发和日常数据处理工作中,正则表达式更是人们不可或缺的得力助手。正则表达式是一种“通用的模式语言”,它由两种字符构成特殊字符和普通字符。特殊字符称为“元字符”,普通字符称为“文字”。“文字”就像语言中的单词,“元字符”则像文法;把单词按文法组织起来,就有了语义。正如文章由句子段落构成一样,一个完整的正则表达式也是由小的模块单元组成的。虽然模块单元各自都很简单,但它们的组合却千变万化。正是这种简单模块的复杂组合,使得正则表达式具有了强大的表达能力。正则表达式的匹配是通过有穷状态自动机来完成的。从正则表达式构造NFA (Non-deterministic finite automaton,不确定性有穷状态自动机)是一个非常经典的问题,可以分三步完成第一步,用Thompson算法从正则表达式生成ε -NFA ;第二步,用子集构造法从ε -NFA构造DFA ;第三步,对第二步得到的DFA进行状态最小化,从而得到最终的状态数最少的DFA。DFA实现正则表达式匹配的原理如下从DFA的起始状态出发,每读入一个字符就做一次状态转换。如果到达的状态是接收状态,说明当前输入与正在检查的正则表达式匹配,如果到达的状态是死状态(即所有的256边全都转移到自身的状态),说明当前输入与正在检查的正则表达式不匹配,否则继续输入字符,直至抵达某个接收状态或死状态,或输入字符被读完。随着正则表达式在互联网络中的应用,因为互联网络具有流量大、速度快的特点,又对正则表达式提出了新的要求,需要能够并行匹配多个正则表达式。正则表达式的并行匹配是这样实现的先由一组多个正则表达式生成一个有限状态自动机,正则表达式的匹配也就变成了自动机的状态转换。自动机的每个接收状态对应着一个或者若干个正则表达式。当自动机到达某个接收状态,就可以确信数据流中存在与该接收状态对应的正则表达式匹配的数据。上述有限状态自动机从本质上说是一张二维表表上的一行代表自动机的一个状态,每一行由256个单元组成,每个单元存储一个指针。例如,第i行第j列的单元,存储的是当自动机处在状态i时,读入ASCII码为j的字符时应该转换到的目标状态的指针。如果有限状态自动机有N个状态,这张表就有N行。这张大小为N· 256的表,记录了有限状态机自动机的所有信息。目前,由于上述有限状态自动机的体量非常大,导致上述基于DFA的正则表达式匹配方法亟待改进。

发明内容
本发明的实施例提供了一种基于TCAM的DFA的匹配方法和装置,以提高基于DFA 的正则表达式匹配的速度。一种基于TCAM的确定DFA的匹配方法,包括将确定性有穷状态自动机DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由出发状态、输入字符和到达状态三个域组成,表示同一状态的TCAM 条目的出发状态相同;以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态作为输出结果。一种基于TCAM的DFA的匹配装置,包括TCAM条目构造模块,用于将确定性有穷状态自动机DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由出发状态、输入字符和到达状态三个域组成,表示同一状态的TCAM条目的出发状态相同;搜索匹配模块,用于以具体的所述出发状态和输入字符的拼接作为搜索关键词, 按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态作为输出结果。由上述本发明的实施例提供的技术方案可以看出,本发明实施例通过将正则表达式等构造的DFA的每个状态用若干TCAM条目表示,使得正则表达式的一次状态转换仅需要一次TCAM条目并行查找就能完成,从而提高了基于DFA的正则表达式匹配的速度。


图1为本发明实施例一提供的一种基于TCAM的DFA的匹配方法的具体处理流程图;图2为本发明实施例一所提供的用于匹配正则表达式1
I [1-9]

(am Ipm)的 DFA ;图3为本发明实施例一提供的用于表示图2中状态1的部分TCAM条目;图4为本发明实施例一提供的对图3中的状态1的TCAM条目应用单状态条目压缩算法之后的结果;图5为本发明实施例一提供的识别正则表达式(bd) * (ce) +和(ce) * (bd)+的 DFA ;图6为本发明实施例一提供的识别正则表达式(bd) * (ce) +和(ce) * (bd)+的 TCAM条目;图7为本发明实施例一提供的对应于图5的DFA的状态号的编码方案图8为本发明实施例二提供的用于说明状态间的“相似度”的定义的TCAM条目;图9为本发明实施例二提供的用于说明状态间的“模板”的定义的TCAM条目;图10为本发明实施例二提供的根据状态间的相似度为某个DFA构建的最小生成树;图11为本发明实施例二提供的基于图6中的最小生成树对状态号进行重编码的过程;图12为本发明实施例三提供的某DFA的四个状态的TCAM条目;图13为本发明实施例三提供的通过调整状态号编码后所需的某DFA的四个状态的TCAM条目;图14为本发明实施例三提供的用于说明状态子集之间的“相似度”的定义的TCAM 条目;图15为本发明实施例三提供的经状态内最小化的有6个状态的DFA的TCAM条目;图16为本发明实施例三提供的为图15中所示的DFA所构建的递归划分树;图17为本发明实施例三提供的图16中删去“核心集”的根节点的带权图,图中权值为状态间的相似度;图18为本发明实施例三提供的划分图17的根节点时逐渐生长的状态子集;图19为本发明实施例三提供的图16中删去“核心集”的状态子集{0,1,2}的带权图,图中权值为状态间的相似度;图20为本发明实施例三提供的基于图16的递归划分树,自底向上的重编码过程示意图;图21为本发明实施例三提供的图16中的状态号的编码方案;图22为本发明实施例三提供的图15最终经过状态号编码后所需的TCAM条目;图23为本发明实施例四提供的一种基于TCAM的DFA的匹配装置的具体结构图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图,以对本发明实施例进行清楚、完整地描述人员。实施例一该实施例提供的一种基于三态内容寻址存储器的正则表达式的匹配方法的具体处理流程如图1所示,包括如下的处理步骤步骤SlOldf DFA的每个状态用若干TCAM条目表示,每个TCAM条目由“出发状态”、“输入字符”和“到达状态”三个域组成。TCAM(ternary content addressable memory,三态内容寻址存储器)是从 CAM (content addressable memory,内容寻址存储器)的基础上发展而来的。一般的CAM 存储器中每个bit位的状态只有两个,“0”或“1”,而TCAM中每个bit位有三种状态,除掉 “0,,和“ 1 ”外,还有一个“ don,t care,,状态,所以称为“三态,,,它是通过掩码来实现的,正是TCAM的这个第三种状态特征使其既能进行精确匹配查找,又能进行模糊匹配查找,并且具有查找速度快、操作简单的优点。本发明实施例将DFA的每个状态用若干TCAM条目表示,每个TCAM条目由“出发状态”、“输入字符”和“到达状态”三个域组成。表示同一状态的TCAM条目的“出发状态”相同。当上述输入字符采用ASCII字符时,因为ASCII字符有256个,所有每个状态对应 256个TCAM条目。在实际应用中,上述“出发状态”域和“输入字符”域可以是由“ 0 ”、“ 1 ”和“*”组成的字符串,“到达状态”域可以是“0”和“ 1,,组成的字符串。上述DFA可能是由正则表达式规则编译得到,也可能是由字符串规则编译得到, 甚至别的任何方式得到。步骤S102、利用单状态条目压缩算法来减少存储单个状态所需的TCAM条目数量。上述单状态条目压缩算法的处理过程主要包括遍历所述DFA的任意状态i的所有TCAM条目,找出出现频率最高的“到达状态”,记为D状态,删除所述状态i的到达状态是状态D的TCAM条目,添加一个特定TCAM条目到状态i的TCAM条目列表的末尾,所述特定 TCAM条目的出发状态是状态i、输入字符是“********”,到达状态是状态D。两两相邻地比较所述状态i的剩余的TCAM条目,如果两个相邻的TCAM条目的到达状态相同、输入字符中只有第K个比特不同,则将所述两个相邻的TCAM条目中的任一个 TCAM条目的输入字符的第K个比特以“*”代替,其余的比特保持不变构成新的输入字符;将所述两个相邻的TCAM条目删除,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是所述新的输入字符,到达状态是所述两个相邻的TCAM条目中的到达状态。上述单状态条目压缩算法的具体处理过程包括如下几个步骤步骤1、遍历任意状态i的256个TCAM条目,找出出现频率最高的“到达状态”,记为D状态。比如,图2是用于匹配正则表达式1
I [1-9]

(am|pm)的DFA,该正则表达式识别12小时制的时刻,例如11:59am。状态9和状态10是接收状态。用TCAM 存储该DFA,在不经过任何压缩的情况下,每个状态需要256个TCAM条目,因此总共需要 11X256 个 TCAM 条目。图3是表示图2中状态1的若干TCAM条目(因空间有限,状态1的256个TCAM条目不能尽数列出)。每个TCAM条目由“出发状态”、“输入字符”和“到达状态”三个域组成。 对状态1,当“输入字符”为其余245个未在图3中列出的ASCII字符时,“到达状态”都是死状态。对于说明书附图中出现的“出发状态”、和“到达状态”,为方便说明,它们的值用状态ID或状态ID的编码表示,“输入字符”的值用输入字符的ASCII编码表示,TCAM中实际存储的是它们的编码。针对图3中的状态1,上述出现频率最高的D状态是死状态(dead)。步骤2、删除状态i的“到达状态”是状态D的TCAM条目。针对图3中的状态1,则删除“到达状态”是死状态的所有TCAM条目。步骤3、添加一个条目到状态i的TCAM条目列表的末尾,其“出发状态”是状态i, 其“输入字符”是8个“不关心状态(*) ( “********”),其“到达状态”是状态D。针对图3中的状态1,上述添加的一个条目为图4中的最后一个条目。步骤4、针对上述状态i的剩余的TCAM条目,对“到达状态”相同、而且“输入字符” 可以被一个前缀覆盖的若干TCAM条目,用“输入字符”是前缀的TCAM条目来代替。具体处理过程为成对地、两两相邻地比较状态i的剩余的TCAM条目如果两个相邻的TCAM条目的“到达状态”相同、而且“输入字符”的海明距离为1,即它们的“输入字符”只有1个(第 k个)比特不同,那么把这两个相邻的TCAM条目删除,代之以一个新的TCAM条目,该新的TCAM条目中除了 “输入字符”的第k个比特变作“*”之外,其余的7个比特保持不变。图3中列出的前两个条目满足上述条件,它们都是图3中状态1的条目,“到达状态”都是状态2,并且它们的“输入字符”只相差最后一个比特(“00110000”和“00110001”), 所以在图4中用一个新条目即第一个条目取代它们。步骤S103、利用不同状态共享TCAM条目的方法减少存储整个DFA所需的TCAM条
目数量。通过不同状态共享TCAM条目的方法来减少不同状态共享的TCAM条目的拷贝数, 从而减少存储整个DFA所需的TCAM条目数量。上述不同状态共享TCAM条目的方法包括 基于“模板”关系的共享TCAM条目和基于“状态分组”的共享TCAM条目。步骤S104、以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态对应的正则表达式作为输出结果。在所述用TCAM存储DFA的方法的基础上,本发明实施例又提出了用TCAM的并行查找实现基于DFA的正则表达式匹配的方法,使得状态转换可以通过TCAM的并行查找来完成,而且一次状态转换仅需要一次并行查找。以上述DFA的当前状态作为“出发状态”,将上述“出发状态”对应的编码字符串和当前的“输入字符”对应的编码字符串拼接作为TCAM条目的搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的“到达状态”作为TCAM条目的输出值,将所述搜索得到的“到达状态”对应的正则表达式作为输出结果。图5是识别正则表达式(bd) * (ce) +和(ce) * (bd) +的DFA,其中状态4是接收规则 (bd) * (ce) +的接收状态,状态5是接收规则(ce) * (bd) +的接收状态,为表示清晰,图5中省略显示所有到达状态为状态0的转移边。图6是对图5中原始的DFA应用单状态条目压缩算法、按“状态分组”对TCAM条目进行缩减、对状态号进行重编码之后得到的结果,状态号的编码方案在图7中给出。用存储在TCAM上的DFA实现正则表达式匹配,以当前活跃状态的状态号和当前读入字符的拼接作为搜索关键词输入TCAM,TCAM返回下一跳的状态号。例如,对输入字符串 ce,正则表达式匹配是如下进行的当前活跃状态是状态0,其状态号是“100”,以“100”拼接字符c的编码 “01100011”作为搜索关键词输入TCAM,该关键词与图6中的第3个TCAM条目匹配,因此输出下一跳状态号是“010”;当前读入字符是e,以“010”拼接字符e的编码“01100101”作为搜索关键词输入 TCAM,该关键词与图6中的第2个TCAM条目匹配,因此输出下一跳状态号是“ 110” ;与“110”对应的是状态4,该状态是接收状态,到达该状态时匹配的正则表达式是 (bd) * (ce) +,所以输入ce匹配正则表达式(bd) * (ce) +。实施例二本实施例提供了一种基于“模板”关系的共享TCAM条目的方法的具体处理过程包括定义状态i和状态j的“相似度”,用符号sim(i,j)表示,它的取值是状态i和状态j的相同的TCAM条目的数目(所谓“相同”,要求“输入字符”和“到达状态”都相同)
计算所述DFA的任意两个状态状态i和状态j的相似度sim (i,j),当所述状态 i以状态j为模板,将所述状态i和状态j的读入字符和到达状态都相同的TCAM条目从所述状态i的TCAM条目中删除,在所述DFA的所有TCAM条目列表中将所述状态i的剩下的 TCAM条目排列在所述状态j的TCAM条目之前,对所述状态i和状态j对应的编码字符串进行重新设定,使所述状态j对应的编码字符串能够通配所述状态i对应的编码字符串。比如,针对图8中状态0和状态1分别只有4个TCAM条目,按“相似度”的定义, 则 sim(0,l) = 3。上述“模板”关系是一种状态间的、单向的关系比如,状态i以状态j为模板(即状态j是状态i的模板),那么在TCAM条目列表中,状态i应该存储在状态j之前;而且, 状态i只需要存储它和状态j不一样的256-sim(i,j)个TCAM条目,状态j则依然要存储 256个TCAM条目。如果图8中的状态0以状态1为模板,那么存储图8中的状态0和状态 1这两个状态时,只需要图9所示的5个TCAM条目就够了。针对一个完整的DFA,可以采用图论中的“最小生成树”问题来确定DFA的状态间的模板关系。上述“最小生成树”是这样构建的构建一个带权完全图,所述带权完全图中的每个顶点代表自动状态机的一个状态,在顶点间两两地连上一条带权重的边,边的权重值是256-sim(i,j)(只有权值非零的边被标出)。根据所述带权完全图构建一个带权最小生成树,树根可以是树中任意状态,所述生成树决定了状态间的模板关系,树中的父结点就是它的所有孩子的模板状态,树根本身没有模板状态。比如,对某个只有8个状态的DFA,假设图10是该DFA用于确定状态间的模板关系的最小生成树。图10中状态0被取作“根模板”。图10中有向边的起点状态以有向边的终点状态为模板。上述最小生成树给出了状态间的模板关系,下一步就是按模板关系对状态号进行重新编排。遍历每一个父节点,在一个父节点处,如果它只有一个孩子,那么一个比特就足以区分孩子节点和父节点了,如果它有N(N> 1)个孩子,那么为了区分这些孩子和父节点, 至少需要「log2(N+l)l个比特。这样每一个父节点都给它所有的孩子节点分配了一段“子编码”。树中任意状态i的编码初始为空,从树根出发到达所述状态i,将沿途所有的状态的子编码拼接起来作为状态i的编码。由于这样得到的状态编码的长度不一,需要将所有的状态编码补齐到相同的长度。取最长的编码的长度作为统一的状态编码长度,在现有的状态编码后面补齐。当状态作为源状态存储在TCAM中时,在其现有的状态编码后面补“*”,当状态作为目的状态存储在TCAM时,在其现有的状态编码后面补上补充一段尚未分配的由“0” 和“1”组成的编码。图11展示了按“层序”自底向上遍历图10中的最小生成树、对状态号进行重编码的过程。例如状态3,它只有一个孩子节点,所以它需要为孩子节点分配一个长度为 「10&(1+1)1 =1的子编码,即子编码“0”。例如状态2,它有3个孩子,所以它需要依次为孩子节点分配一个长度为「log2(3+l)l=2的子编码,即子编码“00”,“01”和“10”。最终,每个状态的编码为从根节点到该状态的子编码的拼接。例如状态3,从根节点到状态3的子编码的拼接是“000”。例如状态5,从从根节点到状态3的子编码的拼接是“0101”。最终,为统一状态编码长度,取所有状态编码中最长的编码长度4。例如状态3现有的编码是“000”, 最终它作为源状态的编码是“000*”,它作为目的状态的编码是“0000”。例如状态2的现有的编码是“01”,最终它作为源状态的编码是“01**”,它作为目的状态的编码是“0111”。实施例三本实施例提供了一种基于“状态分组”的共享TCAM条目的方法的具体处理过程包括将所述DFA的所有状态构成第一层状态子集,从所述DFA的所有TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述剩余的TCAM条目数不为零,则将所述第一层状态子集划分成两个或两个以上的第二层状态子集;分别从所述每一个第二层状态子集的TCAM条目中,将读入字符和到达状态针对所有状态都相同的 TCAM条目删除掉;若所述第二层状态子集中剩余的TCAM条目数不为零,则将所述第二层状态子集划分成两个或两个以上的第三层状态子集;依次类推,直到下一层次的状态子集中删去读入字符和到达状态针对所有状态都相同的TCAM条目后剩余的TCAM条目数为零,将所述下一层次的状态子集作为最底层的状态子集;根据每个状态子集中包括的状态的个数给每个状态子集分配一定数量的比特位, 利用所述一定数量的比特数对每个状态子集对应的编码字符串进行设定,并对所述DFA的每个状态对应的编码字符串进行设定;在所述DFA的所有TCAM条目列表中,将所述每个层次的状态子集中的核心集保留下来,所述状态子集中的核心集是读入字符和到达状态针对状态子集中的所有状态都相同的TCAM条目,并将所述核心集中的出发状态修改为所述核心集所属的状态子集对应的编
码字符串;当所述状态子集i是状态子集j的子集时,所述状态子集j对应的编码字符串能够通配所述状态子集i对应的编码字符串,且在所述DFA的所有TCAM条目列表中将所述状态子集i的核心集排列在所述状态子集j的核心集之前。比如,图12是某DFA的四个状态的TCAM条目。其中sim(4,6) =2,sim(5,7)= 2。表中,通过调整状态号的编排顺序,原先需要8个TCAM条目的信息现在仅用3个TCAM 条目就能记录了,如图13所示。首先定义两个概念“状态子集的相似度”和“核心集”。定义状态子集的“相似度”,用符号Sim(S)表示,它的取值,是状态子集s中的所有状态共有的TCAM条目的数量。比如,在图14中,sim(l,2) =2,sim(l,3) =2,sim({l,2, 3}) = 1。虽然状态1分别和状态2、状态3共有2个TCAM条目,但这三个状态共有的TCAM 条目却只有一条,即“输入字符”为“********”并且“到达状态”为状态0的条目。定义状态子集的“核心集”,用符号core (s)表示,它是一组TCAM条目,它们是状态子集s中的所有状态所共有的TCAM条目;图14中,C0re({l,2,3})只包含一个TCAM条目, 即“输入字符”为“********”并且“到达状态”为状态0的条目。通过构建一棵递归划分树来对DFA的状态进行分组,此递归划分树具有如下特征树根是DFA的所有状态的集合;树上的每一个节点记录了其状态集合的“核心集”;任意父节点的状态集合是它的所有孩子节点的状态集合的并。上述递归划分树按如下步骤从“根"开始构建步骤1、把待划分的状态集合的“核心集”中的TCAM条目,从该状态集合的各状态
11的TCAM条目列表中删除;步骤2、如果状态集合中所有状态都没有TCAM条目了,就到达了递归划分树的叶子节点,算法应该在此回溯(结束);否则执行下面的步骤;步骤3、构建一个图,用顶点代表DFA的状态。在任意顶点i和顶点j之间连上一条带权边,边的权值是sim(i,j)(只有权值非零的边被标出);步骤4、每次找出上述图中权值最大的一条边(记为max),以这条边的两个端点组成的状态子集S作为起始状态集合S,逐个的往这个起始状态集合S中加入元素(其它状态)。随着S的不断增大,Sim(S)的值会逐渐减小,限制Sim(S)的值不能小于阈值k,k的取值从max递减到1,阈值k每递减变化一次,就会相应得到一个状态子集S。这样本步骤将得到至多max个可能被划分出去的状态子集;步骤5、对步骤4得到的每个状态子集Si,记状态子集s的大小为I Si I,计算这样一个指标值(|s」-l) · Sim(Si),该指标值最大的那个状态子集就作为这次构造出来的孩子节点;步骤6、如果当前状态集合没有被完全划分,重复上述步骤4和步骤5,否则执行下面的步骤;步骤7、对父节点的所有孩子节点依次执行上述所有步骤。按递归划分树对状态号进行编排的过程自底向上的进行对每个叶子节点,如果它包含1个或者2个状态,那么这些状态需要长1比特的ID段;如果它包含的状态数是N(N > 2),那么它们需要长「log2Nl比特的ID段。对每个父节点,假设它有k个孩子,每个孩子
需要长ni比特的ID段,那么父节点需要长2 Xl比特的ID段,使得从所述
父节点到其任意叶子节点的任意状态,沿途经过的状态子集或状态的ID段的拼接的长度为η。比如,图15是一个有6个状态的DFA对应的TCAM条目,图16是利用上述算法从这个DFA得到的递归划分树。具体操作如下所有状态共有的TCAM条目是“输入字符”为“********”并且“到达状态”为状态 0的TCAM条目,把它从各状态的TCAM条目中删除。此时,用带权图表示的状态间关系如图 17所示。图17中权值最大的边是状态0和状态2之间的边。令状态子集s从{0,幻开始生长,不断向状态子集s中加入元素(其它状态),但又要保证Sim(S)不小于阈值k。k的取值范围是1 4,因此在k取值不同的情况下,分别从状态子集{0,2}开始生长。如图18 所示,当k = 4时,最终生长得到的状态子集为{0,2};当k = 3时,最终生长得到的状态子集为{0,1,2};当k = 2时,最终生长得到的状态子集为{0,1,2};当k= 1时,最终生长得到的状态子集为{0,1,2}。指标值最大的状态子集是{0,1,2},因此我们构造一个孩子节点,其状态集合是{0,1,2}。至此,待划分的状态集合缩小为{3,4,5}。按同样的步骤,我们分别划分出{3,4}和{1}。根节点的状态集合被完全划分,下面依次对它的孩子节点进行划分。对根的三个孩子,我们按“层序”从左到右进行划分。节点{0,1,2}的核心集有三个TCAM条目,把它们从各状态的TCAM条目中删去。此时,状态1已经没有TCAM条目了,状态0和状态2还共享一个条目,带权图如图19所示。图19中权值最大的边是状态0和状态2之间的边。阈值k只能取1,因此把状态子集{0,2}划分出去。剩下的状态1单独构成一个子集{1},因为状态1的TCAM条目被删尽了,所以该状态子集是叶子节点,算法在此停止。对剩余的节点,按同样的步骤进行划分,最终得到图20所示的递归划分树。可以从递归划分树得到状态号重新编排的方案。对每个叶子节点,如果它包含1 个或者2个状态,那么这些状态需要长1比特的ID段;如果它包含的状态数N(N > 2),那么它们需要长
权利要求
1.一种基于TCAM的确定性有穷状态自动机的匹配方法,其特征在于,包括将确定性有穷状态自动机DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由出发状态、输入字符和到达状态三个域组成,表示同一状态的TCAM条目的出发状态相同;以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态作为输出结果。
2.根据权利要求1所述的基于TCAM的确定性有穷状态自动机的匹配方法,其特征在于当所述输入字符采用ASCII字符时,所述DFA的每个状态对应256个TCAM条目,所述出发状态和输入字符为“0”、“ 1 ”和“*”组成的字符串,所述到达状态为“0”和“ 1 ”组成的字符串。
3.根据权利要求1或2所述的基于TCAM的确定性有穷状态自动机的匹配方法,其特征在于,所述的方法还包括遍历所述DFA的任意状态i的所有TCAM条目,找出出现频率最高的到达状态,记为D状态,删除所述状态i的到达状态是状态D的TCAM条目,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是“********”、到达状态是状态D ;两两相邻地比较所述状态i的剩余的TCAM条目,如果两个相邻的TCAM条目的到达状态相同、输入字符中只有第K个比特不同,则将所述两个相邻的TCAM条目中的任一个TCAM条目的输入字符的第K个比特以“*”代替,其余的比特保持不变构成新的输入字符;将所述两个相邻的TCAM条目删除,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是所述新的输入字符,到达状态是所述两个相邻的TCAM条目中的到达状态。
4.根据权利要求1或2所述的基于TCAM的确定性有穷状态自动机的匹配方法,其特征在于,所述的方法还包括计算所述DFA的任意两个状态状态i和状态j的相似度,所述相似度为所述状态i和状态j的读入字符和到达状态都相同的TCAM条目的数目;构建一个带权完全图,所述带权完全图中的顶点为所有DFA状态,所述带权完全图中边的权重为256减去该边所连通的两个状态的相似度,根据所述带权完全图构建一个带权最小生成树,树根可以是树中任意状态,所述带权最小生成树决定了状态间的模板关系,树中的父结点就是它的所有孩子的模板状态,树根本身没有模板状态;当指定所述状态i以状态j为模板,将所述状态i和状态j的读入字符和到达状态都相同的TCAM条目从所述状态i的TCAM条目中删除,在所述DFA的所有TCAM条目列表中将所述状态i的剩下的TCAM条目排列在所述状态j的TCAM条目之前,对所述状态i和状态j对应的编码字符串进行重新设定,使所述状态j对应的编码字符串能够通配所述状态i对应的编码字符串。
5.根据权利要求1或2所述的基于TCAM的确定性有穷状态自动机的匹配方法,其特征在于,所述的方法还包括将所述DFA的所有状态构成第一层状态子集,从所述DFA的所有TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述剩余的TCAM条目数不为 2零,则将所述第一层状态子集划分成两个或两个以上的第二层状态子集;分别从每一个所述第二层状态子集的TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述第二层状态子集中剩余的TCAM条目数不为零,则将所述第二层状态子集划分成两个或两个以上的第三层状态子集;依次类推,直到下一层次的状态子集中删去读入字符和到达状态针对所有状态都相同的TCAM条目后剩余的TCAM条目数为零,将所述下一层次的状态子集作为最底层的状态子集;根据每个状态子集中包括的状态的个数给每个状态子集分配一定数量的比特位,利用所述一定数量的比特数对每个状态子集对应的编码字符串进行设定,并对所述DFA的每个状态对应的编码字符串进行设定;在所述DFA的所有TCAM条目列表中,将所述每个层次的每个状态子集中的核心集保留下来,所述状态子集中的核心集是读入字符和到达状态针对状态子集中的所有状态都相同的TCAM条目,并将所述核心集中的出发状态修改为所述核心集所属的状态子集对应的编码字符串;当所述状态子集i是状态子集j的子集时,所述状态子集j对应的编码字符串能够通配所述状态子集i对应的编码字符串,且在所述DFA的所有TCAM条目列表中将所述状态子集i的核心集排列在所述状态子集j的核心集之前。
6.一种基于TCAM的确定性有穷状态自动机的匹配装置,其特征在于,包括TCAM条目构造模块,用于将确定性有穷状态自动机DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由出发状态、输入字符和到达状态三个域组成,表示同一状态的TCAM条目的出发状态相同;搜索匹配模块,用于以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态作为输出结果。
7.根据权利要求6所述的基于TCAM的确定性有穷状态自动机的匹配装置,其特征在于TCAM条目构造模块,还用于当所述输入字符采用ASCII字符时,将所述DFA的每个状态对应256个TCAM条目,将所述出发状态和输入字符用“0”、“1”和“*”组成的字符串来表示,将所述到达状态用“ 0,,和“ 1”组成的字符串来表示。
8.根据权利要求6或7所述的基于TCAM的确定性有穷状态自动机的匹配装置,其特征在于,所述的装置还包括TCAM条目缩减模块,用于遍历所述DFA的任意状态i的所有TCAM条目,找出出现频率最高的到达状态,记为D状态,删除所述状态i的到达状态是状态D的TCAM条目,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是“ ********”、到达状态是状态D ;两两相邻地比较所述状态i的剩余的TCAM条目,如果两个相邻的TCAM条目的到达状态相同、输入字符中只有第K个比特不同,则将所述两个相邻的TCAM条目中的任一个TCAM条目的输入字符的第K个比特以“*”代替,其余的比特保持不变构成新的输入字符;将所述两个相邻的TCAM条目删除,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是所述新的输入字符,到达状态是所述两个相邻的TCAM条目中的到达状态。
9.根据权利要求1或2所述的基于TCAM的确定性有穷状态自动机的匹配装置,其特征在于所述的TCAM条目缩减模块,还用于计算所述DFA的任意两个状态状态i和状态j的相似度,所述相似度为所述状态i和状态j的读入字符和到达状态都相同的TCAM条目的数目;构建一个带权完全图,所述带权完全图中的顶点为所有DFA状态,所述带权完全图中边的权重为256减去该边所连通的两个状态的相似度,根据所述带权完全图构建一个带权最小生成树,树根可以是树中任意状态,所述带权最小生成树决定了状态间的模板关系,树中的父结点就是它的所有孩子的模板状态,树根本身没有模板状态;当指定所述状态i以状态j为模板,将所述状态i和状态j的读入字符和到达状态都相同的TCAM条目从所述状态i的TCAM条目中删除,在所述DFA的所有TCAM条目列表中将所述状态i的剩下的TCAM条目排列在所述状态j的TCAM条目之前,对所述状态i和状态j对应的编码字符串进行重新设定,使所述状态j对应的编码字符串能够通配所述状态i对应的编码字符串。
10.根据权利要求1或2所述的基于TCAM的确定性有穷状态自动机的匹配装置,其特征在于所述的TCAM条目缩减模块,还用于将所述DFA的所有状态构成第一层状态子集,从所述DFA的所有TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述剩余的TCAM条目数不为零,则将所述第一层状态子集划分成两个或两个以上的第二层状态子集;分别从每一个所述第二层状态子集的TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述第二层状态子集中剩余的TCAM条目数不为零,则将所述第二层状态子集划分成两个或两个以上的第三层状态子集;依次类推,直到下一层次的状态子集中删去读入字符和到达状态针对所有状态都相同的TCAM条目后剩余的TCAM条目数为零,将所述下一层次的状态子集作为最底层的状态子集;根据每个状态子集中包括的状态的个数给每个状态子集分配一定数量的比特位,利用所述一定数量的比特数对每个状态子集对应的编码字符串进行设定,并对所述DFA的每个状态对应的编码字符串进行设定;在所述DFA的所有TCAM条目列表中,将所述每个层次的每个状态子集中的核心集保留下来,所述状态子集中的核心集是读入字符和到达状态针对状态子集中的所有状态都相同的TCAM条目,并将所述核心集中的出发状态修改为所述核心集所属的状态子集对应的编码字符串;当所述状态子集i是状态子集j的子集时,所述状态子集j对应的编码字符串能够通配所述状态子集i对应的编码字符串,且在所述DFA的所有TCAM条目列表中将所述状态子集i的核心集排列在所述状态子集j的核心集之前。
全文摘要
本发明涉及一种基于TCAM(ternary content addressable memory,三态内容寻址存储器)的DFA(deterministic finite automaton,确定性有穷状态自动机)的匹配方法和装置。该方法主要包括将DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由出发状态、输入字符和到达状态三个域组成,表示同一状态的TCAM条目的出发状态相同;以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态作为输出结果。本发明实施例通过将DFA的每个状态用若干TCAM条目表示,利用单状态条目压缩算法、不同状态共享TCAM条目、共享状态转换的方法大大减少存储整个DFA所需的TCAM条目数量。
文档编号G06F17/30GK102591958SQ201110451648
公开日2012年7月18日 申请日期2011年12月29日 优先权日2011年12月29日
发明者彭坤杨, 董群峰, 陈敏 申请人:中国科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1