一种字符串匹配装置及方法与流程

文档序号:21408944发布日期:2020-07-07 14:43阅读:258来源:国知局
一种字符串匹配装置及方法与流程

本发明涉及网络报文检测技术领域,具体为一种字符串匹配装置及方法。



背景技术:

深度报文检测技术,是高速网络监测技术中的一项重要技术,也是特征识别的核心技术,被广泛地应用于流量计费、应用层协议识别、入侵检测系统、网络监控系统、计算机取证系统等领域。随着互联网的发展与应用,当前网络也越来越依赖于深度报文检测技术来对报文净荷部分关键字符进行识别、检测。

深度报文检测技术主要采用传统的高效字符串匹配算法如ac算法、wm算法及sbom算法。在深度报文检测中,首先要将字符串编译成有限状态自动机fsm,并将fsm的状态表配置在存储器中。匹配过程是基于访问自动机状态表来驱动的,每处理报文的一个字符都需要至少一次查表,以获取下一次要访问的状态地址。

当前深度报文检测技术发展过程中主要面临两个挑战:第一个是匹配时间复杂度问题,随着网络应用的发展,需要检测的特征数量越来越多,特征复杂度也越来越大,导致匹配过程越来越复杂;第二挑战是性能要求,随着互联网流量爆发式增加,对报文检测系统处理带宽能力、线速处理能力都有很高的要求。对于第一个挑战本发明采用ac算法,ac算法的优点在于巧妙的将字符匹配转换为了状态转移;匹配长字符串只需要遍历一遍,即只需要在ac算法自动机里面运行一遍就可以完成字符串匹配;另外本发明对ac算法状态转移矩阵做了优化处理,将活跃状态和次活跃状态表项分开存储、查询,大大提升了匹配效率。对于第二个挑战取决于访存性能,对于确定的访存次数,关键在于提高每次访存的速度。由于硬件本身具有高速并行处理能力,使得基于硬件的字符串匹配成为近年来网络深度报文检测技术的研究热点。基于硬件实现的字符匹配的最大优点是在大规模状态集下仍能获得高吞吐率的匹配性能,从而大大提高了整体匹配处理的性能,而软件实现时,它的性能随着状态集的增长而迅速递减。



技术实现要素:

为实现上述目的:提供一种结构简单、能够快速实现字符串匹配的装置和方法。

本发明所采用的技术方案是:一种字符串匹配装置及方法,通过硬件和软件相互协同来实现,字符串匹配自动机的编译及配置由系统的cpu完成,系统的核心字符串匹配任务由fpga上的硬件引擎来完成。

一种字符串匹配装置,其特征在于:包括cpu模块、fpga模块及存储模块,其中所述fpga模块包括匹配引擎单元、存储块单元、存储模块控制器单元;

所述cpu模块用于实现软件功能,处理字符串规则的上传、编译及状态转移表、关键字符位置表的下发,其中所述状态转移表包括活跃状态转移表和次活跃状态转移表;

所述fpga模块用于实现硬件功能,其中所述存储块单元用于存储所述活跃状态转移表和关键字符位置表,所述匹配引擎单元用于处理字符串匹配计算过程,所述存储模块控制器单元用于对存储模块的数据读写;

所述匹配引擎单元均包括报文缓存区和结果缓存区;

所述存储模块用于存储所述次活跃状态转移表。

进一步的所述fpga模块包括1个或多个所述匹配引擎单元。

进一步的所述存储模块是ddr,所述存储块单元是ram。

一种字符串匹配方法,其特征在于包括以下步骤:

第一步,cpu模块根据ac算法将用户上传的字符串规则编译生成状态转移矩阵和状态转移表;

第二步,所述状态转移表定义状态转移的下一状态,根据所述状态转移表计算得到状态转移概率表,提取访问概率值最大的k个状态作为活跃状态转移表写入fpga模块的存储块单元中,将剩余的所述状态转移表作为次活跃状态转移表写入存储模块中,同时将字符串规则的关键字符位置表写入fpga模块的存储块单元中;

第三步,字符串匹配计算过程,匹配引擎单元在报文输入后对净荷进行提取并输出至报文缓存区,提取后进行分发;分发报文净荷时给每个报文净荷打上编号,然后再将报文净荷输出至匹配模块;所述匹配模块在初始状态收到报文启动信号时,进入开始匹配状态,查表逐字符匹配,活跃状态查询所述fpga模块的存储块单元中的所述活跃状态转移表,次活跃状态查询所述存储块模块中的所述次活跃状态转移表,处理并输出匹配结果;匹配结果输出后输出至结果缓存区,根据在分发报文净荷时打上的编号依次输出匹配结果。

进一步的所述第一步还包括,对所述状态转移矩阵做多次矩阵相乘的计算,优化所述状态转移矩阵和所述状态转移表。

进一步的所述第三步还包括所述状态转移表定义命中标识、规则类型及规则id;在查询所述状态转移表结果返回后,根据所述命中标识指示是否命中关键字符,若命中关键字符则根据所述规则类型指示属于固定关键字符规则或浮动关键字符规则,若未命中关键字符则处理并继续匹配;若属于所述固定关键字符规则则根据所述规则id查询所述关键字符位置表,若实际命中位置与所述关键字符位置表一致则输出匹配结果,若实际命中位置与所述关键字符位置表不一致则继续匹配;若属于所述浮动关键字符规则则处理并输出匹配结果;报文净荷结束,处理并输出匹配结果。

进一步的所述第三步还包括在开始匹配状态,先根据当前状态id判断当前状态是否为活跃状态,若为当前状态为活跃状态查询所述活跃状态转移表,若当前状态为次活跃状态则跳回初始状态,将地址输出至存储模块控制器单元排队查询所述次活跃状态转移表,暂停当前顺序的报文净荷操作,将查询的字符位置指针存回到报文净荷ram原位置,开始下一顺序报文净荷匹配操作。

进一步的所述第三步还包括在查询所述次活跃状态转移表结果返回后,优先处理并输出匹配结果,再跳至开始匹配状态。

进一步的所述存储模块是ddr,所述存储块单元是ram

有益效果:

1、优化自动机状态转移矩阵,兼顾到了状态集收敛与匹配性能两方面的要求。

2、基于fpga体系结构将ac算法自动机中活跃和次活跃状态查询表独立存储,活跃状态存储在fpga内部ram,次活跃状态存储在外部ddr。自动机本身特征保证了大部分查询动作在fpga内部完成。

3、利用fpga可并行处理结构,多个硬件匹配引擎并行匹配处理;另外,在单个匹配模块中利用查询ddr与ram的时间差,实现多个报文并行处理,充分流水处理,以达到高效匹配,从而大大提升了匹配性能。

附图说明

图1是本发明的字符串匹配装置结构图;

图2是本发明的字符串硬件匹配引擎结构图;

图3是本发明的报文净荷分发处理流程图;

图4是本发明的字符串匹配模块结构图;

图5是本发明的字符串匹配流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的说明书和权利要求书的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

字符串匹配装置结构如图1所示,包括cpu模块、fpga模块、ddr,fpga模块包括匹配引擎单元、存储块单元、ddr控制器单元。

cpu模块,实现自动机的编译、配置、状态转移表及关键字符位置表的下发等。主要是将用户输入的字符串规则通过多模匹配的ac算法编译成状态树,生成状态转移表,并将结果写入fpga模块内部的ram中和ddr中。

匹配引擎单元用于处理字符串匹配计算过程,存储块单元是fpga模块中的ram,用于存储状态转移表中的活跃状态转移表和关键字符位置表,ddr控制器单元用于控制ddr的数据读写。

ddr用于存储状态转移表中的次活跃状态转移表。

上述字符串匹配装置采用n个硬件匹配引擎并行处理,以提高设备处理带宽能力,为每个引擎开辟独立的报文缓存区、结果缓存区。字符串匹配通过查表逐字符匹配,活跃状态通过查fpga模块内部ram来实现,次活跃状态通过查外部ddr来实现。

字符串匹配方法,通过以下步骤实现:

第一步,将用户输入的字符串规则通过多模匹配的ac算法编译成状态树,此时即可得到一个状态转移表,以矩阵方式存储。进一步对状态转移矩阵做多次矩阵相乘的计算,优化状态转移矩阵和状态转移表,以达到减少访存次数和状态转移表占用的内容空间大小。

第二步,通过以上步骤后,根据状态转移表可以计算得出一个状态转移概率表。提取访问概率值最大的k个状态写入fpga模块内部ram中,并且将剩余的状态转移表同时写入ddr中。状态转移表每一个表项定义包括下一状态、命中标识、规则类型、规则id,下一状态指的是状态下一次跳转的状态,命中标识指示当前命中状态是命中或未命中,规则类型指示对应规则是固定关键字符规则还是浮动关键字符规则,规则id是指当前状态对应规则的编号。固定关键字符规则指的是用户输入的字符串规则指定了关键字符在报文净荷中的具体位置,浮动关键字符规则没有指定关键字符在报文净荷中的位置,cpu模块根据用户输入的字符串规则,从其中提取出关键字符命中位置并写入fpga内部的位置表形成关键字符位置表。

第三步,字符串匹配计算过程,匹配引擎单元在初始状态收到启动信号时,启动匹配状态,查表逐字节匹配,活跃状态查询fpga模块的内部ram中的活跃状态转移表,次活跃状态查询ddr中的次活跃状态转移表。如状态id小于k,则表明当前状态为活跃状态,根据状态id和字符计算ram访问地址,并从对应ram中读取下一自动机状态作为当前状态。如状态id大于k,则表明当前状态存放在ddr中,根据当前状态id和字符计算ddr访问地址,并从ddr中读取下一状态作为当前状态。

第一步、第二步基于cpu模块实现,第三步基于fpga模块实现,字符串匹配引擎单元结构图如图2所示,字符串匹配计算的流程主要包括报文净荷提取、报文净荷分发、匹配、匹配结果处理环节。

下面以单个硬件匹配引擎为例来说明匹配过程。

报文输入后对净荷进行提取并输出至报文缓存区,提取后进行分发。为了保证匹配结果保序,在净荷分发模块给每个报文净荷打上编号,编号范围0-127。报文净荷分发处理流程如图3所示,报文净荷输入后,开始净荷分发操作,检测fifo中是否有一个完整的报文净荷、是否有可用的编号、支路ram是否有空闲bank以及是否已经计算出要发送的支路ram地址,如果满足条件,取出报文净荷,重新封装,给每拍报文净荷打上编号和指针标签,根据计算出的支路ram地址,把报文净荷输出至匹配模块并写入至存储报文净荷的报文净荷ram中。净荷分发模块的主要功能是给报文净荷打上编号标签并重新封装,并根据后续m个匹配模块的报文净荷ram存储情况,将报文净荷均衡地分发到m个匹配模块去。其中,报文净荷编号计算是根据匹配模块的ram读指针计算已释放的可用的编号,确定当前报文净荷的编号,编号为num,取值范围0-127;支路ram地址计算是根据m条匹配支路的报文净荷ram存储空间的使用情况,将使用量最少的ram支路作为输出支路,并计算出空闲ram块的初始地址,当所有ram空间都被写满时给出busy标识,等待ram空间释放。

上述匹配模块结构如图4所示,匹配模块主要功能时查询fpga模块ram中的活跃状态转移表,结合查询ddr中的次活跃状态转移表对报文净荷进行字符串匹配。匹配模块配有一个存储报文净荷的报文净荷ram、一个活跃状态转移表和一个关键字符位置表。其中每个报文净荷ram在逻辑上分为8个bank,编号0~7,每个bank深度为128,可以装下一个最大报文净荷,分发模块会将报文净荷存到报文净荷ram的各个bank中,一个bank只存放一个报文净荷,使用状态寄存器记录报文净荷ram的存储状态,每当报文净荷ram存入或者释放一个报文净荷时,更新报文净荷ram状态寄存器。报文净荷ram状态即时输出至分发模块,供分发模块计算。

执行所述匹配操作时,从报文净荷ram中取出顺序1报文净荷,即最先存入的bank中的报文净荷,对报文净荷每个字符和当前状态进行匹配,先判断状态id值,若小于k,将状态id和字符作为地址查询fpga模块内部活跃状态转移表,若状态id大于等于k,将状态id和字符作为地址输出至ddr控制器单元排队查询ddr,因查询ddr的速度较fpga模块内部查询要慢很多,为保证匹配模块高效匹配,这时暂停顺序1的bank报文净荷操作,将查询的字符位置指针存回到报文净荷ram原位置,然后取出顺序2的bank的报文净荷进行匹配操作,如果需要查询ddr,将地址输出至ddr控制器单元排队查询ddr,暂停当前顺序的报文净荷操作,将查询的字符位置指针存回到报文净荷ram原位置,进行下一顺序报文净荷操作,以此类推。当报文净荷的ddr查询结果返回时,暂停当前操作,进行ddr查询结果对应的顺序报文匹配处理,优先处理先存入的报文净荷。

报文净荷具体匹配流程如图5所示,该图主要描述了查询fpga内部活跃状态表的匹配过程。在初始状态时当收到报文净荷启动信号时,开始匹配;匹配过程中对每一个输入字符逐一进行查询匹配。在初始状态先检测当前对应bank查询ddr中次活跃状态转移表的结果是否已经返回;若已返回,赋值对应bank的对应报文净荷和状态的地址,输出匹配结果,再跳至开始匹配状态,开始下一个字符的匹配;若未返回则跳至下一顺序的报文净荷匹配操作,进入开始匹配状态。

在开始匹配状态,先根据当前状态id判断当前状态是否为活跃状态,若为当前状态为活跃状态查询fpga内部活跃状态转移表,若当前状态为次活跃状态则跳回初始状态,将地址输出至ddr控制器单元排队查询ddr,暂停当前顺序的报文净荷操作,将查询的字符位置指针存回到报文净荷ram原位置,开始下一顺序报文净荷匹配操作。如查询结果是未命中关键字符且下一状态为活跃状态则跳至匹配继续状态,报文净荷结束或未命中关键字符且下一状态如为次活跃状态时跳回初始状态。

在开始匹配状态或匹配继续状态,根据查询结果可知是否命中关键字符、规则类型及规则id,根据命中标识指示是否命中关键字符,若命中关键字符则根据规则类型指示属于固定关键字符规则或浮动关键字符规则,若命中固定关键字符规则时,计算命中位置并通过规则id查询关键字符命中位置表,比对规则命中位置和实际命中位置是否一致,若一致,即命中关键字符位置,则命中该固定关键字符并释放该报文净荷,跳回初始状态,若不一致,即未命中关键字符位置,报文净荷未结束且下一状态为活跃状态则跳至匹配继续状态,若下一状态为次活跃状态则跳回初始状态;若命中浮动关键字符规则则释放该报文净荷并跳回初始状态;当报文净荷结束时,输出匹配结果并跳回初始状态;当未命中关键字符报文净荷未结束且下一状态为活跃状态时,进入匹配继续状态或停留在匹配继续状态继续进行匹配,若本拍报文净荷结束则跳回初始状态;当未命中关键字符且下一个匹配状态为次活跃状态时跳回初始状态并将状态id和下一个字符一起作为地址输出至ddr控制器单元排队查询ddr。在任何状态,当报文净荷查询ddr结果返回时,都将暂停当前匹配操作,跳回初始状态继续进行继续进行ddr查询结果对应的顺序报文匹配结果处理,优先处理先存入的报文净荷。查询次活跃状态表的匹配过程与查询活跃状态表的匹配过程类似,这里不再做重复描述。

匹配结束后,匹配结果输出后输出至结果缓存区,在匹配结果处理模块,将根据报文净荷编号顺序来输出报文净荷匹配结果,结果输出后再将该报文净荷编号释放。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1