一种加速压缩流量正则表达式匹配的Pairs方法与流程

文档序号:15492652发布日期:2018-09-21 20:56阅读:178来源:国知局
本发明属于压缩流量的模式匹配方法,涉及针对使用gzip/deflate压缩编码的http等网络流量进行正则表达式匹配的方法,具体为一种加速压缩流量正则表达式匹配的pairs方法。
背景技术
:随着压缩技术在网络流量中的广泛应用,越来越多的web服务器将http页面内容压缩后发送给浏览器。2010年7月alexatop1000的站点中有66%使用了http压缩,而2016年10月的top500站点中,该比例已超过90%。并且这些压缩流量约为20%的压缩比,严重影响了压缩流量的匹配速度。另外,为了全面多层次的匹配,越来越多的基于深度包检测(deeppacketinspection,dpi)的工具和应用采用正则表达式匹配引擎,识别流量中的特征。例如入侵检测系统、流量计价和防火墙等。这些工具面对压缩流量,通常采用以下两种做法:(1)朴素方法(naive):也就是先将压缩流量进行完全解压,之后再对解压后的数据进行逐字节地模式匹配。该方法是最为朴素的方法,实现简单,但由于压缩的存在,使得处理吞吐率大大降低,成为系统整体过程中的性能瓶颈。(2)补丁方法(patch):通过修改客户端的请求,告知服务端自身不接收压缩数据,从而强制服务端发送原始数据。这种方式相较于naive来说,仅避免了流量解压过程的开销。但是破坏了客户端与服务端之间通信数据的完整性;而且使用未压缩的流量,也抛弃了http设计压缩流量的初衷,不能减少对网络带宽的使用。目前,有许多关于多模式匹配的相关专利,如2010年12月01日公开的中国专利“一种多字符串匹配方法”、2007年10月10日公开的中国专利“一种多字符串匹配方法和芯片”、2013年08月21日公开的中国专利“基于后缀自动机正则引擎构造的深度包检测方法”和2006年11月29日公开的中国专利“一种自适应多模式匹配方法及系统”,但它们均没有涉及针对压缩流量的多模式匹配。一些针对http压缩流量进行dpi的工作,其中,2012年发表在ieee/acmtransactionsonnetworking的文章中acch和2017年发表在ieee/acminternationalsymposiumonqualityofservice的文章中coin,均通过先解压流量,之后利用解压过程中所保存的信息,在匹配过程跳过对部分字符的扫描,以加速模式匹配的过程。然而他们只能对压缩流量进行多字符串扫描,而不能应用于正则表达式的匹配中,进而也限制了应用场景。2015年发表在ieeeconferenceoncomputercommunications的文章中arch是一种能够对压缩流量进行正则表达式匹配的方法,然而它的核心算法与acch相同,因此当编码字符串中存在完整的模式之时,无可避免地对其重复扫描。另外,为适应acch算法而提出的计算depth参数的方法耗时较多,以至于相较于naive的方法性能提升有限。为进一步说明本发明的具体内容,我们首先对发明所涉及的技术和定义的名词进行介绍:a)gzip/deflate;gzip是http1.1推荐的一种常用的内容编码方法,其中,我们根据2016年10月的aleaxtop500列表,于2017年5月获取的460个页面中,434个使用压缩编码的页面均采用gzip作为其编码方法。而deflate则是gzip所使用的压缩方法,它基于lz77和哈夫曼编码分别实现压缩和编码。图1显示的是gzip压缩过程示意图,,将原始文本压缩为文本字符串和编码字符串混合的数据,之后再进行哈夫曼编码,保存为gzip或deflate数据格式。具体的,原始文本为两行表示网页url的字符串,经过lz77压缩,将第二行中的“http://www.”编码为<11,17>。表示该压缩内容长度为11字节,可由当前位置向前偏移17字节处拷贝得到。在这里,我们称<长度,距离>对,即<11,17>为编码字符串;称第一行中的“http://www.”为参考字符串,二者的位置关系示意图如图2所示。除去编码字符串之外的字符内容被称为文本字符串。经lz77压缩后的数据,包含文本字符串和编码字符串,之后使用哈夫曼编码方法对其编码,生成gzip所使用的deflate数据格式。由于哈夫曼编码长度不等,且不全是8的倍数,因此deflate数据为连续的位流,并且不会以字节为编码边界。这也是现有方法必须在解码之后才能进行字符串匹配的原因。b)正则表达式匹配;字符串匹配可以看作是正则表达式的一个子集,它仅能处理一些不包含克林闭包等运算的简单模式匹配。因此正则表达式匹配引擎能够处理字符串模式的匹配,反之则不可以。在计算理论中,正则表达式、确定性有限状态自动机(deterministicfiniteautomaton,dfa)和非确定性有限状态自动机(non-deterministicfiniteautomaton,nfa)可等价地表示正则语言。有限状态自动机可以形式化地表示为5元组a=(q,σ,δ,q0,f),其中:q:非空有限的状态集合;σ:非空有限的字符集合,通常称为输入字母表;δ:q×σ→q转移函数;q0:一个初始状态,q0∈q;f:接受状态的集合,dfa和nfa的区别在于转移函数δ的返回值,dfa的转移函数返回单个状态,而nfa返回状态集合,可包含不止一个状态。有限状态自动机从起始状态开始,逐个字符地读入待匹配的字符串,并根据给定的转移函数转移至下一个状态。在读完该字符串后,如果该自动机停在一个属于f的接受状态,那么它就接受该字符串,也即我们所说的匹配到模式;反之则拒绝该字符串。一个正则表达式通常被称为一个模式,使用有限状态自动机描述的模式匹配过程,通常先将正则表达式编译为nfa,然后将nfa转换为dfa,并对dfa进行最小化处理,最后使用dfa或者直接使用nfa对待匹配的数据进行扫描处理。实际应用中,通常以二维矩阵实现dfa的转移表,该方式有着较高的匹配速度。但是由于dfa状态膨胀的问题,使得转移表变得较大,致使该方式需要占用较多内存。因此,一些研究以压缩转移表的方式,牺牲部分匹配速度来降低所占用的内存,这些研究通常被称为压缩dfa。对于内存空间有限制,而匹配速度要求不是太高的场景中,压缩dfa有着较多的应用。技术实现要素:针对现有技术中存在的问题,本发明提供一种加速压缩流量正则表达式匹配的pairs方法,匹配速度快,实现简便,扩展性强。本发明是通过以下技术方案来实现:一种加速压缩流量正则表达式匹配的pairs方法,核心部件是压缩流量pairs匹配引擎,其包括解码模块、pairs匹配算法和有限状态自动机三个处理模块,以及处理过程所需的状态记录数据;压缩流量pairs匹配引擎使用待匹配正则表达式构建有限状态自动机,之后对压缩流量字节内容进行解码,最后使用pairs匹配算法进行匹配,输出匹配结果;pairs匹配算法使用有限状态自动机扫描解码后的文本字符串,使用pairs算法对编码字符串进行处理。优选的,对构造的有限状态自动机的各个状态进行标记,区分出initial状态、begin状态、end状态和normal状态;同时以待匹配正则表达式的序号,分别对begin和end状态进行编号,使同一条正则表达式的具有相同的begin和end状态编号;其中,在构造nfa过程中,nfa的起始状态的ε闭包中的所有状态均为initial状态;通过initial状态读入待匹配正则表达式的第一个字符所到达的状态为begin状态;nfa的接受状态为end状态,其他所有状态为normal状态;nfa转换为dfa过程中,子集中所有nfa状态均为initial状态,则转换后的dfa状态标记为initial状态;子集中只要有一个状态为begin或者end状态,则转换后的dfa状态分别标记为begin或者end状态;其余所有的dfa状态标记为normal状态;在标记begin或end编号时,如果同一nfa或者dfa状态有对应多条正则表达式,则以可区分的方式记录标记begin或end的编号。优选的,可区分的方式包括使用可区分的nfa或dfa,使得每个状态只对应一条正则表达式规则;或者使用bitmap标记多条规则。优选的,使用pairs算法处理编码字符串时,根据可能出现的模式起始位置与编码字符串的位置关系,分为前缀和非前缀两种情况进行处理;可能出现的模式起始于编码字符串之前按前缀处理,可能出现的模式起始于编码字符串中按非前缀处理。进一步,压缩流量正则表达式匹配引擎中pairs匹配算法,对编码字符串两种情况进行顺序处理,步骤如下:按前缀处理时,判断编码字符串前一字节处返回的状态是否为initial状态,若不是,从编码字符串的开始位置继续进行之前的扫描,直至扫描字符后返回标记为initial状态的状态,记录下结束时候的位置偏移offpos;否则,结束对该情况的处理,offpos=0;按非前缀处理时,找到第一个标记为begin状态的位置,记为scanpos,之后查找对应的参考字符串偏移scanpos位置之后的状态记录数据,如若在scanpos后发现initial状态或者具有相同自动机状态的begin状态,移动scanpos到该位置;如若发现end状态,则将此处的匹配信息记录到匹配结果,并移动scanpos到该位置的下一字节处;检查完成后,拷贝offpos和scanpos之间的状态记录值到编码字符串对应的位置处,并以自动机的初始状态,从scanpos处开始新的自动机匹配扫描。优选的,pairs匹配算法处理压缩流量时,包括以下步骤:步骤1,构造匹配引擎:首先,解析待匹配正则表达式,构造匹配所用有限状态自动机,包括dfa或nfa,并标记自动机的各个状态类型;之后申请存储空间,保存处理过程的状态记录数据;步骤2,解码:读取压缩流量数据,根据不同类型数据,使用静态哈夫曼编码,或者构造哈夫曼编码树,解析压缩数据;将压缩数据解码为两类:文本字符串和编码字符串;步骤3,pairs算法处理:对于解码后的文本字符串,直接使用有限状态自动机进行扫描;对于编码字符串,使用pairs算法进行分类处理;扫描和处理过程中,随时更新状态记录数据和匹配结果;步骤4,重复步骤2-3,直至处理完所有压缩流量。优选的,所述解码模块,对采用gzip或deflate方法压缩的数据进行哈夫曼解码;解码使得不以字节为边界的原始压缩流量,变为以字节为边界的文本字符串和编码字符串。优选的,所述有限状态自动机,使用现有的自动机构造算法,将正则表达式编译为有限状态自动机,并在构造过程中标记其状态。优选的,通过状态记录数据保存压缩流量pairs匹配引擎工作过程所使用的状态,以及其他所需参数。与现有技术相比,本发明具有以下有益的技术效果:本发明所述方法对有限状态自动机的各个状态进行分类标记。之后使用这些标记在编码字符串中确定可以开始新的扫描的位置,以跳过对部分字节的扫描。同时使用begin/end编号快速确定编码字符串中存在的完整模式,不对其进行重复扫描。该方法在保证得到与naive方法相同的匹配结果的情况下,有效提升了对压缩流量进行正则匹配的吞吐率。其具有以下优点:(1)匹配速度快目前对压缩流量进行字符串匹配的方法中,naive方法在压缩比为20%的情况下,其匹配吞吐率降为匹配未压缩数据吞吐率的20%左右。而arch是匹配速度最快的一种,相较于naive方法,吞吐率提升3.2倍左右。而在alexatop500和alexachinatop20000两组数据集上的实验表明,本发明匹配性能均得到有效提升,相较于arch,平均吞吐率提升17.4%。(2)实现简便由于arch使用与acch相同的算法,因此其使用过程中,需要用户指定参数。另外arch需要为每一个待匹配的字符计算一项input-depth参数,之后将该参数应用于处理算法中,因此处理过程较为繁杂。本发明在匹配过程中,只需保存匹配过程返回的状态类别和begin/end结点编号,而且整个算法过程中无需人为设定参数,实现简单。(3)扩展性强本发明中的有限状态自动机,可以选择已经被广泛使用的各种类型的压缩dfa或者其他有限状态自动机,这样以来,可以方便地对现有系统进行改造,以提升对压缩流量进行正则表达式匹配时的吞吐率。附图说明图1是现有技术中所述的gzip压缩过程示意图。图2是使用图1中示例数据,经过gzip解压后参考字符串、编码字符串以及文本字符串三者的示例图。图3为本发明实例中所述方法处理逻辑框图。图4是说明对编码字符串的处理过程的示例数据。图5是由正则表达式(ab+c)|(bc+d)示例生成的dfa。图6是示例中编码字符串的处理过程和状态记录结果图。图7是本发明与arch和naive方法,基于压缩dfa的实现方案进行正则表达式匹配,在两组数据集下的吞吐率对比图。具体实施方式下面将结合实施例对本发明技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都应属于本发明保护的范围。本发明公开了一种加速压缩流量正则表达式匹配方法,我们称之为pairs方法,其核心部件是压缩流量pairs匹配引擎。它使用待匹配正则表达式构建有限状态自动机,并对压缩流量数据内容进行解码,使用pairs匹配算法扫描解码后的数据,输出匹配结果。该引擎包括解码、pairs匹配算法和有限状态自动机三个模块,以及处理过程所保存的中间数据,即状态记录模块。本发明技术方案对压缩流量具有较高的吞吐率,便于使用,且具有较好的扩展性。如图3所示,虚线框中是压缩流量pairs匹配引擎101,该引擎使用待匹配正则表达式103构造有限状态自动机1013,对压缩流量102进行处理,输出匹配结果104。其核心部件是压缩流量pairs匹配引擎101,它包括解码模块1011、pairs匹配算法1012和有限状态自动机1013三个处理模块,以及处理过程所需的状态记录数据1014。该引擎使用待匹配正则表达式103构建有限状态自动机1013,之后对压缩流量102数据内容进行扫描、匹配,输出匹配结果104。具体实现过程中,匹配引擎中的解码模块1011,对采用gzip或deflate方法压缩的内容进行哈夫曼解码。解码时,根据压缩内容所使用的静态或者动态哈夫曼编码构造哈夫曼树,然后解析压缩格式数据,依次取出所编码的文本字符串和编码字符串,它们之间的关系示例如图2所示。有限状态自动机1013,使用现有的自动机构造算法,将正则表达式编译为有限状态自动机1013,并在构造过程中标记其状态。在该实施例中,我们使用arch论文中进行性能评估时所使用的有限状态自动机,该自动机在进行模式匹配过程中,在牺牲一些匹配性能的情况下,通过压缩转移函数的数目减小了dfa的尺寸,在匹配长度为n的待匹配内容时,最多需要2n次处理。在构造自动机的过程中,按照技术方案中所描述的方法对自动机的每个状态进行类别标记,标记的类别定义如下:typedefenumstate_cate{cate_normal=0;cate_initial=1;cate_begin=2;cate_end=4;}使用这样的定义能够区分出一个状态既是begin又是end结点的情况。同时对begin/end状态进编号,区分所表示的正则表达式序号。状态记录数据1014,保存该引擎工作过程所使用的状态、参数等中间数据。在该实施例中,我们需要保存有限状态自动机1013扫描每个字符所返回状态的类别和id、begin/end编号。在dfa的实现中,我们保存所返回的状态作为状态id,并且以此作为索引,从dfa的状态中得到状态类别和begin/end编号。在nfa的实现中,则需要单独保存状态类别和begin/end编号。同时对nfa扫描每个字节所返回的状态集合中的各个状态id计算哈希值,以此作为需要记录的状态id。pairs匹配算法1012,使用有限状态自动机1013直接扫描解码后的文本字符串。而对编码字符串使用pairs算法进行处理。对编码字符串两种情况处理过程如下:(1)前缀情况:判断编码字符串前一字节处返回的状态是否为initial结点,若不是,从编码字符串的开始位置继续进行之前的扫描,直至扫描字符后返回标记为initial结点的状态,记录下结束时候的位置偏移offpos。否则,结束对该情况的处理。(2)非前缀情况:找到第一个标记为begin结点的位置,记为scanpos。之后查找对应的参考字符串偏移scanpos位置之后的状态记录数据,如若在scanpos后发现initial结点或者具有相同自动机状态的begin结点,移动scanpos到该位置。如若发现end结点,则将此处的匹配信息记录到匹配结果,并移动scanpos到该位置的下一字节处。检查完成后,从参考字符串对应的位置向编码字符串对应的位置,拷贝offpos与scanpos之间的状态类别和id,以及begin、end编号等。最后以自动机的初始状态,从scanpos处开始新的自动机匹配扫描。为了更为直观地说明对编码字符串的处理过程,本发明以图4中的数据和图5中的有限状态自动机,进行实例说明,处理的过程状态记录对应图6中(a)~(d)。其中,图4压缩数据中括号“<>”中的内容即是编码字符串。图5中每个状态中“x-y-z”分别表示该状态的id、类别和begin/end编号,状态类别中“i,b,n,e”分别表示initial、begin、normal和end结点。图6中左侧浅灰色表示参考字符串区域,右侧深灰色表示编码字符串区域;第1行为自动机所扫描的字节,第2行(id)为状态id,即图5中的状态编号,通过id可以在图5中查找到状态对应的类别和begin/end编号。1)ex1:由于编码字符串前一字节“a”处id为1,而状态1为begin结点,因此需要处理前缀情况,继续扫描其编码字符串中字符“abcc”。而直至完成扫描,没有返回为initial的状态,因此不再处理非前缀情况。在扫描过程中,匹配到模式“abc”,该过程没有跳过对编码字符串中字节的扫描。2)ex2:编码字符串前一字节处id值为0,对应的是initial结点,因此不处理前缀情况。处理非前缀情况时,在其参考字符串“bccdw”对应的状态中找到第一个标记begin结点的位置,scanpos=0(第一字节偏移从0开始),此时状态id为2,然后检查scanpos之后的状态类别。id为3处发现类别为end的状态,由于其end编号为1,与scanpos处的begin编号2不相同,因此不是完整的模式,不记录匹配结果。继续检查,在id为6处发现end结点,且end编号为2与scanpos处的begin编号相同,字符串“bccd”为一个匹配到的模式,记录当前位置的匹配结果。并将参考字符串对应的id值拷贝到编码字符串对应的位置,之后将scanpos移动到下一字节处,即scanpos=4。此时已检查其最后一个字节,因此以初始状态,从scanpos=4处开始新的扫描。处理ex2时,跳过了对编码字符串“bccd”的再次匹配。3)ex3:编码字符串前一字节处id值为0,对应的是initial结点,因此不处理前缀情况。之后,在其参考字符串“abbb”对应的状态中找到第一个标记begin结点的位置,scanpos=0,此时状态id为1,然后检查scanpos之后的状态类别。后续的连续三个字节的位置保存的id为2,均为begin结点,但与scanpos处的id不相同,因此不移动scanpos位置。直至检查完成,scanpos保持为0。最后以初始状态,从scanpos=0处开始新的扫描,该过程没有跳过对编码字符串中字节的扫描。4)ex4:包含两个编码字符串,依照顺序处理。第一个编码字符串前一字节处id为0,不处理前缀情况。之后在对应的参考字符串“sxabc”中找到第一个标记begin的位置,scanpos=2,并在字符“c”处发现与scanposbegin编号相同的end结点。拷贝id、记录下匹配结果后,移动scanpos到下一字节。此时超出了检查的边界,因此结束对第一个编码字符串的处理,该过程跳过对字符串“abc”的再次匹配。处理第二个编码字符串时,其前一字节处id为3,是end结点,需要继续扫描编码字符串中字符“bsxa”。在扫描字符“bs”后返回状态为initial结点,结束前缀情况的处理。之后找出第一个标记begin的位置,得到scanpos=3,已经到达最后一个字节处,以该位置和初始状态开始新的扫描。该过程跳过对字符“x”的再次匹配。为说明实际效果,本发明选取真实的压缩流量数据和待匹配字符串进行验证。其中压缩流量为爬虫程序从alexatopsites获取的压缩页面数据,特征如表1所示。另外,待匹配正则表达式为arch论文中所使用的snort24规则集。表1采集到的压缩流量特征alexa.comalexa.cn页面数量43413747压缩大小(mb)15.54226.95解压缩后大小(mb)70.241190.99在inteli5-4460和8gram平台下,分别对两组数据集进行匹配分析。本发明与arch和naive方法在该实施例中,匹配过程的吞吐率对比结果如图7所示。从图中可以看出,两组数据中,本发明的吞吐率相较于acch和naive方法均有明显提升。以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施方式仅限于此,对于本发明所属
技术领域
的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单的推演或替换,都应当视为属于本发明由所提交的权利要求书确定专利保护范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1