CN106708532A - 基于tacm的多层次正则表达式匹配方法 - Google Patents
基于tacm的多层次正则表达式匹配方法 Download PDFInfo
- Publication number
- CN106708532A CN106708532A CN201611270318.7A CN201611270318A CN106708532A CN 106708532 A CN106708532 A CN 106708532A CN 201611270318 A CN201611270318 A CN 201611270318A CN 106708532 A CN106708532 A CN 106708532A
- Authority
- CN
- China
- Prior art keywords
- state
- layer
- character
- value
- row
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/22—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/74591—Address table lookup; Address filtering using content-addressable memories [CAM]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
一种基于TACM的多层次正则表达式匹配方法,步骤为:S1:将正则表达式转化为确定性有限状态自动机,得到状态转移表;S2:将状态转移表进行列重排与行重排;S3:根据状态相似度和字符相似度将状态转移表分块,编码第一层转移表;S4:第一层转移表除去默认转移层数值,搜索表中行或列相邻的重复转移值并且重复次数大于2的数值提取到第二层,进行编码;S5:除去第二层数值,将表中所有数值减去对应的当前状态值得到状态转移的差值表,搜索全表中有重复的差值提取到第三层,进行编码;S6:除去第三层数值,建立第四层,进行编码;S7:得到层次化编码的确定性有限自动机,进行匹配。本发明具有压缩效率高、压缩效果好、匹配速度快等优点。
Description
技术领域
本发明主要涉及到高速网络技术领域,特指一种基于TACM的多层次正则表达式匹配方法。
背景技术
大量高速网络技术如IP技术、异步传输模式(ATM)、千兆以太网、光纤分布式数据接口(FDDI)等在近年内不断出现。由于网络的迅速发展,网络中的数据分析技术如内容过滤、网络流分类、协议分析等变得越来越复杂,研究如何在高速的网络环境下进行数据的检测和分析显得十分重要。
正则表达式匹配是现今网络安全方面深度包络检测的核心之一。正则表达式(regular expression,RE)具有较强的灵活性、逻辑性以及丰富的表达能力,能够用简单的方式达到对复杂字符串进行描述的目的。正则表达式由元字符和普通文本字符组成。普通文本字符就是除指定的元字符以外的所有可打印和不可打印的字符,这包括所有的大小写的字母,数字、标点符号和一些其他的符号。元字符相对于普通文本字符具有更加丰富的表达能力和扩展性,下表1为正则表达式提供的常见特殊元字符,这些元字符既可以用来表示匹配的字符范围(如“.”、“[]”、“[^]”)、匹配字符的次数如(“?”、“+”、“{n}”等),也可以用来表示匹配的位置(如“^”、“$”等),极大方便了正则表达式的书写。
表1正则表达式的元字符及定义
正则表达式进行匹配时的状态可以用有限自动机所处的状态数形象地表示出来。有限自动机主要分为确定性自动机(deterministic finite automata,DFA)和非确定性自动机(non-deterministic finite automata,NFA),它们之间可以相互转化。目前,研究者们主要对NFA和DFA进行研究,寻找最优的算法,最大可能地减少状态数或者状态转移的边数,以解决状态数增多、存储容量过大的问题。自动机还可以用状态转移矩阵来表示。正则表达式进行匹配时根据当前状态和输入字符判断下一状态并跳转到下一个状态。图2为DFA的抽象状态转移矩阵,矩阵的行表示当前状态,列表示输入字符,矩阵元素表示相应的行状态在输入相应的列字符下的转移状态,即行状态和列符号σk时转移状态为的值。
由上可知,正则表达式匹配在网络的数据分析中应用十分广泛。但由于网络速度的提高、网络传输内容的丰富多变、正则表达式规则库的日益复杂,正则表达式匹配面临状态数增多、存储内容过大、匹配速度慢的问题。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种压缩效率高、压缩效果好、匹配速度快的基于TACM的多层次正则表达式匹配方法。
为解决上述技术问题,本发明采用以下技术方案:
一种基于TACM的多层次正则表达式匹配方法,其步骤为:
S1:将正则表达式转化为确定性有限状态自动机DFA,得到确定性有限状态自动机DFA的状态转移表;
S2:将状态转移表进行列重排与行重排;
S3:根据状态相似度和字符相似度将状态转移表分块,为每块指定状态默认转移值,编码第一层转移表;
S4:第一层转移表除去默认转移层数值,搜索表中行或列相邻的重复转移值并且重复次数大于2的数值提取到第二层,进行编码;
S5:再除去第二层数值,将表中所有数值减去对应的当前状态值得到状态转移的差值表,搜索全表中有重复的差值提取到第三层,进行编码;
S6:再除去第三层数值,将表中剩余数值恢复到状态转移表,差值加上当前状态值;建立第四层,进行编码;
S7:得到层次化编码的确定性有限自动机,将层次化的编码存入TCAM和SRAM中,进行匹配。
作为本发明的进一步改进:在步骤S2中,根据最大相似算法将状态转移表进行列重排与行重排。
作为本发明的进一步改进:所述最大相似算法的步骤为:
首先进行行之间的重排,计算两状态相似度,保持第一行位置不变,使用冒泡排序法,调整列的顺序使得第一行与第二行、第三行、第四行等的相似度依次递减;
再从第二行开始,调整使得第二行与第三行、第四行等的相似度依次减少,直到调整完整个行的顺序;
再按照相同方法调整列的顺序,得到重排后的状态转移矩阵;
接着,对调整后的状态转移矩阵进行预编码,将状态和字符进行分组,分到同一组的状态和字符具有较大的相似度。
作为本发明的进一步改进:所述在步骤S2中,定义两状态间相似度SS为两个状态在所有字符中对于每个字符的转移状态值相同的次数,定义两字符相似度CS为两个字符列之间对于每个状态的状态转移值相同的次数;设状态转移矩阵的规模为N*K,即有N个状态,字符表中有K个字符,那么有:
0≤SS≤N;
0≤CS≤K;
列的重排与分组算法与行的算法的区别在于Tc值的设定,状态分组时Ts值设定为K/2,而列分组时Tc值设定为3/4*N。
作为本发明的进一步改进:在第二层中,只压缩重复次数为3次或超过3次的矩阵块,对于重复两次的矩阵块不做处理。
作为本发明的进一步改进:在第三层中,采用基于差值的编码压缩算法,即先通过计算将矩阵中差值相同的数值单元提取出来,提取后组成的矩阵,通过状态编码和字符编码的相互联系将矩阵中分散的相同数值单元压缩;对矩阵差值进行分组编码,设为G-ID,不同差值给定不同G-ID值,设值为g;对状态编码,将所有提取的字符依次递增编码(C-ID),值假设为c,第三层有效字符的总个数是确定的,设值为c;状态的编码(S-ID)设值为s,s有如下定义:
s=C×g+c
当进行匹配时,通过对字符编码值和状态编码值进行公式g=(s-c)/C的运算将组编码计算出来。
作为本发明的进一步改进:在第四层中在进行块压缩时,不设定阈值,即有相邻的相同状态转移单元则进行压缩。
与现有技术相比,本发明的优点在于:本发明的基于TACM的多层次正则表达式匹配方法,能在保持匹配速度的情况下,基于最大相似度、默认迁移边、块压缩、差值压缩等思想,设计多层次编码算法,高效压缩DFA的存储空间,解决了正则表达式存储容量过大的问题。
附图说明
图1是抽象状态转移矩阵示意图。
图2是本发明方法的流程示意图。
图3是正则表达式(1)d.*ca.*[Bd]d.(2)d*[Aa]bcad的DFA状态转移矩阵图。
图4是重排后的状态转移矩阵示意图。
图5是默认转移层(第一层)的状态转移矩阵示意图。
图6是默认转移边构造原理示意图。
图7是去除默认转移层的状态转移矩阵示意图。
图8是块压缩层(第二层)的状态转移矩阵示意图。
图9是除去默认转移层和块压缩层的状态转移矩阵示意图。
图10是提取矩阵中可进行差值压缩的矩阵单元的示意图。
图11是差值层(第三层)的状态转移矩阵示意图。
图12是去除第一、二、三层的状态转移矩阵示意图。
图13是余留层(第四层)的状态转移矩阵示意图。
图14是本发明的方法在具体应用时的运行机制图。
图15是本发明方法与其他不同算法的压缩率的比较示意图。
具体实施方式
以下将结合说明书附图和具体实施例对本发明做进一步详细说明。
三态内容可寻址寄存器(ternary content addressable memory,TCAM)是一种广泛应用的模式匹配方法,能实现对规则内容的快速匹配。要匹配的规则按规定的长度分别存储在TCAM的表项中,输入字符按不同字节与TCAM中的内容进行查找匹配,提高了匹配的速度,TCAM能够实现对可变长度规则的字符串进行匹配,具有灵活性。因而,本发明利用FPGA和TCAM作为硬件平台实现正则表达式匹配,解决了正则表达式匹配速度慢的问题。
如图2所示,本发明的基于TACM的多层次正则表达式匹配方法,步骤为:
S1:将正则表达式转化为确定性有限状态自动机(DFA),得到确定性有限状态自动机(DFA)的状态转移表。
S2:根据最大相似算法,将状态转移表进行列重排与行重排。
S3:根据状态(行)相似度和字符(列)相似度将状态转移表分块,为每块指定状态默认转移值,编码第一层(称为默认转移层)转移表。
S4:转移表除去默认转移层数值,搜索表中行或列相邻的重复转移值并且重复次数大于2的数值提取到第二层(称为块压缩层),进行编码。
S5:再除去块压缩层数值,将表中所有数值减去对应的当前状态值(行标题值)得到状态转移的差值表,搜索全表中有重复的差值提取到第三层(称为差值层),进行编码。
S6:再除去差值层数值,将表中剩余数值恢复到状态转移表,差值加上当前状态值。建立第四层(称为余留层),进行编码。
S7:得到层次化编码的确定性有限自动机(DFA),将层次化的编码存入TCAM和SRAM中,利用现有平台进行匹配。
本发明中的编码是一种预编码,需要建立索引表将所处的DFA状态号和输入字符映射为编码值,再送到TCAM进行匹配。本发明根据状态转移矩阵进行数值分析,如图3为正则表达式(1)d.*ca.*[Bd]d.(2)d*[Aa]bcad的DFA状态转移矩阵。图中ic代表输入字符(input character),cs为当前状态(current state),others代表其他输入字符。状态前的“√”代表该状态为接受状态。从状态转移矩阵中可以看出矩阵中有大量相同的数值存在,这些数值可以进行压缩。根据本发明的多层次编码思想,依次建立了默认转移层、块压缩层、差值层和余留层四层编码。下面对每一层进行分析。
(1)默认转移层(第一层);
从图中可以看出,不同状态之间的对于相同的字符的转移状态值相同的情况大量存在。例如状态11、12、13对于字符A的转移状态值都为9,状态11、12、13对于字符c的状态转移值都为12等等。正是由于这种转移到同一状态值的转移路径大量存在,对它们进行压缩可以得到很好的压缩率。
为了更好地压缩,将转移矩阵的行和列的顺序重排,使用最大相似算法将行列重排后,相邻行之间、相邻列之间的相似度达到最大。如图4为重排后的矩阵。
定义两状态间相似度(state similarity,SS)为两个状态在所有字符中对于每个字符的转移状态值相同的次数,定义两字符相似度(character similarity,CS)为两个字符列之间对于每个状态的状态转移值相同的次数。设状态转移矩阵的规模为N*K,即有N个状态,字符表中有K个字符,那么有,
0≤SS≤N;
0≤CS≤K;
本发明的最大相似算法为:首先进行行之间的重排,计算两状态相似度,保持第一行位置不变,使用冒泡排序法,调整列的顺序使得第一行与第二行、第三行、第四行等的相似度依次递减,再从第二行开始,调整使得第二行与第三行、第四行等的相似度依次减少,直到调整完整个行的顺序。再按照相同方法调整列的顺序。得到图4的重排后的状态转移矩阵。
接着,对调整后的状态转移矩阵进行预编码,预编码是基于相似度的一种算法,将状态和字符进行分组,分到同一组的状态和字符具有较大的相似度。定义状态分组阈值为Ts。字符分组阈值为Tc。先进行整个状态的编码,在具体应用实例中,重排和编码的算法伪代码如下:
列的重排与分组算法与行的算法相似,区别在于Tc值的设定,状态分组时Ts值设定为K/2,便于基本划分出相似的状态,而列分组时Tc值设定为3/4*N,便于较好的区别出列之间的不同性,避免将不太相同的列划分为同一组。在具体应用实例中,算法如下:
通过最大相似排序和预分组编码,本发明将转移矩阵划分为了许多块的矩阵,也建立起第一层状态转移矩阵。如图5所示,为编码后的状态转移矩阵,图中第一列行标题表示分组的状态(states),第二列行标题表示分组的状态组号(state group ID),第一行列标题表示分组的输入字符(input characters),第二行列标题表示分组的字符组号(character group ID)。
从图中可以看出,在这个例子中,本发明将状态0,1,3,7,10划分为一组,组号为0;状态2,14,4,5,6,8为一组,组号为1;状态18,12,15,19,9,20,11,13,21,16,22为一组,组号为2;状态19单独为一组,组号为3。字符也进行了分组,共6组。这样,将原状态转移矩阵划分为成多块的小矩阵,它们在图中分别用不同的颜色表示出来。对于每一个小矩阵,选用矩阵值次数最多的一个值作为该矩阵的状态转移值,也就是默认转移值。变得到了如图5的默认状态转移矩阵图。
默认状态转移层(default transition layer),减去了大量的冗余转移边,其中许多组状态分享了相同的状态转移边,指定某一个状态作为其他状态的默认转移状态,当查询不到状态对于某个字符的转移边时便跳转到默认状态查询该字符的状态转移作为结果,也就是这两个状态共享对于该字符的状态转移边,例如图6。
如图6所示,右边中s1与s5之间的虚线为默认转移边,对于状态s5当输入字符a时,由于当前s5的转移边中没有对字符a的转移,所以沿着虚线默认转移到了s1进行查询,得到s1对于字符a的转移边为转移到状态s2,因此s5对于字符a的转移边为转移到状态s2。由默认转移边构成的D2FA有效减少了冗余的转移边,但是转移到的状态需要具有较好的概括性,即能将大多数重复的转移边囊括在内,如果一个默认转移的状态不能概括大多数冗余的转移边,需要建立多次默认转移路径,虽然减少了DFA的带宽,却增加了处理的时间。
基于默认转移的思想,本发明提出构建基于状态转移矩阵的默认转移边,重排后的矩阵转移状态的数值之间具有最大的相似度,再在分化好的小矩阵中指定最多的状态作为默认转移状态,使得构建的状态转移边具有最大的概括性,而且最多需要转移一次,所以处理时间不会增大。第一层的状态和字符检索表如表2和表3。
表2第一层状态索引表
状态数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
索引内容 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 2 | 0 | 2 |
状态数 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
索引内容 | 2 | 2 | 1 | 2 | 2 | 3 | 2 | 2 | 2 | 2 | 2 |
表3第一层字符索引表
字符 | A | B | A | B | C | D | others |
索引内容 | 5 | 3 | 5 | 4 | 1 | 2 | 0 |
(2)块压缩层(第二层);
在构建完第一层后,本发明将每个子矩阵中数值与其默认转移状态数值相同的单元标记为-1,在图中未表示-1单元格,则原来的矩阵图去除默认转移层的状态转移矩阵后如图7。
从图中可以看出,矩阵中仍然有许多重复的数值存在,将相邻的重复次数为3次或超过3次的数值用边框标记,在块压缩层将这些数值取出来进行压缩和编码。
在例子中状态9,20,11分为一组组号为0,状态13,21,16,22分为一组组号为1,将剩余的其他状态编为一组组号为编码的最大值(设为MAX),以避免和之前的组号0,1的编码混淆。当编码后的状态为0,编码后的输入字符为1时,转移到的下一个状态为13,而当编码后的状态为0,编码后的输入字符为0时,矩阵图中没有定义,则也设定为编码的最大值MAX以便区分。当第二层未匹配或者匹配到的状态为MAX时,表示第二层的匹配失败,则转移边从默认转移层中匹配的数值中确认,这也表示在默认转移层对于任意的状态和输入字符,都能匹配到相应的转移状态。
第二层的状态和字符检索表如表4和表5,对于第二层中未涉及的状态和字符统一用-1表示。
表3第二层状态索引表
状态数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
索引内容 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 0 | -1 | 0 |
状态数 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
索引内容 | -1 | 1 | -1 | -1 | 1 | -1 | -1 | -1 | 0 | 1 | 1 |
表4第二层字符索引表
字符 | B | d | others |
索引内容 | 1 | 0 | -1 |
在第二层中,本发明只压缩了重复次数为3次或超过3次的矩阵块,对于重复两次的矩阵块并没有处理,这是因为考虑到正则子表达式中的有关状态重复的子表示式有C*,C{m,n},C+等有转移状态指向本身状态的情况,这一情况可以在第三层差值层得到很好的压缩。
(3)差值层(第三层)
在第三层,本发明采用了基于差值的编码压缩算法,重排后的状态转移矩阵经过前两层的压缩后,矩阵中相同的数值单元骤减,此时再进行压缩很难。通过差值算法算出转移状态与当前状态的差值,将差值相同的数值单元进行压缩是第三层算法的核心思想。
首先,通过计算将矩阵中差值相同的数值单元提取出来,图中,被提取的单元用边框标记出来,提取后组成的矩阵图。前两层的压缩算法利用矩阵的二维空间,通过独立的编码状态和字符,进行矩阵的压缩,本层中相同数值单元相邻的情况可能存在但不相邻的情况也可能同时存在,因此通过状态编码和字符编码的相互联系将矩阵中分散的相同数值单元压缩是本层的关键算法。
对矩阵差值进行分组编码,设为G-ID,不同差值给定不同G-ID值,设值为g,对状态编码,将所有提取的字符依次递增编码(C-ID),值假设为c,第三层有效字符的总个数是确定的,设值为C;状态的编码(S-ID)设值为s,s有如下定义:
s=C×g+c
这样,当进行匹配时,通过对字符编码值和状态编码值进行公式g=(s-c)/C的简单运算就可将组编码计算出来。而且,进行匹配时也只是需要匹配对应的组编码值,减少了存储量。在具体应用实例中,算法的伪码描述如下:
通过编码,得到表达式(1)d.*ca.*[Bb]d.(2)d*[^Aa]bcad的第三层的组编码和差值表,如图11,而状态编码和字符编码如图10,从图中可以看出字符编码是连续的而状态编码一般不是连续的。需要注意的是:
(1)匹配得出的值是转移状态与当前状态的差值。需要后期通过差值与当前状态简单的加法计算将转移状态计算出来。
(2)算法将二维矩阵(状态值、字符值两个变量)变为一维矩阵(组编码一个变量),状态编码通过字符编码和组编码束缚,所以提取出的矩阵单元有一个前提:每个状态所对应的转移状态转移只有一个值,即第三层中每个状态的转移边只有一条。当超过一个时,将超出的转移边转到第四层余留层。
第三层的状态和字符检索表如表6和表7。
表6第三层状态索引表
状态数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
索引内容 | -1 | -1 | -1 | 3 | -1 | 1 | 3 | 3 | 3 | -1 | 4 | 4 |
状态数 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
索引内容 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
表7第三层字符索引表
字符 | a | c | d | others |
索引内容 | 2 | 0 | 1 | -1 |
(4)余留层(第四层);
余留层是最后一层,也是矩阵中由于第三层的条件限制和一些在第一层、第二层无法压缩的转移边余留下来的矩阵单元。对第四层的编码算法与第二层的块压缩算法相似,只是不设定阈值,即有相邻的相同状态转移单元则进行压缩。去除第一、二、三层的状态转移矩阵如图12,压缩后的状态转移矩阵如图13。
第四层的状态和字符检索表如表8和表9。
表8第四层状态索引表
状态数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
索引内容 | 0 | -1 | -1 | -1 | 1 | -1 | -1 | -1 | -1 | -1 | 0 | -1 |
状态数 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
索引内容 | -1 | -1 | -1 | -1 | 2 | -1 | 3 | -1 | -1 | -1 | 2 |
表9第四层字符索引表
字符 | a | b | c | others |
索引内容 | 2 | 1 | 0 | -1 |
如下表10~表13所示为例子中的四个层次的状态转移表编码在TCAM和SRAM中的存储情况,TCAM中存储当前状态和输入字符的预编码,SRAM存储转移的下一状态的数值。四个层次的编码分别存储在TCAM不同的block块中,分别用于四路并行匹配的查找。
表10算法第一层状态转移表的存储
表11算法第二层状态转移表的存储
表12算法第三层状态转移表的存储
TCAM | SRAM |
组编码 | 转移状态编码 |
00000 | 00100 |
00001 | 00011 |
表13算法第四层状态转移表的存储
如图13所示,为本发明的匹配算法在TCAM上的运行机制图,图中FPGA从网络中提取出字符并将字符送入字符索引表提取出字符的四层预编码,当前状态由状态寄存器给出并送入状态索引表提取出当前状态的四层预编码,其中第一层、二层、四层的状态和字符编码不需要做处理则直接送往TCAM,而第三层的状态编码和字符编码则通过计算单元A计算出组编码再送往TCAM。需要注意的是四层编码需要保证同步性,并且第一层、二层、四层的状态索引值和字符索引值和第三层的组编码为串联进入TCAM而不是并联,TCAM根据输入的信号提取出四路并行匹配关键字,实现四路并行匹配,将匹配出的物理地址结果送往SRAM。SRAM返回匹配的下一状态信息,而此时第三层输出的是状态的差值,利用计算单元进行与当前状态寄存器的值简单的加法运算,将下一状态值计算出来送往判断单元。判断单元有两个主要功能,一是根据四路信号的下一状态值判断得出最终的转移状态值,二是根据最终转移状态值判断是否到达接受状态。是则发出信号表示匹配成功,不是则将值发往当前状态寄存器,更新当前状态值。PFGA则又更新输入字符值继续进行匹配。
本发明在具体应用进行实验,选择了Snort公司和Bro公司公开的正则表达式规则库作为算法的处理对象,并且利用Becchi的正则表达式生成工具随机生成了两组规则集进行实验,得出的每层转移边数和压缩率如表14(使用算法对各规则集的转移边压缩率比较)。
表14
从表中可以看出,本发明的方法具有很高的压缩率,在这几组数据中压缩率都超过了95%,其中生成的规则1的压缩率达到了99.99%。分析了一下数据的各种模式的组成情况,其中[Ci-Cj],[CkCl]和一些表示字符范围的转义字符(例如\s,\d,\w,\x,\D,\W等)在本发明提出的方法中能够得到很好的压缩。生成规则集1包含有较多的完全匹配字符串模式,所以在第二层、第三层得到很好的压缩。规则集Snort24,Snort31,Snort34和Bro217包含的正则表达式模式种类较多。从表中可以得出,多层次匹配算法对实际中的正则表达式规则集和生成的规则集都有效。
参见图15,为近年来提出的不同算法的压缩率的比较,4-layer DFA为本发明的多层次DFA编码算法,其他算法有Bitmap、D2FA-improved算法;其中,本实验使用的D2FA-improved的最大默认转移边数设定为2。从图中可以看出,D2FA-improved算法和的4-layerDFA算法都有显著的压缩效果,压缩率大体上比Bitmap和D2FA都高,但是对于Snort31规则集D2FA-improved算法的压缩降低,而本发明的方法依然有很高的压缩率。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (7)
1.一种基于TACM的多层次正则表达式匹配方法,其特征在于,步骤为:
S1:将正则表达式转化为确定性有限状态自动机DFA,得到确定性有限状态自动机DFA的状态转移表;
S2:将状态转移表进行列重排与行重排;
S3:根据状态相似度和字符相似度将状态转移表分块,为每块指定状态默认转移值,编码第一层转移表;
S4:第一层转移表除去默认转移层数值,搜索表中行或列相邻的重复转移值并且重复次数大于2的数值提取到第二层,进行编码;
S5:再除去第二层数值,将表中所有数值减去对应的当前状态值得到状态转移的差值表,搜索全表中有重复的差值提取到第三层,进行编码;
S6:再除去第三层数值,将表中剩余数值恢复到状态转移表,差值加上当前状态值;建立第四层,进行编码;
S7:得到层次化编码的确定性有限自动机,将层次化的编码存入TCAM和SRAM中,进行匹配。
2.根据权利要求1所述的基于TACM的多层次正则表达式匹配方法,其特征在于,在步骤S2中,根据最大相似算法将状态转移表进行列重排与行重排。
3.根据权利要求2所述的基于TACM的多层次正则表达式匹配方法,其特征在于,所述最大相似算法的步骤为:
首先进行行之间的重排,计算两状态相似度,保持第一行位置不变,使用冒泡排序法,调整列的顺序使得第一行与第二行、第三行、第四行等的相似度依次递减;
再从第二行开始,调整使得第二行与第三行、第四行等的相似度依次减少,直到调整完整个行的顺序;
再按照相同方法调整列的顺序,得到重排后的状态转移矩阵;
接着,对调整后的状态转移矩阵进行预编码,将状态和字符进行分组,分到同一组的状态和字符具有较大的相似度。
4.根据权利要求3所述的基于TACM的多层次正则表达式匹配方法,其特征在于,所述在步骤S2中,定义两状态间相似度SS为两个状态在所有字符中对于每个字符的转移状态值相同的次数,定义两字符相似度CS为两个字符列之间对于每个状态的状态转移值相同的次数;设状态转移矩阵的规模为N*K,即有N个状态,字符表中有K个字符,那么有:
0≤SS≤N;
0≤CS≤K;
列的重排与分组算法与行的算法的区别在于Tc值的设定,状态分组时Ts值设定为K/2,而列分组时Tc值设定为3/4*N。
5.根据权利要求1~4中任意一项所述的基于TACM的多层次正则表达式匹配方法,其特征在于,在第二层中,只压缩重复次数为3次或超过3次的矩阵块,对于重复两次的矩阵块不做处理。
6.根据权利要求1~4中任意一项所述的基于TACM的多层次正则表达式匹配方法,其特征在于,在第三层中,采用基于差值的编码压缩算法,即先通过计算将矩阵中差值相同的数值单元提取出来,提取后组成的矩阵,通过状态编码和字符编码的相互联系将矩阵中分散的相同数值单元压缩;对矩阵差值进行分组编码,设为G-ID,不同差值给定不同G-ID值,设值为g;对状态编码,将所有提取的字符依次递增编码(C-ID),值假设为c,第三层有效字符的总个数是确定的,设值为C;状态的编码(S-ID)设值为s,s有如下定义:
s=C×g+c
当进行匹配时,通过对字符编码值和状态编码值进行公式g=(s-c)/C的运算将组编码计算出来。
7.根据权利要求1~4中任意一项所述的基于TACM的多层次正则表达式匹配方法,其特征在于,在第四层中在进行块压缩时,不设定阈值,即有相邻的相同状态转移单元则进行压缩。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611270318.7A CN106708532B (zh) | 2016-12-30 | 2016-12-30 | 基于tcam的多层次正则表达式匹配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611270318.7A CN106708532B (zh) | 2016-12-30 | 2016-12-30 | 基于tcam的多层次正则表达式匹配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106708532A true CN106708532A (zh) | 2017-05-24 |
CN106708532B CN106708532B (zh) | 2020-12-04 |
Family
ID=58906818
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611270318.7A Active CN106708532B (zh) | 2016-12-30 | 2016-12-30 | 基于tcam的多层次正则表达式匹配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106708532B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110830376A (zh) * | 2019-11-05 | 2020-02-21 | 苏州盛科科技有限公司 | 一种int报文的处理方法及装置 |
CN113032640A (zh) * | 2021-03-16 | 2021-06-25 | 深圳壹账通智能科技有限公司 | 基于多层次正则匹配的推送方法、装置、设备及介质 |
CN117675417A (zh) * | 2024-02-02 | 2024-03-08 | 中国电子信息产业集团有限公司第六研究所 | 一种文本的快速扫描方法、装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6988189B1 (en) * | 2000-10-31 | 2006-01-17 | Altera Corporation | Ternary content addressable memory based multi-dimensional multi-way branch selector and method of operating same |
CN1836245A (zh) * | 2003-08-13 | 2006-09-20 | 感测网络公司 | 用于高吞吐量基于签名的网络应用的集成电路设备和方法 |
US20080046423A1 (en) * | 2006-08-01 | 2008-02-21 | Lucent Technologies Inc. | Method and system for multi-character multi-pattern pattern matching |
CN101841711A (zh) * | 2010-04-17 | 2010-09-22 | 上海交通大学 | 用于视频解码的反量化装置及其实现方法 |
CN102591958A (zh) * | 2011-12-29 | 2012-07-18 | 中国科学技术大学 | 基于tcam的确定性有穷状态自动机的匹配方法和装置 |
CN103226551A (zh) * | 2012-01-31 | 2013-07-31 | 中国科学技术大学 | 基于tcam的非确定性有限自动机的匹配方法和装置 |
CN103294735A (zh) * | 2012-02-28 | 2013-09-11 | 中国科学技术大学 | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 |
-
2016
- 2016-12-30 CN CN201611270318.7A patent/CN106708532B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6988189B1 (en) * | 2000-10-31 | 2006-01-17 | Altera Corporation | Ternary content addressable memory based multi-dimensional multi-way branch selector and method of operating same |
CN1836245A (zh) * | 2003-08-13 | 2006-09-20 | 感测网络公司 | 用于高吞吐量基于签名的网络应用的集成电路设备和方法 |
US20080046423A1 (en) * | 2006-08-01 | 2008-02-21 | Lucent Technologies Inc. | Method and system for multi-character multi-pattern pattern matching |
CN101841711A (zh) * | 2010-04-17 | 2010-09-22 | 上海交通大学 | 用于视频解码的反量化装置及其实现方法 |
CN102591958A (zh) * | 2011-12-29 | 2012-07-18 | 中国科学技术大学 | 基于tcam的确定性有穷状态自动机的匹配方法和装置 |
CN103226551A (zh) * | 2012-01-31 | 2013-07-31 | 中国科学技术大学 | 基于tcam的非确定性有限自动机的匹配方法和装置 |
CN103294735A (zh) * | 2012-02-28 | 2013-09-11 | 中国科学技术大学 | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110830376A (zh) * | 2019-11-05 | 2020-02-21 | 苏州盛科科技有限公司 | 一种int报文的处理方法及装置 |
CN110830376B (zh) * | 2019-11-05 | 2021-11-09 | 苏州盛科科技有限公司 | 一种int报文的处理方法及装置 |
CN113032640A (zh) * | 2021-03-16 | 2021-06-25 | 深圳壹账通智能科技有限公司 | 基于多层次正则匹配的推送方法、装置、设备及介质 |
CN117675417A (zh) * | 2024-02-02 | 2024-03-08 | 中国电子信息产业集团有限公司第六研究所 | 一种文本的快速扫描方法、装置、电子设备及存储介质 |
CN117675417B (zh) * | 2024-02-02 | 2024-04-16 | 中国电子信息产业集团有限公司第六研究所 | 一种文本的快速扫描方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106708532B (zh) | 2020-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101630323B (zh) | 确定自动机的空间压缩方法 | |
CN108920720B (zh) | 基于深度哈希和gpu加速的大规模图像检索方法 | |
CN103970722B (zh) | 一种文本内容去重的方法 | |
CN102075430B (zh) | 深度报文检测dfa状态转移表的压缩与报文匹配方法 | |
CN108132929A (zh) | 一种海量非结构化文本的相似性计算方法 | |
CN105740226A (zh) | 使用树形神经网络和双向神经网络实现中文分词 | |
CN106708532A (zh) | 基于tacm的多层次正则表达式匹配方法 | |
CN102523219B (zh) | 正则表达式匹配系统及匹配方法 | |
CN111565189A (zh) | 基于深度学习的侧信道分析方法 | |
CN102148746A (zh) | 一种报文分类方法和系统 | |
CN107766555A (zh) | 基于软约束无监督型跨模态哈希的图像检索方法 | |
Ganguly et al. | pBWT: Achieving succinct data structures for parameterized pattern matching and related problems | |
CN111353313A (zh) | 基于进化神经网络架构搜索的情感分析模型构建方法 | |
CN109889205A (zh) | 编码方法及系统、解码方法及系统、编解码方法及系统 | |
CN106708956A (zh) | 一种基于多url规则集的http数据匹配方法 | |
CN113627502A (zh) | 一种网络加密流量分类方法 | |
CN110348012A (zh) | 确定目标字符的方法、装置、存储介质及电子装置 | |
CN109325125A (zh) | 一种基于cnn优化的社交网络谣言方法 | |
CN107908757A (zh) | 网站分类方法及系统 | |
CN100361128C (zh) | 一种用于文本或网络内容分析的多关键词匹配方法 | |
CN108021569A (zh) | Ac自动机的构建和中文多模式匹配方法及相关装置 | |
CN108830854A (zh) | 一种图像分割方法及存储介质 | |
CN103294735A (zh) | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 | |
CN109241284A (zh) | 一种文档分类方法及装置 | |
CN114048735A (zh) | 一种针对手写连写字符串的识别方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |