首页> 中国专利> 兼顾匹配策略的处理分段报文串模式匹配的方法及装置

兼顾匹配策略的处理分段报文串模式匹配的方法及装置

摘要

本发明公开了兼顾匹配策略的处理分段报文串模式匹配的方法,包括接收到任一分段报文时,判断所在的传输流是否已存在当前串模式的流状态信息,是则对分段报文与流状态信息中预存的字符进行结合处理为目标分段报文,对其执行串模式匹配的步骤;否则对传输流初始化当前串模式的流状态信息,设置分段报文为目标分段报文并执行串模式匹配的步骤。还公开了分别记录对应每一匹配单元的后缀字符,以及通过状态树方式组织流状态信息等兼顾匹配策略的处理分段报文串模式匹配的方法。还公开了兼顾匹配策略的处理分段报文串模式匹配的装置。通过本发明公开的方法及装置,提高了报文处理的安全性,避免了内存的大量占用,克服了网络延迟和服务质量下降的问题。

著录项

  • 公开/公告号CN101026576A

    专利类型发明专利

  • 公开/公告日2007-08-29

    原文格式PDF

  • 申请/专利权人 杭州华为三康技术有限公司;

    申请/专利号CN200710062881.X

  • 发明设计人 张利达;

    申请日2007-01-19

  • 分类号H04L12/56(20060101);H04L29/06(20060101);H04L12/66(20060101);

  • 代理机构11205 北京同立钧成知识产权代理有限公司;

  • 代理人刘芳

  • 地址 310053 浙江省杭州市高新技术产业开发区之江科技工业园六和路东

  • 入库时间 2023-12-17 19:07:33

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-05-24

    专利权人的姓名或者名称、地址的变更 IPC(主分类):H04L12/56 变更前: 变更后: 申请日:20070119

    专利权人的姓名或者名称、地址的变更

  • 2012-09-19

    授权

    授权

  • 2007-11-28

    实质审查的生效

    实质审查的生效

  • 2007-08-29

    公开

    公开

说明书

技术领域

本发明涉及兼顾匹配策略的处理分段报文串模式匹配的方法及装置,属于通信技术领域。

背景技术

如图1和图2所示的系统中,网关设备和旁路设备需要通过模式匹配(Pattern Matching,简称PM)方法来实现网络安全、病毒防范(Anti-Virus,简称AV)、带宽管理、应用识别、安全检测以及广域网加速等上层应用,可以说,模式匹配方法是面向网络设备构建高性能的内容检测引擎的基础,只有通过模式匹配完成对网络传输内容的管理和检测,才能为网络安全、AV、带宽管理、应用识别、安全检测以及广域网加速等上层应用的实施提供技术支撑,因此,实现模式匹配是构建可管理、可运营的安全智能网络的技术基石。

同时,实现模式匹配的精确程度也直接关系到网络构建的质量。目前,模式匹配的方法是指串模式匹配(Patten Match,简称PM)方法,所谓串模式(Patten),是指ASCII码环境下,在传输流(Flow)的内容(也称为传输文本,Text)中需要查找的字符串的组合,或者,二进制环境下,在Text中需要查找的二进制位串的组合。这种串模式匹配方法主要分为单模式匹配和多模式匹配两种:单模式匹配算法是指一次只能在文本串中对一个模式串进行匹配的算法,比如Boyer Moore(简称BM)算法、Brute force(简称BF)和Perl兼容的正规表达式(Perl Compatible Regular Expression,算法PCRE)算法;多模式匹配算法是指同时对多个模式串进行匹配的算法,比如Aho-Corasick(简称AC)算法。其中,AC算法等仅仅考虑串模式中的字符串,而不考虑进行字符串匹配的策略问题,因此其匹配精度较低;而对于BM、BF算法,则是精确的单模式匹配算法,能够同时兼顾到上述字符匹配以及策略匹配,因此其匹配精确程度很高。

但是目前的串模式匹配方法都必须在传输流的内容(Text)连续的情况下才能够实现,而在实际应用中,网络每一个传输Text是通过分段为多个报文来实现传输,这就造成了在网络中进行串模式匹配的困难。目前通用的解决方法是对分段报文进行流重组,比如对按照用户数据报协议(User DatagramProtocol,简称UDP)组织的分段报文、对按照网际控制报文协议(InternetControl Message Protocol,简称ICMP)组织的分段报文以及对按照传输控制协议(Transfer Control Protocol,简称TCP)组织的分段报文等,分别按照各自的协议格式作为伪流进行流重组,进行分段报文的保序和分段报文的恢复;然后将重组后的连续的Text进行串模式匹配。

但是这种流重组的方法存在自身无法克服的致命缺陷,以按照TCP组织的分段报文为例:

首先,进行流重组必须修改网络设备的TCP/IP(网际协议,InternetProtocol)协议栈,导致协议栈完整性的破坏,提高了网络设备的故障几率;

其次,进行流重组要求缓存每个传输Text的分段报文直到串模式匹配完成,这一方面占用了大量的系统内存,不但降低了系统性能,同时增加了DoS/DDoS(拒绝服务攻击/分布式拒绝服务攻击)的可能性,另一方面,由于系统为每个Text都预留内存,在内存有限的客观情况下,由于为每一个Text预留的内存有限,因此不可避免会出现漏报,再一方面,对分段报文进行缓存将导致延迟增加,对于一些敏感于时间延迟的业务,如IP网上传输话音(Voice over IP,简称VoIP)业务、视频业务等,带来服务质量下降的后果。

为了对上述内存占用进行控制,目前提出了将应用协议划分为行模式或者长度模式,区分进行流重组的技术方案。由于一些应用协议报文是按照“行”为单位组织的,则缓存的报文最大为一行的长度,所以内存占用的大小基本可控;对于不是按照“行”为单位进行组织的应用协议,则按照指定报文大小进行缓存,从而实现对内存占用的控制。但这种技术方案只是提高了对内存占用的控制,在一定程度上优化系统性能,减少系统受到攻击的可能,却不是从根本上克服内存占用高的缺陷,同时也无法克服修改TCP/IP协议栈所带来的固有缺陷以及缓存所带来的时延,无法避免漏报和误报。特别是对像BM这种兼顾策略的串模式匹配算法,在实际处理过程中内存的开支将较于一般的AC算法等更为巨大。

综上所述,现有技术中还没有一种能够不依赖于流重组的串模式匹配技术方案,即没有这样一种技术方案:能够不修改网络设备本身TCP/IP协议栈,也无须缓存大量分段报文,避免了内存大量占用和缓存延迟所带来的一系列问题,从而高效、准确、智能地进行基于分段报文而非流重组的串模式匹配。而这种技术方案对于串模式匹配,特别是兼顾策略的串模式匹配,都具有十分重要的意义。

发明内容

本发明要解决的技术问题是提供兼顾匹配策略的处理分段报文串模式匹配的方法及装置,以克服现有技术中必须进行流重组才能够进行串模式匹配,特别是兼顾匹配策略的串模式匹配,以及由此导致协议栈破坏、内存大量占用所带来的安全性问题、漏报误报、时间延迟和服务质量下降等诸多缺陷。

为实现上述目的,本发明提供了一种兼顾匹配策略的处理分段报文串模式匹配的方法,当接收到任一分段报文时,判断所述分段报文所在的传输流是否已存在当前串模式的流状态信息,是则对所述分段报文与所述流状态信息中预存的字符进行结合处理为目标分段报文,并清空所述流状态信息中预存的字符,然后对所述目标分段报文执行串模式匹配的步骤;否则对所述传输流初始化当前串模式的流状态信息,然后设置所述分段报文为目标分段报文并执行串模式匹配的步骤。

其中,对所述目标分段报文执行串模式匹配的步骤可以包括按照所述流状态信息中记录的每一匹配单元,对所述目标分段报文分别执行:

步骤11、根据任一匹配单元,对所述目标分段报文进行匹配,如果匹配完全成功则执行步骤12,如果所述目标分段报文至少一个后缀字符与所述匹配单元字符串对应数目的前缀字符匹配成功则执行步骤13,如果匹配完全不成功则执行步骤14;

步骤12、判断所述匹配单元是否为对应当前串模式最后规则的匹配单元,是则当前串模式匹配成功,对当前传输流执行串模式匹配的步骤结束,否则根据串模式的匹配次序,在所述流状态信息中记录下一匹配单元,然后在所述目标分段报文中匹配完全成功的位置之后,重新对所述目标分段报文执行步骤11;

步骤13、在所述流状态信息中预存该后缀字符,然后执行步骤14;

步骤14、根据所述分段报文的长度信息,修改所述匹配单元中匹配开始位置信息和匹配结束位置信息,所述匹配单元匹配结束;

当所述每一匹配单元匹配结束后,对所述目标分段报文执行串模式匹配的步骤结束。

其中,对所述分段报文与所述流状态信息中预存的字符进行结合处理为目标分段报文可包括:判断所述流状态信息中是否存在预存的字符,是则将所述字符作为前缀,与所述分段报文结合起来设置为目标分段报文,否则将所述分段报文直接设置为目标分段报文。

对所述传输流初始化当前串模式的流状态信息包括:记录首个匹配单元作为当前串模式的流状态信息,并设置记录预存字符的指定单元,所述匹配单元中至少包括进行所述串模式首个规则匹配的匹配开始位置信息和匹配结束位置信息。

为了保证不丢失任一匹配单元的匹配信息,较佳的技术方案是所述步骤13中,在所述流状态信息中预存该后缀字符包括:检查所述流状态信息中是否存在预存的字符,是则对所述后缀字符和所述预存字符进行比较,对字符数目较多的字符进行预存,并在当前匹配单元中记录所保存字符的相对位置;否则直接预存该后缀字符,并在当前匹配单元中记录所保存字符的相对位置。

为了进一步减少系统资源占用,更佳的技术方案为预存该后缀字符包括:将所述字符保存在预设的字节区内,在所述流状态信息中保存到该字节区的指针,并在当前匹配单元中记录所保存字符的相对位置。

所述步骤14还包括对修改后的匹配单元中匹配开始位置信息和匹配结束位置信息进行判断,如果该匹配开始位置信息或匹配结束位置信息超出有效检测范围,则删除该匹配单元。

为了节约系统资源,在当前串模式匹配成功时,或者传输流结束时,或者,当所述串模式的全部匹配单元的匹配开始位置信息或匹配结束位置信息超出有效检测范围,还包括删除所述串模式的流状态信息的步骤。

本发明还提供了一种兼顾匹配策略的处理分段报文串模式匹配的方法,当接收到任一分段报文时,判断所述分段报文所在的传输流是否已存在当前串模式的流状态信息,是则直接对所述分段报文执行串模式匹配的步骤;否则对所述传输流初始化当前串模式的流状态信息,然后对所述分段报文执行串模式匹配的步骤;

对所述分段报文执行串模式匹配的步骤包括按照所述流状态信息中记录的每一匹配单元,将所述分段报文分别与该匹配单元中预存的字符进行结合处理为目标分段报文,清空所述流状态信息中的预存字符,并执行:

步骤21、根据任一匹配单元,对所述目标分段报文进行匹配,如果匹配完全成功则执行步骤22,如果所述目标分段报文至少一个后缀字符与所述匹配单元字符串对应数目的前缀字符匹配成功则执行步骤23,如果匹配完全不成功则执行步骤24;

步骤22、判断所述匹配单元是否为对应当前串模式最后规则的匹配单元,是则当前串模式匹配成功,对当前传输流执行串模式匹配的步骤结束,否则根据串模式的匹配次序,在所述流状态信息中记录下一匹配单元,然后在所述目标分段报文中匹配完全成功的位置之后,重新对所述目标分段报文执行步骤21;

步骤23、在所述匹配单元中预存该后缀字符,然后执行步骤24;

步骤24、根据所述分段报文的长度信息,修改所述匹配单元中匹配开始位置信息和匹配结束位置信息,所述匹配单元匹配结束;

当所述每一匹配单元匹配结束后,对所述目标分段报文执行串模式匹配的步骤结束。

本发明还提供了一种兼顾匹配策略的处理分段报文串模式匹配的方法,当接收到任一分段报文时,判断所述分段报文所在的传输流是否已存在当前串模式的状态树,是则对所述分段报文与所述状态树根节点中预存的字符进行结合处理为目标分段报文,并清空所述根节点中预存的字符,然后对所述目标分段报文执行串模式匹配的步骤;否则对所述传输流初始化当前串模式的状态树,然后设置所述分段报文为目标分段报文并执行串模式匹配的步骤。

其中,对所述目标分段报文执行串模式匹配的步骤可以包括对所述目标分段报文进行状态树的广度遍历,根据每一匹配单元节点,对所述目标分段报文分别执行:

步骤31、对所述目标分段报文进行匹配,如果匹配完全成功则执行步骤32,如果所述目标分段报文至少一个后缀字符与所述匹配单元节点中字符串对应数目的前缀字符匹配成功则执行步骤33,如果匹配完全不成功则执行步骤34;

步骤32、判断所述匹配单元节点是否为对应当前串模式最后规则的匹配单元,是则当前串模式匹配成功,对当前传输流执行串模式匹配的步骤结束,否则在所述状态树中为所述匹配单元节点添加一子节点,该子节点中根据串模式的匹配次序,记录下一匹配单元,然后在所述目标分段报文中匹配完全成功的位置之后,重新对所述目标分段报文执行步骤31;

步骤33、在所述根节点中预存该后缀字符,然后执行步骤34;

步骤34、根据所述分段报文的长度信息,修改所述匹配单元节点中匹配开始位置信息和匹配结束位置信息,所述匹配单元节点遍历结束;

当所述每一匹配单元节点广度遍历结束后,对所述目标分段报文执行串模式匹配的步骤结束。

对所述传输流初始化当前串模式的状态树可包括:设置根节点作为当前串模式的流状态信息并设置记录预存字符的指定单元,所述根节点为首个匹配单元节点,至少包括记录进行所述串模式首个规则匹配的匹配开始位置信息和匹配结束位置信息。

较佳的技术方案为所述步骤33中,在所述根节点中预存该后缀字符包括:检查所述根节点中是否存在预存的字符,是则对所述后缀字符和所述预存字符进行比较,对字符数目较多的字符进行预存,并在当前匹配单元节点中记录所保存字符的相对位置;否则直接预存该后缀字符,并在当前匹配单元节点中记录所保存字符的相对位置。

为了进一步减少系统资源占用,更佳的技术方案为预存该后缀字符包括:将所述字符保存在预设的字节区内,在所述根节点中保存到该字节区的指针,并在当前匹配单元节点中记录所保存字符的相对位置。

所述步骤34还包括对修改后的匹配单元节点中匹配开始位置信息和匹配结束位置信息进行判断,如果该匹配开始位置信息或匹配结束位置信息超出有效检测范围,则判断所述匹配单元节点的子节点是否为空,是则删除该匹配单元节点,否则标识该匹配单元节点不再进行匹配或者删除该匹配单元节点所记录的内容。

删除匹配单元节点之后还包括:判断所述匹配单元节点的父节点状态,如果为不再进行匹配或者所记录的内容为空,则删除所述父节点。

为了节约系统资源,在当前串模式匹配成功时,或者传输流结束时,或者,所述串模式的全部节点中匹配开始位置信息或匹配结束位置信息超出有效检测范围时,还包括删除所述串模式的状态树的步骤。

本发明还提供了一种兼顾匹配策略的处理分段报文串模式匹配的方法,当接收到任一分段报文时,判断所述分段报文所在的传输流是否已存在当前串模式的状态树,是则直接对所述分段报文执行串模式匹配的步骤;否则对所述传输流初始化当前串模式的状态树,然后执行串模式匹配的步骤;

对所述分段报文执行串模式匹配的步骤包括按照所述状态树进行广度遍历,对于状态树中任一匹配单元节点,将所述分段报文分别与该节点中预存的字符进行结合处理为目标分段报文,清空所述流状态信息中的预存字符,并执行:

步骤41、对所述目标分段报文进行匹配,如果所述目标分段报文至少一个后缀字符与所述匹配单元节点中字符串对应数目的前缀字符匹配成功则执行步骤43,如果匹配完全不成功则执行步骤44;

步骤42、判断所述匹配单元节点是否为对应当前串模式最后规则的匹配单元,是则当前串模式匹配成功,对当前传输流执行串模式匹配的步骤结束,否则在所述状态树中为所述匹配单元节点添加一子节点,该子节点中根据串模式的匹配次序,记录下一匹配单元,然后在所述目标分段报文中匹配完全成功的位置之后,重新对所述目标分段报文执行步骤41;

步骤43、在所述匹配单元节点中预存该后缀字符,然后执行步骤44;

步骤44、根据所述分段报文的长度信息,修改所述匹配单元节点中匹配开始位置信息和匹配结束位置信息,所述匹配单元节点遍历结束;

当所述每一匹配单元节点广度遍历结束后,对所述目标分段报文执行串模式匹配的步骤结束。

本发明还提供了一种兼顾匹配策略的处理分段报文串模式匹配的方法,当接收到任一分段报文时,判断所述分段报文所在的传输流是否已存在当前串模式的流状态信息,是则对所述分段报文与所述流状态信息中预存的字符进行结合处理为目标报文,然后对所述目标报文执行串模式匹配的步骤;否则直接设置所述分段报文为目标报文并执行串模式匹配的步骤;

对所述目标报文执行串模式匹配的步骤包括:

步骤51、将第一匹配规则作为当前匹配规则;

步骤52、查询所述目标报文是否与串模式的当前匹配规则匹配,是则执行步骤53;否则执行步骤54;

步骤53、判断所述当前匹配规则是否为当前模式的最后一个规则,是则当前串模式匹配成功,释放流状态信息并结束,否则将下一匹配规则作为当前匹配规则,重新执行步骤52;

步骤54、判断在所述传输流是否传输完毕,是则释放所述流状态信息并结束,否则执行步骤55;

步骤55、在流状态信息中更新保存所述目标报文的字符进行下一分段报文的接收。

本发明还提供了一种兼顾匹配策略的处理分段报文串模式匹配的装置,包括:

流状态信息设置模块,用于针对任一传输流,动态记录该传输流每一串模式的流状态信息,所述流状态信息至少包括相对不同的分段报文动态变化的预存字符和匹配单元;

分段报文处理模块,用于接收分段报文,并从所述流状态信息设置模块获取预存字符,将所述分段报文与所述预存字符进行结合处理为目标分段报文;

匹配处理模块,分别与所述流状态信息设置模块和所述分段报文处理模块连接,用于根据所述流状态信息设置模块提供的匹配单元,对所述目标分段报文进行匹配;对于完全匹配的情况,指令所述流状态信息设置模块记录下一匹配单元,对于目标分段报文至少一个后缀字符与所述匹配单元字符串的对应数目的前缀字符匹配成功的情况,指令所述流状态信息设置模块将所述后缀字符作为预存字符进行记录。

其中,较佳的技术方案是:所述流状态信息设置模块设有控制单元和多个匹配单元;所述控制单元用于接收匹配处理模块的指令并发送预存字符给分段报文处理模块,添加、删除匹配单元,以及动态变更匹配单元中的匹配开始位置信息和匹配结束位置信息;其中,首个匹配单元还用于记录预存字符。

或者,所述流状态信息设置模块设有控制单元和多个匹配单元;所述控制单元用于接收匹配处理模块的指令并发送预存字符给分段报文处理模块,添加、删除匹配单元,以及动态变更匹配单元中的匹配开始位置信息和匹配结束位置信息;其中,任一匹配单元还用于记录该匹配单元进行匹配时的预存字符。

更佳的技术方案是:所述匹配单元按照状态树的方式连接,一下级匹配单元节点被添加,用于记录与其上级匹配单元节点的成功匹配,其中,初始化的首个匹配单元节点为根节点。

所述匹配处理模块包括流状态信息获取单元、匹配执行单元和指令发送单元;所述流状态信息获取单元用于获取待匹配的匹配单元、预存字符和分段报文信息,由所述匹配执行单元进行匹配;所述匹配执行单元将匹配结果发送给所述指令发送单元,由所述指令发送单元根据匹配情况和报文变化情况,向所述流状态信息设置模块发出添加、删除或者变更匹配单元的指令,以及向分段报文处理模块发送接收下一分段报文的指令。

由上述技术方案可知,本发明通过保留流状态信息,采用预留部分字符与后面的分段报文结合的技术方案,具有以下有益效果:

1、无需破坏协议栈,提高了报文处理的安全性;

2、与大量分段报文整体保存相比,仅对部分字符和待测匹配单元进行保存,避免了内存的大量占用;

3、不必缓存分段报文,使报文能够快速转发,克服了网络延迟和服务质量下降的问题。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

图1为应用串模式匹配的网关设备所在的系统示意图;

图2为应用串模式匹配的旁路设备所在的系统示意图;

图3为本发明所举例的传输流被分为五段报文的示意图;

图4为本发明所提供的第一种兼顾匹配策略的处理分段报文串模式匹配的方法的一个实施例流程图;

图5A为匹配单元的报文长度不能满足有效检测范围时,计算匹配开始位置信息和匹配结束位置信息的示意图;

图5B为匹配单元的报文长度能够满足有效检测范围时,计算匹配开始位置信息和匹配结束位置信息的示意图;

图6为本发明所提供的第二种兼顾匹配策略的处理分段报文串模式匹配的方法的一个实施例流程图;

图7为本发明所提供的第三种兼顾匹配策略的处理分段报文串模式匹配的方法中状态树结构示意图;

图8A~图8I为图7所示方法的一个具体实施例的状态树变化图;

图9为图7所示方法的一个完整流程示意图;

图10为本发明所提供的第四种兼顾匹配策略的处理分段报文串模式匹配的方法中状态树的结构示意图;

图11为本发明所提供的第五种兼顾匹配策略的处理分段报文串模式匹配的方法中状态树的结构示意图;

图12为本发明所提供的兼顾匹配策略的处理分段报文串模式匹配的装置的系统框图;

图13为图12所提供装置的一个具体实施例的系统框图。

具体实施方式

为了克服在现有技术中必须进行流重组才能够匹配串模式的问题,本发明提供了五种兼顾匹配策略的处理分段报文串模式匹配的方法以及一种兼顾匹配策略的处理分段报文串模式匹配的装置,下面进行一一说明。

为了说明方便起见,首先设定一段传输流的内容为“abdddddcabcokabcddrtdefabcdddefdfdkdefkadghkdef”,以及设定用于匹配的串模式为“规则A‘abc’offset 3 depth 50,规则B‘def’distance 4 within 10,规则C‘ghk’distance 3 within 8”,简称该串模式为串模式ABC。上述内容所表述的是在内容为“abdddddcabcokabcddrtdefabcdddefdfdkdedkadghkdef”的传输流中,搜索符合指定规则A、B和C的串模式:在传输流中偏移3开始,长度为50的内容中搜索“abc”,在匹配到A的位置偏移4开始,长度为10的内容中搜索“def”,在匹配到B的位置偏移3开始,长度为8的内容中搜索“ghk”。若最终匹配规则ABC成功,则说明在传输流内容中在同时考虑了字符串与匹配策略的情况下,实现了该串模式的匹配。同时,在网络传输中,上述传输流按照TCP协议会被分为5段报文,如图3所示。

本发明对所提供的兼顾匹配策略的处理分段报文串模式匹配的方法及装置实际匹配过程的描述,都通过各方法/装置对上述5段分段报文进行如上所述的串模式匹配进行举例说明。但本领域技术人员应当理解,上述传输流内容的设置和串模式的设置仅为说明方便而非限定,本发明所提供的串模式匹配方法和串模式匹配装置适用于实际应用中出现的任何传输流内容和串模式。

本发明所提供的第一种兼顾匹配策略的处理分段报文串模式匹配的方法包括以下步骤:当接收到任一分段报文时,判断所述分段报文所在的传输流是否已存在当前串模式的流状态信息,是则对所述分段报文与所述流状态信息中预存的字符进行结合处理为目标分段报文,并清空所述流状态信息中预存的字符,然后对所述目标分段报文执行串模式匹配的步骤;否则对所述传输流初始化当前串模式的流状态信息,然后设置所述分段报文为目标分段报文并执行串模式匹配的步骤。

参见图4,为本发明所提供的第一种兼顾匹配策略的处理分段报文串模式匹配的方法的一个实施例流程图,包括以下步骤:

步骤101、当接收到任一分段报文时,判断所述分段报文所在的传输流是否已存在当前串模式的流状态信息,是则执行步骤102,否则执行步骤103;

进行本步骤的判断是由于进行串模式匹配是针对传输流进行的,各分段报文仅能够与本传输流中的其他分段报文结合,因此首先识别分段报文所在的传输流,这是现有技术能够完成的。

识别分段报文所在的传输流后,进一步识别针对当前串模式,是否存在相应的流状态信息。由于在不同的业务应用中,需要进行的模式匹配要求不同,因此即使是对同一传输流,面向不同的业务应用时,需要匹配的串模式可能也不相同,因此需要根据需要设置和匹配。本发明针对任一传输流,采用记录不同串模式的流状态信息来取代缓存大量报文,从而实现不基于流重组的模式匹配。

步骤102、对所述分段报文与所述流状态信息中预存的字符进行结合处理为目标分段报文,并清空所述流状态信息中预存的字符,然后执行步骤104;

其中,对分段报文与流状态信息中预存的字符进行结合处理为目标分段报文包括:

步骤1021、判断流状态信息的指定单元中是否存在预存的字符,是则执行步骤1022,否则执行步骤1023;

步骤1022、将所述字符作为前缀,与所述分段报文结合起来设置为目标分段报文;

步骤1023、将所述分段报文直接设置为目标分段报文。

一般来说,该指定单元可以是当前匹配单元,即每一个指定单元中分别保存对应的预存字符。

该指定单元也可以是固定的一个匹配单元,比如初始匹配单元,则对任何一个匹配单元进行处理时,都从该指定单元获得字符信息。

进一步的,为了减少流状态信息的内存占用,还可以单独在存储空间中开辟一定的字节区,专门用来存储预存字符,该字节区的大小可以依据全部模式中规则所匹配内容的最大长度,如本发明作为例子的三个规则,所匹配的内容都是三个字节,那么开辟3个字节的区域即可满足要求;

对于指定单元是固定的匹配单元的情况,包括在指定单元内存储预存字符以及在专门的字节区内预存字符,都需要在当前匹配单元中记录相对位置。比如,当匹配模式分别有规则为“abcd”“bcde”“cdf”时,假设某段分段报文末尾结束字符为“xxabc”,则在该字节区内存储三个规则中所需保存的最长字符“abc”,并分别建立各模式流状态信息的指定单元到该字节区的连接,并在当前匹配单元中记录相对位置;对于规则“abcd”的流状态信息,其相对位置为3,对于规则“bcde”,其相对位置为2,对于规则“cdf”,其相对位置为1。该相对位置就是从报文结束位置起的前向偏移量。特别是开辟字节区的方案,尤其适用于多个匹配模式存在重复字符的情况,无需在每一个流状态信息中进行字符保存,能够将处理报文能力提高10个数量级。

在本技术方案中,该指定单元为首个匹配单元,保存且仅保存一预存字符,因此在进行该分段报文匹配之前就需要进行分段报文的结合工作。

步骤103、对所述传输流初始化当前串模式的流状态信息,然后设置所述分段报文为目标分段报文并执行步骤104;

其中,对所述传输流初始化当前串模式的流状态信息可以包括:记录首个匹配单元即初始化匹配单元作为当前串模式的流状态信息,并设置记录预存字符的指定单元,所述匹配单元中至少包括进行所述串模式首个规则匹配的匹配开始位置信息和匹配结束位置信息。以图3所示分段报文为例,当接收到分段报文1时,显然需要进行串模式ABC的初始化,包括记录字符串“abc”和进行该字符串匹配策略即偏移信息3和长度50等规则信息,还要记录报文匹配开始的位置信息“1”和匹配结束位置信息“53”。可以看出,对分段报文1进行串模式匹配时,就按照该匹配单元进行匹配操作。

步骤104、对所述目标分段报文执行串模式匹配的步骤,包括:

1041、获取流状态信息中记录的一个匹配单元,这种获取可以是按照流状态信息中匹配单元记录的顺序获取,也可以是随机获取;假设是流状态信息初始化完成后的第一次对目标分段报文进行处理,那么显然流状态信息中仅有一个匹配单元能够被获取;

1042、对所述目标分段报文与所述匹配单元进行匹配,如果匹配完全成功则执行步骤1043,如果所述目标分段报文至少一个后缀字符与所述匹配单元字符串对应数目的前缀字符匹配成功,则执行步骤1045,如果匹配完全不成功则执行步骤1046;

1043、判断所述匹配单元是否为对应当前串模式最后规则的匹配单元,是则当前串模式匹配成功,对当前传输流执行串模式匹配的步骤结束,否则执行步骤1044;

在本步骤中,为了降低系统资源开销,当前串模式匹配成功后还可以进一步包括删除当前串模式的流状态信息的步骤。

1044、根据串模式的匹配次序,在所述流状态信息中记录下一匹配单元,然后在所述目标分段报文中匹配完全成功的位置之后,重新对所述目标分段报文执行步骤1042;

举例来说,当对分段报文2执行串模式匹配时,同样需要遍历流状态信息中的匹配单元;由于分段报文1未发生完全匹配情况,因此没有新增加匹配单元,此时所存在的匹配单元仍为初始化后的首个匹配单元,即进行规则A的匹配;分段报文2中存在字符串“abc”,完全匹配,则进一步设置新的匹配单元,包括记录字符串“def”和进行该字符串匹配的偏移信息4和长度10等规则信息,还要记录进行该字符串“def”匹配的开始位置信息“13”和结束位置信息“23”。可以看出,经过本步骤处理以后,对分段报文3进行匹配时,至少要与两个匹配单元进行匹配。

1045、在所述流状态信息中预存该后缀字符,然后执行1046;

举例来说,图3中分段报文1的最后一个后缀字符为“a”,当对该分段报文与规则A进行匹配时,该后缀字符“a”显然与规则A中字符串“abc”的第一个字母匹配,也就意味着该分段报文中的最后一个字符“a”有可能与下一个分段报文组合出符合匹配要求的“abc”,因此,需要将字符拷贝保留,同时记录相对位置信息。

为了保证不丢失任一匹配单元的匹配信息,在本步骤中在所述流状态信息中预存该后缀字符包括:检查所述流状态信息中是否存在预存的字符,是则对所述后缀字符和所述预存字符进行比较,对字符数目较多的字符进行预存;否则直接预存该后缀字符。举例来说,当一个匹配单元的规则是匹配“def”,而另一个匹配单元的规则是匹配“tdef”,当某一分段报文的结束字符为“tde”时,根据两个匹配单元的随机或者依次匹配次序,可能存在下述两种情况:

第一、当被首先匹配的匹配单元为规则“def”时,需要预存字符“de”,并在当前匹配单元中保存相应位置2;则进行下一匹配单元的匹配时,检查所述流状态信息中存在预存的字符,则进行比较;由于字符“tde”的长度大于字符“de”,因此,将预存的字符更新为“tde”,并在当前匹配单元中保存相应位置3;

第二、当被首先匹配的匹配单元为规则“tdef”时,需要预存字符“tde”,并在当前匹配单元中保存相应位置3;则进行下一匹配单元的匹配时,检查所述流状态信息中存在预存的字符,则进行比较;由于字符“tde”的长度大于字符“de”,因此,不进行预存字符的变更,仍保存字符“tde”,但在当前匹配单元中保存相应位置2。

1046、根据所述分段报文的长度信息,修改所述匹配单元的匹配开始位置信息和匹配结束位置信息,所述匹配单元匹配结束;

例如,初始化后匹配单元记录的匹配开始位置信息为“1”,匹配结束位置信息为“53”,则进行分段报文1的匹配及保存字符“a”之后,需要进行该匹配单元的匹配开始位置信息和匹配结束位置信息调节,具体可以为:匹配开始位置信息为“1”,代表从下一报文的第一个字符开始;匹配结束位置信息为45,如图3所示,对于首报文的匹配是从偏移3的位置开始,即偏移字符为3个,所匹配的字符为“ddddca”,由于字符“a”存储留待下一次匹配,因此有效匹配的报文为“ddddc”,共5个字符,则对匹配结束位置信息的修改就是根据所匹配字符的个数,将“53”修改为“45”。

1047、检查是否存在其它匹配单元,是则重新执行步骤1041,否则对所述目标分段报文执行串模式匹配的步骤结束。

当串模式匹配成功,则返回匹配成功结果;如果当传输流结束或者串模式有效范围结束时尚未匹配成功,则返回串模式匹配失败结果。

为了避免存储过多的信息,同时为了提高匹配的效率,步骤1046还可以包括对修改后的匹配单元中匹配开始位置信息和匹配结束位置信息进行判断,如果该匹配开始位置信息或匹配结束位置信息超出有效检测范围,则删除该匹配单元记录。例如,当匹配开始位置信息调整之后为0,则说明不可能再进行下一分段报文的匹配,则删除该匹配单元即可。同样的,除了当前串模式匹配成功的情况以外,当传输流结束时,或者,当所述串模式的全部匹配单元的匹配开始位置信息或匹配结束位置信息超出有效检测范围,则删除所述串模式的流状态信息,而且,对匹配开始位置信息或匹配结束位置信息进行检测较对整个流进行检测更为灵敏,有利于流状态信息的随时删除,释放空间。

下面以图3所示分段报文的另一个具体实施例来说明本发明所提供的第一种兼顾匹配策略的处理分段报文串模式匹配的方法。首先描述一下匹配单元中匹配开始位置信息和匹配结束位置信息的计算方法:

对于未考虑跨报情况,规则A、B、C是在连续的报文中进行匹配,将匹配开始位置信息以Start表示,匹配结束位置信息以Len表示,则本领域技术人员很容易理解,各个匹配单元中记录对应规则的形式可以如下所示:

A-Start=1;

A-Len=A-depth(检测深度,比如本实施例中为50)+A-offset(A的偏移值)-报文中已经检测的字符个数;

B-Start=A的匹配位置+规则A内容长度(如本实施例中为3)+B-distance(B的偏移值);

B-Len=B-Start+B-distance(B的偏移值)+B-within(B的检测深度);

C-Start=B的匹配位置+ContentB内容长度(如本实施例中为3)+C-distance;

C-Len=C-Stan+C-distance(C的偏移值)+C-within(C的检测深度)。

而对于跨报文的情况,则稍微复杂一些,参见图5A和图5B,为进行跨报文计算的图示;其中,图5A为匹配单元的报文长度不能满足规则有效检测范围的情况,图5B为匹配单元的报文长度能够满足规则有效检测范围的情况,由于内容长度相当于匹配位置加上相应字符,因此为了说明方便,这里暂时定义内容长度为0。n是当前报文长度,i是前一规则在当前报文的匹配位置,j是下一个规则的偏移值,m是下一个规则的检测深度,则在图5A中,下一规则的Start为j-(n-i),Len为Start+m;在图5B中,下一规则的Start为i+j,Len为Start+m,对于Start和Len之间跨报文的情况,该Len的实际值为Start+m-n。在本实施例中:

A-Start=1;

A-Len=A-depth(检测深度)+A-offset(A的偏移值)-报文中已经检测的字符个数;

B-Start=A的匹配位置+Content A内容长度+B-distance,此为匹配单元的报文长度能够满足规则B有效检测范围的情况;或者

B-Start=B-distance-(当前报文长度-A的匹配位置-Content A内容长度),此为匹配单元的报文长度不能满足规则B有效检测范围的情况,则B-Start的匹配开始位置在下一分段报文中;

B-Len=B-Start+B-within(B的检测深度); 

C-Start=B的匹配位置+Content B内容长度+C-distance,此为匹配单元的报文长度能够满足规则C有效检测范围的情况;或者

C-Start=C-distance-(当前报文长度-B的匹配位置-ContentB内容长度),此为匹配单元的报文长度不能满足规则C有效检测范围的情况,则C-Start的匹配开始位置在下一分段报文中;

C-Len=C-Start+C-within(C的检测深度)。

则本实施例的步骤如下:

步骤111、接收到分段报文1;

步骤112、判断该分段报文所在的传输流不存在当前串模式ABC的流状态信息,对所述传输流初始化当前串模式的流状态信息,包括设置首个匹配单元A,其中记录规则A“abc”的匹配开始位置信息“1”和匹配结束位置信息“53”;还包括设置记录预存字符的指定单元,在本实施例中为设置专门的一个字节Pkt,此时Pkt为空,然后设置所述分段报文1为目标分段报文;

步骤113、根据该匹配单元A对目标分段报文进行匹配,具体为在报文1中偏移3的位置寻找“abc”,结果未完全匹配;但该分段报文1的最后一个字符为“a”,有可能和下一个报文组合为目标字符串’abc’,故需要拷贝保留该字符到Pkt中,并记录相对位置1;

步骤114、根据所述分段报文1的长度信息,修改所述匹配单元A中匹配开始位置信息和匹配结束位置信息,具体为将匹配开始位置信息修改为“1”,代表从下一报文首字符起进行匹配,匹配结束位置信息修改为“45”,即原来的匹配结束位置信息减去偏移值和已检测的字符个数;

步骤115、判断不存在其他匹配单元,因此分段报文1的串模式匹配结束;

步骤116、接收分段报文2;

步骤117、判断所述分段报文2所在的传输流已存在当前串模式的流状态信息,则将保存的Pkt内容“a”和分段报文2内容合二为一,并清空该Pkt字段,将结合后的报文“abcokabcddrtdef”作为目标分段报文;

步骤118、根据已有的匹配单元A对目标分段报文进行匹配,具体为在目标分段报文2中“1”的位置起寻找“abc”,结果完全匹配;

步骤119、在流状态信息中记录下一匹配单元B1,包括记录进行所述串模式中规则B匹配的匹配开始位置信息1+3+4=8和匹配结束位置信息8+10=18,所谓匹配结束位置信息代表在第18个字符之前结束;

步骤120、在匹配完全成功的位置之后,即从字符4开始,重新对目标分段报文执行该字符串“abc”的匹配,结果完全匹配;

步骤121、在流状态信息中记录下一匹配单元B2,包括记录进行所述串模式中规则B匹配的匹配开始位置信息6+3+4=13和匹配结束位置信息13+10=23;

步骤122、在匹配完全成功的位置之后,即从字符9开始,重新对目标分段报文执行该字符串“abc”的匹配,结果为不匹配;

步骤123、根据所述分段报文的长度信息,修改所述匹配单元A中匹配开始位置信息和匹配结束位置信息,具体为将匹配开始位置信息修改为“1”,代表从下一报文首字符起进行匹配,匹配结束位置信息修改为“30”,即原来的匹配结束位置信息减去已检测的字符个数15;所述匹配单元A匹配结束;

步骤124、由于出现了两个新的匹配单元B1和B2,因此随机挑选一匹配单元对所述目标分段报文进行匹配,本实施例是首先在字符8到18的位置中进行匹配单元B1“def”的匹配,由于目标分段报文2的长度为15,因此实际的匹配发生在字符8到本目标分段报文结束,结果为完全匹配;这种匹配单元的选择也可以预设次序,比如按照生成匹配单元的次序进行;

步骤125、在流状态信息中记录下一匹配单元C1,包括记录进行所述串模式中规则C匹配的匹配开始位置信息3-(15-13-3)=4和匹配结束位置信息4+8=12;

步骤126、在完全匹配的位置之后,该目标分段报文2结束,因此继续匹配完全不成功;

步骤127、根据所述分段报文2的长度信息,修改所述匹配单元B1中匹配开始位置信息和匹配结束位置信息,具体为匹配单元B1中匹配开始位置信息为1,代表下一分段报文的匹配从字符1开始,匹配结束位置信息为18-15=3;所述匹配单元B1匹配结束;

步骤128、根据下一个匹配单元B2进行目标分段报文2的匹配,在字符13到23的位置中进行“def”的匹配,由于目标分段报文2的长度为15,因此实际的匹配发生在字符13到本目标分段报文结束,结果为完全匹配;

步骤129、在流状态信息中记录下一匹配单元C2,包括记录进行所述串模式中规则C匹配的匹配开始位置信息3-(15-13-3)=4和匹配结束位置信息4+8=12;

步骤130、根据所述分段报文2的长度信息,修改所述匹配单元B2中匹配开始位置信息和匹配结束位置信息,具体为匹配单元B2中匹配开始位置信息为1,代表下一分段报文的匹配从字符1开始,匹配结束位置信息为23-15=8;所述匹配单元B2匹配结束;

由于没有其他对应本分段报文2的匹配单元,因此,分段报文2匹配结束;

步骤131、接收分段报文3;

步骤132、判断所述分段报文3所在的传输流已存在当前串模式的流状态信息,则将保存的Pkt内容和分段报文3内容合二为一,由于Pkt字段为空,因此结合后的报文仍为分段报文3,作为目标分段报文;

步骤133、根据匹配单元A对目标分段报文进行匹配,具体为在目标分段报文3中“1”的位置起寻找“abc”,结果完全匹配;

步骤134、在流状态信息中记录下一匹配单元B3,包括记录进行所述串模式中规则B匹配的匹配开始位置信息4-(3-(1+3))=5和匹配结束位置信息5+10=15;

步骤135、在完全匹配的位置之后,该目标分段报文结束,因此继续匹配完全不成功;并且,由于超过了本分段报文的长度,因此,B3不再继续对分段报文3进行匹配;

步骤136、根据所述分段报文3的长度信息,修改所述匹配单元A中匹配开始位置信息和匹配结束位置信息,具体为匹配单元A中匹配开始位置信息为1,代表下一分段报文的匹配从字符1开始,匹配结束位置信息为30-3=27;所述匹配单元A匹配结束;

步骤137、根据下一个匹配单元B1进行目标分段报文的匹配,在字符1到3的位置中进行“def”的匹配,结果为完全不匹配;

步骤138、根据所述分段报文的长度信息,修改所述匹配单元中匹配开始位置信息和匹配结束位置信息,具体为匹配单元B1中匹配开始位置信息为1,代表下一分段报文的匹配从字符1开始,匹配结束位置信息为3-3=0;所述匹配单元B1匹配结束;

步骤139、由于匹配单元B1的匹配结束位置信息超出有效检测范围,则删除该匹配单元B1;

步骤140、根据下一个匹配单元B2进行目标分段报文的匹配,在字符1到8的位置中进行“def”的匹配,由于本分段报文3仅有三个字符,因此实际是从字符1到本分段报文3结束的位置进行匹配,结果为完全不匹配;

步骤141、根据所述分段报文的长度信息,修改所述匹配单元B2中匹配开始位置信息和匹配结束位置信息,具体为匹配单元B2中匹配开始位置信息为1,代表下一分段报文的匹配从字符1开始,匹配结束位置信息为8-3=5;所述匹配单元B2匹配结束;

步骤142、根据下一个匹配单元C1进行目标分段报文的匹配,由于C1的匹配开始位置就超出了分段报文3的范围,因此匹配完全不成功;

步骤143、根据所述分段报文的长度信息,修改所述匹配单元C1中匹配开始位置信息和匹配结束位置信息,具体为匹配单元C1中匹配开始位置信息为4-3=1,代表下一分段报文的匹配从字符1开始,匹配结束位置信息为12-3=9;所述匹配单元C1匹配结束;

步骤144、根据下一个匹配单元C2进行目标分段报文的匹配,由于C2的匹配开始位置就超出了分段报文3的范围,因此匹配完全不成功;

步骤145、根据所述分段报文的长度信息,修改所述匹配单元中匹配开始位置信息和匹配结束位置信息,具体为匹配单元C2中匹配开始位置信息为4-3=1,代表下一分段报文的匹配从字符1开始,匹配结束位置信息为12-3=9;所述匹配单元C2匹配结束;

由于没有其他对应本分段报文3的匹配单元,因此,分段报文3匹配结束;

步骤146、接收分段报文4“dddefdfdkdefkad”;

步骤147、判断所述分段报文4所在的传输流已存在当前串模式的流状态信息,则将保存的Pkt内容和分段报文4内容合二为一,由于Pkt字段为空,因此结合后的报文仍为分段报文4,作为目标分段报文;

步骤148、根据匹配单元A对目标分段报文进行匹配,具体为在目标分段报文4中“1”的位置起寻找“abc”,结果完全不匹配;

步骤149、根据所述分段报文4的长度信息,修改所述匹配单元A中匹配开始位置信息和匹配结束位置信息,具体为将匹配开始位置信息修改为“1”,代表从下一报文首字符起进行匹配,匹配结束位置信息修改为27-15=12,即原来的匹配结束位置信息减去已检测的字符个数15;所述匹配单元A匹配结束;

步骤150、根据下一个匹配单元B2进行目标分段报文的匹配,在字符1到5的位置中进行“def”的匹配,由于是在第5个字符之前结束,因此仅能匹配到第四个字符“e”,结果为完全不匹配;

步骤151、根据所述分段报文4的长度信息,修改所述匹配单元B2中匹配开始位置信息和匹配结束位置信息,具体为匹配单元B2中匹配开始位置信息为负值,匹配结束位置信息为负值;所述匹配单元B2匹配结束;

步骤152、由于匹配单元B2的匹配开始和结束位置信息超出有效检测范围,则删除该匹配单元B2;

步骤153、根据下一个匹配单元B3进行目标分段报文的匹配,在字符5到15的位置中进行“def”的匹配,结果为完全匹配;

步骤154、在流状态信息中记录下一匹配单元C3,包括记录进行所述串模式中规则C匹配的匹配开始位置信息3-(15-10-3)=1,标明从下一分段报文的字符1开始,和匹配结束位置信息1+8=9;

步骤155、在匹配完全成功的位置之后,即从字符12开始,已经超出匹配单元B3的范围,结果完全不匹配;

步骤156、根据所述分段报文4的长度信息,修改所述匹配单元B3中匹配开始位置信息和匹配结束位置信息,具体为匹配单元B3中匹配开始位置信息为负值,匹配结束位置信息为负值;所述匹配单元B3匹配结束;

步骤157、由于匹配单元B3的匹配开始和结束位置信息分别为-10和0超出有效检测范围,则删除该匹配单元B3;

步骤158、根据下一个匹配单元C1进行目标分段报文的匹配,在1至9的范围内,与字符串“ghk”完全不匹配;

步骤159、根据所述分段报文4的长度信息,修改所述匹配单元C1中匹配开始位置信息和匹配结束位置信息,具体为匹配单元C1中匹配开始位置信息为负值,匹配结束位置信息为负值;所述匹配单元C1匹配结束;

步骤160、由于匹配单元C1的匹配开始和结束位置信息超出有效检测范围,则删除该匹配单元C1;

步骤161、根据下一个匹配单元C2进行目标分段报文的匹配,在1至9的范围内,与字符串“ghk”完全不匹配;

步骤162、根据所述分段报文4的长度信息,修改所述匹配单元C2中匹配开始位置信息和匹配结束位置信息,具体为匹配单元C2中匹配开始位置信息为负值,匹配结束位置信息为负值;所述匹配单元C2匹配结束;

步骤163、由于匹配单元C2的匹配开始和结束位置信息超出有效检测范围,则删除该匹配单元C2;

由于下一个匹配单元C3针对的是下一报文,因此分段报文4的匹配结束;

步骤164、接收分段报文5“ghkdef”;

步骤165、判断所述分段报文5所在的传输流已存在当前串模式的流状态信息,则将保存的Pkt内容和分段报文5内容合二为一,由于Pkt字段为空,因此结合后的报文仍为分段报文5,作为目标分段报文;

步骤166、根据匹配单元A对目标分段报文进行匹配,具体为在目标分段报文5中“1”的位置起寻找“abc”,结果完全不匹配;

步骤167、根据所述分段报文5的长度信息,修改所述匹配单元A中匹配开始位置信息和匹配结束位置信息,具体为将匹配开始位置信息修改为“1”,代表从下一报文首字符起进行匹配,匹配结束位置信息修改为12-6=6,即原来的匹配结束位置信息减去已检测的字符个数6;所述匹配单元A匹配结束;

步骤168、根据下一个匹配单元C3进行目标分段报文的匹配,即在1-9之间进行“ghk”的匹配,结果为完全匹配;

步骤169、所述匹配单元C3匹配结束返回模式匹配成功指令;

步骤170、删除当前串模式的流状态信息,即删除全部匹配单元,对当前传输流执行串模式匹配的步骤结束。

在本实施例中,显然C1、C2和C3对应着当前串模式的最后规则即在匹配到B的位置偏移3开始,长度为8的内容中搜索“ghk”,因此当C3匹配成功后,释放当前流状态信息;如果对于最终C3也未匹配成功的情况,则在当前传输流结束,或者全部匹配单元的开始位置信息或匹配结束位置信息超出有效检测范围时,也可作为删除全部的匹配单元的条件。

在本实施例中,采用的是对匹配单元分别执行删除操作,包括步骤139、152、157、160和163;还可以采用删除该匹配单元所记录的内容来进行;也可通过标识不再对该匹配单元进行匹配的方式来避免重复劳动,这种两种方式虽然会占用一定的内存空间,但有利于保证匹配单元的连续性。

本发明提供了第二种兼顾匹配策略的处理分段报文串模式匹配的方法,其实施例参见图6,包括以下步骤:

步骤201、当接收到任一分段报文时,判断所述分段报文所在的传输流是否已存在当前串模式的流状态信息,是则执行步骤203,否则执行步骤202;

步骤202、对所述传输流初始化当前串模式的流状态信息,然后执行步骤203;

步骤203、对所述目标分段报文执行串模式匹配的步骤,包括:

2031、获取流状态信息中记录的一个匹配单元,这种获取可以是按照流状态信息中匹配单元记录的顺序获取,也可以是随机获取;假设是流状态信息初始化完成后的第一次对目标分段报文进行处理,那么显然流状态信息中仅有一个匹配单元能够被获取;

2032、对分段报文与流状态信息中预存的字符进行结合处理为目标分段报文,清空所述流状态信息中的预存字符;

2033、对所述目标分段报文与所述匹配单元进行匹配,如果匹配完全成功则执行步骤2034,如果所述目标分段报文至少一个后缀字符与所述匹配单元字符串对应数目的前缀字符匹配成功,则执行步骤2036,如果匹配完全不成功则执行步骤2037;

2034、判断所述匹配单元是否为对应当前串模式最后规则的匹配单元,是则删除当前串模式的流状态信息,对当前传输流执行串模式匹配的步骤结束,否则执行步骤2035;

在本实施例中,采取了当前串模式匹配成功后即行删除流状态信息的操作,以节约系统资源。

步骤2035、根据串模式的匹配次序,在所述流状态信息中记录下一匹配单元,然后在所述目标分段报文中匹配完全成功的位置之后,重新对所述目标分段报文执行步骤2033;

2036、在所述匹配单元中预存该后缀字符,然后执行步骤2037;

因为是对每一分段报文进行分别的匹配,因此动态变化的预存字符能够保证不丢失匹配信息。

2037、根据所述分段报文的长度信息,修改所述匹配单元中匹配开始位置信息和匹配结束位置信息,所述匹配单元匹配结束;

2038、检查是否存在其它匹配单元,是则重新执行步骤2031,否则对所述目标分段报文执行串模式匹配的步骤结束。

为了避免存储过多的信息,步骤2037还可以包括对修改后的匹配单元中匹配开始位置信息和匹配结束位置信息进行判断,如果该匹配开始位置信息或匹配结束位置信息超出有效检测范围,则删除该匹配单元所记录的内容或者删除该匹配单元。例如,当匹配开始位置信息调整之后为0,则说明不可能再进行下一分段报文的匹配,则删除该匹配单元即可。

同样的,当传输流结束时,删除所述串模式的流状态信息;或者,当所述串模式的全部匹配单元的匹配开始位置信息或匹配结束位置信息都超出有效检测范围,则删除所述串模式的流状态信息,而且,对匹配开始位置信息或匹配结束位置信息进行检测较对整个流进行检测更为灵敏,有利于流状态信息的随时删除,释放空间。

可以看出,就本发明所提供的第二种兼顾匹配策略的处理分段报文串模式匹配的方法而言,除了进行预存字符结合的次序和字符预存的位置发生变化以外,与所提供的第一种串模式匹配方法相同。

本发明还提供了第三种兼顾匹配策略的处理分段报文串模式匹配的方法,是以状态树的方式对流状态信息进行组织。由于状态树本身的继承关系清晰,因此有利于识别和处理。具体包括:

当接收到任一分段报文时,判断所述分段报文所在的传输流是否已存在当前串模式的状态树,是则对所述分段报文与所述状态树根节点中预存的字符进行结合处理为目标分段报文,并清空所述根节点中预存的字符,然后对所述目标分段报文执行串模式匹配的步骤;否则对所述传输流初始化当前串模式的状态树,然后设置所述分段报文为目标分段报文并执行串模式匹配的步骤。

其中,对所述目标分段报文执行串模式匹配的步骤包括对所述目标分段报文进行状态树的广度遍历,根据每一匹配单元节点,对所述目标分段报文分别执行:

步骤31、对所述目标分段报文进行匹配,如果匹配完全成功则执行步骤32,如果所述目标分段报文至少一个后缀字符与所述匹配单元节点中字符串对应数目的前缀字符匹配成功则执行步骤34,如果匹配完全不成功则执行步骤35;

步骤32、判断所述匹配单元节点是否为对应当前串模式最后规则的匹配单元,是则当前串模式匹配成功,对当前传输流执行串模式匹配的步骤结束,否则执行步骤33;

步骤33、在所述状态树中为所述匹配单元节点添加一子节点,该子节点中根据串模式的匹配次序,记录下一匹配单元,然后在所述目标分段报文中匹配完全成功的位置之后,重新对所述目标分段报文执行步骤31;

步骤34、在所述根节点中预存该后缀字符,然后执行步骤35;

步骤35、根据所述分段报文的长度信息,修改所述匹配单元节点中匹配开始位置信息和匹配结束位置信息,所述匹配单元节点遍历结束;

当所述每一匹配单元节点广度遍历结束后,对所述目标分段报文执行串模式匹配的步骤结束。

其中,对所述传输流初始化当前串模式的状态树包括:设置根节点作为当前串模式的流状态信息并设置记录预存字符的指定单元,所述根节点为首个匹配单元节点,至少包记录进行所述串模式首个规则匹配的匹配开始位置信息和匹配结束位置信息。

为了避免匹配信息的丢失,所述步骤33中,在所述根节点中预存该后缀字符包括:检查所述根节点中是否存在预存的字符,是则对所述后缀字符和所述预存字符进行比较,对字符数目较多的字符进行预存,并在当前匹配单元节点中记录所保存字符的相对位置;否则直接预存该后缀字符,并在当前匹配单元节点中记录所保存字符的相对位置。

或者,预存该后缀字符包括:将所述字符保存在预设的字节区内,在所述根节点中保存到该字节区的指针,并在当前匹配单元节点中记录所保存字符的相对位置。

所述步骤34还包括对修改后的匹配单元节点中匹配开始位置信息和匹配结束位置信息进行判断,如果该匹配开始位置信息或匹配结束位置信息超出有效检测范围,则判断所述匹配单元节点的子节点是否为空,是则删除该匹配单元节点,否则标识该匹配单元节点不再进行匹配或者删除该匹配单元节点所记录的内容。

进一步的,为了减小资源开销,还包括删除该匹配单元节点时,判断其父节点是否不再进行匹配或者无记录内容,是则删除该匹配单元节点的父节点。

进一步的,为了释放缓存,还包括当前串模式匹配成功时,或者当传输流结束时,或者所述串模式的全部节点中匹配开始位置信息或匹配结束位置信息超出有效检测范围时,删除所述串模式的状态树。

参见图7,为上述兼顾匹配策略的处理分段报文串模式匹配的方法示意图,这里对两个流进行了图示,其中对流ID为123的传输流给出了按照本发明所提供的状态树执行的图示,而对流ID为456的传输流,仅给出了根节点的示意图。通过本图示也可以看出,本发明所提供的兼顾匹配策略的处理分段报文串模式匹配的方法,对于不同的流以及不同的串模式,彼此之间不发生干扰。就本发明的状态树而言,表现出来的就是不同的树之间独立。

进一步的,图7中的匹配单元节点中都记录了匹配开始位置信息和匹配结束位置信息,以及该匹配单元节点进行匹配的规则。对任一分段报文进行广度遍历时,根据根节点进行规则A的匹配;根据二级节点,进行规则B的匹配;根据三级节点,进行规则C的匹配。下面,就以图3所提供的分段报文为例,以状态树动态变化的方式加以说明。

如图8A所示,接收到分段报文1,判断该分段报文所在的传输流不存在当前串模式ABC的流状态信息,对所述传输流初始化当前串模式的流状态信息,包括设置根节点,其中记录规则A“abc”的匹配开始位置信息“1”和匹配结束位置信息“53”;还包括设置记录预存字符的指定单元,在本实施例中是在根节点中设置专门的一个字节Pkt,此时Pkt为空,然后设置所述分段报文1为目标分段报文。

参见8B,对目标分段报文进行广度遍历,具体为根据根节点对目标分段报文进行匹配,具体为在报文1中偏移3的位置寻找“abc”,结果未完全匹配;但该分段报文1的最后一个字符为“a”,有可能和下一个报文组合为目标字符串’abc’,故需要拷贝保留该字符到Pkt中,同时记录相对位置信息1;根据所述分段报文1的长度信息,修改所述根节点中匹配开始位置信息和匹配结束位置信息,具体为将匹配开始位置信息修改为“1”,代表从下一报文首字符起进行匹配,匹配结束位置信息修改为“45”,即原来的匹配结束位置信息减去偏移值和已检测的字符个数。分段报文1的串模式匹配结束。

参见图8C,接收分段报文2进行广度遍历,具体为判断所述分段报文2所在的传输流已存在当前串模式的流状态信息,则将保存的Pkt内容“a”和分段报文2内容合二为一,并清空该Pkt字段,将结合后的报文“abcokabcddrtdef”作为目标分段报文;然后对目标分段报文进行匹配,具体为在目标分段报文2中“1”的位置起寻找“abc”,结果完全匹配;在所述状态树中为所述根节点添加一子节点B1,包括记录进行所述串模式中规则B匹配的匹配开始位置信息1+3+4=8和匹配结束位置信息8+10=18;然后在所述目标分段报文中匹配完全成功的位置之后,即从字符4开始,重新对目标分段报文执行该字符串“abc”的匹配,结果完全匹配,因此,又在所述状态树中为所述根节点添加一子节点B2,包括记录进行所述串模式中规则B匹配的匹配开始位置信息6+3+4=13和匹配结束位置信息13+10=23;根据所述分段报文的长度信息,修改所述匹配单元A中匹配开始位置信息和匹配结束位置信息,具体为将匹配开始位置信息修改为“1”,代表从下一报文首字符起进行匹配,匹配结束位置信息修改为“30”,即原来的匹配结束位置信息减去已检测的字符个数15;所述匹配单元A匹配结束,即第一行的广度遍历完成。

参见图8D,由于出现了两个新的匹配单元节点B1和B2,因此需要进行第二行子节点的遍历,遍历的结果为匹配单元节点B1新增了子节点C1,匹配单元节点B2新增了子节点C2,同时B1和B2的匹配开始位置信息和匹配结束位置信息都发生了变化。对于分段报文2遍历完成。

参见图8E,接收分段报文3进行广度遍历,在对根节点的遍历中,添加了新的匹配单元节点B3,并对根节点的匹配开始位置信息和匹配结束位置信息进行调节。

参见图8F,对二级匹配单元节点的遍历中,未产生新的子节点,原匹配单元节点B1、B2的匹配开始位置信息和匹配结束位置信息发生变化,其中,由于B1的匹配结束位置信息超出有效检测范围,可以标识不再对其进行匹配;对三级匹配单元节点的遍历中,C1和C2的匹配开始位置信息和匹配结束位置信息发生变化。

其中,对于超出有效检测范围的处理步骤包括:

判断该匹配单元节点B1是否存在子节点,结果为存在子节点C1,因此不能进行该匹配单元节点B1的删除,而是清除记录内容或者标识不再对其进行匹配;本实施例中显示了标识不再匹配的情况以及清除记录内容(全部归零)的情况。

参见图8G,接收分段报文4进行广度遍历,在对一级匹配单元节点的遍历中,对根节点的匹配开始位置信息和匹配结束位置信息进行调节;在对二级匹配单元节点的遍历中,略过B1,对B2的遍历后,由于B2的匹配结束位置信息超出有效检测范围,也标识不再对其进行匹配或者删除所记录的内容,对B3的遍历新增了子节点C3,由于B3的匹配结束位置信息超出有效检测范围,因此也标识不再对其进行匹配或者删除所记录的内容。

参见8H,在对三级匹配单元节点的遍历中,对于针对分段报文4的C1、C2和C3进行遍历,分别调整其匹配开始位置信息和匹配结束位置信息;由于C1的匹配开始和结束位置信息超出有效检测范围,且其所在的路径上节点都无需进行遍历,因此,删除该路径。其中,进行路径删除的具体操作为:

判断匹配单元节点C1不存在子节点,删除该匹配单元节点C1;

进一步判断该匹配单元节点C1的父节点B1已标识为不再进行匹配或者记录为零,则删除该匹配单元节点B1。

且,由于C2的匹配开始和结束位置信息超出有效检测范围,因此标识不再对其进行匹配或者删除所记录的内容。当然,由于其不具有子节点,因此也可采用删除C2的操作。

参见8I,接收分段报文5进行广度遍历,在对一级匹配单元节点的遍历中,对根节点的匹配开始位置信息和匹配结束位置信息进行调节;由于二级节点都无需进行遍历,因此直接进行三级节点的遍历,具体为对C3的遍历,由于C3匹配了“ghk”,因此串模式匹配成功,释放流信息即删除全部的匹配单元。

上面给出了对于图3所示报文进行处理的分步骤的状态示意图。对于本方法而言,其完整的流程如图9所示。

本发明还提供了第四种兼顾匹配策略的处理分段报文串模式匹配的方法,同样是以状态树的方式对流状态信息进行组织,但是在每一个节点中分别设置字段,用于保存预存字符。当接收到任一分段报文时,判断所述分段报文所在的传输流是否已存在当前串模式的状态树,是则直接对所述分段报文执行串模式匹配的步骤;否则对所述传输流初始化当前串模式的状态树,然后执行串模式匹配的步骤;

对所述分段报文执行串模式匹配的步骤包括按照所述状态树进行广度遍历,对于状态树中任一匹配单元节点,将所述分段报文分别与该节点中预存的字符进行结合处理为目标分段报文,清空所述流状态信息中的预存字符,并执行:

步骤41、对所述目标分段报文进行匹配,如果所述目标分段报文至少一个后缀字符与所述匹配单元节点中字符串对应数目的前缀字符匹配成功则执行步骤44,如果匹配完全不成功则执行步骤45;

步骤42、判断所述匹配单元节点是否为对应当前串模式最后规则的匹配单元,是则当前串模式匹配成功,对当前传输流执行串模式匹配的步骤结束,否则执行步骤43;

步骤43、在所述状态树中为所述匹配单元节点添加一子节点,该子节点中根据串模式的匹配次序,记录下一匹配单元,然后在所述目标分段报文中匹配完全成功的位置之后,重新对所述目标分段报文执行步骤41;

步骤44、在所述匹配单元节点中预存该后缀字符,然后执行步骤45;

步骤45、根据所述分段报文的长度信息,修改所述匹配单元节点中匹配开始位置信息和匹配结束位置信息,所述匹配单元节点遍历结束;

当所述每一匹配单元节点广度遍历结束后,对所述目标分段报文执行串模式匹配的步骤结束。参见图10,为该串模式匹配方法的状态树示意图。

本发明还提供了第五种兼顾匹配策略的处理分段报文串模式匹配的方法,当接收到任一分段报文时,判断所述分段报文所在的传输流是否已存在当前串模式的流状态信息,是则对所述分段报文与所述流状态信息中预存的字符进行结合处理为目标报文,然后对所述目标报文执行串模式匹配的步骤;否则直接设置所述分段报文为目标报文并执行串模式匹配的步骤;

对所述目标报文执行串模式匹配的步骤包括:

步骤51、将第一匹配规则作为当前匹配规则;

步骤52、查询所述目标报文是否与串模式的当前匹配规则匹配,是则执行步骤53;否则执行步骤54;

步骤53、判断所述当前匹配规则是否为当前模式的最后一个规则,是则当前串模式匹配成功,释放流状态信息并结束,否则将下一匹配规则作为当前匹配规则,重新执行步骤52;

步骤54、判断在所述传输流是否传输完毕,是则释放所述流状态信息并结束,否则执行步骤55;

步骤55、在流状态信息中更新保存所述目标报文的字符进行下一分段报文的接收。

参见图11,为第五种兼顾匹配策略的处理分段报文串模式匹配的方法流程示意图。显然,就第五种兼顾匹配策略的处理分段报文串模式匹配的方法而言,如果不匹配前一个规则,就不再进行后续匹配;而是接收下一分段并组合预存字符(即在先的全部分段报文)后,重新从第一匹配规则开始匹配。

可以看出,本发明所提供的五种方法都能够实现基于分段报文的串模式匹配,在摒弃了常规的流重组方法的前提下能够协同BM、BF等兼顾匹配策略的模式匹配方法进行串模式匹配,从而避免了对协议栈的破坏以及减少了系统内存的占用;不仅提高了系统整体性能,不增加各种应用服务的时间延迟,而且由于流重组的避免,从理论上避免了漏报的可能。但上述五种方法彼此之间存在差异,前四种方法较为相似,仅在预存字符的设置或者匹配单元的组织上存在差异,应该说,第一、三种方法仅需要拷贝极少的数据(预存字符),第二、四种方法相对第一、三种而言,需要拷贝的数据(预存字符)稍多一些,但仍远小于目前的分段报文缓存,因此,从系统性能角度考虑,具有极大的改进。但第五种方法较前四种方法而言,技术方案极为简单,但需要拷贝比较多的数据。

本发明还提供了一种兼顾匹配策略的处理分段报文串模式匹配的装置,参见图12,包括:

流状态信息设置模块1,用于针对任一传输流,动态记录该传输流每一串模式的流状态信息,所述流状态信息至少包括相对不同的分段报文动态变化的预存字符和匹配单元;

分段报文处理模块2,用于接收分段报文,并从所述流状态信息设置模块获取预存字符,将所述分段报文与所述预存字符进行结合处理为目标分段报文;

匹配处理模块3,分别与所述流状态信息设置模块1和所述分段报文处理模块2连接,用于根据所述流状态信息设置模块提供的匹配单元,对所述目标分段报文进行匹配;对于完全匹配的情况,指令所述流状态信息设置模块1记录下一匹配单元,对于目标分段报文至少一个后缀字符与所述匹配单元字符串的对应数目的前缀字符匹配成功的情况,指令所述流状态信息设置模块1将所述后缀字符作为预存字符进行记录。

当完全匹配或者传输流老化结束或者超出匹配范围时,匹配处理模块3还用于输出匹配结果。

参见图13,为上述装置的实施例,其中,所述流状态信息设置模块1设有控制单元1A和多个匹配单元1B1~1BN,其中,N为匹配单元的个数,且为动态变化的;所述控制单元1A用于接收匹配处理模块3的指令并发送预存字符给分段报文处理模块2,添加、删除匹配单元,以及动态变更匹配单元中的匹配开始位置信息和匹配结束位置信息;其中,首个匹配单元1B1还用于记录预存字符,或者,任一匹配单元1B1~1BN还用于记录该匹配单元进行匹配时的预存字符。

为了便于组织,上述匹配单元1B1~1BN可以按照状态树的方式连接,一下级匹配单元节点被添加,用于记录与其上级匹配单元节点的成功匹配,其中,初始化的首个匹配单元节点为根节点。

所述匹配处理模块3包括流状态信息获取单元3A、匹配执行单元3B和指令发送单元3C;

所述流状态信息获取单元3A用于获取待匹配的匹配单元、预存字符和分段报文信息,由所述匹配执行单元3B进行匹配;

所述匹配执行单元3B将匹配结果发送给所述指令发送单元3C,由所述指令发送单元3C根据匹配情况和报文变化情况,向所述流状态信息设置模块1发出添加、删除或者变更匹配单元1B1~1BN的指令,以及向分段报文处理模块2发送接收下一分段报文的指令。

综上所述,本发明所提供的方法和装置通过保存流状态替代缓存所有报文,由于该缓存内容是每一个匹配规则中字符串的一部分,因此,缓存报文的预存字段无需很长,其最大的长度规格为串模式规则中最长的字符串即可。显然,本发明所提供的方法和装置在避免了流重组对协议栈的破坏的同时,也避免了内存大量占用带来的系统性能降低,以及避免了缓存对业务质量的影响。

本发明所提供的方法和装置进一步可以采用状态树的方式组织,进行广度遍历,能够动态删除本节点或者所在路径,达到内存的进一步释放。

由于保存的流状态中包括但不限于匹配开始位置信息和匹配结束位置信息,本领域技术人员能够根据实际需要设置,具有很大的扩展性。

最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对本发明的技术方案进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号