CN101258721B - 带状态的分组内容匹配机制 - Google Patents

带状态的分组内容匹配机制 Download PDF

Info

Publication number
CN101258721B
CN101258721B CN200680024231XA CN200680024231A CN101258721B CN 101258721 B CN101258721 B CN 101258721B CN 200680024231X A CN200680024231X A CN 200680024231XA CN 200680024231 A CN200680024231 A CN 200680024231A CN 101258721 B CN101258721 B CN 101258721B
Authority
CN
China
Prior art keywords
grouping
stream
string
search
pattern
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.)
Expired - Fee Related
Application number
CN200680024231XA
Other languages
English (en)
Other versions
CN101258721A (zh
Inventor
S·巴拉克里希纳
V·拉玛克里什纳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN101258721A publication Critical patent/CN101258721A/zh
Application granted granted Critical
Publication of CN101258721B publication Critical patent/CN101258721B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0227Filtering policies
    • H04L63/0245Filtering by information in the payload
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/02Capturing of monitoring data
    • H04L43/026Capturing of monitoring data using flow identification
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0227Filtering policies
    • H04L63/0263Rule management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1408Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
    • H04L63/1416Event detection, e.g. attack signature detection
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
  • Testing, Inspecting, Measuring Of Stereoscopic Televisions And Televisions (AREA)

Abstract

用于使用带状态分组内容匹配机制来跨越分组边界执行内容检测的方法和装置。模式分组数据结构用于帮助串搜索算法机器。传入分组被分类到流,并被存储到相应的流队列中。流表条目用于标识给定数据流的模式数据结构。在内容检测期间,所述算法机器更新状态信息以标识部分或所有匹配。当向着前一个分组的末端检测到部分匹配时,更新流表中的分组状态信息以反映状态,从而下一个分组的内容检测从该状态开始。结果,支持跨越分组边界的内容检测。这些技术还可用在的分组处理上下文内容管线阶段中。

Description

带状态的分组内容匹配机制
发明领域
本发明一般涉及网络设备,尤其涉及但不是排他地涉及跨分组边界执行分组内容检查。
背景信息
企业网络时时受到各种安全问题的威胁。这些威胁可以是内部或外部的。内部威胁包括情绪不满的雇员的试图闯入、由雇员释放出的病毒或蠕虫或者只是雇员进行被企业安全策略视为不可接受的网络访问行为。外部威胁包括对企业网络的专门攻击以试图盗窃知识产权、拒绝服务攻击、未授权的侵入、病毒或蠕虫等。在所有这些情况中,分组防火墙是网络管理员的主要防御形式。
分组防火墙与网络通信串联,截取传入的分组,并且依照一组防火墙规则来验证每个分组以接受、拒绝或可选地将该分组记入日志。除分组过滤之外,网络管理员有时还使用分组过滤器来强制实施信息量管理策略。这些策略在限制或控制攻击行为中是有用的。由于分组防火墙与所有网络通信串联并对其进行检查的这个事实,重要的在于防火墙应当能够提供足够的网络吞吐量来跟上网络通信量需求。在目前的企业网络中,防火墙规则通常限于2500条思科(Cisco)ACL(访问控制列表)规则。这些规则相当明确,并且被设计成允许或拒绝特定活动或主机。由于性能或管理能力的原因,ACL规则限于这些数量。规则的数量直接影响路由器性能,因此这些规则被保持在较低的数量。此外,较大数量的规则还使得规则管理更易于出错并且难以验证或更改。在较大的组织中,规则被分布在各种站点的防火墙上,并且按需进行修改,从而增加了出错的机会。出于这些原因,规则的数量必须保持在可管理的水平。
在典型高级防火墙的实现中,使用了两种级别的过滤。在第一级别,基于适用ACL规则来执行过滤。在此示例中,基于分组报头信息来标识对应于ACL数据库的最高优先级规则。例如,可基于与源和目的地地址、源和目的地端口以及使用众所周知的分类算法的协议的值相对应的五元组输入来标识规则。因为许多攻击(特别是对服务拒绝攻击)将源自使用特定端口的公知源地址,所以与这些攻击相对应的分组可被容易地标识,并且适当的规则(例如,丢弃分组)可用于实施期望防火墙策略。这种第一级别的过滤可使用现代网络设备以线路速率(line-rate)速度实现。在某些实现中,专用组件或单独计算机可用于执行这些过滤操作。
第二级别的过滤与分组检查相关。在此情况中,对实际分组有效负载搜索一个或一组特定串。例如,防火墙应用程序可能需要搜索表示存在于分组中的病毒或因特网蠕虫的某些串。另外,诸如出于负载平衡或记账的目的,其它非安全应用程序可能类似地需要窥视分组有效负载。称为“内容检查”或“(深度)分组检查”的这些操作涉及检查分组有效负载中的候选模式,并基于存在或不存在这些模式而采取动作。
在某些防火墙实现中,分组/内容检查被转移到不支持线路速率速度的单独应用程序或子系统。例如,这些操作可通过单独计算机主机或耦合到网络设备或由网络设备提供的嵌入式通用处理器来执行。因为这些操作并不在线路速率下执行(因而不限于相应的处理等待时间),所以它们可使用较大但较慢、较便宜的存储器(例如,DRAM(动态随机存取存储器)),并且使用常规的串搜索技术。
网络处理器(也称为网络处理器单元(NPU))由于其成本效率、处理速度、灵活性和可升级能力而被日益增长地用在各种网络设备中。在构建下一代网络平台时,期望在无需添加专用防火墙组件的情况下添加稳定的防火墙功能、而不是使用网络处理器技术并以可重复使用、可升级方式向NPU代码添加防火墙功能。
内容/分组检查中的一个关键的难题涉及对横跨多个分组的各种模式进行扫描。在使用专用防火墙资源(例如,在单独组件或系统上运行的内容检查应用程序)的常规方法中,此问题通过简单地对分组流进行缓冲来解决。多个分组的有效负载内容被组装到单个缓冲器(因而消除了分组边界)以形成要被传送的数据流的副本,并且采用适当的模式匹配算法以扫描缓冲器中的数据来寻找匹配。虽然这种技术不要求对常规模式匹配算法进行更改,但是它强加了相当的存储要求。此外,虽然在具有较小数量的流的系统中实现此机制相对简单,但是对于需要同时支持较大数量的流的系统,无法良好地作适应性的缩放。此外,这种技术不适于与网络处理器一起使用,而且当需要支持同时存在的较大数量的流时,无法在线路速率下执行。
附图简述
通过在结合附图时参考以下详细描述,本发明的前述方面和附带优点将得更易于理解以及进行更好地了解,其中类似附图标记指所有各个视图中的类似部分,除非另外指明:
图1是示出了用于经由使用上下文管线的多个计算引擎来处理多个功能的技术的示意图;
图2是示出了用于实现本文所述发明的诸实施例的各方面的软件框架构的示意图;
图3是示出了由一个实施例执行以确定是否要对一个分组执行内容检查的操作和逻辑的流程图;
图4a示出了分组中用于流分类的各个部分;
图4b示出了一组分类规则和相关联的流;
图5示出了使用主散列表和次散列表的散列表查找方案的一个实施例;
图6是示出了在进行预处理操作以生成模式数据结构期间执行的操作和逻辑的流程图;
图7是示出了由网络线路卡使用的数据流和功能块的示意图,该线路卡包括具有用于执行指令线程以执行包括内容检查的分组处理操作的多个计算引擎的NPU;
图8a是示出了在对一个流中的第一个分组进行内容检查期间执行的操作和逻辑的流程图;
图8b是示出了在对一个流中除第一个分组之外的其它分组进行内容检查期间执行的操作和逻辑的流程图;
图9是示出了使用偏移量和深度搜索信息的内容检查操作的流程图;
图10示出了与示例性AC状态机数据结构相对应的跳转(goto)函数、失败函数和输出函数;
图11示出了要存储在存储器中的模式数据结构的一个实施例;
图12示出了AC状态机节点存储器数据结构的一个实施例;
图13示出了AC状态机索引存储器数据结构的一个实施例;
图14示出了要存储在存储器中的DAWG数据结构的一个实施例;
图15示出了后缀树存储器数据结构的一个实施例;
图16示出了SHIFT(移位)表存储器数据结构的一个实施例;
图17示出了HASH(散列)表存储器数据结构的一个实施例;
图18示出了PREFIX(前缀)表存储器数据结构的一个实施例;
图19示出了根节点存储器数据结构的一个实施例;
图20示出了子节点存储器数据结构的一个实施例;以及
图21示出了条件-动作规则存储器数据结构的一个实施例。
详细描述
本文描述了用于跨分组边界执行串搜索的方法和装置的实施例。在以下描述中,阐述了许多具体细节来提供对本发明的实施例的透彻的理解。然而,相关领域技术人员应当认识到,在不具备具体细节的一个或多个、或者使用其它方法、组件、材料等的情况下,可实践本发明。在其它示例中,未示出或未详细描述众所周知的结构、材料或操作以避免淡化本发明的各个方面。
本文中对“一个实施例”或“实施例”的引用表示结合该实施例描述的具体特征、结构或特性被包括在本发明的至少一个实施例中。因而,在整个说明书的各个位置的短语“在一个实施例中”或“在实施例中”的出现并非都指同一实施例。此外,具体特征、结构或特性能以任意方法结合在一个或多个实施例中。
根据本文所述的实施例的各个方面,公开了易于跨分组边界的内容检查同时保持线路速率速度并提供可缩放解决方案的机制。这些机制采用基于状态的内容检查算法,该算法允许内容检查在分组边界停止或重启,同时保持与部分串搜索的结果相关的信息。同时,这些机制可使用最小缓冲来实现,同时支持使用NPU的线路速率速度。为了更好地理解和了解对现代网络处理器实现的机制,首先描述典型的基于管线NPU处理操作。之后,将讨论各个实施例的细节。
诸如英特尔(Intel)
Figure G200680024231X01D00041
网络处理器系列的现代网络处理器使用多个多线程处理元件(例如,微引擎(ME))以有助于线路速率分组处理操作。为了处理一个分组,网络处理器(和/或使用网络处理器的网络设备)需要从指示该分组的目的地、服务类型等的分组报头提取数据、将有效负载数据存储在存储器中、执行分组分类和排队操作、为该分组确定下一中继段、选择经由其转发该分组的适当网络端口等。这些操作通常称为“分组处理”操作。
针对分组的某些操作被明确定义,而且具有对其它功能的最少接口或严格次序实现。示例包括分组状态更新信息-诸如DRAM缓冲器中用于分组的顺序段的分组数据的当前地址、更新链表指针,同时入队/出队以发送、以及对连接流的分组进行控制或作标记。在这些情况中,可在预定的周期阶段预算内执行这些操作。相反,在保持对严格次序的连续分组的操作并同时在许多阶段实现周期预算时,会引发难题。执行这一类功能的代码块称为上下文管(pipe)阶段。
如图1中所示,在上下文管线中,随着时间的前进,在不同的微引擎(ME)上执行不同的功能,并且在功能或ME之间传递分组上下文。在所示配置中,z个ME1000-z用于分组处理操作,并且每个ME运行n个线程。每个ME构成与由该ME执行的相应功能相对应的上下文管阶段。级联两个或多个上下文管阶段构成上下文管线。上下文管线名可由对穿过该管线的是该上下文的观察结果来获得。
在上下文管线中,对ME中的每个线程分配一个分组,并且每个线程对不同的分组执行相同的功能。当分组到达时,以严格次序将它们分配到ME线程。例如,通常在英特尔
Figure G200680024231X01D00051
ME上下文管阶段中分配八个线程。被分配给八个线程的八个分组的每一个必须在所有八个分组的到达速率内完成其第一管阶段。在图1中所示的命名法MEi.j中,i应于第i个ME号,而j对应于在第i个ME上运行的第j个线程。
一种更高级的上下文管线化技术使用交错分阶段管道化(interleavedphased piping)。这种技术在同一线程上以相隔八个分组的距离来交错多个分组。一个示例可以是ME0.1对分组1完成管阶段0的工作,同时在分组9开始管阶段0的工作。类似地,ME0.2在分组2和10上工作。实际上,将同时在一个管阶段中处理16个分组。管阶段0仍必须每8个分组到达速率地前进。进行交错的优点是存储器等待时间被完全的8个分组到达速率掩盖。
根据现在所述的实施例的各个方面,新颖内容检查方案和机制可使用采用了多个多线程处理元件的NPU来实现。这些方案可经由上下文管线化技术来实现,基于该技术,使用在一个或多个计算引擎(例如微引擎)上执行的不同指令线程来对分配给一公共流的各个分组执行内容检查。为了方便这些方案,内容检查状态信息被保持在指令线程和计算引擎可访问的数据结构中。例如,在第一计算引擎上运行的第一线程用于对多个分组的第一个执行串搜索,这些分组共同包含与候选模式匹配、但不完全包含在单个分组内的串(即,串的相应部分包含在相应的分组中)。第一线程保持与串搜索相关的状态信息,并且当遇到第一个分组的末端时,相应的信息标识部分匹配。同时,在同一或不同的计算引擎上执行的第二线程用于对第二个分组执行串搜索,该第二个分组在其开始部分包含候选模式的剩余部分。第二线程使用由第一线程生成的状态信息来在第一线程停止的点处继续搜索。在标识匹配后,可基于相应的预定规则或动作(又称为“动作目标”)来采取适当的动作。整个内容检查过程以与支持线路速率速度的常规NPU分组处理操作并行的方式执行。此外,该机制可容易地缩放以支持较大数量的同步流。
图2示出了用于实现本文所述的分组处理操作的各方面的软件架构200的各个组件、数据结构和进程块的高层视图。组件包括深度分组检查器(DPI)模块202、流管理器模块204、规则引擎模块206、日志记录器模块208和目标处理程序模块210。数据结构包括流表212和规则表214。进程块包括输入验证块216、流确认块218、规则匹配块220、日志异常块222、异常生成块224、策略性能块226和响应生成块228。
如以下更详细所述,深度分组检查模块202用来基于适用搜索模式执行各种串搜索操作。流管理器204提供用以访问和管理流表212的API(应用程序接口)。规则引擎206提供对规则表214的API,从而实现一级转换。例如,用户指定的规则在到达可由快速路径(例如,计算引擎)处理代码可用的形式之前将经历多级转换。与体现为单个模块(这里为了简便目的所示出的)不同,DPI模块202应当被视为可经由在NPU计算引擎上运行的相应线程来实现的各种协议专用功能的集合。
日志记录器模块208管理日志记录功能。此模块可直接处理日志记录,或者使用来自不同处理器(例如,NPU中的通用处理器或单独计算机主机中的处理器)中的另一个组件的服务来执行日志记录功能。通常,防火墙中日志记录功能的范围可从单个基于文本的日志记录到将数据转储到用于大量报告生成的关系数据库。此模块的复杂性将取决于所提供的功能而变化。
当分组进入系统时,首先通过输入验证块216对协议一致性、校验和等进行验证。一旦执行此明确的检查,则流确认块218验证该分组是属于已知的(例如,现有的)流还是需要新的流。如果分组不属于任何已知的流,则新的条目被添加到流表212,并且分组的元数据(例如报头数据)被传递到规则匹配块220。此块将通过一组匹配结构进行迭代,从而为每个匹配评估条件。当它们匹配时,将目标动作编码到分组元数据中。因而,分组可具有与其相关联的多个目标动作。例如,可能需要将分组记入日志并将其转发。一旦分组对照规则相匹配,则它被传递到目标处理程序块210作进一步处理。此块执行与分组元数据相关联的动作。
如果传入分组属于已知的流,则其不再对照存取规则来匹配。相反,将其直接传递到目标处理程序模块210,该模块为适用动作(多个)执行任何所需处理。需要对流的分组执行的动作被存储起来或者另外由针对该流而存在的相应流表条目来指向。
参照图3的流程图,在每个输入分组的处理期间执行以下操作。流程从框300开始,在其中执行流的分类。通常,流的分类可通过共同用于此目的的若干方案之一来执行。通常,将基于ACL规则数据库来对流进行分类;然而,也可使用其它分类机制。流分类的目的是将分组分配到相应流。
通常,用于对消息(例如,分组)进行分类的规则称为过滤器(或者防火墙术语中的规则),并且分组或流的分类问题是为网络元件处的每个传入消息确定最低成本匹配过滤器或规则。相关信息可包含在每个消息(分组)的K个不同的字段中。例如,IPv4分组的相关字段可包括目的地址(32位)、源地址(32位)、协议字段(8位)、目的端口(16位)、源端口(16位)以及可选的TCP标志(8位)。因为标记的数量受到限制,所以在某些实现中,协议和标记可被结合在一个字段中。
图4a示出了所用示例性分组结构,它示出了5元组流分类方案。通常,这种方案可对任意K元组分类扩展。每个分组将在其报头中包括各个字段,并且数量和特定字段取决于其传输机制(例如,TCP/IP分组将具有与UDP分组不同的字段)。通常也称为分组数据或有效负载的分组有效负载数据跟随在分组报头数据之后。可选的分组脚注(footer)可包括在该分组的末端。
在图4a所示的示例中,选择如由FLD 1-5表示的五个字段来执行分类。每个分组字段包含相应的字段值(V1-VN)。FLD 1-5表示诸如源和目的地址、源和目的端口、协议信息、检错信息等的报头信息。有效负载字段400定义了分组包含有效负载数据的分组的部分。在一些情况中,如由FLDN所示的脚注中的信息也可用于流分类。
在大多数分类方案中,仅报头信息用于执行分类。然而,取决于特定ACL规则,可能需要包括包含在分组有效负载和/或脚注中的附加信息。为了简便起见,以下讨论仅基于报头信息的分组分类。
当接收到分组时,对其进行解析以基于分类方案来从其报头提取所选字段值。对于所示示例,这些可能是来自FLD 1-5的值V1-V5。然后,所提取的字段值用于搜索规则数据库以确定该分组匹配的一组分类规则,并由此确定相关联结果流组。
如图4b中所示,过滤器(ACL)数据库由一组有限的过滤器filt1、filt2…filtn构成,并且每个过滤器与相应的分类规则及流相关联。每个过滤器是K个值的组合,每个适用于分类方案的字段(或部分字段)一个值。允许过滤器中的每个字段进行三种类型的匹配:精确匹配、前缀匹配或范围匹配。在精确匹配中,分组的报头字段应当精确地与过滤器字段匹配。在前缀匹配中,过滤器字段应当是报头字段的前缀。在范围匹配中,报头值应当类似地在由过滤器指定的范围内。每个过滤器filti具有相关联的指令(即,动作),该指令指定了如何处理分组与过滤器的匹配。
通常,分类规则匹配可使用许多已知的技术之一来执行。例如,在一个实施例中,使用聚合位向量方案,其中每个字段值与标识ACL表中的匹配规则的相应位向量相关联。(实际上,位向量使用聚合或分层方案来存储以减小每个位向量的存储大小,因为许多(如果不是大多数)位将是指示不匹配的0值。)然后,位向量与标识匹配规则的结果进行逻辑与。然后,可容易地标识最高优先权的匹配规则。还可使用诸如但不限于的递归流分类(RFC)(潘卡吉·古普塔和尼克·麦吉伍恩的Packet Classification on Multiple Fields(基于多个字段的分组分类),ACM SIGCOMM 1999)的其它方案。
再次参看图3,一旦分组已被分类到流,则在判定框302中作出相应的流数据结构(即,流表条目)是否存在于流表212中的判定。如果流表条目已存在,则该判定逻辑前进到框304,其中对流数据结构和相应状态进行检索。如果流表条目尚未存在,则将新的流结构分配到流表中,并且初始化其状态,如框306中所示。将在以下描述流数据结构和状态信息的其它细节。
在一个实施例中,流表条目被保持在使用双重散列方案的散列表中。如图5中所示,散列表被组织成两个表-保持在SRAM(同步随机存取存储器)中的主表和保持在DRAM(动态随机存取存储器)中的次表。主表被划分成一组槽(slot),而每个槽条目与次表中的流条目相对应。主表通过两个索引来进行索引:第一个值标识槽字(slot word)(一个槽为8位值-7位为特征(signature)以及1位为标记),而第二个值(特征)被存储在槽中并用于标识该槽。次表中的流条目通过槽字索引以及具有匹配特征值的槽号来进行索引。流表被保持成两组散列表;如果在第一个表中对流条目的搜索失败,则在第二个表中执行对该条目的搜索。
取决于相关联的流,可能需要或不需要内容检查。例如,从“可信任”的源地址发送的或者被发送到特定目的端口的分组可被规则数据库视为可靠的,并且被分配到具有相关联“转发”策略(即,动作)的相应可信任的流。相反,针对非可信任源地址发送的分组可被分配到具有相关联的“丢弃”策略的非可信任流。在其它情况中,流可具有要求执行内容检测的相关联的“检查内容”策略。如判定框308所示的,如果要求内容检查,则在框312中使用所检索的状态信息来启动内容检查操作。对于不要求内容检查的分组,执行分组处理的继续部分,如继续框310所示。
总而言之,搜索机制的实现涉及两个阶段:构建或预处理阶段和运行时阶段。在构建阶段期间,构建各种数据结构和表,并将它们保存以在稍后的相关联初始化操作期间存储在存储器中。在通常进行的运行时阶段,使用这些数据结构和表对接收到的分组执行搜索。
在图6中示出了构建阶段的一个实施例的细节。进程从框600中开始,其中定义了搜索准则。这可以非常通用的方式表述为在另一个串(在此示例中为分组数据)内搜索一个模式(串)出现的问题。此问题与典型的串匹配问题相同,这以正规术语表述为:
给定′n′个字符的文本串T和′m′个字符的模式串P,在T中查找所有P出现的位置。(Given a text string T of ′n′characters and a pattern string P of ′m′characters,find the positions of all occurrences of P in T.)
在防火墙使用的上下文中,以上问题可被映射到在分组数据中查找病毒或蠕虫特征、协议命令或已知可执行文件的名称的存在的问题。通常,仅在T中搜索P的存在是足够的,而非查找所有存在(如果从理论上说,查找第一次出现通常与查找多次出现一样“难”,这事实上未缓解问题)。在大多数现实的防火墙和IDS应用中,要搜索的特征串可能并非预先已知的;能做的最好是在特定流的上下文中将字段限制在要搜索的一组模式。因此,更通用的问题是在给定的文本T中搜索一组模式{P}的任一个或所有的出现。
有时,要进行匹配的精确串或串并非预先已知的。特征还可以变体形式出现,其中变形通常是对原始模式的小变化。在此情况中,还需要处理串的近似匹配。有时还可能需要匹配正规表达式而非已知串。目前,所有这些的技术被用在数据挖掘和搜索应用中。通常,这些算法比简单串搜索略为复杂,并且具有较高的存储器和计算周期要求。
在前述策略(条件)的上下文中,不同模式集{P}可应用到不同策略。例如,某些流可仅需要搜索特定模式集,而其它流可包括对更宽泛或完全不同的模式集的搜索。因此,对于每个策略,指定适当的模式集。通常,并取决于所使用的搜索算法,模式集可包括精确匹配和/或近似匹配(例如,使用通配符来匹配)。
接着,在框602,基于所选择的要使用搜索算法来构建数据结构和相关表(统称为模式数据结构(DS))。将在以下进一步描述此方面。
如由判断框604所示的,偏移量和深度信息还可与搜索准则相关。时常,关于特定模式的信息知道得比包含该模式的字节的串的信息更多。这些信息可帮助缩小分组(或者相关联的位流)中可能出现该模式的范围。如本文所用的,此信息包括偏移量(Offset)和深度(Depth)。偏移量值表示在开始搜索之前,可从分组(或位流)的开始部分跳过的字节数。深度值表示分组需要被搜索的分组(或位流)内以可能查找到该模式的最大字节数。偏移量和深度值也可称为“标记(Tag)”值。
尽管当涉及单个模式时,这些信息是非常有用的,但是将其扩展到其中每个模式可具有不同的偏移量和深度的多模式情况是有些困难的。使用此信息的原始方法仅仅是用于检查这些标记值,何处能到达适用状态机中的接受状态,但是这可能是不充分且错误的;如果当到达接受状态时,偏移量或深度不匹配,则由于在不同路径(在机器中)上进行而可能已潜在地错过其它(有效的)模式。因此,需要在算法的每个步骤结合偏移量和深度检查,从而作出正确的状态转移。一种方法是通过将适当的标记值信息结合(或添加)到适用的模式数据结构中来实现,如框606中所示并将在以下进一步详细描述的那样。在模式数据结构被完全构建之后,在框608将它们保存到文件等。在随后初始化操作期间,模式数据结构将被加载到存储器和/或代码存储中,并且相应的模式数据查找数据将被加载到存储器中,如由相应框610和612所示的。
为了示出如何以及哪里可存储此数据,将注意力放在图7所示的执行环境。执行环境涉及网络线路卡700,该线路卡包括经由SRAM接口(I/F)705耦合到SRAM存储(SRAM)704、以及经由DRAM接口707耦合到DRAM存储(DRAM)706的NPU702。还对NPU 702画出所选择的模块,包括深度分组检查模块202、流管理器模块204、队列管理器模块708、接收引擎710和缓冲器管理器712。在上述方式中,与这些模块的每一个相关联的操作可通过在ME714上执行的相应指令线程而变得更佳方便。在一个实施例中,指令线程最初被存储在包括诸如闪存或大容量设备等的非易失性存储设备的指令存储715中。
如图7中所示,各种数据结构和表被存储在SRAM 704中。这些包括流表212、策略数据结构表716和模式数据结构表718。而且,分组元数据720通常也被存储在SRAM中。如以上参照图5所述的,流表的相应部分在SRAM 704与DRAM 706之间被拆分;为了简便起见,流表212的所有数据被示为在图7中的SRAM中。
通常,被频繁访问以进行分组处理的信息(例如,元数据720)将被存储在SRAM中,而大量分组数据(或者整个分组或分组有效负载)将被存储在DRAM中,并且后者具有较高的访问等待时间但是成本预算显著较少。因此,在典型的实现方案中,DRAM中可用的存储器空间远大于SRAM存储所提供的。
如图7的左下角所示,每个ME 714包括本地存储器722、本地寄存器724、分别的SRAM和DRAM读和写缓冲器726(为了方便起见,示为单个块)、代码存储728和计算核心(例如,算术逻辑单元(ALU))730。通常,信息可分别经由SRAM和DRAM写和读缓冲器传递到ME或从其上传出。另外,在一个实施例中,提供下一邻接缓冲器(未示出)以使数据能够有效地在被配置成链或集群的ME之间传递。
如以下所述,每个模式数据结构将提供用于实现相应状态机或基于表的机器的信息。各种模式数据结构通常被存储在模式数据结构表718中,如图7中所示。然而,可存在这样的范例,所选择的模数数据结构被存储在所选择的、被配置成存储指令代码和数据的代码存储中。
如以上针对图6所述,除存储模式数据结构之外,相关联的模式数据结构查找数据也类似地被存储在块612中。在图7中所示的实施例中,查找数据作为与策略数据结构表716中的相应策略相关联的指针来存储。还可使用其它方案。部分地使用模式数据结构查找数据来用以下所述方式构建流表条目。
图8a和8b中示出了运行时内容检查阶段期间所执行的操作的概况,其中图8a示出了在处理流中的第一个分组期间执行的操作,而图8b示出了在处理流中的任何后续分组(由ith(第i个)分组来表示)期间执行的操作。如图8a和8b的框800中所示,响应于接收到输入分组,经由在一个或多个ME 714上执行的一个或多个线程来执行初始分组处理操作。为了将这些线程与用于内容检查的其它线程区分开来,在图8a和8b中这些线程被标示为预搜索线程。
更详细地,并参照图7,当在线路卡700接收到输入分组732时,通过接收引擎710来对它们进行处理,该引擎结合正进行的上下文管线分组处理操作将它们暂时存储在接收(Rx)缓冲器734。提取分组报头,并且相对应的分组元数据720被存储在SRAM 704中。这些分组还以上面讨论的方式来分类,并将其分配该现有或新的流。每个流具有存储在DRAM 706中的相关联队列,如由流队列736所示的。这些队列通常由队列管理器708和/或流管理器204来管理。在创建流队列之后,相关联的信息被添加到元数据720,从而可容易地为诸如出队的随后操作标识队列中的第一个(头)和最后一个(尾)分组。
基于流策略和其它准则以及较少的可预测的网络操作,以异步方式从各个网络节点接收分组流。结果,可以混合方式接收来自不同流的连续方式的分组,如图7中所示。例如,使用F#-#来对输入分组732的每一个加标号,其中F#标识流,而-#标识给定流的顺序的分组。如应当理解的,分组不包含具体标识对它们进行指定的流,但是在流分类期间确定这些信息。然而,在诸如TCP报头(例如,TCP分组序列#)那样适用的分组报头中提供分组序列数据。在图7中,流队列736包含流(Flow)#1中的最初五个分组。如前所述,在框800中所执行的队列操作期间,在对它们进行分类之后,将分组添加到相关联的流队列。
在框800的操作之后,将执行类似于图3中所示的操作,从而导致需要内容搜索。如上所述,如果分组被分配到新的流,则将在框306中创建相应的流表条目。在图7中所示的实施例中,每个流表条目包括流ID、缓冲器指针、策略指针、模式数据结构指针、状态信息和统计信息。(流表条目还可包括未示出的其它信息)。流ID用于流表条目查找,并且在一个实施例中包括根据图5中所示流表索引方案的散列索引。在一个实施例中,缓冲器指针指向适用的元数据720,该元数据又包括指向与流表条目相关联的流队列中的头分组和尾分组的指针。策略指针指向策略数据结构表716中的策略数据结构。如上所讨论,每个流与一策略相关联。在流分类期间,对策略进行标识,并且向流管理器204提供相应的策略指针。
如上所讨论的,要求内容检查的每个策略还与模式数据结构相关联。因而,在一个实施例中,可从策略数据结构中提取模式数据结构指针。
状态信息用于存储由深度分组检查模块202使用的相应算法状态的状态,并且在以下进一步详细描述。统计信息用于各种目的,包括标识对其完成内容检查的流中的最后分组的当前序列号。以这样的方式,可基于下一个分组相对于相关联流队列中的头分组的相对位置,标识针对给定流将被检查的下一个分组。
如图8a的框802A中所示,如果分组是流中的第一个分组,则将在ME 714上启动第一线程来鉴于适用模式集{P}对分组执行模式搜索以标识任何匹配。因此,由该线程读取与针对此分组的新的流表条目相对应的数据,该数据包括指示状态机处于初始状态的状态信息。在框804,使用缓冲器指针和元数据来标识分组在相关联流队列中的位置,并且将该分组复制到ME的本地存储器722中。在框806B中,从模式数据结构表718检索适用模式数据结构(如由模式数据结构指针标识的),并将其复制到本地存储器722中。将相应搜索算法的现有状态738初始化到初始状态,该状态表示当前不存在部分匹配。
模式搜索操作在分组的起始处(例如,分组有效负载的起始处)开始,并且以迭代方式执行直至到达分组的结束处。如由起始和结束循环框806和816所示,取决于具体搜索算法,适用算法机器使用可包括一个或多个字符的搜索增量。响应于每个增量,可以的话,更新机器的现有状态738。在框812中,作出全匹配是否已由机器进行标识的判定。如果是,则执行搜索条件的相关联动作,如由继续框814所示,并且线程结束。
通常,由在同一或不同ME上的同一或另一(更可能)线程执行相关联动作。可选地可通过NPU的通用处理器(为了清晰起见,图中未示出)来执行相关联动作。在匹配串标识恶意蠕虫等存在的情况下,相关联动作通常丢弃流中的所有剩余分组,以及可能地针对源地址更新ACL数据库动作。丢弃剩余分组可通过更新在相关联的流表条目中的策略指针来完成,从而对该流的策略有效地从“内容检查”切换到“丢弃”。
一旦模式搜索算法到达分组的结束处(没有匹配),则在框818中更新相关联的流表条目中的状态和统计学信息。这时,结束执行第一线程。
参看图8b,在接收到被分类到同一流的后继分组之后,如图8a和8b中类似附图标记的框所示的,执行类似的操作。在框802B中,在同一或另一ME 174上执行第i个线程,其中i表示分组序号(根据报头中的真实序号进行校正)。在处理了第一个分组之后,被读取的流表条目将是包括由前一个分组更新的现有状态的现有条目。如前所述,包括统计信息的流表条目信息用于分组定位在流队列中的分组,由此在框804中,分组被复制到ME的本地存储器722。
在框806B,适用模式数据结构通过ME以类似于图8a的框806A的方式来检索。然而,作为处理前一个分组(例如,第一个分组)的结果,机器的状态将被初始化到由前一个分组更新的现有状态。如果在前一个分组结束时存在部分匹配,则机器中的现有状态多少不同于初始状态(例如,0)。如果没有部分匹配,则现有状态将是初始状态。
以类似于应用到第一个的方式执行框808、810、812、814和816的模式搜索操作,不同之处仅在于机器的初始状态。因此,如果在前一个分组结束时存在部分匹配,则在状态机停止时,模式搜索开始寻找第二部分(剩余匹配部分)-模式集{P}中的一个或多个串(取决于现有状态)。如前所述,如果标识全匹配,则在继续框814中,执行相关联动作。
如上所讨论,搜索准则可指定相应模式串的偏移量和深度值。在此情况中,模式搜索处理被增强以考虑此附加搜索信息。如图9中所述,从分组的起始处开始,并且已执行了图8a和8b(适当地)的先前操作。在框900中,跳过分组的一部分以到达偏移量,在此处开始搜索。在以下将进一步讨论的细节中,可基于单个模式搜索来实现此操作,从而当使用多模式搜索时,某些模式偏移到不同于其它模式的点。如果分组是流中的第一个分组,则从该分组的开始处跳过与偏移量相对应的字节数。
理论上,一个或多个搜索模式的偏移量大于该第一个分组的整个长度是可能的。因此,在此情况中,针对这些搜索模式,跳过整个分组,并且从偏移量值减去第一个分组的长度,从而针对下一个分组将跳过的偏移量的部分,将考虑已跳过多少位流。例如,考虑其中对特定搜索模式的偏移量大于给定协议的分组有效负载的最大大小的情况。对于这种特定搜索模式,将跳过整个第一个分组,并且将在第二个分组中的一个偏移量处开始搜索,该偏移量等于原始偏移量与第一个分组大小之间的差值。在一个实施例中,多分组偏移量方案可通过更新在相关联的流表条目中的适当统计信息而易于进行,如以下参照框920所讨论的。
如由开始和结束循环框902和914所示的,模式搜索涉及对分组有效负载数据的迭代,并且数据中的位置向前进由搜索算法使用的适用搜索增量。对模式集{P}中每个搜索模式的起始点将是对该搜索模式的有效偏移量。响应于移动每个搜索增量,在框904中更新机器状态。如由判断框906所示的,如果机器指示搜索串匹配,则在继续框908中执行相关联的动作。如果不存在匹配,则逻辑前进到判断框910以确定是否已到达适用搜索串的深度。如果到达,则对该串的搜索完成,如结束框912所示的。如果未到达,则进程返回开始循环框902以开始下一迭代。
在到达分组的结束处之后,取决于实现,可引发两个动作,如判断框916所示。对于仅搜索流中的第一个分组的实施例中,针对流的搜索进程完成,并且未发现匹配。结果,在框918中更新流表条目中的策略指针以指向不执行内容搜索的策略,从而不对流中的剩余的分组执行搜索。如果支持多分组搜索(关于偏移量方面),则在流表条目中更新统计信息以考虑在要用于下一个分组的偏移量中分组已跳过分组的大小,如框920中所示。
在一个实施例中,用于给定搜索模式的有效深度可被调节成支持多分组搜索。例如,考虑其中偏移量小于第一个分组的大小而深度大于该第一个分组的大小的情形。这种情形可通过将要应用到第二个分组的深度值减少第一个分组的大小来处理。还可在框920中执行此操作。还要注意:在此情况中,也在流表条目中更新状态信息以在第一个分组的结束处以上面讨论的方式反映状态机的状态。
在一个实施例中,经由包含在适用模式数据结构中的数据来提供用于实现偏移量和深度操作的机制。因此,在图9中包括框922来示出模式数据结构被调节成在多分组实现中考虑偏移量和/或深度。此操作通过使用在框920中更新的统计信息的另一线程(被启动来处理流中的下一个分组)来执行。
多模式搜索算法
对多个模式的存在进行搜索的最简单的方法是通过对每个模式迭代应用若干公知单模式算法的任一个。从20世纪70年代后期已提出了若干多模式算法。FSM(有限状态机)算法在传统上是研究的焦点,但是如吴和曼伯提出了不使用FSM的其它有效算法。
FSM算法是基于以下考虑。给定有限字母和模式,有可能以可处理文本串的有效方式构建有限状态自动机以返回该模式的出现。机器中的每个状态(由数字表示)对应于目前为止已匹配的模式的最长前缀。这具有需要精确地一次扫描文本中的每个字符的特性。预处理主要涉及计算机器的转移函数。算法的运行涉及将搜索文本馈送到FSM作为输入。只要到达接受状态,就检测到P的出现。
通常,可对由本文所述的实施例所使用的模式搜索实现任何类型的FSM算法。为了更好地理解FSM算法如何操作,现在将讨论众所周知的Aho-Corasick(AC)算法(A.V.阿霍,M.考拉思克,“Efficient string matching:an aid to bibliographic search(有效串匹配:对文献搜索的帮助)”,ACM通信,第18卷(1975)333-340)的简要描述。以下描述摘录自前述文献。
假设K={y1,y2…,yk}为称为关键字的有限串集,并假设x为称为文本串的任意串。我们的问题是定位和标识为K中的关键字的所有x的子串。子串可彼此交叠。针对K的模式匹配机是将文本串x作为输入并产生K的关键字作为子串出现的x中的位置作为输出的程序。模式匹配机由一组状态构成。每个状态由数字来表示。机器通过顺序读取x中的符号、进行状态转移和偶尔发出输出来处理文本串x。模式匹配机的这些行为由三个函数来支配:跳转函数g、失败函数f和输出函数output。
图10示出了对于关键字集{he,she,his,hers}由模式匹配机使用的函数,其中状态为0,1....,9。跳转函数g将由状态和输入符号构成的对映射到状态或消息fail(失败)。有向图表示跳转函数。例如,标号为h的从0到1的边(edge)表示g(0,h)=1。缺少箭头表示fail。因而,对于不是e或i的所有输入符号σ,g(1,σ)=fail。所有模式匹配机具有对于所有输入符号σ而言g(1,σ)≠fail的属性。跳转函数在状态0的这种属性确保在每个机器周期由机器处理一个输入符号。失败函数f将状态映射到状态。只要跳转函数报告失败,失败函数就进行查阅。某些状态被指定为表示已找到关键字集的输出状态。输出函数通过使关键字集(可能为空)与每个状态关联来公式化这种概念。
模式匹配机的操作周期定义如下。假设s是机器的当前状态且a是输入串x的当前符号。
1.如果g(s,a)=s′,则机器作出跳转转移(goto transition)。它进入状态s′并且x的下一个符号变成当前输入符号。另外,如果output(s′)≠empty(空),则机器发出集合output(s′)连同当前输入符号的位置。现在操作周期完成。
2.如果g(s,a)=fail,则机器查阅失败函数f并被说成作出失败转移(failuretransition)。如果f(s)=s″,则以s′作为当前状态而a作为当前输入符号机器重复该周期。
最初,机器的当前状态是起始状态而文本串的第一个符号是当前输入符号。然后,通过对文本串的每个符号进行一个操作周期来处理文本串。
DAWG匹配实现
在一个实施例中,使用称为DAWG匹配算法的基于FSM算法(M.科罗凯默、A.库玛、L.盖恩尼克、T.莱可罗、W.普兰多士基和W.里特的“快速实现多模式匹配”,inf.Process.Lett.,71((3-4)):107-119,1999)。此算法结合阿霍-考拉思克和波耶-莫尔的思想以获得更好的平均运行时间。它需要计算AC状态以及对给定模式集的反相模式的DAWG(有向无环字图)。虽然计算AC状态机的转移函数,但是还计算移位表,该移位表在保证跳跃区中的不出现模式的特定状态存储最大移位(该状态对应于至今为止与所扫描的文本的后缀匹配的模式的最长前缀);此函数对应于波特里可-吉恩卡罗(Apostolico-Giancarlo)跳跃(skip)函数。在算法的步骤中,DAWG用于从右到左扫的第一次扫描直至失配,在此之后AC机用于从左到右扫描来识别前缀,并且对移位值作出决定。如果使用DAWG匹配的字符集与在前一阶段中由AC匹配的前缀重叠,则报告匹配。
以下呈现DAWG匹配算法的模式数据结构的一个实施例,并且在图11中示出相应的存储器数据结构。
struct Pattern{
char*string;          /*指向字节串的指针*/
int length;           /*串中的字节数*/
int offset;           /*在文本的第一偏移量字节内不出现串
                       MUST NOT*/
int depth;            /*在文本的第一深度字节内出现串
                       MUST*/
char fcase;           /*标记(0=大小写无关;1=大小写相关)
                       */
struct Pattern*prev;  /*指向前一模式的指针(对于条件搜索;
仅当已找到prev时才搜索串*/
struct Pattern*next;   /*指向下一个模式的指针(为了条件满足
                (或者更改RegEx)next必须跟随在文本中的串之后*/
int prev_pat_num;       /*预排序表中的prev的模式号(Patter
                         number)*/
int next_pat_num;       /*预排序表中的next的模式号*/
int distance;         /*与offset同义;文本的起始位置是prev
                       结束之后的第一个字节(如果找到)*/
int within;           /*与depth同义;文本的起始位置是prev
                       结束之后的第一个字节(如果找到)*/
int exact;            /*串在文本中的精确起始位置*/
int relative;         /*与exact同义;文本的起始位置是prev结
                       束之后的第一个字节(如果找到)*/
};
如果未定义,则Prev和Next值将是NULL。除非明确定义,offset和distance的默认值将是0。除非明确定义,depth、within、exact和relative的默认值是-1。对于预处理,使用指针值prev和next。对于微代码中的算法实现,当模式索引值被更普遍地使用时,采用prev_pat_num和next_pat_num(因为模式结构是恒定大小,实际模式地址可从这些值来计算)。
在图11的存储器映射数据结构中,地址被对齐到字(4个字节)边界。实际模式串是在数据结构的第一字段中指示的字节地址开始的字节序列。实际上,在最后模式数据结构结束之后,模式串被连续并立即存储。这使得能够在预处理期间预分配存储器、计算相对地址,并且仅需要保持一个指针(第一模式结构的地址)。
AC机器使用确定性有限状态自动机(Q、δ、f、s0,T),其中Q是状态集,δ是转移函数,f是失败函数,s0是开始状态,而T是接受状态集。对给定输入,转移函数确定从一给定输入上的特定状态转移到哪个状态。针对未被转移函数定义的(状态,输入)对,失败函数指示异常转移。
AC机器被构造成节点的特里结构(trie),并且可仅通过指向开始状态的指针来指定。在一个实施例中,使用以下的数据结构,同时在图12中示出了相应的存储器数据结构。
struct transition{
char input;                /*触发状态转移的字节值*/
struct AC_node*destination;/*指向destination(目的)AC机器状态
                            (节点)的指针*/
};
struct AC_node{
int node_id;              /*作为状态id的唯一整数*/
int shift;                /*最大安全shift(移位)值(对于DAWG
匹配):shift是可跳过的最小距离,并且保证在所跳过的区域内不出现模式*/
int offset;               /*由此状态指示的前缀必须在文本的第一
                           offset字节处或之后结束*/
int depth;                /*由此状态指示的前缀必须在文本的
                           depth字节内结束*/
struct AC_node*fail;      /*指向失败状态的指针*/
int num_transitions;      /*从此状态开始的转移的数量*/
struct transition*next;   /*从此状态开始的转移列表,按输入字
                           节的ASCII值排序*/
char faccepting;          /*标记(1=接受;0=不接受)*/
int num_outputs;          /*识别到的模式的数量,如果状态是接
                           受的*/
struct Pattern**output;   /*识别到的模式,如果状态是接受的*/
int*pattern_numbers;      /*识别到的模式的列表,作为模式的预
                           排序列表中的索引值*/
};
offset、faceepting、num_transitions和num_outputs的默认值为0,除非明确定义或被计算。depth的默认值为-1,除非明确定义或被计算。仅在预处理(机器的计算)期间对destination、fail和output使用指针。微代码的实现使用状态的pattern_numbers和node_id(从这些来计算实际存储器地址)。
在一个实施例中,使用AC机器索引结构,如图13中所示。尽管索引和AC机器节点的每一个被设计成可在存储器中独立再定位,以按状态ID排序的连续方式来存储这些状态信息、以及将这些结构信息紧跟在索引之后存储是有益的。这允许在预处理期间计算不同的地址(相对)、将要保持的指针的数目减少到1(索引结构的基地址)、以及使得能够预分配存储器。
有向无环字图或后缀自动机识别在给定集中的模式的所有后缀(DAWG匹配算法采取反相模式作为输入)。DAWG不具有失败函数,并且状态无需具有与它们相关联的输出模式。以下给出DAWG数据结构的一个实施例,而在图14中示出了相应的存储器数据结构:
struct suf_transition{
char input;                     /*触发状态转移的字节值*/
char flag;                      /*Flag(0=主边(edge);1=次边)*/
struct DAWG_node*destination;   /*指向目的DAWG状态(节点)的指针
                                    */
};
struct DAWG_node{
int node_id;                    /*作为状态id的唯一整数*/
int num_transitions;            /*从此状态开始的转移的数量*/
struct suf_transition*next;     /*从此状态开始的转移列表,按输入字节
                                    的ASCII值排序*/
struct DAWG_node*suffix_pointer; /*指向用于计算DAWG的虚拟树中的
                                   父节点的指针*/
};
flag和num_transitions的默认值为0,除非明确定义或被计算。flag仅用于构造DAWG,并且在实际串匹配中不发挥作用。仅在预处理(机器的计算)期间对destination使用指针。微代码的实现使用状态的node_id(从这些来计算实际存储器地址)。DAWG机器索引结构与AC机器索引结构相同。以类似于上述针对AC机器所讨论的方式来连续存储DAWG索引和结构。
类似于DAWG的后缀树识别在给定集中的模式的所有后缀(AC后缀树算法采用反相模式作为输入)。此结构实质上是未拆分成树的DAWG,从而具有从源到任何其它状态的唯一路径。在以下提供后缀树数据结构的一个实施例的细节,同时在图15中示出了相应存储器数据结构:
struct tree_transition{
char input;                       /*触发状态转移的字节值*/
struct suffix_node*destination;   /*指向destination后缀树(suffix tree)
                                   状态(节点)的指针*/
};
struct suffix_node {
int node_id;                     /*作为状态id的唯一整数*/
int num_transitions;             /*从此状态开始的转移的数量*/
struct tree_transition*next;     /*从此状态开始的转移列表,按输入字
                                  节的ASCII值排序*/
struct AC_node*ACnode;           /*其中扫描将结束的AC机器状态,从
由此后缀树状态识别为输入的模式的源和反相开始*/
};
num_transitions的默认值为0,除非明确定义或被计算。ACnode是不同于DAWG和后缀树的。在后者中,每个状态经由从开始状态开始的唯一字节路径(模式的子串)到达。因此,每个状态具有表示该遍历过的串的唯一AC机器节点。例如,假设后缀树中的状态s可从开始状态经由串c1c2c3...cn到达。假定此串被提供作为AC机器的输入。如果AC机器扫描停止在状态d,则s->ACnode的值将被设置成d。仅在预处理(机器的计算)期间对destination和ACnode使用指针。微代码的实现使用状态的node_id(从这些来计算实际存储器地址)。后缀树机器使用与AC机器索引结构相同的索引结构,同时以类似于上述针对AC机器所讨论的方式来连续存储后缀树索引和结构。
在用于构建模式数据结构的预处理操作期间,对大小写无关的模式扫描模式列表。为了保持状态机的确定性以及能够识别这些模式,无论它们出现在(在分组有效负载内)何种大小写组合中,在一个实施例中产生该特定模式可发生的字节串的所有组合。所有这些新的组合被添加到模式列表,但是prev指针用于指向初始模式,从而在存储这些呈指数增加的数目的新模式时不浪费存储器空间。
实际上,可使用人工或编程选择操作来生成和/或移除大小写无关模式。例如,虽然使用全部小写以及大写和仅首字母大写的形式存储基本相同的字符串的组合可能是合理的,但是生成包括随机大写的字符串的形式通常是十分不利的。
如由阿霍和考拉斯克提出且参照以上说明前述实现方案提供了对基本AC机器构造算法的若干添加的功能,包括:
Shift(移位)计算:如由科罗凯默等人提出的这对于DAWG匹配算法是必需的;
Offset(偏移量)和Depth(深度)计算:如果模式具有与分组的默认的开始和终点不相等的相关联的偏移量和深度,则需要计算每个状态的值。如果不对每个状态计算这些值,可能作出非必要的状态转移;仅当找到接受状态时,才了解输出模式是否有效,以及在该进程中是否错过某些有效模式;以及
结合大小写无关模式(Incorporating case independent patterns):通过对大小写无关模式计算串的所有可能组合,确保总是能识别大小写无关模式。在一个实施例中,在任意接受状态的输出被标记为初始模式,而不是必须存储模式的非必要组合。
考虑图6、7、8a、8b和9中所示的实施例以及上述的讨论,DAWG和后缀树算法可经由在选择的ME上执行微代码线程来实现。除上述描述之外,操作被概括为如下。首先,试图将模式集{P}中的任何模式的可能的最长前缀匹配到T的后缀。对于上述DAWG和后缀树算法,前缀值可通过识别集{P}中的模式的AC机器的等效状态来表示。
对于流中的第一个分组,在前一模式中所匹配的模式的前缀是空串,所以prev_state输入将是AC机器的开始状态。对于任何分组,如果此值不等于开始状态,则AC机器用于从由prev_state开始在前向方向的第一字符扫描T,一直扫到获得合适的移位值,而且DAWG可开始其扫描。
在循环迭代期间,向着分组的末端扫描,分组内容中拟由DAWG扫描的子串将越过分组的末端(即,pos>=分组的大小)。当发生这种情况时,需要跳出循环并在AC机器离开前一次循环迭代的地方、即在分组中同一状态及同一字符位置处,重新开始对分组进行扫描。AC机器可继续扫描直至到达分组的末端,这时,将AC机器的状态作为prev_state记录在相关联流表条目中,该条目用于初始化状态以处理序列中的下一个分组。
仅当流的分组顺序到达时,用于检测跨越多个分组的模式的这种机制才起作用。仅当当前分组具有比流中先前已到达的分组的序号大1时,prev_state才有意义。如果分组并非按次序到达(这被应用于TCP和其它面向连接的协议),则这种模式检测无法仅通过在流条目中存储prev_state来实现。对于某些情形,这些问题通过存储这些状态值以及相关联的分组序号的多个实例来解决。然而,如果分组到达而按序的前一个分组还未被扫描,则这种解决方案不起作用(这是因为机器数据结构的特性使得难以在分组的起始处检测模式后缀;相比之下,在分组的末端检测模式前缀较为容易)。另一种方法将是使用缓冲和存储数据值的组合。在这种实现方案中,如果分组不按次序到达,则其将被缓存直至按序的前一个分组到达并被扫描。
如上所讨论的,可提供偏移量和深度标记值以减少需要搜索的分组的部分或多个分组。这种思想是在AC机器扫描的每个步骤期间,应当能够依照要扫描的字符位置来检查偏移量和深度值,并且确定是否正在正确的路径上进行。如果与当前状态相关联的值与当前文本位置不符,则作出失败转移。AC机器状态表示正在搜索的模式的一个或多个前缀。因此,为了确保不错过任何模式,必须对该状态设置最保守的偏移量和深度值。如科罗凯默等人以及上述预处理算法中所描述的,对其使用的公式是与用于计算移位值的那些相同。无论何时模式被处理,分别基于从开始状态的距离和直到模式末端的距离来计算状态的偏移量和深度。当在处理后续模式期间,再次到达该状态,则计算偏移量作为当前所计算值和预置值的最小值;计算深度作为当前所计算值和预置值的最大值(未指定深度将是无穷大一高于所有指定值的一个值)。在失败状态计算期间,无需改变偏移量和深度;如果在分组扫描期间碰到具有无效的偏移量或深度,则自动跳转到失败状态。
前述方案对其中单个分组被搜索的情形起作用。如以上所讨论,在一个实施例中,提供了对其中跨分组应用偏移量和/或深度的情形的处理。为了实现此方案,一旦应用模式数据结构被复制到本地存储器,就需要对其进行更改,以调节偏移量和/或深度值。同时,相应数据需要存储在相关联流表条目(例如,在统计信息中)中以反映:1)需要对该模式数据结构进行调节;以及2)这些调节需要是哪些。
在大多数示例中,无需跨多个分组执行偏移量和深度搜索。在适用模式集包括大量搜索串的情况,在统计信息中为每个模式保持偏移量和/或深度状态信息通常是不切实际的。同时,偏移量和深度搜索通常用于查找特定特征(或仅少数特征)。结果,与该(这些)特征相对应的统计信息可被保持在流表条目中而不用消耗过多的存储器。跨越分组的偏移量和深度搜索是否要被支持留待具体实现。
吴-曼伯(Wu-Manber)算法实现
在某些实施例中,采用基于吴-曼伯算法的搜索方案([WM92]S.吴、U.曼伯的“Fast Text Searching Allowing Errors(允许误差的快速文本搜索)”,ACM通信,35(10):83-91(1992);以及[WM94]S.吴和U.曼伯的“A fast algorithm formulti-pattern searching(多模式搜索的快速算法)”。技术报告TR-94-17,亚利桑那大学,1994)。吴和曼伯根据基于以上所述算法的状态机来采取十分不同方法。这些算法还在每次匹配字符块而非单个字符的方面彼此不同。如果所有模式的总长度是M,则推荐的块大小(B)为log|∑|2M。该算法预计算称为SHIFT(移位)、HASH(散列)和PREFIX(前缀)的三个查找表。SHIFT表由为一个字符块的散列映射的整数来进行索引;此表等效于众所周知的波耶-莫尔(Boyer-Moore)算法中的坏字符表(波耶和J.莫尔的“A fast string searchingalgorithm(快速串搜索算法)”,ACM通信,20:762-772,1977)。多个模式共用的子串的条目包含-较为保守的最小可能移位值。对于较大的B值,表可通过将若干串映射到同一位置、在每种情形中设置最小移位值来进行压缩。用于对SHIFT进行索引的整数还用于对HASH进行索引,该HASH存储指向映射到该整数的串的指针。PREFIX表包含对每个模式的前缀的散列值,前缀的大小是与实现方案相关。在每个算法步骤中,B个字符的集合(文本子串的右端被扫描)被散列成一个整数,该整数用于查找SHIFT值。如果该值大于0,则对文本进行移位。否则,计算此串(大小为ms,其中ms为最短模式的长度)的前缀的散列,并且将与相应HASH条目中的每个串的前缀匹配(使用PREFIX表)。如果前缀匹配,则发生实际文本匹配。此算法取决于大部分是均匀的模式大小,因为在匹配期间仅考虑最短模式长度。
模式数据结构及其相应的存储器数据结构与用于DAWG匹配算法的那些相同。对模式数据进行标准化使得易于扩展内容检查框架并实现不同的搜索算法。移位表被构造成两维整型数组S[n][4]。如图16以及以下的示例性移位表存储器数据结构中所示的,每个表条目S[k]包括指向整型数组的指针,该数组具有如下结构:
{
S[k][0]:int;/*主移位值*/
S[k][1]:int;/*次移位值*/
S[k][2]:int;/*偏移量*/
S[k][3]:int;/*深度*/
}
‘k’是用于对移位表进行索引的值(通常为长整型)。如果字母表的大小是A而用作散列值的子串(串块)的大小为B,则表的最大大小为AB。‘k’是从B个字符的块获得的(单一)散列值(最简单的散列函数将块考虑成以A为基的有B个位的数)。主移位指扫描位置必须向右移动的距离。仅当所扫描的子串与模式之一中的合适位置处的子串相匹配时,此值才为0。次移位指仅当主值为0时,扫描位置必须向右移动的距离。在针对primary_shift=0处理了文本位置之后,此移位值替代默认移位值1。此值总是大于0(因此,当primary_shift等于0时,大于primary_shift)。
偏移量是从分组内容的起始处开始的最小距离,其中(假设所有模式被截断成最小模式大小)可能存在以所考虑的当前子串结束的有效模式。深度是从分组内容的起始处开始的最大距离,其中(假设所有模式被截断成最小模式大小)以所考虑的当前子串结束的有效模式必须在该分组内容之内结束。仅当主移位(primary_shift)值为0时,即,当文本(分组内容)中的子串与所考虑的模式之一的末端匹配时,偏移量、深度和secondary_shift(次_移位)值有意义并被使用。
HASH表被构造成一维指针数组H[n]。如图17的示例性HASH表存储器数据结构中所示,每个表条目H[k]包括指向模式数据结构的指针。对表的索引与移位表的相同。模式(截断成最小模式大小)按其末端的B个字符的块的散列值来存储。H[k]的值是具有大于或等于‘k’的散列值的在此分类表中的第一个模式。
因为模式数据结构具有固定大小,所以可以随机方式从存储器中访问它们。因此,模式数据结构的地址可使用模式在数组中的序号来计算。因而,存储在存储器的HASH表中的值包括模式索引号(从0到number_of_patterns-1(模式的数量-1))而非实际地址,以便于使模式可再定位。
PREFIX表被构造成一维整型数组(通常使用长整型)。表的大小等于在模式集中的模式的数量,并且模式(或模式索引号)被用作对前缀表的任何条目的索引。值Prefix[k]是模式号‘k’(‘k’从0到number_of_patterns-1)中的第一个B’个字符的散列值。通常以与对移位表进行计算的相同的方式来计算散列(通过将前缀考虑成由B’个位构成的以A为基的数字)。在存储器表示中(在图18中示出其一个实施例),每个表条目是未更改的前缀值,因为要使用的字母表包括整个ASCII集。
SHIFT和HASH表两者包含大量冗余信息。这些表的大小是指数的,而模式集可能在数量上较少。因此,希望大多数SHIFT表值等于默认值。类似地,大量HASH表条目将包含从不查找的无用信息。另一方面,存储器的显著浪费通过以固定时间查找信息的性能受益来补偿。对于较大的B值(3或更大),存储器使用成为阻碍,所以使用B+树作为压缩数据结构,并且对获取任何信息块需要相对较小的查找次数。
此B+树被构造成节点树,其中每个叶节点具有从根开始的固定距离。尽管叶节点的数量可以任意的,但是将深度选择为二,这对大多数实际目的是足够的。每个子节点是以下结构的数组:
struct hash_record{
long key_value;              /*Hash值(对SHIFT和HASH表的索引)*/
int primary_shift;                /*主移位(如在SHIFT中)*/
int secondary_shift;              /*次移位(如在SHIFT中)*/
int offset;                       /*Offset(偏移量)(如在SHIFT中)*/
int depth;                        /*Depth(深度)(如在SHIFT中)*/
struct Pattern*patlist_start;     /*指向模式列表的开始的指针(HASH表条
                                   目)*/
struct Pattern*patlist_end;       /*指向模式列表的末端的指针(下一HASH
                                   表条目)*/
int pstart;                       /*patlist_start的分类表中的模式数量*/
int pend;                         /*patlist_end的分类表中的模式数量*/
};
根节点是特殊节点且是固定大小数组,每个元素构造成如下:
struct bplus_tree_node{
struct hash_record*list;             /*指向子节点的指针*/
int num_elements;                    /*list(列表)中的元素的数量*/
};
struct bplus_tree_node root[A];
图19中示出了根节点的示例性存储器结构。根具有‘A’个structbplus_tree_node类型的元素,其中A是字母表的大小(在ASII集的情形中为256)。
考虑SHIFT表。如果索引值是B个字符c1c2..cB的块(chunk)的散列,根的每个元素可通过计算该块c1的最高有效字节的散列值来随机地访问。该块(c2..cB)的剩余部分被映射到子节点的元素的key_value(关键_值)。每个子节点(列表)不需要包含对大小B-1的串的所有可能散列值的条目;它仅包含不具有相关联默认主移位值(它等于Minimum_pattern_size-B+1)的那些元素的条目。为了访问放置在SHIFT_table[c1c2..cB]中的信息,查找root[ci].list(k)(其中list(k)指root[ci].list(k)中具有关键值=c2..cB的散列值的元素)。以相同方式查找HASH表。
前述结构中每个条目的含义通常是自明(self-evident)的。patlist_end和pend参数不引用从特定HASH表条目获得的模式列表的中的最后模式;而是引用由下一HASH条目的指向的模式,或者引用全局分类模式列表中跟随在此模式列表之后的模式。
图20示出了子节点存储器数据结构的一个实施例。尽管根节点和子节点的每一个都被设计成在存储器中可独立再定位,但是图20的实施例被实现为子节点紧跟在根结构之后。而且子节点以连续方式写入到存储器中,按父元素的索引值来排序。连续存储此数据使得易于存储器预分配,并且仅需要显式指定一个指针(根的第一个字的地址)。
吴-曼伯算法假设所有模式的长度相等;其正确操作依赖于该假设。因为这并非实际的假设,所以需要将所有串截断成最短模式。在算法运行期间,当找到候选位置时,匹配完整模式。对传递到所有预处理函数的模式进行截断。
在本说明书最后的附录中提供了用于构建SHIFT、HASH、PREFIX、和B+树的伪代码的示例。另外,同样在附录中提供了用于实现吴-曼伯算法的变体的伪代码。
附录中的吴-曼伯算法显著不同于[WM94]中所述的。该算法支持模式的额外特征,诸如偏移量、深度和大小写无关。在基本算法中还存在另一个不同点,该不同点是次移位值。在由吴和曼伯的[WM94]提出的初始算法中,若主移位值结果为0,则跳跃值被强制为1。这必定确保正确操作,但是跳跃值为1过于保守。次移位表示为了匹配所考虑的子串(大小为B的块)必需要跳过的最小距离。此跳跃的最大安全值是在SHIFT表的计算期间计算的第二小移位,这恰恰是次移位的定义。
如从吴-曼伯算法描述显而易见,当对下一分组执行算法时将与前一分组的末端(后缀)匹配的任一模式的最大前缀提供给该算法作为输入。此信息以两个部分来提供:prefix_address,其前缀被匹配的模式串的第一字节的地址;以及prefix_length,前缀的大小(或者被成功匹配的模式的字节的数量)。对于流中的第一个分组,在前一个模式中被匹配的模式的前缀是空串,所以prefix_lenghth参数值将是0,并且prefix_address未被初始化。
在循环迭代期间,向分组的末端扫描,用作对表条目的索引的块将跨越分组的末端(即,位置(position)>=分组的大小)。当发生这种情况时,必须部分地返回到原始的串匹配算法。虽然在分组的末端仍剩一些已被检查的字符,但是这些与在模式集中的每个模式的(相同大小的)前缀匹配。一旦获得匹配,则该匹配的长度和地址被分别记录到prefix_length和prefix_address中。当要扫描序列中下一个分组时,此被匹配前缀被添加到分组的内容并以常规方式进行扫描。
当分组不按次序到达时,用于匹配跨越多个分组的模式的这种技术失败。在分组开始处匹配任意后缀、希望分组它是在从前一个分组中开始的模式的一部分将不起作用。如DAWG匹配情形所述的,缓冲和状态保持的组合可提供全面的解决方案。
在某些实施例中,前述吴-曼伯算法还可用于偏移量/深度搜索。虽然试图匹配模式,但是还必须确保满足偏移量和深度的限制,并且不浪费计算周期来尝试匹配可能存在但结果具有无效的极限值的模式。因此,使有效偏移量和深度值与每个SHIFT表条目关联。以与设置移位值相同的方式设置偏移量和深度值,即通过选择最安全的可能值。如果字节块S用于对SHIFT表进行索引,则相应的偏移量被设置成以此块结束的任意模式的最小偏移量(该模式首先被截断成最短模式长度)。类似地,深度被设置成(depth-length+minimum_pattern_size(深度-长度+最大_模式_大小))的最大值,这指示经截断的模式必须在文本内结束。
在分组扫描期间,当观测到主移位值为0时,首先检查偏移量和深度(从表中查找)并将它们与当前文本位置相匹配。仅当满足限制时,才通过由HASH表指示的模式的列表进行循环。在此过程期间,在前缀表匹配成功之后以及在试图逐字节进行整个模式匹配之前,与模式自身相关联的偏移量和深度与当前文本位置相匹配。如果当前位置在边界内,则尝试完整的模式匹配。如果上述偏移量和深度检查的任一个失败,则将位置递增等于次移位的值,并继续搜索。
幸运地是,与DAWG匹配算法相比,大小写无关可通过吴-曼伯算法以高得多的存储效率来处理。要进行的额外工作被转移到预处理阶段。在更新SHIFT表时,如果处理大小写无关模式,则计算所考虑的B长度块的所有大小写相关的组合的并且调节与这些组合的每一个相对应的SHIFT表条目。对于HASH和PREFIX表,从大小写无关模式的小写等效物来计算索引和前缀值。
在分组扫描期间,SHIFT表查找是直接的,并且不需要对由吴和曼伯所提出的初始算法有任何添加,因为对所有可能的大小写组合都存在有效SHIFT条目。但是对于HASH表查找,需要计算两个单独的索引值:
正常索引,使用块照其原样的字符;以及
小写索引,通过将B块中的所有大写字符转换成小写。
当仅从小写字符计算大小写无关的模式的HASH条目时,需要第二索引。在检查前缀的整个周期之后,对完整模式进行两次匹配,一次以正常索引值进行而另一次以小写索引值进行。类似地,计算模式前缀的正常和小写版本。如果所考虑的模式是大小写无关的,则匹配小写前缀,否则匹配正常前缀。一旦进到逐字节地将模式与分组内容进行匹配,则大小写无关匹配将变得直接。
在一个实施例中,内容检查框架被设计成可插入到先前实现的带状态防火墙框架中的模块。在英特尔IXP处理模型中,内容检查框架可作为单个微块(microblock)插入到任何分组处理管线中。在一个实施例中,防火墙使用CA(条件动作)对来进行规则处理。例如,某些CA规则可与内容检查相关,如对具有分组内容的特定侵入模式进行检查(条件),如果检测到该模式则丢弃该分组(动作)。
图21中示出了用于典型的内容检查CA规则的存储器映射。保存最初两个字(或第一个长整型字),并且实际信息从8字节偏移量处开始。这些字段的每一个的含义如下:
1.算法代码:这表示要使用的搜索算法的类型。
1=DAWG-匹配算法
2=后缀树-匹配算法
3=吴-曼伯算法
4=使用B+树结构的吴-曼伯算法以替代SHIFT和HASH表
5=给定精确开始位置的匹配模式(即,假定模式从指定位置开始,或者完全不存在)
2.SRAM地址:这表示用于模式搜索的数据结构的地址(或指向地址索引的指针)。对于最初4个算法,此地址指向主索引的第一个字;这包含与用于检查的各种数据结构的地址相关的信息。
3.‘跨越模式检查’策略:对于最初4中算法代码,这仅是具有值为0(表示不对可跨越多个分组的模式作出检查)或者为1(表示必须作出这种检查)的标记。对于精确位置匹配,此字段表示其中执行模式匹配的分组内容中的位置(作为从第一个字节开始的偏移量)。
为了对跨越多个分组的模式进行检查,必须存储部分匹配信息(DAWG匹配的AC状态,吴-曼伯的模式地址和前缀长度)以及流表中与当前流相对应的条目。当要处理的下一个分组到达时,还需要存储与所存储的信息的有效性相关的某些信息。因此,对于TCP流,存储下一个预期的偏移量的序号以及状态信息。可为任何其它面向连接的协议存储类似种类的序列信息。
在流表条目的一个实施例中,此信息以下面方式来存储:第一个字是下一个分组中的第一个字节的预期的序号,第二个字是来自前一次扫描的末端AC机状态(对于算法代码1和2)或前缀长度(算法代码3和4)的前缀长度,而第三个字是部分匹配的模式地址(仅用于算法代码3和4)。
初始化和代码加载
回到图7,在网络线路卡或网络设备的初始化期间,本文所述的有助于各种分组处理和内容检查功能以及操作的编码指令(例如微代码)被加载到所选择的ME的控制存储728中。通常,可从包括诸如闪存设备的非易失性存储设备的指令存储715加载指令。非易失性存储的其它示例包括只读存储器(ROM)、可编程ROM(PROM)和电可擦PROM(EEPROM)。
除从本地存储设备(到线路卡700的)加载指令之外,可从外部源加载指令。例如,在一个实施例中,指令可被存储在由另一个线路卡(未示出)作为宿主的磁盘驱动器上或另外由其中安装了线路卡700的网络元件提供。在又一个实施例中,经由诸如载波的网络从远程服务器等下载指令。
通常,在附图中示出以及本文所讨论的功能块的每一个可经由在一个或多个计算引擎上执行的相应线程使用硬件中的可编程逻辑、固件/软件中的可编程逻辑,或者两组的组合来实现。例如,在一个实施例中,对于深度分组检查模块202、流管理器204、队列管理器708和接收引擎710的每一个所示的操作通过在NPU中的一个或多个计算引擎上执行的相应指令线程以结合到用于分组处理的上下文管线的方式而易于进行。可选地,由前述功能块所提供的各个操作的全部或一部分可通过嵌入在NPU等上的适当编程的逻辑来实现。
因而,本发明的实施例可用作或用于支持在某种方式的处理核心上执行的,或者在机器可读介质之上或之内实现的固件/软件模块和/或程序。机器可读介质包括用于以可通过机器(例如,计算机)读取的形式存储或发送信息的任何机制。例如,机器可读介质可包括诸如只读存储器(ROM);随机存取存储器(RAM);磁盘存储介质;光学存储介质;以及闪存设备等。另外,机器可读介质可包括传播信号,诸如电学、光学、声学或其它形式的传播信号(例如载波、红外信号、数字信号等)。
以上所示本发明的实施例的描述-包括在摘要中所述的-并非旨在穷举的或将本发明限制在所公开的精确形式。虽然出于示例性目的,这里描述了本发明的特定实施例或其示例,但是本领域技术人员应当认识到,落在本发明的范围内的各种等效更改是可能的。
依照以上详细描述,能够对本发明作出的这些更改。在以下权利要求中所用的术语不应当解释成将本发明限于说明书和附图所公开的实施例。相反,本发明的范围应当完全由以下权利要求来确定,这些权利要求根据权利要求说明所建立的原则来解释。
附录
1.下面以伪-C代码给出构建SHIFT表的算法。
输入:模式数组、用于散列到表(B)的块大小、字母表大小(A)
输出:指向SHIFT表的指针
int**build_SHIFT_table(struct Pattern*P,int num_pat,intB,intA)
{
         /*初始化*/
         table_size=AB
         min_pattern_size=minimum(Pi.length);
         default_offset=minimum(Pi.offset);
         default_depth=minimum(Pi.depth);
         for(SHIFT_table的每一条目,i:0到table_size-1)
        {
              /*在模式处理之前将每个条目初始化到默认值*/
              SHIFT_table[0][0]=min_pattern_size-B+1;
              SHIFT_table[0][1]=min_pattern_size-B+1;
              SHIFT_table[0][2]=default offset;
              SHIFT_table[0][3]=default_depth;
        }
        /*处理模式并更新SHIFT_table值*/
        for(每一模式Pi,i:0到num_pat-1)
        {
               for(每一子串S=Pi.string[j...j+B-1],j:0到
min_pattern_size-B)
               {
                /*计算对SHIFT_table进行索引的散列值*/
                Sval=HASH_value(S);
                /*计算主移位作为从子串的开始位置到模式末端的最小偏
移量*/
SHIFT_table[Sval][0]=minimum(SHIFT_table[Sval][0],min_pattern_size-j-B);
            /*计算次移位作为特定子串的第二最小移位值*/
            SHIFT_table[Sval][1]=(min_size-j-B)严格大于SHIFT_table
[Sval][0]的最小值;
            /*计算偏移量作为包含此子串的所有模式中的最小偏移量*/
            SHIFT_table[Sval][2]=minimum(SHIFT_table[Sval][2],Pi.offset);
            /*计算深度作为包含此子串的所有模式中的最大深度*/
            SHIFT_table[Sval][3]=maximum(SHIFT_table[Sval][3],Pi.depth-
Pi.length+min_pattern_size);
            /*更新大小写无关模式的SHIFT_table*/
            if(Pi.fcase==0)
            {
                  for(S的每种可能的大小写组合)
                  {
                    val=HASH_value(S的实例);
                    /*更新所有四个字段:以与上述相同的方式更新两个移位、偏
移量和深度*/
            update(SHIFT_table[val]);
            }
       }
}
return SHIFT_table;
}
2.下面以伪-C代码给出构建HASH表的算法。
输入:模式数组、用于散列到表(B)的块大小、字母表大小(A)
输出:指向HASH表的指针
struct Pattern**build_HASH_table(struct Pattern*P,int num_pat,int B,int
A)
   {
            /*初始化*/
            table_size=AB
            min_pattern_size=minimum(Pi.length);
            sort(P,以基于从每个
Pi.string[min_pattern_size-B...min_pattern_size-1]计算的散列值的升序);
       /*初始化指向HASH_table的索引值*/
       index=0;
       for(每一模式Pi,i:0到num_pat-1)
       {
       /*获得各个模式以其为末端的B个字符的子串*/
       S=Pi.string[min_pattern_size-B...min_pattern_size-1];
       /*如果模式是大小写无关的,则将其映射到其小写等效物*/
       if(Pi.fcase==0)
             S=convert_to_lower_case(S);
       Sval=HASH_value(S);
       while(Sval<count)
       {
       /*持续更新表值和指针直至散列值足够大*/
       HASH_table[index]=Pi
       HASH_table_pattern_number[index]=i;
       index++;
       }
    }
         /*对于较大的索引值,使用空指针填充条目;这是无关紧要的,
因为从不会查找这些索引值*/
             for(每个i:index到table_size-1)
             {
                   HASH_table[index]=Pnum_pat;
                   HASH_table_pattern_number[index]=num_pat;
             }
             return HASH_table;
}
3.下面以伪-C代码给出构建PREFIX表的算法。
输入:模式数组、前缀的大小(B’)、字母表大小(A)
输出:指向PREFIX表的指针
long int*build_PREFIX_table(struct Pattern*P,int num_pat,int B′,int A)
{
             /*初始化*/
             table_size=num_pat;
             for(每一模式Pi,i:0到num_pat-1)
             {
            /*计算前缀值的散列;如果模式是大小写无关的,则将前缀转换
成小写并计算散列*/
            S=Pi.string[0...B′-1];
            if(Pi.fcase==0)
                    S=convert_to_lower_case(S);
             PREFIX_table[i]=HASH_value(S);
             }
             return PREFIX_table;
}
4.下面以伪-C代码给出构建B+树的算法。
输入:按散列值(以与SHIFT和HASH相同的方式来计算散列)排序的模式的数组、前缀的大小(B’)、字母表大小(A)、SHIFT表、HASH表
输出:指向B+树的根的指针
  sturct bplus_tree_node*build_Bplus_tree(int**SHIFT_table,struct Pattern
**HASH_table,int*HASH_table_pattern_number,struct Pattern*P,int num_pat,
int B′,int A)
{
         /*计算默认主移位;这些是将删去的条目*/
         min_pattern_size=minimum(Pi.length);
         default_primary_shift=min_pattern_size-B+1;
         start=0;/*初始化SHIFT表要开始扫描的条目位置*/
         /*每次迭代生成子节点*/
         for(i:0 to A-1)
         {
            /*在每次循环迭代期间处理AB-1SHIFT和HASH表的条目以及对
具有非默认的主移位的每个条目生成散列记录*/
             counter=0;
             for(j:start to start+AB-1)
             {
                 if(SHIFT_table[j][0]!=default_primary_shift)
             {
            /*添加所有SHIFT和HASH表信息以及设置关键*/
            root[i].list[counter].primary_shift=SHIFT_table[j][0];
            root[i].list[counter].secondary_shift=SHIFT_table[j][1];
            root[i].list[counter].offset=SHIFT_table[j][2];
            root[i].list[counter].depth=SHIFT_table[j][3];
            root[i].list[counter].patlist_start=HASH_table[j];
            root[i].list[counter].patlist_end=HASH_table[j+1];
            root[i].list[counter].pstart=HASH_table_pattern_number[j];
            root[i].list[counter].pend=HASH_table_pattern_number[j]
       +1];
            root[i].list[counter].key_value=j-start;
            counter++;
        }
        root[i].num_elements=count;
        start=start+AB-1
        }
     }
        return root;
 }
如果所有记录(包括具有默认移位值的记录)被添加,则字段key_value实际上是hash_record结构列表的索引。因此,以上算法确保list(每个树的孩子节点)按key_value的升序进行排序。
吴-曼伯算法
输入:分组内容(字节串)T[0...n-1]、SHIFT表、HASH表、PREFIX表、最短模式的长度、模式的数量、块的大小(B)、前缀的大小(B’)、指示是否需要对跨越分组边界的模式进行检查的标记(策略)。在前一个分组的末端匹配的模式前缀的长度、其前缀在前一个分组的末端匹配的模式串的地址
输出:被检测模式的身份(或者如果未检测到,则为-1),模式的开始位置作为从串T的开始部分起的偏移量。
在下面以伪-C代码描述该算法。
   WU_Manber(int**SHIFT_table,struct Pattern**HASH_table,long int
*REFIX_table,char*T,int span_policy,int*prefix_length,char*prefix_address,
int MIN_PATTERN_SIZE,int NUM_PATTERNS,int B,int B′)
     {
             /*将位置初始化到经截断的模式的最早可能的末端位置*/
             position=MIN_PATTERN_SIZE-1;
             /*如果模式重叠检查需要进行,则将在前一个分组中匹配的前缀
添加到分组内容的起始处*/
             if(span_policy==CHECK_SPANNING_PATTERN)
             {
                S=Prefix(地址prefix_address处的模式,length=prefix_len)
                T=append(S到T的开头);
              }
              while(position<PACKET_SIZE)
              {
                /*使得块在′position′处结束并计算表索引值*/
                chunk=T[position-B.....position];
                chunk_val=HASH_value(chunk);
                /*转换成小写并计算索引;这将在稍后使用*/
                chunk_lower_case=convert_to_lower_case(chunk);
                chunk_val_lower_case=HASH_value(chunk_lower_case);
                if(SHIFT_table[chunk_val][0]>0)
                {
                /*在此位置未找到模式,所以移位并试图在下一个位置匹配*/
                   position=position+SHIFT_table[chunk_val][0];
                   continue;
                }
             /*主移位值为0,所以在’position-MIN_PATTERN_SIZE+1’处开始
有可能的匹配*/
             /*检查候选位置的偏移量*/
             if(position-MIN_PATTERN_SIZE+1<SHIFT_table[0][2])
             {
             /*在当前位置没有以块结束的模式满足偏移量极限,所以跳过使
用次移位值并试图在下一个位置匹配*/
             position=position+SHIFT_table[chunk_val][1];
             continue;
          }
          /*检查候选位置的深度*/
          if(position>=SHIFT_table[0][3])
          {
          /*在当前位置没有以块结束的模式满足深度极限,所以跳过使用
次移位值并试图在下一个位置匹配*/
              position=position+SHIFT_table[chunk_val][1];
              continue;
           }
           /*对候选串计算前缀值(正常和小写)*/
           prefix=T[position-MIN_PATTERN_SIZE+1...position-
MIN_PATTERN_SIZE+B′];
           prefix_val=HASH_value(prefix);
           prefix_lower_case_val=HASH_value(convert_to_lower_case
(prefix));
           /*候选模式:指向模式的指针按升序方式*/
           for(每一模式Pi:HASH_table[chunk_val]<=Pi
HASH_table[chunk_val+1])
           {
          if(Pi.fcase==0&&prefix_lower_case_val==PREFIX_TABLE[i])
          {
          /*将要匹配的两个串转换成小写*/
          String1=convert_to_lower_case(Pi.string);
          String2=convert_to_lower_case(T[position-
                   MIN_PATTERN_SIZE+1........position-
                   MIN_PATTERN_SIZE+Pi.length);
                   if(String1==String2)
                   {
                      记录Pi;/*模式匹配*/
                      记录′position′;
                    取决于策略,返回或继续扫描T;
                    }
              }
              else if(Pi.fcase==1&&prefix_val==PREFIX_TABLE[i])
                 {
                 if(Pi.string    ==
T[position-MIN_PATTERN_SIZE+1.....position-MIN_PATTERN_SIZE+Pi.length
)
                 {
                 记录Pi;/*模式匹配*/
                 记录′position′;
                 取决于策略,返回或继续扫描T;
                 }
             }
        }
       /*现在使用其小写等效物来替代匹配到指向SHIFT_table的索引的
块*/
               Repeat(′for′循环以上的,用′chunk_val_lower_case′替换
′chunk_val′);
              /*跳过使用次移位值并继续扫描*/
          position=position+SHIFT_table[chunk_val][1];
}
      /*如果无需检查模式是否可能跨越多个分组,则返回*/
      if(span_policy==CHECK_SPANNING_PATTERN)
      return;
      /*计算可能溢出到下一个分组的候选模式的开始位置*/
      position=position-MIN_PATTERN_SIZE+1;
      while(position<PACKET_SIZE)
      {
             for(每一模式Pi,i:0到num_pat)
             {
             /*分组内容的长度保持成可与模式之一的前缀匹配*/
             length=PACKET_SIZE-position+1;
             /*在试图完整匹配之前,从PREFIX表匹配前缀*/
             if(Pi.fcase==0)
             {
                  if(length>=B′)
                  if(PREFIX_table[i]!=T[position...position+B′-1])
             continue;
             if(T[position...PACKET_SIZE-1]==Pi.string[0....length-1])
             {
             记录prefix_length=length;
             记录prefix_address=Pi.string;
             return;
            }
        }
        If模式Pi是大小写无关的,以大小写无关方式尝试以上匹配;
     }
   }
记录prefix_length=0;
             return;
}
使用B+树的吴-曼伯算法
输入:分组内容(字节串)T[0...n-1]、B+树根指针、PREFIX表、最短模式的长度、模式的数量、块的大小(B)、前缀的大小(B’)、指示是否需要对跨越分组边界的模式进行检查的标记(策略)。在前一个分组的末端匹配的模式前缀分组的长度、其前缀在前一个分组的末端匹配的模式串的地址
输出:被检测模式的身份(或者如果未检测到,则为-1),模式的开始位置作为从串T的开始处起的偏移量。
除移位值和指针查找所用的数据结构之外,算法与前面所述的吴-曼伯算法相同。现在替代SHIFT表从B+树子条目(从hash_record结构)查找主和次移位以及偏移量和深度值。还替代HASH表从同一B+树子节点条目获得指向在给定位置上可能存在的候选模式的指针。但与SHIFT或HASH表不同,这些值无法直接查找(以固定时间)。顺序扫描的效率可能是过低的。因此,使用二分搜索来定位适当的记录;在以下描述查找步骤:
1.获得用于计算散列值的块(子串)c1c2..cB
2.使用最高有效字节(c1)来定位适当的子节点指针以及孩子节点的数量(root[c1].list和root[c1].num_elements)。
3.使用映射到整数的剩下的c2..cB来定位适当的hash_record结构。此整数将是任何匹配结构的key_value。因为所有结构基于以key_value的升序方式存储,所以简单二分搜索将返回所需的数据。对于大小为256的字母表,需要最多8次查找来定位记录。
除数据查找以外的所有算法步骤都与上述吴-曼伯算法相同。
B的实际值将为2和3(B=1时将达不到构建树的目的,虽然它仍可起作用)。B’的实际值可为4或更小。B和B’都必须小于最短模式的长度。

Claims (19)

1.一种用于跨分组边界执行内容检查的方法,包括:
跨多个分组执行内容检查以标识具有在一较早的分组中的第一部分和在一随后的分组中的第二部分的搜索串,
其中所述内容检查经由多个指令线程的执行来进行,由第一指令线程执行对公共流的第一分组的内容检查且由第二指令线程执行对所述公共流的第二分组的内容检查,并且其中第一指令线程保持与内容检查相关的状态信息且第二指令线程使用所述状态信息来继续内容检查。
2.如权利要求1所述的方法,其特征在于,所述内容检查包括对多个不同串进行并发搜索。
3.如权利要求2所述的方法,其特征在于,所述内容检查经由基于有向无环字图DAWG匹配算法的串搜索算法的计算机实现来执行。
4.如权利要求2所述的方法,其特征在于,所述内容检查经由基于吴-曼伯算法的串搜索算法的计算机实现来执行。
5.如权利要求1所述的方法,其特征在于,还包括:
接收所述第一分组;
对所述第一分组进行分类以将其分配到一个流;
在分配到所述流的分组中标识要搜索的一个或多个串;
使用所述第一指令线程来对所述第一分组采用内容检查;
检测朝向所述第一分组的末端定位的一个或多个搜索串之一的部分匹配;
保存与所述部分匹配相对应的串搜索状态信息;
接收所述第二分组;
对所述第二分组进行分类以将其分配到所述流;
检索所述串搜索状态信息;
使用所述串搜索状态信息来检测所述搜索串的第二部分,所述搜索串的第二部分朝向所述第二分组的起始处开始。
6.如权利要求5所述的方法,其特征在于,还包括:
标识已发生了一个串匹配条件;以及
对所述条件执行相关联动作以处理分配到所述流的随后接收到的分组。 
7.如权利要求1所述的方法,其特征在于,还包括:
对至少一个搜索串使用一偏移量机制,所述偏移量机制跳过第一分组中被定义为相关联搜索串的偏移量的部分。
8.如权利要求1所述的方法,其特征在于,还包括:
对至少一个搜索串使用一深度机制,所述深度机制跟踪在分组中搜索的深度,并在到达对相关联搜索串所定义的深度后停止所述搜索。
9.如权利要求1所述的方法,其特征在于,还包括:
对大小写无关的串执行多分组搜索。
10.如权利要求1所述的方法,其特征在于,所述内容检查包括在被执行以在网络设备处理分组的操作的上下文管线中的一操作,所述操作的上下文管线经由在多个计算引擎上执行多个指令线程来执行。
11.一种用于跨分组边界执行内容检查的装置,包括:
用于跨多个分组执行内容检查以标识具有在一较早的分组中的第一部分和在一随后的分组中的第二部分的搜索串的装置,
其中所述内容检查经由多个指令线程的执行来进行,由第一指令线程执行对公共流的第一分组的内容检查且由第二指令线程执行对所述公共流的第二分组的内容检查,并且其中第一指令线程保持与内容检查相关的状态信息且第二指令线程使用所述状态信息来继续内容检查。
12.如权利要求11所述的装置,其特征在于,还包括:
用于对接收的所述第一分组进行分类以将其分配到一个流的装置;
用于在分配到所述流的分组中标识要搜索的一个或多个串的装置;
用于使用所述第一指令线程来对所述第一分组采用内容检查的装置;
用于检测朝向所述第一分组的末端定位的一个或多个搜索串之一的部分匹配的装置;
用于保存与所述部分匹配相对应的串搜索状态信息的装置;
用于对接收的所述第二分组进行分类以将其分配到所述流的装置;
用于检索所述串搜索状态信息的装置;以及
用于使用所述串搜索状态信息来检测所述搜索串的第二部分的装置,所述搜索串的第二部分朝向所述第二分组的开始处开始。
13.如权利要求11所述的装置,其特征在于,还包括:
用于在至少一个共享存储器资源中维护一流表的装置,所述流表包括与一相 应的流相关联的多个条目,每个流表条目包括:
标识用于与所述相应的流相关联的多模式搜索的模式数据结构的信息;
以及
标识所述多模式搜索的状态的状态信息;
用于对接收一分组作出响应,将所述分组分类到一个流的装置;
用于将所述分组入队到分配给所述流的流队列的装置;
用于定位与所述流相对应的流表条目的装置;
用于将所述分组复制到网络处理器上的计算引擎的本地存储器中的装置;
用于将由所述流表条目标识的模式数据结构复制到所述计算引擎的本地存储器中的装置;以及
用于使用所述模式数据结构在所述计算引擎上对所述分组执行多模式串搜索的装置。
14.如权利要求13的所述的装置,其特征在于,还包括:
用于将所述分组分类到一新的流的装置;以及
用于在与所述新的流相对应的流表中生成一新的条目的装置。
15.如权利要求11所述的装置,其特征在于,所述内容检查经由基于有向无环字图DAWG匹配算法的串搜索算法的计算机实现来执行。
16.如权利要求11所述的装置,其特征在于,所述内容检查经由基于吴-曼伯算法的串搜索算法的计算机实现来执行。
17.一种用于跨分组边界执行内容检查的装置,包括:
用于将接收到的分组分类到各相关联的流的装置;以及
用于通过使用第一指令线程检查给定流的第一分组且使用第二指令线程
检查所述给定流的第二分组来对所述给定流跨多个分组执行内容检查,以在
经由所述多个分组传输的数据流中标识具有在一对顺序的分组中的相应部分
的搜索串的装置,其中第一指令线程保持与内容检查相关的状态信息且第二
指令线程使用所述状态信息来继续内容检查。
18.如权利要求17所述的装置,其特征在于,所述内容检查是经由基于有向无环字图DAWG匹配算法的串搜索算法的计算机实现来执行的。
19.如权利要求17所述的装置,其特征在于,所述内容检查是经由基于吴-曼伯算法的串搜索算法的计算机实现来执行的。 
CN200680024231XA 2005-06-30 2006-06-30 带状态的分组内容匹配机制 Expired - Fee Related CN101258721B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/174,373 2005-06-30
US11/174,373 US7784094B2 (en) 2005-06-30 2005-06-30 Stateful packet content matching mechanisms
PCT/US2006/026069 WO2007120165A2 (en) 2005-06-30 2006-06-30 Stateful packet content matching mechanisms

Publications (2)

Publication Number Publication Date
CN101258721A CN101258721A (zh) 2008-09-03
CN101258721B true CN101258721B (zh) 2012-10-10

Family

ID=37619733

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200680024231XA Expired - Fee Related CN101258721B (zh) 2005-06-30 2006-06-30 带状态的分组内容匹配机制

Country Status (7)

Country Link
US (1) US7784094B2 (zh)
EP (1) EP1905213B1 (zh)
JP (1) JP4598127B2 (zh)
CN (1) CN101258721B (zh)
AT (1) ATE504148T1 (zh)
DE (1) DE602006021028D1 (zh)
WO (1) WO2007120165A2 (zh)

Families Citing this family (147)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7519070B2 (en) * 2002-09-12 2009-04-14 International Business Machines Corporation Method and apparatus for deep packet processing
US8560475B2 (en) 2004-09-10 2013-10-15 Cavium, Inc. Content search mechanism that uses a deterministic finite automata (DFA) graph, a DFA state machine, and a walker process
US7784094B2 (en) 2005-06-30 2010-08-24 Intel Corporation Stateful packet content matching mechanisms
US7430560B1 (en) * 2005-07-22 2008-09-30 X-Engines, Inc. Multi-level compressed lock-up tables formed by logical operations to compress selected index bits
JP4810915B2 (ja) * 2005-07-28 2011-11-09 日本電気株式会社 データ検索装置及び方法、並びにコンピュータ・プログラム
US7778250B2 (en) * 2005-08-11 2010-08-17 Ericsson Ab Method and apparatus for securing a layer II bridging switch/switch for subscriber aggregation
US7984180B2 (en) * 2005-10-20 2011-07-19 Solarflare Communications, Inc. Hashing algorithm for network receive filtering
GB2416891B (en) * 2005-11-09 2006-11-01 Streamshield Networks Ltd A network implemented content processing system
US7725573B2 (en) * 2005-11-29 2010-05-25 Intel Corporation Methods and apparatus for supporting agile run-time network systems via identification and execution of most efficient application code in view of changing network traffic conditions
JP4767057B2 (ja) * 2006-03-27 2011-09-07 富士通株式会社 ハッシュ値生成プログラム、ストレージ管理プログラム、判定プログラム及びデータ変更検証装置
US8009566B2 (en) * 2006-06-26 2011-08-30 Palo Alto Networks, Inc. Packet classification in a network security device
US8234706B2 (en) * 2006-09-08 2012-07-31 Microsoft Corporation Enabling access to aggregated software security information
US9147271B2 (en) 2006-09-08 2015-09-29 Microsoft Technology Licensing, Llc Graphical representation of aggregated data
US7539031B2 (en) * 2006-09-19 2009-05-26 Netlogic Microsystems, Inc. Inexact pattern searching using bitmap contained in a bitcheck command
US7529746B2 (en) * 2006-09-19 2009-05-05 Netlogic Microsystems, Inc. Search circuit having individually selectable search engines
US7644080B2 (en) * 2006-09-19 2010-01-05 Netlogic Microsystems, Inc. Method and apparatus for managing multiple data flows in a content search system
US7539032B2 (en) 2006-09-19 2009-05-26 Netlogic Microsystems, Inc. Regular expression searching of packet contents using dedicated search circuits
US7624105B2 (en) * 2006-09-19 2009-11-24 Netlogic Microsystems, Inc. Search engine having multiple co-processors for performing inexact pattern search operations
US8051474B1 (en) * 2006-09-26 2011-11-01 Avaya Inc. Method and apparatus for identifying trusted sources based on access point
US8191142B2 (en) * 2006-10-26 2012-05-29 Polytechnic Institute Of New York University Detecting whether an arbitrary-length bit string input matches one of a plurality of known arbitrary-length bit strings using a hierarchical data structure
US7827218B1 (en) 2006-11-18 2010-11-02 X-Engines, Inc. Deterministic lookup using hashed key in a multi-stride compressed trie structure
US8239341B2 (en) 2006-12-08 2012-08-07 Hangzhou H3C Technologies Co., Ltd. Method and apparatus for pattern matching
US7676444B1 (en) 2007-01-18 2010-03-09 Netlogic Microsystems, Inc. Iterative compare operations using next success size bitmap
US7630982B2 (en) 2007-02-24 2009-12-08 Trend Micro Incorporated Fast identification of complex strings in a data stream
US20080219261A1 (en) * 2007-03-06 2008-09-11 Lin Yeejang James Apparatus and method for processing data streams
US8594085B2 (en) * 2007-04-11 2013-11-26 Palo Alto Networks, Inc. L2/L3 multi-mode switch including policy processing
US20080320596A1 (en) * 2007-06-22 2008-12-25 Feng Chi Wang Distributed digital rights management system and methods for use therewith
US8302197B2 (en) * 2007-06-28 2012-10-30 Microsoft Corporation Identifying data associated with security issue attributes
US8250651B2 (en) * 2007-06-28 2012-08-21 Microsoft Corporation Identifying attributes of aggregated data
US9270641B1 (en) * 2007-07-31 2016-02-23 Hewlett Packard Enterprise Development Lp Methods and systems for using keywords preprocessing, Boyer-Moore analysis, and hybrids thereof, for processing regular expressions in intrusion-prevention systems
US20090041013A1 (en) * 2007-08-07 2009-02-12 Mitchell Nathan A Dynamically Assigning A Policy For A Communication Session
US20090041014A1 (en) * 2007-08-08 2009-02-12 Dixon Walter G Obtaining Information From Tunnel Layers Of A Packet At A Midpoint
US8819217B2 (en) * 2007-11-01 2014-08-26 Cavium, Inc. Intelligent graph walking
US20100262684A1 (en) * 2007-11-16 2010-10-14 France Telecom Method and device for packet classification
US8885644B2 (en) 2008-02-28 2014-11-11 Alcatel Lucent Compressed IP flow recognition for in-line, integrated mobile DPI
US8386461B2 (en) * 2008-06-16 2013-02-26 Qualcomm Incorporated Method and apparatus for generating hash mnemonics
EP2350877A1 (en) * 2008-09-30 2011-08-03 Rainstor Limited System and method for data storage
US8473523B2 (en) 2008-10-31 2013-06-25 Cavium, Inc. Deterministic finite automata graph traversal with nodal bit mapping
EP2202937B1 (en) * 2008-12-24 2011-11-30 Mitsubishi Electric R&D Centre Europe B.V. Partial reassembly for pattern matching
US8873556B1 (en) * 2008-12-24 2014-10-28 Palo Alto Networks, Inc. Application based packet forwarding
CN101771627B (zh) * 2009-01-05 2015-04-08 武汉邮电科学研究院 互联网实时深度包解析和控制节点设备和方法
CN101478551B (zh) * 2009-01-19 2011-12-28 清华大学 基于多核处理器的多域网包分类方法
US8769664B1 (en) 2009-01-30 2014-07-01 Palo Alto Networks, Inc. Security processing in active security devices
US8051167B2 (en) * 2009-02-13 2011-11-01 Alcatel Lucent Optimized mirror for content identification
IL199616A0 (en) * 2009-06-28 2010-05-17 Chaim Shen Orr Pattern-free encryption
KR101292887B1 (ko) * 2009-12-21 2013-08-02 한국전자통신연구원 패킷 동일성 검사를 이용한 라우터의 패킷 스트림 모니터링 장치 및 방법
US9264321B2 (en) 2009-12-23 2016-02-16 Juniper Networks, Inc. Methods and apparatus for tracking data flow based on flow state values
IT1398339B1 (it) * 2010-03-09 2013-02-22 Dainotti Metodo e sistema per la classificazione di flussi di traffico in una rete di comunicazione dati che utilizza firme basate sul contenuto del traffico
EP2393030A3 (en) * 2010-06-07 2012-02-29 Samsung SDS Co. Ltd. Anti-malware system and operating method thereof
CN102289614B (zh) * 2010-06-18 2015-07-29 三星Sds株式会社 反恶意软件系统及其操作方法
EP2400424B8 (en) * 2010-06-18 2016-05-18 Samsung SDS Co., Ltd. Anti-malware system and operating method thereof
US8930618B2 (en) 2010-08-24 2015-01-06 Futurewei Technologies, Inc. Smart memory
US8862603B1 (en) 2010-11-03 2014-10-14 Netlogic Microsystems, Inc. Minimizing state lists for non-deterministic finite state automatons
CN102143148B (zh) * 2010-11-29 2014-04-02 华为技术有限公司 用于通用协议解析的参数获取和通用协议解析方法及装置
KR20120066465A (ko) * 2010-12-14 2012-06-22 한국전자통신연구원 서비스 거부 공격 차단 방법
CN102546363A (zh) * 2010-12-21 2012-07-04 深圳市恒扬科技有限公司 一种报文处理方法、装置及设备
US9465836B2 (en) * 2010-12-23 2016-10-11 Sap Se Enhanced business object retrieval
IL210900A (en) 2011-01-27 2015-08-31 Verint Systems Ltd System and method for efficient classification and processing of network traffic
GB201101875D0 (en) 2011-02-03 2011-03-23 Roke Manor Research A method and apparatus for communications analysis
EP2500838A1 (en) 2011-03-16 2012-09-19 Samsung SDS Co. Ltd. SOC-based device for packet filtering and packet filtering method thereof
US8909813B2 (en) * 2011-03-22 2014-12-09 Ramot At Tel-Aviv University Ltd. Efficient processing of compressed communication traffic
US8695096B1 (en) 2011-05-24 2014-04-08 Palo Alto Networks, Inc. Automatic signature generation for malicious PDF files
US9047441B2 (en) 2011-05-24 2015-06-02 Palo Alto Networks, Inc. Malware analysis system
KR101476113B1 (ko) 2011-08-02 2014-12-23 캐비엄, 인코포레이티드 룩업 클러스터 컴플렉스
US8918375B2 (en) * 2011-08-31 2014-12-23 Microsoft Corporation Content aware chunking for achieving an improved chunk size distribution
US9154335B2 (en) * 2011-11-08 2015-10-06 Marvell Israel (M.I.S.L) Ltd. Method and apparatus for transmitting data on a network
KR102019104B1 (ko) * 2012-01-20 2019-09-06 한국전자통신연구원 다중 네트워크 인터페이스 카드를 이용한 트래픽 처리방법 및 네트워크 디바이스
CN103226551B (zh) * 2012-01-31 2016-05-25 中国科学技术大学 基于tcam的非确定性有限自动机的匹配方法和装置
CN103248530B (zh) * 2012-02-09 2015-12-16 深圳市恒扬科技股份有限公司 一种基于浮动位置的特征字分流检测方法及装置
WO2013126852A2 (en) 2012-02-24 2013-08-29 Missing Link Electronics, Inc. Partitioning systems operating in multiple domains
US9798588B1 (en) * 2012-04-25 2017-10-24 Significs And Elements, Llc Efficient packet forwarding using cyber-security aware policies
US9634945B2 (en) * 2012-08-30 2017-04-25 Hughes Network Systems, Llc Apparatus and method for staged traffic classification among terminal and aggregation nodes of a broadband communications system
CN103023883A (zh) * 2012-11-26 2013-04-03 清华大学 基于ac自动机和后缀树的字符串匹配方法
CN103873317B (zh) * 2012-12-18 2017-04-12 中国科学院空间科学与应用研究中心 一种ccsds空间链路协议检测方法及系统
CN103441889B (zh) * 2013-01-25 2017-05-03 刘俊 一种统计信息生成方法和系统
US9130819B2 (en) * 2013-03-15 2015-09-08 Cavium, Inc. Method and apparatus for scheduling rule matching in a processor
CN104253786B (zh) * 2013-06-26 2017-07-07 北京思普崚技术有限公司 一种基于正则表达式的深度包检测方法
CN103354522B (zh) 2013-06-28 2016-08-10 华为技术有限公司 一种多级流表查找方法和装置
JP6351363B2 (ja) * 2013-08-01 2018-07-04 キヤノン株式会社 通信装置およびそのデータ処理方法
CN104426768B (zh) * 2013-09-05 2018-06-15 华为技术有限公司 一种数据报文转发方法及装置
US9923870B2 (en) * 2013-12-12 2018-03-20 Nec Corporation Method and system for analyzing a data flow
US10423667B2 (en) * 2013-12-23 2019-09-24 British Telecommunications Plc Pattern matching machine
US10535010B2 (en) 2013-12-23 2020-01-14 British Telecommunications Plc Pattern matching machine for repeating symbols
WO2015097428A1 (en) * 2013-12-23 2015-07-02 British Telecommunications Public Limited Company Improved pattern matching machine with mapping table
US9544402B2 (en) 2013-12-31 2017-01-10 Cavium, Inc. Multi-rule approach to encoding a group of rules
US9667446B2 (en) 2014-01-08 2017-05-30 Cavium, Inc. Condition code approach for comparing rule and packet data that are provided in portions
CN105900065A (zh) * 2014-01-13 2016-08-24 华为技术有限公司 模式处理方法
US9588923B2 (en) 2014-01-24 2017-03-07 Applied Micro Circuits Corporation Flow pinning in a server on a chip
US10789227B2 (en) * 2014-03-31 2020-09-29 Nec Solution Innovators, Ltd Data structure, information processing device, information processing method, and program recording medium
US9237129B2 (en) 2014-05-13 2016-01-12 Dell Software Inc. Method to enable deep packet inspection (DPI) in openflow-based software defined network (SDN)
US9680797B2 (en) * 2014-05-28 2017-06-13 Oracle International Corporation Deep packet inspection (DPI) of network packets for keywords of a vocabulary
US9825913B2 (en) 2014-06-04 2017-11-21 Nicira, Inc. Use of stateless marking to speed up stateful firewall rule processing
US9729512B2 (en) 2014-06-04 2017-08-08 Nicira, Inc. Use of stateless marking to speed up stateful firewall rule processing
US9742881B2 (en) * 2014-06-30 2017-08-22 Nicira, Inc. Network virtualization using just-in-time distributed capability for classification encoding
US10375087B2 (en) * 2014-07-21 2019-08-06 Honeywell International Inc. Security architecture for the connected aircraft
US9537872B2 (en) 2014-12-31 2017-01-03 Dell Software Inc. Secure neighbor discovery (SEND) using pre-shared key
US9998425B2 (en) 2015-01-27 2018-06-12 Sonicwall Inc. Dynamic bypass of TLS connections matching exclusion list in DPI-SSL in a NAT deployment
CN104901829B (zh) * 2015-04-09 2018-06-22 清华大学 基于动作编码的路由数据转发行为一致性验证方法及装置
WO2016171690A1 (en) * 2015-04-23 2016-10-27 Hewlett Packard Enterprise Development Lp Pre-filter rules for network infrastructure devices
US10785130B2 (en) * 2015-04-23 2020-09-22 Hewlett Packard Enterprise Development Lp Network infrastructure device to implement pre-filter rules
US9596215B1 (en) * 2015-04-27 2017-03-14 Juniper Networks, Inc. Partitioning a filter to facilitate filtration of packets
EP3266174B1 (en) 2015-04-30 2021-07-14 Hewlett Packard Enterprise Development LP Uplink port oversubscription determination
US9787641B2 (en) 2015-06-30 2017-10-10 Nicira, Inc. Firewall rule management
CN108028808B (zh) * 2015-07-24 2022-07-26 安培计算有限责任公司 单芯片服务器中的讯流钉扎
US11018970B2 (en) 2016-10-31 2021-05-25 Nicira, Inc. Monitoring resource consumption for distributed services
US11258681B2 (en) * 2016-12-16 2022-02-22 Nicira, Inc. Application assessment and visibility for micro-segmentation of a network deployment
US10567440B2 (en) 2016-12-16 2020-02-18 Nicira, Inc. Providing application visibility for micro-segmentation of a network deployment
US10298619B2 (en) * 2016-12-16 2019-05-21 Nicira, Inc. Application template generation and deep packet inspection approach for creation of micro-segmentation policy for network applications
US10673816B1 (en) * 2017-04-07 2020-06-02 Perspecta Labs Inc. Low delay network intrusion prevention
US10454965B1 (en) * 2017-04-17 2019-10-22 Symantec Corporation Detecting network packet injection
US10819683B2 (en) * 2017-11-20 2020-10-27 Forcepoint Llc Inspection context caching for deep packet inspection
US10742673B2 (en) 2017-12-08 2020-08-11 Nicira, Inc. Tracking the dynamics of application-centric clusters in a virtualized datacenter
US20190215306A1 (en) * 2018-01-11 2019-07-11 Nicira, Inc. Rule processing and enforcement for interleaved layer 4, layer 7 and verb based rulesets
US11431677B2 (en) * 2018-01-11 2022-08-30 Nicira, Inc. Mechanisms for layer 7 context accumulation for enforcing layer 4, layer 7 and verb-based rules
US11296960B2 (en) 2018-03-08 2022-04-05 Nicira, Inc. Monitoring distributed applications
ES2917448T3 (es) * 2018-03-16 2022-07-08 Acklio Método y aparato para procesar datos de mensaje
US10747819B2 (en) 2018-04-20 2020-08-18 International Business Machines Corporation Rapid partial substring matching
US10782968B2 (en) * 2018-08-23 2020-09-22 International Business Machines Corporation Rapid substring detection within a data element string
US10732972B2 (en) 2018-08-23 2020-08-04 International Business Machines Corporation Non-overlapping substring detection within a data element string
US11340931B2 (en) 2019-07-23 2022-05-24 Vmware, Inc. Recommendation generation based on selection of selectable elements of visual representation
US10911335B1 (en) 2019-07-23 2021-02-02 Vmware, Inc. Anomaly detection on groups of flows
US11436075B2 (en) 2019-07-23 2022-09-06 Vmware, Inc. Offloading anomaly detection from server to host
US11140090B2 (en) 2019-07-23 2021-10-05 Vmware, Inc. Analyzing flow group attributes using configuration tags
US11288256B2 (en) 2019-07-23 2022-03-29 Vmware, Inc. Dynamically providing keys to host for flow aggregation
US11188570B2 (en) 2019-07-23 2021-11-30 Vmware, Inc. Using keys to aggregate flow attributes at host
US11349876B2 (en) 2019-07-23 2022-05-31 Vmware, Inc. Security policy recommendation generation
US11176157B2 (en) 2019-07-23 2021-11-16 Vmware, Inc. Using keys to aggregate flows at appliance
US11743135B2 (en) 2019-07-23 2023-08-29 Vmware, Inc. Presenting data regarding grouped flows
US11398987B2 (en) 2019-07-23 2022-07-26 Vmware, Inc. Host-based flow aggregation
US11042371B2 (en) 2019-09-11 2021-06-22 International Business Machines Corporation Plausability-driven fault detection in result logic and condition codes for fast exact substring match
US10996951B2 (en) 2019-09-11 2021-05-04 International Business Machines Corporation Plausibility-driven fault detection in string termination logic for fast exact substring match
US11520738B2 (en) * 2019-09-20 2022-12-06 Samsung Electronics Co., Ltd. Internal key hash directory in table
US11588854B2 (en) 2019-12-19 2023-02-21 Vmware, Inc. User interface for defining security groups
US11321213B2 (en) 2020-01-16 2022-05-03 Vmware, Inc. Correlation key used to correlate flow and con text data
US11829793B2 (en) 2020-09-28 2023-11-28 Vmware, Inc. Unified management of virtual machines and bare metal computers
KR102447130B1 (ko) * 2020-11-05 2022-09-26 국민대학교산학협력단 네트워크 패킷 분석 기반의 대상파일 검출 장치 및 방법
CN112100361B (zh) * 2020-11-12 2021-02-26 南京中孚信息技术有限公司 一种基于ac自动机的字符串多模模糊匹配方法
US11991187B2 (en) 2021-01-22 2024-05-21 VMware LLC Security threat detection based on network flow analysis
US11785032B2 (en) 2021-01-22 2023-10-10 Vmware, Inc. Security threat detection based on network flow analysis
CN113539405B (zh) * 2021-06-24 2024-03-19 北京天健源达科技股份有限公司 电子病历表格运算控件的处理方法
US11997120B2 (en) 2021-07-09 2024-05-28 VMware LLC Detecting threats to datacenter based on analysis of anomalous events
US11831667B2 (en) 2021-07-09 2023-11-28 Vmware, Inc. Identification of time-ordered sets of connections to identify threats to a datacenter
US11792151B2 (en) 2021-10-21 2023-10-17 Vmware, Inc. Detection of threats based on responses to name resolution requests
US11995024B2 (en) 2021-12-22 2024-05-28 VMware LLC State sharing between smart NICs
US20230247002A1 (en) * 2022-01-31 2023-08-03 Bank Of America Corporation Enhanced kernel security in cloud environment
US11928062B2 (en) 2022-06-21 2024-03-12 VMware LLC Accelerating data message classification with smart NICs
US11899594B2 (en) 2022-06-21 2024-02-13 VMware LLC Maintenance of data message classification cache on smart NIC

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1366256A (zh) * 2001-01-10 2002-08-28 日本电气株式会社 内容检查系统和内容检查方法
US6631466B1 (en) * 1998-12-31 2003-10-07 Pmc-Sierra Parallel string pattern searches in respective ones of array of nanocomputers

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11161677A (ja) * 1997-11-28 1999-06-18 Ricoh Co Ltd 辞書照合装置
US6738846B1 (en) * 1999-02-23 2004-05-18 Sun Microsystems, Inc. Cooperative processing of tasks in a multi-threaded computing system
US6493698B1 (en) * 1999-07-26 2002-12-10 Intel Corporation String search scheme in a distributed architecture
JP2001168911A (ja) * 1999-12-09 2001-06-22 Hitachi Cable Ltd パケットフィルタ装置
WO2001056327A1 (en) 2000-01-30 2001-08-02 Celox Networks, Inc. Device and method for packet inspection
US7107265B1 (en) * 2000-04-06 2006-09-12 International Business Machines Corporation Software management tree implementation for a network processor
JP3609358B2 (ja) * 2000-08-17 2005-01-12 日本電信電話株式会社 フロー識別検索装置および方法
US20030110208A1 (en) * 2001-09-12 2003-06-12 Raqia Networks, Inc. Processing data across packet boundaries
US7181742B2 (en) * 2002-11-19 2007-02-20 Intel Corporation Allocation of packets and threads
US7305708B2 (en) * 2003-04-14 2007-12-04 Sourcefire, Inc. Methods and systems for intrusion detection
US20050108518A1 (en) * 2003-06-10 2005-05-19 Pandya Ashish A. Runtime adaptable security processor
US7463590B2 (en) 2003-07-25 2008-12-09 Reflex Security, Inc. System and method for threat detection and response
US7586851B2 (en) * 2004-04-26 2009-09-08 Cisco Technology, Inc. Programmable packet parsing processor
US7784094B2 (en) 2005-06-30 2010-08-24 Intel Corporation Stateful packet content matching mechanisms

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6631466B1 (en) * 1998-12-31 2003-10-07 Pmc-Sierra Parallel string pattern searches in respective ones of array of nanocomputers
CN1366256A (zh) * 2001-01-10 2002-08-28 日本电气株式会社 内容检查系统和内容检查方法

Also Published As

Publication number Publication date
WO2007120165A2 (en) 2007-10-25
WO2007120165A3 (en) 2007-12-27
US20070011734A1 (en) 2007-01-11
EP1905213B1 (en) 2011-03-30
US7784094B2 (en) 2010-08-24
DE602006021028D1 (de) 2011-05-12
CN101258721A (zh) 2008-09-03
JP4598127B2 (ja) 2010-12-15
JP2008544728A (ja) 2008-12-04
EP1905213A2 (en) 2008-04-02
ATE504148T1 (de) 2011-04-15

Similar Documents

Publication Publication Date Title
CN101258721B (zh) 带状态的分组内容匹配机制
CN101213811B (zh) 采用标记值的多样本包内容检测机制
Xu et al. A survey on regular expression matching for deep packet inspection: Applications, algorithms, and hardware platforms
US7512634B2 (en) Systems and methods for processing regular expressions
Masud et al. Cloud-based malware detection for evolving data streams
US9514246B2 (en) Anchored patterns
US9563399B2 (en) Generating a non-deterministic finite automata (NFA) graph for regular expression patterns with advanced features
US9858051B2 (en) Regex compiler
CN1881950B (zh) 使用频谱分析的分组分类加速
US20050273450A1 (en) Regular expression acceleration engine and processing model
CN103139072A (zh) 用于在交换机asic中集成线速应用识别的系统和方法
US20120290736A1 (en) Systems and Methods for Processing Regular Expressions
EP1423957A1 (en) Method and system for classifying binary strings
CN100495407C (zh) 一种多字符串匹配方法和芯片
Ficara et al. Enhancing counting bloom filters through huffman-coded multilayer structures
Yang et al. Tt-join: Efficient set containment join
Pao et al. String searching engine for virus scanning
Sourdis Designs and algorithms for packet and content inspection.
Jose et al. Gigabit network intrusion detection system using extended Bloom filter in reconfigurable hardware
CN104714995A (zh) 用于遍历为具有高级特征的正则表达式图样生成的非确定有限自动机(nfa)的系统和方法
Tomášek et al. Cloud-centric application tracing and user monitoring intrusion prevention system
Kumar A thesis on acceleration of network processing algorithms
Guinde Hardware support for real-time network security and packet classification using field programmable gate arrays
Araújo Parallel blocking for entity resolution in the context of semi-structured data.
Lu Data structures for efficient packet classification

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20121010

Termination date: 20190630

CF01 Termination of patent right due to non-payment of annual fee