CN104426909A - 为具有高级特征的正则表达式图样生成非确定有限自动机(nfa)图形 - Google Patents

为具有高级特征的正则表达式图样生成非确定有限自动机(nfa)图形 Download PDF

Info

Publication number
CN104426909A
CN104426909A CN201410431555.1A CN201410431555A CN104426909A CN 104426909 A CN104426909 A CN 104426909A CN 201410431555 A CN201410431555 A CN 201410431555A CN 104426909 A CN104426909 A CN 104426909A
Authority
CN
China
Prior art keywords
node
type
character
pattern
payload
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410431555.1A
Other languages
English (en)
Other versions
CN104426909B (zh
Inventor
R·戈亚尔
S·L·比拉
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.)
Kaiwei International Co
Marvell Asia Pte Ltd
Original Assignee
Cavium LLC
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 Cavium LLC filed Critical Cavium LLC
Publication of CN104426909A publication Critical patent/CN104426909A/zh
Application granted granted Critical
Publication of CN104426909B publication Critical patent/CN104426909B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • G06F5/12Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
    • G06F5/14Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations for overflow or underflow handling, e.g. full or empty flags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/567Computer malware detection or handling, e.g. anti-virus arrangements using dedicated hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/28Restricting access to network management systems or functions, e.g. using authorisation function to access network configuration
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/12Indexing scheme relating to groups G06F5/12 - G06F5/14
    • G06F2205/126Monitoring of intermediate fill level, i.e. with additional means for monitoring the fill level, e.g. half full flag, almost empty flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/28DMA
    • G06F2213/2806Space or buffer allocation for DMA transfers

Abstract

本发明的各实施例涉及为具有高级特征的正则表达式图样生成非确定有限自动机(NFA)图形。在一个实施例中,一种将图样编译成非确定有限自动机(NFA)图形的方法包括对该图样进行多个元素和多种节点类型检查。每种节点类型与一个元素相对应。可以对该图样的每个元素进行匹配至少零次。该方法进一步包括生成该NFA图形的多个节点。该多个节点中的每个节点可以被配置成用于针对该多个元素其中之一进行匹配。该元素可以指示该NFA图形中的下一个节点地址、计数值、和/或与该元素相对应的节点类型。该节点还可以指示该元素表示字符、字符类或字符串。字符还可以是一个值或一个字母。

Description

为具有高级特征的正则表达式图样生成非确定有限自动机(NFA)图形
技术领域
本发明的各实施例涉及为具有高级特征的正则表达式图样生成非确定有限自动机(NFA)图形。
背景技术
开放系统互连(OSI)参考模型定义了用于通过传输介质进行通信的7个网络协议层(L1-L7)。上层(L4-L7)表示端到端通信并且下层(L1-L3)表示本地通信。
联网应用感知系统需要处理、过滤和切换L3到L7网络协议层的范围,例如,L7网络协议层诸如超文本传输协议(HTTP)和简单邮件传输协议(SMTP),以及L4网络协议层诸如传输控制协议(TCP)。除了处理网络协议层以外,联网应用感知系统需要通过L4-L7网络协议层来同时通过基于访问和内容的安全性来保护这些协议,这些协议层包括防火墙、虚拟专用网(VPN)、安全套接字层(SSL)、入侵检测系统(IDS)、互联网协议安全(IPSec)、线速的防病毒(AV)和防垃圾邮件功能。线速是在其上传输和接收数据的网络的物理介质上的数据传送速率。
网络处理器可用于高吞吐量L2和L3网络协议处理,即,执行数据包处理从而以线速转发数据包。通常,通用处理器用于处理需要更多智能处理的L4-L7网络协议。虽然通用处理器可以执行计算密集型任务,但是没有足够用于处理数据使得其能够被以线速转发的性能。
内容感知联网需要以“线速”的对数据包的内容的检查。可以对内容进行分析,以确定是否存在安全漏洞或入侵。应用大量正则表达式形式的图样和规则以确保所有的安全漏洞或入侵被检测到。正则表达式是用于描述值/字符/字母串中的图样的紧凑型方法。由正则表达式所匹配的最简单图样是单个值/字符/字母或值/字符/字母串,例如,/c/或/cat/。正则表达式还包括具有特殊含义的运算符和元字符。
通过使用元字符,正则表达式可以用于更复杂的搜索,诸如“abc.*xyz”。即,在“abc”和“xyz”之间的无限量字符的情况下,找到字符串“abc”,之后是字符串“xyz”。另一示例是正则表达式“abc..abc.*xyz;”,即,找到字符串“abc”,后面两个字符,然后是字符串“abc”并且在无限量字符后由字符串“xyz”跟随。
入侵检测系统(IDS)应用检查所有流过网络的单独数据包的内容,并且标识可能指示尝试闯入或威胁系统的可疑图样。可疑图样的一个示例可以是数据包中的特定文本串,该特定文本串在100个字符以后跟随另一特定文本串。通常使用搜索算法(如用于处理正则表达式的确定有限自动机(DFA)或非确定有限自动机(NFA))执行内容搜索。
发明内容
在一个实施例中,一种将图样编译成非确定有限自动机(NFA)图形的方法包括对该图样进行多个元素和多种节点类型检查。每种节点类型与一个元素相对应。可以对该图样的每个元素进行匹配至少零次。该方法进一步包括生成该NFA图形的多个节点。该多个节点中的每个节点可以被配置成用于针对该多个元素其中之一进行匹配。该元素可以指示该NFA图形中的下一个节点地址、计数值、和/或与该元素相对应的节点类型。该节点还可以指示该元素表示字符、字符类或字符串。字符还可以是一个值或一个字母。
在一个实施例中,该节点类型是以下各项中的至少一项:可变计数、固定计数、固定计数和可变计数、字符、不区分大小写的字符、字符类、字符串、不区分大小写的字符串、标记的和分离的。
在一个实施例中,对该图样进行该节点类型检查可以包括针对以下各节点类型的指示中的至少一种对该图样进行搜索:可变计数节点类型、固定计数节点类型、固定和可变计数节点类型、字符类以及字符串。
在一个实施例中,字符串节点类型可以表示多个值、字母、字符、或其他数据类型的图样。对该图样进行该字符串节点类型检查可以包括确定该图样指示多个连续值。对该图样进行该字符串节点类型检查可以进一步包括确定这些连续值没有介于多种节点类型中间。每个值可以是一个字节、字母、和/或字符。
在一个实施例中,对该图样进行该可变计数节点类型检查可以包括确定该图样指示针对该元素进行匹配可变次数。对该图样进行该可变计数节点类型检查可以进一步包括确定该图样指示针对该元素进行匹配至少零次。
在一个实施例中,一种固定计数节点类型表示有待针对一个元素进行匹配固定次数的图样。该固定计数和可变计数节点类型可以表示有待针对一个元素进行匹配固定次数然后可变次数的图样。该可变次数可以是有限次数或无限次数。对该图样进行该固定计数和可变计数节点类型检查可以包括确定该图样指示针对该元素进行匹配至少一次和最多固定次数或无限次数。该图样包括一个表示无限的符号,该符号用于触发确定该图样指示针对该元素进行匹配该无限次数。
在一个实施例中,一种字符类节点类型可以表示至少一个值的布尔或运算。该方法可以进一步包括存储每个字符类作为遮罩。如果该遮罩中的每个可能的值/字符/字母为该字符类的一部分,则可以设置该值/字符/字母,如果其不是该字符类的一部分,则不设置。每个节点可以包括一个与唯一字符类相对应的字符类索引。字符类编号和有效载荷段可以被用作该遮罩的索引,从而使得如果设置所标引的条目,则图形行走引擎可以确定该有效载荷与该字符类匹配。
在一个实施例中,该可变计数节点类型可以进一步指示该节点为一个贪婪节点、懒惰节点、领属节点、或全匹配节点。该贪婪匹配类型和领属匹配类型的可变计数节点类型可以针对该有效载荷中的最长可能的匹配而进行匹配。然而,当到达该有效载荷的末端后,领属匹配类型的节点类型不回溯,而贪婪匹配类型的节点类型却回溯。懒惰匹配类型的可变计数类型的节点可以针对该有效载荷中的最短可能的匹配而进行匹配。全节点匹配类型的可变计数类型的节点可以针对该有效载荷中的所有匹配而进行匹配。
在一个实施例中,对该图样进行节点类型和元素检查包括标识该图样的至少一部分作为一种字符类节点类型和相应的元素。对该图样进行该节点类型和该元素检查可以包括标识该图样的至少两个部分作为一种字符类节点类型和相应的元素。该方法可以进一步包括为这些部分中的每个部分生成一个位图。该位图中的每个位可以表示一个与该元素匹配的值。每个位图可以与一个字符类索引相关联。该方法可以进一步包括,如果该至少两个部分中的一个第一部分和该至少两个部分中的一个第二部分具有同一个相应元素,则使该第一和第二部分与同一位图相关联。对该图样进行检查可以包括检查多个图样。该第一和第二部分可以在分开的图样中。
在一个实施例中,一种用于将图样编译成非确定有限自动机(NFA)图形的方法可以包括一个图样确定模块,该图样确定模块被配置成用于对该图样进行多个元素和多种节点类型检查。每种节点类型与一个元素相对应。可以对该图样的每个元素进行匹配至少零次。该系统可以进一步包括一个节点生成模块,该节点生成模块被配置成用于生成该NFA图形的多个节点。该多个节点中的每个节点可以被配置成用于针对该多个元素其中之一进行匹配。该节点可以指示与该元素相对应的节点类型。该节点可以进一步指示该NFA图形中的下一个节点地址、计数值、以及该元素表示字符、字符类或字符串。字符还可以是一个值或一个字母。
可变计数节点为针对一个元素进行匹配可变次数的节点,该次数由一个范围(例如,零到五次)限定。可变计数节点可以具有四种特性中的一种:懒惰、贪婪、领属、或全匹配。可变计数懒惰节点被配置成用于找到该范围内的最短可能的元素匹配。可变计数领属节点被配置成用于找到该范围内的最长可能的元素匹配,而不在到达有效载荷的末端时回溯。可变计数贪婪节点被配置成用于找到该范围内的最长可能的元素匹配,其中,当到达有效载荷的末端时进行回溯。可变计数全匹配节点被配置成用于返回有效载荷中的所有匹配。
固定计数节点针对一个元素进行匹配固定次数。固定计数和可变计数图样可以是被配置成用于针对一个范围进行匹配的可变计数图样的表达式,其中,该范围以高于零的数字开始。例如,针对一个元素进行匹配10到20次的可变计数图样可以被表达为针对该元素进行匹配十次的固定计数节点然后针对该元素进行匹配0到10次的可变计数节点。字符串节点为按具体顺序针对字符串(字符集合)进行匹配的节点。
固定-可变计数节点为针对一个元素进行匹配固定次数然后针对同一元素进行匹配可变次数的节点。例如,考虑图样“b{2,5}”,其针对字符元素“b”进行匹配2至5次。这种图样可以被编译成一个具有两个计数值的固定-可变计数节点。第一计数值指示该元素进行匹配的固定次数,并且第二计数值指示对该元素进行匹配的可变次数。该第二计数值可以是例如总的最大值(在本示例中,对该元素共进行五次匹配)或固定匹配完成之后(在本示例中,共三次,或最大可变次数五次与该第一计数两次之间的差值)的最大值。如下所述,固定-可变节点的处理与可变计数节点相同。
标记节点为指示在有效载荷中找到图样的匹配的节点。分离节点为对图形中两条路径之间的选择进行指示的节点。
附图说明
从本发明的示例实施例的以下更具体的说明中上述内容将是明显的,如在这些附图中所展示的,其中,贯穿这些不同的视图,相似的参考字符是指相同的部分。附图不一定按比例,而是着重于展示本发明的实施例。
图1A和图1B为包括网络服务处理器的示例安全装置的框图。
图2A分别为图1A和图1B中所示的网络服务处理器、或协议处理器的框图。
图2B为框图,展示了图2A的引擎(例如,网络服务处理器)的环境的示例实施例。
图3A为图解,展示了NFA图形的示例实施例。
图3B为本发明所使用的NFA图形的示例实施例的图解。
图3C为图解,展示了示出可以使用的其他类型的计数节点的NFA图形的示例实施例。
图4A为现有技术系统所使用的NFA图形的示例实施例。
图4B为图解,展示了本发明所使用的NFA图形的示例实施例。
图4C为使用五个单独节点的图样“USPTO”的常规图形的示例实施例。
图4D展示了使用字符串节点的图形的示例实施例。
图5为图解,展示了NFA图形的示例实施例,该图形展示了本发明的示例实施例。
图6A为框图,展示了编译器处理图样的示例实施例。
图6B为图6A的图样产生的编译NFA图形的图解。
图7为框图,展示了对图样进行编译的示例实施例。
图8为流程图,展示了对图样进行编译的示例实施例。
图9为流程图,展示了图形行走引擎对节点进行处理的示例实施例。
图10为框图,展示了图形行走引擎对NFA图形的节点进行处理的示例实施例。
图11为流程图,展示了使本发明所使用的NFA图形行走的过程。
图12为流程图,展示了对节点进行处理的示例实施例。
图13为流程图,展示了对字符类节点进行处理的示例实施例。
图14为流程图,展示了图形行走引擎对字符串节点进行处理的示例实施例。
图15A和图15B为流程图,展示了对固定计数节点进行处理的示例实施例。
图16为流程图,展示了对可变计数节点进行处理的示例实施例。
图17为流程图,展示了对可变计数懒惰节点进行处理的示例实施例。
图18为流程图,展示了对可变计数贪婪节点进行处理的示例实施例。
图19为流程图,展示了对可变计数领属节点进行处理的示例实施例。
图20为流程图,展示了对可变计数全匹配节点进行处理的示例实施例。
图21为表,展示了字符类中所使用的位图/遮罩的示例实施例。
图22为表,展示了字符类匹配节点的格式。
图23为表,展示了字符串匹配节点的格式。
图24为表,展示了固定计数匹配节点的格式。
图25为表,展示了可变计数匹配节点的格式。
图26为表,展示了字符类匹配堆栈条目的格式。
图27为表,展示了字符串匹配堆栈条目的格式。
图28为表,展示了固定计数匹配堆栈条目的格式。
图29为表,展示了可变计数匹配堆栈条目的格式。
具体实施方式
以下是本发明的多个示例实施例的描述。
戈亚尔(Goyal)等人的被公开为美国公开号2013/0133064的美国第13/303,855号申请“逆向NFA生成和处理(Reverse NFAGeneration and Processing)”和戈亚尔(Goyal)等人的被公开为美国公开号2012/0221497的美国第13/168,395号申请“正则表达式处理自动机(Regular Expression Processing Automaton)”描述了NFA和表达式匹配概念。以上申请的全部教导通过引用结合于此。
perl兼容正则表达式(PCRE)已经成为安全和联网应用中正则表达式语法的约定俗成的标准。随着更多应用需要深度数据包检查已经兴起或更多威胁在互联网中变得普遍,用于标识病毒/攻击的相应特征/图样或应用也已经变得更加复杂。特征数据库从具有简单字符串图样到具有通配字符/范围/字符类的正则表达式(regex)图样进化到高级PCRE特征。高级PCRE特征具体地是指如起始偏移、反向引用、捕捉组、和断言的特征。本发明的实施例支持线速下的高级PCRE特征。
在详细描述本发明的示例实施例之前,以下紧接着描述了可以使用DFA和NFA在其中实施这些实施例的示例网络安全应用,以帮助读者理解本发明的发明特征。
图1A为包括网络服务处理器100的示例安全装置102的框图。安全装置102可以是可以将在一个以太网端口(Gig E)接收到的数据包切换到另一个以太网端口(Gig E)和在转发这些数据包之前在所接收到的数据包上执行多个安全功能的独立系统。例如,安全装置102可以用于在将所处理的数据包转发至局域网之前对在广域网上接收到的数据包执行安全处理。
网络服务处理器100对所接收到的数据包中所封装的开放系统互连网络L2-L7层协议进行处理。如本领域技术人员所熟知的,开放系统互连(OSI)参考模型定义了七层网络协议层(L1-7)。物理层(L1)表示将设备连接到传输媒介的实际接口,包括电气接口和物理接口。数据链路层(L2)执行数据组帧。网络层(L3)将数据格式化为数据包。传输层(L4)处理端到端的传输。会话层(L5)管理设备之间的通信,例如,无论通信是半双工的还是全双工的。表现层(L6)管理数据格式化及表现,例如,语法、控制代码、特殊图形及字符集。应用层(L7)允许多个用户之间进行通信,例如,文件传输及电子邮件。
网络服务处理器100可以为上层网络协议(例如,L4-L7)调度和排列工作(数据包处理操作),并且允许在所接收到的待执行的数据包中进行上层网络协议的处理,以便以线速转发数据包。通过处理这些协议来以线速转发这些数据包,该网络服务处理器不会降低网络数据传送速率。
网络服务处理器100可以包括多个以太网媒体访问控制接口,其中,标准简化的千兆比特媒体独立接口(RGMII)连接至芯片外PHY 104a、104b。
网络服务处理器100还可以通过物理接口PHY 104a、104b从以太网端口(Gig E)接收数据包以及对所接收到的数据包执行L2-L7网络协议处理以及将所处理的数据包转发通过物理接口104a、104b到达网络中的另一跳或最终目的地或通过外围组件互连/外围组件互连扩展接口(PCI/PCI-X)总线106以便由主机处理器进行进一步处理。网络协议处理可以包括网络安全协议的处理,如防火墙、应用防火墙、包括IP安全(IPSec)和/或安全套接字层(SSL)的虚拟专用网(VPN)、入侵检测系统(IDS)和防病毒(AV)。
网络服务处理器100还可以包括用于控制外部本地存储器108的存储器控制器,如动态随机存取存储器(DRAM)和双倍数据速率同步动态随机存取存储器(DDR SDRAM)。在某些实施例中,外部本地存储器118为低延迟存储器。
外部本地存储器118可以用于允许快速查找的互联网服务和安全应用,包括入侵检测系统(IDS)或防病毒(AV)应用或需要字符串匹配的其他应用可能所需的字符串匹配。
根据本发明的一个实施例,网络服务处理器100可以执行图样搜索、正则表达式处理、内容验证、转换和安全以加速数据包处理。正则表达式处理和图样搜索可以用于针对IDS和AV应用以及需要字符串匹配的其他应用执行字符串匹配。
网络服务处理器100中的DRAM控制器可以控制对耦合到网络服务处理器100上的外部动态随机存取存储器(DRAM)108的访问。DRAM 108可以存储从PHY接口104a、104b或PCI/PCI-X接口106接收到的数据包以供网络服务处理器100进行处理。在一个实施例中,DRAM接口支持运行高达800 MHz的64或128位双倍数据速率II同步动态随机存取存储器(DDR II SDRAM)。DRAM还可以存储DFA和NFA图形表达式搜索中查找和图样匹配所需的规则数据。
启动总线110可以提供可以存储在闪速存储器112内并且当网络服务处理器100通电或复位时可以由网络服务处理器100执行的必要启动代码。应用代码还可以通过启动总线110从实施紧凑式闪存标准的装置114、或从可以是磁盘通过PCI/PCI-X总线106附接的另一个大容量装置加载到网络服务处理器100内。
杂项I/O接口116提供辅助接口,如通用输入/输出接口(GPIO)、闪存、IEEE 802双线管理接口(MDIO)、通用非同步收发器(UART)和串行接口。
应认识到,示例安全装置102可以替代性地包括协议处理器101(图1B)。协议处理器101可以包括网络服务处理器100的元件,并且添加了内容处理加速器107,通过PCI/PCI-X连接106耦合到处理器101,并且外部DRAM 111耦合到加速器107。加速器107和DRAM 111可以用于内容搜索应用中,从而在处理器101外部进行所有内容搜索操作。
图2A分别为图1A和图1B中所示的网络服务处理器100、或协议处理器101的框图。网络服务处理器100、和/或协议处理器101使用多个处理器(内核)202提供高应用性能。网络应用可以被分类成数据平面和控制平面操作。内核202中的每个内核可以专用于执行数据平面或控制平面操作。数据平面操作可以包括数据包操作以便转发数据包。控制平面操作可以包括处理复杂的高层协议的多个部分,如互联网协议安全(IPSec)、传输控制协议(TCP)和安全套接字层(SSL)。数据平面操作可以包括处理这些复杂的高层协议的其他部分。
可以由接口单元210a、210b中的任一个通过SPI-4.2或RGM II接口接收数据包。PCI接口224也可以接收数据包。接口单元210a、210b处理L2网络协议,该网络协议对所接收到的数据包进行以下预处理:检查所接收到的数据包内所包括的L2网络协议报头中的各字段。在接口单元210a、210b已经执行L2网络协议处理之后,将数据包转发至数据包输入单元214。数据包输入单元214可以执行所接收到的数据包中所包括的L3和L4网络协议报头的预处理。该预处理包括对传输控制协议(TCP)/用户数据报协议(UDP)(L3网络协议)的校验和检查。
数据包输入单元214可以用对至少一个处理器202中所执行的高层软件方便的格式将数据包数据写入到2级高速缓存212或DRAM 108中的缓冲区中,以便进一步处理高层网络协议。数据包输入单元214还可以支持可编程缓冲区大小并且可以跨多个缓冲区分配数据包数据以支持大的数据包输入大小。
数据包次序/工作(POW)模块(单元)228可以为处理器202对工作(数据包处理操作)进行排队和调度。工作被定义为处理器有待执行的、由工作队列上的条目标识的任何任务。该任务可以包括数据包处理操作,例如,针对有待由在工作队列上的工作队列条目所标识的所接收到的数据包上执行的L4-L7层的数据包处理操作。每个单独的数据包处理操作为处理器有待在存储器(L2高速缓存212或DRAM 108)中所存储的所接收到的数据包上执行的一份工作。例如,该工作可以是所接收到的防火墙/虚拟专用网络(VPN)数据包的处理。防火墙/VPN数据包的处理可以包括以下单独的数据包处理操作(多份工作):(1)碎片整理,以对所接收到的数据包内的碎片进行重新排序;(2)IPSec解密;(3)IPSec加密;以及(4)转发数据包之前的网络地址转换(NAT)或TCP序列号调整。
网络服务处理器100、和/或协议处理器101还可以包括存储器子系统。存储器子系统可以包括每个处理器202中的1级数据高速缓存204、每个处理器202中的指令高速缓存、2级高速缓存212、外部DRAM存储器的DRAM控制器216以及外部本地存储器118(例如,DDR SDRAM)的接口230。该存储器子系统被架构成用于支持多处理器并且被调谐成用于实现存储器密集型内容联网应用所需的高吞吐量和低延迟。处理器202和I/O协处理器装置全都可以共享2级高速缓存212和(图1A和图1B的)外部DRAM存储器108。
网络服务处理器100和/或协议处理器101还可以包括卸载处理器202从而使得网络服务处理器实现高吞吐量的特定用途协处理器。这些特定用途协处理器包括执行以下更加详细描述的非确定型有限自动机(NFA)处理的协处理器244和执行压缩和解压缩的压缩/解压缩协处理器208。
每个处理器202可以是带有指令高速缓存206、1级数据高速缓存204、用于密码算法的内置硬件加速(加密加速模块)200的双发射超标量处理器,其中,通过低延迟存储器总线230直接访问本地存储器。至本地存储器118的低延迟直接访问路径绕过L2高速缓存212并且可以从处理器(内核)202和NFA协处理器244两者直接访问。
在进一步详细描述用于正则表达式处理的内容搜索宏命令和图样搜索的操作之前,将描述网络服务处理器100中的其他模块。在一个示例中,在处理器202已经处理了数据包之后,数据包输出单元(PKO)218从L2高速缓存或DRAM读取数据包数据,执行L4网络协议后处理(例如,生成TCP/UDP校验和),转发数据包通过接口单元210a、210b以及释放用于存储数据包的L2高速缓存212或DRAM 108位置。
每个处理器202通过一致存储器总线234连接至L2高速缓存。一致存储器总线234(在一个实施例中宽度为384位)为用于处理器202、I/O桥(IOB)232与2级高速缓存和控制器212之间的所有存储器和I/O事务的通信通道。
空闲池分配器(FPA)236维护多个指针池,以释放2级高速缓存212及DRAM 108中的存储器。为每个空闲指针池实现带宽高效(后进先出(LIFO))堆栈。如果指针池太大而不能安装在空闲池分配器(FPA)236内,则空闲池分配器(FPA)236使用指针池中用于存储附加指针的释放存储器在2级高速缓存212或DRAM108中建立树/列表结构。
I/O桥(IOB)232管理整体协议及仲裁并且提供一致的I/O划分。IOB 232包括桥238和FAU 240。桥238包括多个缓冲区队列,用于存储有待在I/O总线、一致存储器总线、数据包输入单元214与数据包输出单元218之间传输的信息。
提取和添加单元(FAU)240为支持读取、写入、自动提取和添加、以及自动更新操作的2KB寄存器组。可以从处理器202和数据包输出单元218访问提取和添加单元(FAU)240。寄存器存储高度使用的值并因此减少访问这些值的流量。FAU 240中的寄存器用来维护用于通过数据包输出单元218转发所处理的数据包的输出队列的长度。
PCI接口控制器224具有允许处理器202在网络服务处理器中的本地存储器与远程(PCI)存储器之间在两个方向上异步地移动数据的DMA引擎。
典型地,内容感知应用处理使用或者确定有限自动机(DFA)或者非确定有限自动机(NFA)来识别所接收到的数据包的内容中的图样。DFA和NFA两者都是有限状态机,即,计算模型,计算模型中的每一个都包括状态集合、开始状态、输入字母(所有可能的符号集合)和转换函数。计算在开始状态中开始,并且根据转换函数而改变为新的状态。
图样通常使用正则表达式来表达,正则表达式包括基本元素,例如,诸如A-Z、0-9的正常文本字符以及诸如*、^和|的元字符或其他值。正则表达式的基本元素是要被匹配的符号(单个字符)。这些与允许元素(+)、交替(|)、Kleene星号(*)中的一个或多个匹配的元字符组合,其与元素匹配零次或多次。在一个实施例中,元字符可以由PCRE图样标准来限定。用于级联的元字符用于从单个字符(或子串)创建多个字符匹配图样,而用于交替(|)的元字符用于创建可以匹配两个或更多个子串中任何一个的正则表达式。元字符Kleene星号(*)允许图样匹配任意次数,包括不会发生有效载荷段的在前字符或字符类或字符串与在前字符或字符类匹配。组合不同的运算符和单个字符允许构建复杂的表达式。例如,表达式(th(is|at)*)将匹配以下字符串:th、this、that、thisis、thisat、thatis或thatat。当元字符(?)跟着一个元素时,元字符(?)可以是{0,1}的等效物。例如,图样“zzza?”可以与“zzz”有效载荷匹配或与有效载荷“zzza”匹配。
字符类结构[...]允许列出要匹配的字符的列表,例如gr[ea]y查找grey和gray两者。破折号指示字符的范围,例如[A-Z]或[0-9]。字符类可以进一步具有多个范围,例如,[a-zA-Z0-9]将包括所有字母、小写字母和大写字母、以及所有数字。除了换行字符以外,元字符“.”匹配任何一个字符。此外,元字符“^”指示除了后面的一个字符以外的每个字符。例如,“[^\n]”指示除了“换行”字符以外的每个字符(其中“\n”指示换行)。另一个示例为“[^0-9]”,其指示除了数字“0”至“9”以外的任何字符。
典型地,ASCII字符作为来自0-128或0-256的二进制数分别存储在7位和8位实施例中。例如,换行(或跳行)字符可以被表示为ASCII下的数字12。然后,换行可以用二进制被表示为分别7位和8位实施例中的“0001010”或“00001010”然而,这这对于存储字符类而言不是最佳的。
对DFA或NFA状态机的输入通常是(8位)字节的串,即,字母是单字节(一个字符或符号)。输入流中的每个字节产生从一个状态到另一状态的转换。
DFA或NFA状态机的状态和转换函数可以通过图形来表示,其中,图形中的每个节点表示状态,并且图形中的圆弧表示状态转换。状态机的当前状态由选择特定图形节点的节点标识符来表示。
使用DFA来处理正则表达式并且找到字符的输入流中由正则表达式描述的一个或多个图样的特征在于:
1)确定的运行时间性能:可以从输入字符(或符号)以及DFA的当前状态确定DFA的下一个状态。换言之,每DFA状态仅存在一次状态转换。这样,DFA的运行时间性能被认为是确定的并且完全可以从输入预测行为。
2)支持跨多个数据包匹配所需要的较小的每流上下文(例如,状态或节点指针):在搜索跨越构成流的若干数据包的输入的图样中,搜索可能在一个数据包处停止并且然后在另一个数据包处恢复。通常,确定要恢复搜索的状态需要跟踪、记住或以另外的方式存储(例如,作为状态指针或堆栈条目)直至搜索停止时所遍历的所有状态。然而,在DFA中,为了恢复搜索,仅需要记录搜索停止时的状态。这样,DFA的特征为需要较小的每流上下文,以支持跨多个输入数据包的图样匹配,例如,以若干字节的量级存储状态或节点指针。
3)其中节点的数量(或图形大小)可以随着图样的大小呈指数增长的图形。
相比之下,使用NFA来处理正则表达式并且找到由字符的输入流中的正则表达式所描述的一个或多个图样的特征在于:
1)不确定的运行时间性能:给定输入字符(或符号)和NFA的当前状态,可能存在要转换到其上的NFA的多于一个的下一状态。换言之,不能唯一地从NFA的输入和当前状态确定NFA的下一状态。这样,NFA的运行时间性能被认为是不确定的,并且不能完全从输入预测行为。
2)支持跨多个数据包匹配所需要的较大的每流上下文(例如,状态或节点指针):如前所述,跨多个输入数据包的图样匹配,其中,搜索在一个数据包处停止并且然后在另一数据包处恢复,需要跟踪直至在搜索停止时所遍历的所有状态。在NFA中,越多输入被匹配,需要跟踪的当前状态的数量就越多。这样,可以说,与DFA相比,NFA的特征为需要较大的每流上下文来支持跨多个输入数据包的图样匹配。
3)其中节点的数量(或图形大小)通常随着图样的大小呈线性增长的图形。
图2B为框图250,展示了图2A的引擎252(例如,网络服务处理器,(例如NFA引擎))的环境的示例实施例。引擎252操作性地耦合成用于读取来自指令队列254的一个或多个指令253。指令队列254存储主机所发送的有待由引擎252处理的指令。引擎252通过读取其中所存储的指针对指令253进行处理。指令253中的指针包括到输入缓冲区258(其可以被称为输入堆栈,即使其不具有堆栈的LIFO特性)的条目的指针、到有效载荷262的指针、到匹配结果缓冲区266的指针、到保存缓冲区264(其可以被称为保存堆栈,即使其不具有堆栈的LIFO特性)的指针以及到运行堆栈260的指针。
引擎252将来自指针的一个或多个条目加载至输入缓冲区258(例如,S1、S2、和/或S3)。然后,该引擎将来自输入缓冲区258的一个或多个条目推送至运行堆栈260。在本示例中,该引擎可以将条目S1、S2、和S3推送至运行堆栈260。然后,引擎252弹出运行堆栈上的第一条目(例如,S1)并开始对其进行处理。在一个实施例中,该运行堆栈为后进先出(LIFO)堆栈。来自输入缓冲区258的每个条目(例如,S1、S2、和S3)包括有效载荷偏移和到图形257的指针。然后,该引擎可以加载来自图形存储器256的图形257并开始使用与有效载荷262的偏移相对应的有效载荷段对图形进行处理。
当引擎252使用来自有效载荷262的有效载荷段对图形257进行处理时,其可以将条目推送和弹出至运行堆栈260。当需要将其位置保存在图形中时,引擎252将条目推送至运行堆栈260。当图形呈现多条处理路径时,引擎252需要将其位置保存在图形中。引擎252可以遍历这些路径其中之一,并且在失配情况下,可以返回至运行堆栈260条目中所指示的节点和有效载荷以遍历其他一条或多条路径。图形257中的分离节点或可变计数节点可以在图形中呈现此类多条路径。
在处理有效载荷262和图形257中,有效载荷262可以在处理完成之前用完数据。有效载荷262可以是数据包或来自数据流(或有效载荷流)的其他分组数据。该流可以具有多个有效载荷262(例如,数据包),每个有效载荷262在该流中具有一个顺序。有效载荷262的每个段为该有效载荷的具有具体粒度的部分,如但不限于一个字节。在一个实施例中,该粒度是可调整的或可选的。这种情况的一个示例为当有效载荷262的有效载荷偏移开始朝向数据包的末端并且在数据包结束前进行找到部分匹配时。为了继续该工作,引擎252将当前堆栈条目保存到保存缓冲区264内。从而,当有效载荷用尽时,保存缓冲区264存储运行堆栈260的一个或多个运行堆栈条目。然后,当引擎252从数据包的数据流加载有效载荷262的后续部分时,引擎252可以从保存缓冲区264加载运行堆栈条目并将它们推送至运行堆栈260内以继续该工作。这种将保存缓冲区条目加载到运行堆栈内还可以由主机处理器来执行,同时将指令提交至用于同一流的后续数据包的引擎。
当找到有效载荷262对图形257的匹配后,除非引擎252被配置成用于返回所有匹配,否则其弹出并可以丢弃运行堆栈260内的与从输入缓冲区258加载的工作相关联的所有条目(例如,第一条目S1)。然后,引擎252将结果(例如,匹配位置和长度)保存在匹配结果266存储器内。然后,引擎252可以从之前已经从输入缓冲区258(例如,S2)加载的运行堆栈加载下一个条目。然后,引擎252可以对与那个条目相对应的图形和有效载荷段进行处理,并继续对附加工作进行处理直到运行堆栈260是空的。
当找到有效载荷262对图形257的失配后,该引擎弹出并处理运行堆栈260内的与从输入缓冲区258加载的工作相关联的下一个条目(例如,第一条目S1)。如果运行堆栈260内没有留下与从输入缓冲区258加载的工作相关联的条目(例如,第一目S1),则引擎252完成当前工作并从之前已经从输入缓冲区258加载的运行堆栈加载下一个条目(例如,S2)。然后,引擎252可以对与那个条目相对应的图形和有效载荷段进行处理,并继续对附加工作进行处理直到运行堆栈260是空的。
图3A为图解300,展示了例如戈亚尔(Goyal)等人的被公开为美国公开号2013/0133064的美国第13/303,855号申请“逆向NFA生成和处理(Reverse NFA Generation and Processing)“和戈亚尔(Goyal)等人的被公开为美国公开号2012/0221497的美国第13/168,395申请“正则表达式处理自动机(Regular ExpressionProcessing Automaton)”中所描述的系统所使用的NFA图形320的示例实施例。以上申请的全部教导通过引用结合于此。NFA图形320被配置成用于匹配图样“ab{0,5}x”。“b{0,5}”针对图样中的‘b’在任何地方匹配从零到五次。从而,该图样对以下有效载荷进行匹配:ax、abx、abbx、abbbx、abbbbx、或abbbbbx。
NFA图形320以节点N0 302开始。当加载节点N0 302后,图形行走引擎被配置成用于确定有效载荷的第一段(例如,字节)是否匹配‘a’。如果匹配,则图形行走引擎加载节点N1 304和有效载荷的下一段,并且如果不匹配,则图形行走引擎返回不匹配。
当加载节点N1 304后,如果有效载荷的下一段为‘x’,则图形行走引擎加载为标记节点的节点N7 316。该标记节点指示在有效载荷内找到匹配,从而使得图形行走引擎返回匹配。如果有效载荷的下一段为‘b’,则图形行走引擎加载节点N2 306。如果有效载荷的下一段为除了‘x’或‘b’以外的任何事物,则图形行走引擎确定有效载荷中没有匹配并返回不匹配。
当加载节点N2 306后,如果有效载荷的下一段为‘x’,则图形行走引擎加载为标记节点的节点N7 316。该标记节点指示在有效载荷内找到匹配,从而使得图形行走引擎返回匹配。如果有效载荷的下一段为‘b’,则图形行走引擎加载节点N3 308。如果有效载荷的下一段为除了‘x’或‘b’以外的任何事物,则图形行走引擎确定有效载荷中没有匹配并返回不匹配。
当加载节点N3 308后,如果有效载荷的下一段为‘x’,则图形行走引擎加载为标记节点的节点N7 316。该标记节点指示在有效载荷内找到匹配,从而使得图形行走引擎返回匹配。如果有效载荷的下一段为‘b’,则图形行走引擎加载节点N4 310。如果有效载荷的下一段为除了‘x’或‘b’以外的任何事物,则图形行走引擎确定有效载荷中没有匹配并返回不匹配。
当加载节点N4 310后,如果有效载荷的下一段为‘x’,则图形行走引擎加载为标记节点的节点N7 316。该标记节点指示在有效载荷内找到匹配,从而使得图形行走引擎返回匹配。如果有效载荷的下一段为‘b’,则图形行走引擎加载节点N5 312。如果有效载荷的下一段为除了‘x’或‘b’以外的任何事物,则图形行走引擎确定有效载荷中没有匹配并返回不匹配。
当加载节点N5 312后,如果有效载荷的下一段为‘x’,则图形行走引擎加载为标记节点的节点N7 316。该标记节点指示在有效载荷内找到匹配,从而使得图形行走引擎返回匹配。如果有效载荷的下一段为‘b’,则图形行走引擎加载节点N6 314。如果有效载荷的下一段为除了‘x’或‘b’以外的任何事物,则图形行走引擎确定有效载荷中没有匹配并返回不匹配。
当加载节点N6 314后,如果有效载荷的下一段为‘x’,则图形行走引擎加载为标记节点的节点N7 316。该标记节点指示在有效载荷内找到匹配,从而使得图形行走引擎返回匹配。如果有效载荷的下一段为除了‘x’以外的任何事物,则图形行走引擎确定有效载荷中没有匹配并返回不匹配。
图3B为本发明所使用的NFA图形370的示例实施例的图解。NFA图形370被配置成用于匹配与图3A中相同的图样“ab{0,5}x”。如上所述,“b{0,5}”针对图样中的‘b’在任何地方匹配从零到五次。从而,该图样与以下有效载荷匹配:ax、abx、abbx、abbbx、abbbbx、或abbbbbbx。
节点N0 352为被配置成用于针对元素‘a’进行匹配的字符节点。节点N1 354为被配置成用于针对元素‘b’在任何地方匹配从‘0’和‘5’次的可变计数节点。可变计数节点可以被配置成用于针一个对元素进行匹配任何次数,包括无限次数。节点N2 356为被配置成用于针对元素‘x’进行匹配的字符节点。节点N3 358为被配置成用于表示图样末端并且发出在有效载荷中已经找到匹配的信号的标记节点。
图形行走引擎从NFA图形370加载节点N0 352。然后,图形行走引擎对有效载荷的第一段进行处理。如果该有效载荷段为‘a’,则图形行走引擎加载节点N1 354。否则,图形行走引擎返回不匹配。
当加载节点N1 354后,图形行走引擎将该节点解释为针对字符类‘b’进行匹配从0到5次的可变计数节点。从此节点开始,图形行走引擎被配置成用于针对有效载荷中的这种图样进行匹配,并且然后加载下一个节点(节点N2 356)。然后,节点N2 356确定有效载荷的下一段是否为‘x’。如果是,则图形行走引擎加载节点3358(标记节点),指示图样为匹配。如果不是,则图形行走引擎返回不匹配。以下描述了图形行走引擎使用运行堆栈行走过可变计数节点的特定细节。
NFA图形370标识与图3A的NFA图形320相同的图样,然而用更少的节点来这样做。因此,NFA图形370使用更少的存储器并且具有降低的复杂性。
图3C为图解380,展示了示出其他类型的计数节点的NFA图形390的示例实施例。固定计数节点针对一个元素对有效载荷段搜索固定次数,而不是使用一个范围。例如,图样“ab{5}x”匹配有效载荷“abbbbbx”,但不匹配“ax”、“abx”、“abbx”、“abbbx”、或“abbbbx”。同样,以一个范围而不是零开始的可变计数匹配图样可以被转换成固定计数图样、然后转换成可变计数图样。例如,“ab{5,10}x”还可以被表达为“ab{5}b{0,5}x”。图3C中的NFA图形390示出了这种等效图样。如上所述,这生成用于针对“a”进行匹配的节点N0 382、针对“b”进行匹配五次的节点N1 384、针对“b”进行匹配从零到五次的可变计数节点N2 386、针对“x”进行匹配的节点N3 388、以及用于表示找到匹配的标记节点N4 389。
作为本发明的示例实施例,每个节点存储一个元素,其中,元素为或者单独的值/字符/字母、字符类ID(例如,字符类索引)、或者字符串。每个节点进一步存储其节点类型和节点类型所要求的任何其他信息,例如可变计数节点存储针对每个元素进行匹配的最大(并且可选地最小)次数和其是否为懒惰/贪婪/领属/全匹配类型节点,固定计数节点存储针对每个元素进行匹配的次数。
图4A为现有技术系统所使用的NFA图形440的示例实施例。NFA图形440被配置成用于对“[aA][bB]”图样进行匹配,其对包括“ab”、“aB”、“Ab”、和“AB”的有效载荷进行匹配。
图形行走引擎首先处理节点N0 402。如果有效载荷为“a”,则图形行走引擎加载节点N1 404。然后,图形行走引擎对有效载荷的下一段进行处理。如果有效载荷为‘b’,则图形行走引擎加载节点N3 408,该节点是标记节点。如果有效载荷为‘B’,则图形行走引擎加载节点N4 410,该节点也是标记节点。两个标记节点指令图形行走引擎返回匹配。
另一方面,如果当处理节点N0 402时,图形行走引擎处理为“A”的有效载荷,则图形行走引擎加载节点Node 2 406。然后,图形行走引擎对有效载荷的下一段进行处理。如果有效载荷为‘b’,则图形行走引擎加载节点N5 412,该节点是标记节点。如果有效载荷为‘B’,则图形行走引擎加载节点N6 414,该节点也是标记节点。两个标记节点指令图形行走引擎返回匹配。
NFA图形440甚至可以用短图样如“[aA][bB]”来增加复杂性。即使每个字符类仅指定两个值/字符/字母,则添加至图样的每个附加字符类使图形中的节点数量翻倍。进一步地,字符类可以具有所指示的任何数量的字符,字符越多,则甚至进一步增加图形的复杂性越大。
在一个实施例中,每个字符类可以存储在128位或256位图中。字符类中的每个位表示其相应的ASCII值。例如,位图中的第12位表示“换行”字符。如果第12位为1,其意味着字符类包括“换行”字符。如果第12位为0,则字符类不包括“换行”字符。以相同方式,每个字符类可以存储多个ASCII值。例如,[^\n](即,具有除了换行以外的所有字符的字符类)将除了第12位以外的所有位标记为“1”。举另一个示例来讲,字符类[a-z]包括97–122的ASCII值。因此,字符类[a-z]的位图将具有被设置为“1”的位97–122和被设置为“0”的所有其他位。
当图形行走引擎对有效载荷段与字符类进行匹配时,其可以将有效载荷的ASCII值用作字符类的索引。例如,当字符类为[a-z]时,假设图形行走引擎处理字母“r”,该字母具有为114的ASCII值。图形行走引擎可以访问字符类的第114位并且确定其是否被设置为用于确定其是否与该字符类匹配。这可以用以下逻辑语句来表达:“if(CharacterClass[PayLoadASCIIValue]==true),return match;else return nomatch”,其中,PayLoadASCIIValue为有效载荷的当前段的ASCII值,或者在这种情况下为114。
给定图样还可以包括多个字符类。例如,图样“[a-z][0-9][^\n][a-z]”具有四个字符类,但仅三个唯一字符类(即,[a-z]、[0-9]、和[^\n]),因为[a-z]为重复字符类。所以,编译器首先确定该或这些图样中存在的唯一字符类的数量。然后,编译器为每个字符类分配唯一号码(例如,索引或标识符)。例如,编译器为[a-z]分配为1的索引、为[0-9]分配为2的索引、以及为[^\n]分配为3的索引。即使其出现两次,字符类[a-z]作为位图被存储一次,并且可通过其索引“1”来访问。
编译器存储字符类作为二维矩阵,可以用作为输入的两个索引来对其进行访问。第一索引标识字符类,并且第二索引标识那个字符类内的值。
在NFA图形的上下文中,节点类型=“字符类”的每个节点的“元素”字段包含字符类编号。此外,“可变计数”或“固定计数”类型的节点的“元素”字段还可以是字符类的索引,从而使得图形行走引擎针对该字符类分别进行匹配可变次数或固定次数。
此外,编译器确定所有图样的字符类。例如,编译器可以接收图样一“[a-z][0-9]”、图样二“[a-z][^\n]”以及图样三“[0-9][A-F]”。虽然图样一、二和三共有六个字符类,但其仅具有四个唯一字符类。因此,编译器给[a-z]分配索引1、给[0-9]分配索引2、给[^\n]分配索引3和给[A-F]分配索引4。图形的任何节点可以通过访问字符类的位图来对字符类进行访问,而不管其所出现在其中的一个或多个图样。这减少了存储所有字符类所需的存储器。
在行走过程中,图形行走引擎将节点中所存储的指示(节点类型字符类的)字符类的元素用作第一索引并且将有效载荷段(例如,有效载荷字节)用作具体字符类位图的第二索引。这加载了二维矩阵的具体位,其中,在两个索引的位置处加载的位指示有效载荷段(例如,有效载荷字节)是否在具体字符类内。
图4B为图解450,展示了带有本发明所使用的密集节点和相应字符类矩阵472(例如,位图表)的NFA图形470的示例实施例。NFA图形470被配置成用于对图样“[aA][bB]”进行匹配,其与包括“ab”、“aB”、“Ab”、和“AB”的有效载荷匹配。在本实施例中,NFA图形470利用图形的节点内的字符类来减少图形中节点的数量并降低图形复杂性。编译器确定该图样是否包括两个唯一字符类([aA]和[bB])。编译器为字符类[aA]分配索引0并为字符类[bB]分配索引1,并且两者作为位图存储在二维矩阵中。
字符类矩阵472示出了字符类[aA]和[bB]在其相应索引处的展示。字符类0(即,[aA])示出了用于设置“A”和“a”的条目,并且字符类1(即,[bB])示出了用于设置“b”和“B”的条目。使用相同字符类的其他图形可以利用这些字符类,并且该矩阵可以进一步包括与其他图形不同的字符类。关于图21,示出了字符类矩阵的另一个示例。
图22为表2200,展示了字符类匹配节点的格式。表2200包括节点类型2202、匹配类型2204、元素2206、下一个节点地址2208、以及计数值2210。对于字符类匹配节点而言,节点类型2202指示字符类。匹配类型2204指示其不适用(例如,空值)。元素2206指示用于访问字符类矩阵中的字符类的字符类索引。下一个节点地址2208包括图形中的下一个节点的地址。计数值2210对于字符类匹配节点而言是不适用的。
再次参照图4B,当读取节点N0 452时,图形行走引擎确定节点N0 452是否针对所指定的字符类中的任何值/字符/字母匹配,在这种情况下,其为“a”或“A”,并且加载有效载荷的第一段。图形行走引擎加载节点的节点类型和节点的元素,节点类型指示其为字符类,节点的元素指示字符类具有索引0。然后,图形行走引擎将有效载荷的当前段用作到位图的索引(例如,加载Matrix[0][PayloadSegmentValue])以确定该有效载荷段是否与字符类匹配。如果该有效载荷的第一段为所指定的字符类中的任何值/字符/字母,如从这些索引的位置处的位图加载的值所指示的,图形行走引擎加载由节点N0 452中所存储的“下一个节点地址”所指向的节点N1 454。
当读取节点N1 454时,图形行走引擎确定节点N1 454是否针对所指定的字符类中的任何值/字符/字母匹配,在这种情况下,其为“b”或“B”,并且加载有效载荷的下一段。图形行走引擎加载节点的节点类型和节点的元素,节点类型指示其为字符类,节点的元素指示字符类具有索引1。然后,图形行走引擎将有效载荷的当前段用作位图的索引(例如,加载Matrix[1][PayloadSegmentValue])以确定该有效载荷段是否与字符类匹配。如果该有效载荷的当前段为所指定的字符类中的任何值/字符/字母,如从这些索引的位置处的位图加载的值所指示的,图形行走引擎加载由节点N1 454(即,节点N2 456)中所存储的“下一个节点地址”所指向的节点。当加载节点N2 456时,基于节点N2 456的“节点类型”,图形行走引擎确定其是否为标记节点。然后,图形行走引擎可以返回匹配。
NFA图形470具有降低的复杂性和减少的大小。进一步地,每个字符类中的值/字符/字母的数量不增加或减少NFA图形470的大小。此外,增加图形中不同字符类的数量会线性地增加NFA图形470的大小,而不是增加字符类中的值/字符/字母的数量的倍数。
除了字符类以外,根据本发明的示例实施例,另一种节点类型为字符串节点。字符串节点为一个针对连续值/字母/字符进行匹配的节点。
图23为表2300,展示了字符串匹配节点的格式。字符串节点表2330包括节点类型2302、匹配类型2304、元素2306、下一个节点地址2308、以及计数值2310。节点类型2302指示“字符串匹配”。匹配类型2304不适用(例如,空值)。元素2306指示字符串数据2340的地址。下一个节点地址2308包括图形中的下一个节点的地址。计数值2310指示字符串的长度。
字符串节点2330的元素2306的字符串数据的地址所指示的字符串数据2340包括节点类型2312、匹配类型2314、元素2316、下一个节点地址2318、以及计数值2320。节点类型2312指示其为“字符串数据”。元素2316指示字符串中的字符。匹配类型2314、下一个节点地址2318、以及计数2320全都不适用。
字符串节点的相似变体为不区分大小写的字符串节点。在一个示例实施例中,字符串前面的修饰符可以指示图样中的不区分大小写的字符串节点,如“{i}abc”,其将与以下有效载荷匹配:“abc”、“abC”、“aBc”、“aBC”、“Abc”、“AbC”、“ABc”、和“ABC”。本领域的普通技术人员可以认识到修饰符“{i}”可以是任何所指示的符号或系列符号。
为了处理不区分大小写的字符串节点(以及不区分大小写的字符节点),在进行比较之前,对字母的位之一进行遮罩。例如,大写字母(A-Z)的ASCII值在65-90之间和在97-122之间。‘A’(例如,十进制的97)的二进制表示为1100001,而‘a’(例如,十进制的65)的二进制表示为1000001。因此,在两个二进制值之间,仅一个位不同(例如,位[5],如果从自0开始的最低有效位进行标引)。对于每对相应的不区分大小写的字母字符而言,在比较之前,遮罩元素和有效载荷段内的位[5](其中,每个的最低有效位为零)。该比较返回匹配,因为除了仅表示大写变化的位[5]以外,这些值是相同的。本领域的普通技术人员可以认识到,除了位[5]以外的其他一个或多个位可以用作例如其他字符方案中的遮罩位。
图4C为使用五个单独节点的图样“USPTO”的常规图形475的示例实施例,每个节点进行值/字符/字母检查。因此,常规图形475具有针对‘U’匹配的第一节点N01 476、针对‘S’匹配的第二节点N01 477、针对‘P’匹配的第三节点N02 478、针对‘T’匹配的第三节点N3 489、针对‘O’匹配的第三节点N4 480、以及指示匹配的标记节点N5 481。
图4D展示了使用字符串节点的图形490的示例实施例。节点N0 492为包括指向字符串“USPTO”的指针的字符串节点。节点N0 492指令引擎针对整个字符串“USPTO”进行匹配而不是按照图4C针对每个单独的字母进行匹配并且然后加载下一个节点。
图24为表2400,展示了固定计数匹配节点的格式。对于固定计数节点而言,节点类型2402指示固定计数匹配2402。匹配类型字段2404对固定计数节点而言不适用。对于固定计数匹配节点而言,元素2406可以指示进行匹配所针对的字符,或者其可以指示进行匹配所针对的字符类索引。如果匹配成功,则下一个节点地址2408包含有待处理的下一个节点的地址。计数值2410包含进行元素匹配的固定次数。
图25为表2500,展示了可变计数匹配节点的格式。该节点包括指示可变计数匹配的节点类型2502。该节点进一步包括指示可变计数节点是否为懒惰、贪婪、领属、或全匹配节点的匹配类型2504。元素2506可以包含进行匹配所针对的字符,或者其可以指示进行匹配所针对的字符类索引。如果匹配成功,则下一个节点地址2508包括有待处理的下一个节点的地址。计数值2510包括进行元素匹配的最大次数,其包括用于表示无限的特殊符号。
可选地,计数值2510还可以包含用于存储元素必须匹配的最大次数的第二计数值(如果没有提供第二计数值,则默认为零)。这可以用于表示范围匹配。此类图样还可以由进行元素匹配最小次数的固定计数节点然后进行匹配剩余次数的可变计数节点的组合来表示。
图5为图解500,展示了NFA图形510的示例实施例,该图形展示了本发明的示例实施例。NFA图形510被配置成用于检测图样“[^\n]*[zZ]b{5}”,其中,[^\n]为指示除了换行字符以外的任何值/字符/字母的字符,并且[“zZ”]为表示或者“z”或者“Z”的字符类。
节点N0 502为可变计数节点。可变计数节点可以是或者懒惰、贪婪、领属(其是贪婪节点的优化形式)或全匹配类型节点。当从图样编译图形时,设置节点类型。用户可以在图样中指示可变计数节点应被编译为哪种匹配节点类型。可替代地,取决于所希望的图形行为,用户还可以将编译器设置为默认到四种模式中的任何模式。假设图形行走引擎处理有效载荷“yyyZbbbbbzyyyZbbbbb”。
如果节点N0 502是懒惰的,则图形行走引擎找出到下一个节点(节点N1 504)的可能的最短路径。即,图形行走引擎在节点N1 504而不是在节点N0 502处理有效载荷中的“z”或“Z”的第一实例,即使节点N0 502元素包括找出除换行以外的任何有效载荷段,其包括“z”或“Z”。然而,如果节点N0 502以此类方式处理有效载荷,则其将不利用通过图形的最短路径。
当按照可变计数懒惰节点处理节点N0时,图形行走引擎将具有零有效载荷偏移的节点N0的运行堆栈条目推送至运行堆栈。当推送运行堆栈条目后,图形行走引擎提取下一个节点N1 504。图形行走引擎提取与零有效载荷偏移相对应的下一个有效载荷字节(‘y’),并试图使其与节点N1 504的元素字符类[zZ]匹配。由于该字节与该字符类不匹配,图形行走引擎弹出该运行堆栈条目。然后,图形行走引擎对带有包含节点N0 502的所弹出的堆栈条目的同一字节进行处理。字节‘y’与字符类[^\n]匹配,所以其实现匹配。然后,图形引擎使有效载荷偏移增量1并推送包含节点N0 502的运行堆栈条目。
当推送运行堆栈条目后,图形行走引擎提取下一个节点N1504。图形行走引擎提取与1有效载荷偏移相对应的下一个有效载荷字节,‘y’,并试图使其与节点N1 504的元素字符类[zZ]匹配。由于该字节与该字符类不匹配,图形行走引擎弹出该运行堆栈条目。然后,图形行走引擎对带有包含节点N0 502的所弹出的堆栈条目的同一字节进行处理。字节‘y’与字符类[^\n]匹配,所以其实现匹配。图形行走引擎使有效载荷偏移增量1并推送包含节点N0 502的运行堆栈条目。
当推送运行堆栈条目后,图形行走引擎提取下一个节点N1504。图形行走引擎提取与2有效载荷偏移相对应的下一个有效载荷字节(‘y’),并试图使其与节点N1 504的元素字符类[zZ]匹配。由于该字节与该字符类不匹配,图形行走引擎弹出该运行堆栈条目。然后,图形行走引擎对带有包含节点N0 502的所弹出的堆栈条目的同一字节进行处理。字节‘y’与字符类[^\n]匹配,所以其实现匹配。图形行走引擎使有效载荷偏移增量1并推送包含节点N0 502的运行堆栈条目。
当推送运行堆栈条目后,图形行走引擎提取下一个节点N1504。图形行走引擎提取与3有效载荷偏移相对应的下一个有效载荷字节(‘Z’),并试图使其与节点N1 504的元素字符类[zZ]匹配。由于该字节与该字符类匹配,图形行走引擎提取下一个节点N2 506。
然后,图形行走引擎加载固定计数节点N2,该节点针对‘b’进行匹配五次。图形行走引擎加载有效载荷的下五个段,所有这些段为‘b’,固定计数节点与其元素匹配,该元素也为‘b’。在固定计数节点N2 506匹配之后,然后,图形行走引擎加载为标记节点的节点N3 508。标记节点指示找到匹配。然后,如果复制位为‘1’,则图形行走引擎弹出运行堆栈中的所有条目并丢弃它们,在这种情况下,其丢弃运行堆栈中的包含具有有效载荷偏移3的节点N0 502的单个条目。复制位为一个标志位,当到达NFA图形中的标记节点后(例如,找出有效载荷中的匹配),可以从运行堆栈弹出标志标记复制位(例如,设置为‘1’)的任何运行堆栈条目并将其丢弃而不进行进一步处理。如果没有标记复制位(例如,设置为‘0’),则当被弹出后,不丢弃运行堆栈条目,而是被处理以试图找到附加(例如,针对全匹配节点)匹配。
关于图17,更加详细地描述了处理可变计数懒惰节点。
如果节点N0 502是贪婪的,则图形行走引擎找出到下一个节点(节点N1 504)的可能的最长路径。例如,有效载荷中的第一“z”或“Z”不一定意味着处理节点N1 504。假设图形行走引擎处理“yyyZbbbbbzyyyZbbbbb”的相同有效载荷。虽然懒惰节点N0 502返回“yyyZbbbbb”作为匹配,但贪婪节点N0 502返回“yyyZbbbbbzyyyZbbbbb”。换言之,节点N0 502忽略第一可能的匹配而继续对有效载荷进行匹配以找到最长可能的匹配。以此类方式对有效载荷进行匹配需要图形行走引擎保存其步伐,例如,通过将有效载荷位置的节点和偏移推送至运行堆栈。这样,如果图形行走引擎到达有效载荷末端而没有找到匹配,其可以从运行堆栈弹出节点从而回溯以匹配早前可能的匹配。
在本发明的一个示例实施例中,在处理贪婪或领属节点N0502时,图形行走引擎加载有效载荷的字节并针对元素对它们进行匹配直到其找到非匹配或其用完有效载荷。因为字符类为[^\n],其涵盖有效载荷中的所有值/字符/字母,所以图形行走引擎用完有效载荷。然后,图形行走引擎将节点推送至包括被设置的复制位、有效载荷偏移、和指示当匹配可变计数节点内指示的元素时所消耗的字节数量的计数(即,在这种情况下,该计数为19)的运行堆栈。然后,图形行走引擎加载字符类节点N1 504,但由于没有来自有效载荷的字节以供消耗,其返回非匹配。
然后,图形行走引擎从运行堆栈弹出可变计数节点并将该计数减少1。然后,图形行走引擎将节点推送至包括被设置的复制位、有效载荷偏移、和指示所消耗的字节数量的计数(18)的运行堆栈。然后,图形行走引擎加载字符类节点N1 502。图形行走引擎试图消耗有效载荷中的第19字节,其为‘b’,但这不与节点N1 504的字符类[zZ]匹配。然后,图形行走引擎再次弹出运行堆栈条目。重复此内容直到计数减少至节点N1 504消耗的字节为一个匹配的数量,其是当该计数为13时。当该计数为13时,可变计数节点有效地消耗“yyyZbbbbbzyyy”。然后,节点N1 504试图消耗第14字节,其为“Z”,其是针对字符类[zZ]的匹配。然后,图形行走引擎加载节点N2 506。节点N2消耗有效载荷中的下5个“b”。然后,图形行走引擎加载节点N3 508,其是指示找到匹配的标记节点。处理标记节点N3 508之后,图形行走引擎弹出并丢弃复制位被设置为1的所有运行堆栈条目,并且在这种情况下,运行堆栈中仅存在一个此类条目。因此,贪婪节点发现有效载荷中的最长匹配。设置/未设置复制位是将引擎在运行时间期间推送的(标记)运行堆栈条目与也存在于运行堆栈中的初始输入缓冲区条目分开,然而,这还可以通过其他方式来实现。关于图18,更加详细地描述了处理可变计数贪婪节点。
如果节点N0 502是领属的,则图形行走引擎找出到下一个节点(节点N1 504)的可能的最长路径。针对领属节点,图形行走引擎产生于上述贪婪节点相同的结果,但执行以下更优化的过程:如关于图19更加详细描述的,当到达有效载荷末端后不回溯。
如果节点N0 502为可变计数全匹配节点,则图形行走引擎找出到下一个节点(节点N1 504)的可能的所有可能的路径。图形行走引擎可以针对可变计数全匹配节点返回多个匹配。关于图20,更加详细地描述了处理可变计数全匹配节点。
图6A为框图600,展示了编译器604处理图样602的示例实施例。在本示例中,图样602为“ACMEa*b{5,10}c{5}[def]”。图样602包括可以分别被分成字符串节点(例如,“ACME”)、可变计数节点(例如,“a*”)、固定计数和可变计数节点(例如,可转换成“b{5}b{0,5}”的“b{5,10}”)、固定计数节点(例如,c{5})以及字符类(例如,[def])的图样段620、622、624、626和628。
编译器604包括字符串检测模块610、可变计数检测模块612、固定计数检测模块614、固定计数和可变计数检测模块616、以及字符类检测模块618。每个模块610、612、614、616和618接收图样602、或其中对应的图样段620、622、624、626、和628,并基于图样为图形组装模块606组装的编译NFA图形640生成节点630、632、634、636a-b、638。
在另一个实施例中,编译器604对图样602进行元素和元素类型而非单独模块检查以针对每个元素和节点类型进行匹配。
图6B为图6A的图样602产生的编译NFA图形640的图解601。编译NFA图形640以针对字符串“ACME”进行匹配的字符串节点650开始。然后,图形640具有被配置成用于针对元素“a”进行匹配无限次数的下一个可变计数节点652。可变计数节点可以或者是懒惰的、贪婪的、领属的或者全的。基于图样的语法,该节点可以被设置为懒惰的、贪婪的、领属的或全匹配类型。例如,如果元字符后面跟着第二元字符“?”,如图样“*?”、“+?”、“??”或“{n,m}?”,则编译器可以创建匹配类型懒惰可变计数节点。如果元字符后面跟着第二元字符“+”,如图样“*+”、“++”、“?+”和“{n,m}+”,则编译器可以创建匹配类型领属节点。例如,如果元字符后面跟着第二元字符“*”,如图样“**”、“+*”、“?*”、和“{n,m}*”,则编译器可以创建匹配类型全可变计数节点。
例如,考虑有效载荷“abbbbbbb”。针对“ab*”图样,生成贪婪匹配类型可变计数节点。结果是节点消耗整个有效载荷,从而使得结果为“abbbbbbb”。
类似地,针对“ab*+”图样,创建领属匹配类型可变计数节点。领属节点具有与贪婪节点类似的特性,然后,被配置成用于当到达有效载荷末端后不进行回溯。同样,结果为可变计数领属节点此处消耗整个有效载荷并且不进行回溯,从而使得结果为“abbbbbbb”,这刚好与贪婪节点相同。
针对““ab*?”图样,创建懒惰匹配类型可变计数节点。结果为,可变计数节点消耗最短可能匹配,其为“a”。
针对“ab**”图样,创建全匹配类型可变计数节点。结果为,找到全可能匹配,从而使得找到“a”、“ab”、“abb”、“abbb”、“abbbb”、“abbbbb”、“abbbbbb”、和“abbbbbbb”。
在其他实施例中,各种符号可以用于例如通过指定特殊字符为图样的前缀或后缀来指示匹配类型。在其他实施例中,生成图形640的编译器的设置可以设置节点的匹配类型。
然后,图形640具有固定计数节点654a和可变计数节点654b,其基于逻辑上被分成b{5}和“b{0,5}”的“b{5,10}”图样段。固定计数节点654a针对“b”进行匹配五次。可变计数节点654b针对“b”在任何地方进行匹配从零到五次。然后,图形640具有在有效载荷中针对“c”进行匹配五次的固定计数节点656。字符类节点658针对元素[def]进行匹配,其为字符“d”、“e”、或“f”中任一项。
该图形还可以针对作为可变计数节点或固定计数节点的一部分的字符类进行匹配。例如,图样“[xyz]{0,5}”编译成针对字符类[xyz]进行匹配从零到五次的可变计数节点。例如,“xyzzx”是与该图样匹配的有效载荷。
图7为框图700,展示了对图样702进行编译的示例实施例。图样确定模块703对图样702进行匹配项检查。匹配项包括元素和节点类型。如果图样确定模块703找到匹配项,则其将该匹配项作为元素704和节点类型706输出至节点生成模块708。如果图样确定模块703没有找到匹配项,则其指示图样结束,并且图样确定模块703可以消耗另一个图样,或者如果没有更多图样,则完成编译。节点生成模块708生成包括元素704和节点类型706的密集节点710,该元素可以是值/字符/字母、字符类、或字符串,该节点类型可以是值/字符/字母、字符类、可变计数、固定计数、可变计数和固定计数、字符串、或分离节点(用于交替)或用于宣布匹配的标记节点(被用作图形的最终节点)。
图8为流程图800,展示了对图样进行编译的示例实施例。编译以对图样进行匹配项检查而开始,匹配项包括元素和节点类型(802)。然后,该方法确定是否找到匹配项(804)。如果找到了,则该方法生成指示节点类型和元素的节点(806)如果没找到,则该方法结束(808)并可选地对另一个图样进行编译。
图9为流程图900,展示了图形行走引擎对节点进行处理的示例实施例。图形行走引擎从节点提取节点类型和元素(902)。如上所述,该元素可以是值/字符/字母、字符类索引、或字符串值。然后,图形行走引擎确定节点是否需要继续与同一元素进行匹配(904)。图形行走引擎可以例如通过使用索引或计数变量来跟踪其针对可变计数节点或固定计数节点已经匹配的元素的数量。如果节点类型指示继续针对该元素进行匹配,则图形行走引擎使有效载荷段与该元素匹配(906)。然后,图形行走引擎确定该有效载荷段是否该元素匹配(910)。如果匹配,则确定该节点需要继续进行匹配(904)。如果节点类型不指示继续进行匹配,则图形行走引擎针对该节点返回匹配或不匹配(908),并且可用于处理图形中的下一个节点。
如果该有效载荷段与该元素不匹配(910),然而,图形行走引擎返回不匹配(912)。
图10为框图1000,展示了图形行走引擎对NFA图形1002的节点1004a-d进行处理的示例实施例。确定模块1006接收包括节点1004a-d的NFA图形1002。NFA图形1002可以包括任意数量的节点1004a-d。进一步地,在一个实施例中,确定模块1006可以接收单独节点1004a-d。确定模块1006将节点类型1008和元素1010输出至匹配模块1011。基于节点类型1008,匹配模块1011针对元素1010对一个或多个有效载荷段1014进行匹配。匹配模块1011可以接收基于节点类型1008的一个或多个附加段1014,例如,被配置成匹配一个或多个有效载荷段的可变计数节点或固定计数节点。当完成处理后,匹配模块1011输出匹配或不匹配1012。可选地,匹配模块1011可以请求确定模块1006处理NFA图形1002的下一个节点。匹配模块1011可以进一步处理早前或稍后的有效载荷段以及NFA图形的早前或稍后的节点。
图11为流程图1100,展示了使本发明所使用的NFA图形行走的过程。在一个实施例中,执行该过程的元素可以是与关于图2B中所示的框图250描述的元素。
图形行走引擎252包括多个存储器,这些存储器存储用于保存步伐通过图形的其他部分的路径的运行堆栈260和当有效载荷以仅部分匹配完成被处理时用于存储保存缓冲区/堆栈264的保存缓冲区/堆栈264,从而使得当加载同一流的下一个有效载荷时,该引擎可以从保存缓冲区将堆栈条目重新加载到运行堆栈内。在一个实施例中,运行堆栈260或保存缓冲区264可以被保持为片上存储器中的循环缓冲区,并且其可以溢出至外部系统存储器,但可以使用其他堆栈实现方式和存储器类型。并且,当将下一个指令馈送至引擎以处理同一流的后续有效载荷时,主机可以从保存缓冲区将条目拷贝(移动)到运行堆栈(输入缓冲区)内。
运行堆栈260将堆栈条目推送至头指针并从头指针弹出堆栈条目。保存缓冲区/堆栈对其尾指针处的堆栈条目进行排队。因为保存缓冲区/堆栈264对其尾指针处的条目进行排队(例如LILO),其被结构化为一个队列。与处理器耦合的主机为初始运行堆栈提供至少一个填充的条目(例如,从图2的输入缓冲区258输入)。该主机还可以提供初始指令(例如,来自指令队列254)。行走指令包含以下与堆栈相关的信息:(1)运行堆栈头指针;(2)保存堆栈尾指针;(3)运行堆栈条目的数量;以及(4)按照条目数量的运行堆栈和保存堆栈大小。
在本发明的一个示例实施例中,运行堆栈条目包括指示节点类型字段、复制字段、逆向处理字段、有效载荷偏移字段、类型特定数据字段、和地址字段的字段。如果节点类型为“NOP”(例如,无操作(No-op)),则图形行走引擎丢弃运行堆栈条目并弹出有待处理的下一个运行堆栈条目。如果节点类型为提取(Fetch),则运行堆栈条目不包含节点信息,并且类型特定数据字段无效。如果该类型为除了“NOP”或Fetch以外的任何类型(例如,固定字符、可变计数、分离节点、字符串节点、字符类、字符、或标记节点),则运行堆栈条目本身包含类型特定数据字段中的节点信息。下表列出了可能的节点类型。
复制字段用于将图形行走引擎在运行时间期间推送的运行堆栈条目与也存在于同一运行堆栈中的初始输入缓冲区条目分开。逆向字段指示是否应在处理当前节点后使有效载荷偏移增量或减量。这允许在正向和逆向上处理有效载荷。偏移字段指示当前节点所处理的有效载荷的位置。如果节点类型为提取,则地址字段包含起始节点地址。以另外的方式,如果当处理堆栈条目时有效载荷匹配,则地址字段包含有待提取的下一个节点的地址。
将运行堆栈条目推送到运行堆栈260内允许图形行走引擎处理其他NFA节点或NFA图形的另一个分支,同时如果在那个分支中没有找到匹配,则能够返回到运行堆栈260内所记录的节点。
保存缓冲区/堆栈264允许图形行走引擎保存部分匹配,例如,在图形行走引擎到达有效载荷的末端的情况下。当加载同一流的后续有效载荷后,该引擎将堆栈条目从保存缓冲区/堆栈264拷贝到运行堆栈260内。在另一个实施例中,当向图形行走引擎提供下一个指令后,主机装置的主机软件可以将保存堆栈的内容拷贝至输入堆栈。在本实施例中,由于图形行走引擎由主机软件管理,其没有意识到数据包流或该流中的后续数据包。图11展示了实现所述使用运行堆栈和保存堆栈的系统的示例实施例,然而,本领域的普通技术人员可以设想其他实现方式。
该过程以启动图形行走而开始(1102)。然后,该过程确定运行堆栈(例如,运行堆栈260)是否是空的(1104)。如果运行堆栈(例如,运行堆栈260)是空的,则该过程返回(1122)。响应于来自主机的指令253,可以从输入缓冲区258推送运行堆栈(例如,运行堆栈260)条目。如果运行堆栈(例如,运行堆栈260)不是空的(例如,具有至少一个条目),则图形行走引擎(例如,引擎252)弹出运行堆栈(例如,运行堆栈260)以加载下一个堆栈条目(1106)。该运行堆栈(例如,运行堆栈260)是后进先出数据结构,所以从该运行堆栈(例如,运行堆栈260)弹出的条目是最近被推送到该运行堆栈(例如,运行堆栈260)内的条目。
然后,图形行走引擎确定该运行堆栈条目是否存储节点信息(1108)。如果存储,则图形行走引擎从所弹出的运行堆栈条目读取节点信息(1110)。如果没有存储,则图形行走引擎从所弹出的运行堆栈条目所指示的存储器地址提取节点(1112)。
然后,图形行走引擎在结果中设置“终止行走”位(也被称为“完成(done)”位)为假(1114)。然后,图形行走引擎对运行堆栈条目(1118)所指示的节点进行处理,这关于图12进行了更加详细的解释。关于图11,然后,图形行走引擎确定该终止行走位在被处理的节点内是否被赋值为真(TRUE)(1120)。如果没有,则图形行走引擎提取在当前节点的“下一节点地址”字段处所指示的节点(1116)。如果有,则图形行走引擎确定该运行堆栈是否是空的(1104)。
图12为流程图1200,展示了对节点进行处理的示例实施例。流程图1200为图11的对节点进行处理(1118)的扩展。
图形行走引擎开始处理节点(1202)。图形行走引擎确定该图形行走引擎是否为密集节点(1204)。如果其不是密集节点,则该图形行走引擎按照非密集NFA节点(例如,字符节点、分离节点、或标记节点)对该节点进行处理(1214)。然后,图形行走引擎返回(1224)。
如果该节点为密集图形节点(1204),则图形行走引擎确定该节点是否为字符类节点(1206)。如果是,则图形行走引擎对该字符类节点进行处理(1216)。关于图13,更加详细地描述了处理字符类节点。然后,该图形行走引擎返回(1224)。
如果该节点不是字符类节点(1206),则图形行走引擎确定该节点是否为字符串节点(1208)。如果是,则图形行走引擎按照字符串节点对该节点进行处理(1218)。关于图14,更加详细地描述了处理字符串节点。然后,图形行走引擎返回(1224)。
如果该节点不是字符串节点(1208),则图形行走引擎确定该节点是否为固定计数节点(1210)。如果是,则其对该固定计数节点进行处理(1220)。关于图15,进一步详细地描述了处理固定计数节点。然后,图形行走引擎返回(1224)。
关于图12,如果节点不是固定计数节点(1210),则图形行走引擎确定该节点是否为可变计数节点(1211)。如果是,则图形行走引擎按照可变计数节点对该节点进行处理(1222)。关于图16,进一步详细地描述了处理可变计数节点。然后,图形行走引擎返回(1224)。如果图形行走引擎确定该节点为可变计数节点(1211),则其返回错误代码(1226)。
图形行走引擎可以使用对该节点进行处理的其他实施例。例如,图形行走引擎可以通过以不同的顺序检查每种节点类型来确定该节点的类型。
图13为流程图1300,展示了对字符类节点进行处理的示例实施例。关于图22,以上描述了字符类节点的格式。关于图13,流程图1300为图12中所描述的对字符类节点进行处理(1216)的扩展。
图26为表2600,展示了在对字符类节点类型进行处理的上下文中推送的堆栈条目的示例实施例。该堆栈条目包括指示字符类匹配的堆栈条目类型2602、指示字符类索引的元素2606、以及指示图形中的下一节点的下一节点地址2608。该堆栈条目进一步包括复制位2612、逆向位2614(指示图形是否要逆向行走)、以及指示下一字节的偏移以在有效载荷中进行处理的偏移位2616。该堆栈条目进一步包括匹配类型2604和计数值2610,这两个都指示它们不适用。字符类堆栈条目仅被排队到保存缓冲区/堆栈内,并且不被推送至运行堆栈,因为没有必要将其推送到运行堆栈内。
关于图13,图形行走引擎开始对字符类节点进行处理(1302)。图形行走引擎从字符类节点(例如,图22的元素2206)加载字符类索引,并使用该字符类索引读取二维矩阵中所存储的位图/遮罩(1304)。然后,图形行走引擎检查有效载荷中是否存在至少又一个字节要处理(1306)。
如果存在至少又一个字节,则图形行走引擎从有效载荷提取下一字节(或其他数据大小)(1308)。图形行走引擎使用有效载荷的字节来访问位图/遮罩的位(或其他数据大小)和确定是否设置该位(1310)。如果设置了该位,则图形行走引擎确定该有效载荷的字节与节点所表示的字符类匹配,并返回(1312)。如果没有设置该位(1310),则图形行走引擎将结果中的终止行走位设置为“真”(1314)并且然后返回(1312)。终止行走位指示当前图形行走没有找到匹配并且指示该引擎应中止当前图形行走线程而不是提取图形的下一个节点。
在其他方面,如果图形行走引擎确定不再有要处理的有效载荷(1306),则图形行走引擎将节点推送至保存缓冲区/堆栈,从而使得可以针对同一流的后续数据包恢复匹配(1316)。然后,图形行走引擎将结果中的终止行走位设置为“真”(1314)并且然后返回(1312)。
图14为流程图1400,展示了图形行走引擎对字符串节点进行处理的示例实施例。如上所述,关于图23,展示了字符串节点的格式和字符串数据。关于图14,流程图1400为关于图12所描述的对字符串节点进行处理(1218)的扩展。
图27为表2700,展示了用于字符串匹配类型的堆栈条目的示例实施例。堆栈条目包括指示字符串匹配的堆栈条目类型2702、指示剩余字符串数据的地址的元素2706、指示图形中的下一节点的下一节点地址2708、以及指示有待处理的字符串的剩余长度的计数值2710。该堆栈条目进一步包括指示运行堆栈中的条目是否为副本的复制位2712、指示图形是否要逆向行走的逆向位2714、以及指示下一字节的偏移以在有效载荷中进行处理的偏移位2716。该堆栈条目进一步包括指示其不适用的匹配类型2704。针对字符串匹配类型,堆栈条目被排队到保存缓冲区/堆栈,因为不需要将它们推送至运行堆栈。
关于图14,图形行走引擎开始对字符串节点进行处理(1402)。图形行走引擎加载字符串数据,其包括来自节点的字符串的长度(例如,图23的字符串节点2330的计数2310),确定有效载荷中可用字节的数量(或其他数据大小),以及确定有效载荷中可用字节的数量是否等于大于字符串的长度(1404)。如果是,则图形行走引擎将“匹配长度”设置为“字符串长度”(1406)。以另外的方式,图形行走引擎将“匹配长度”设置为可用有效载荷段的数量(1404)。“匹配长度”为字符串的有待与有效载荷匹配的字节数量。如果匹配长度小于字符串长度(1404),则匹配长度被设置为可用字节数量,从而使得字符串可以是部分匹配的,并且继续进行与后续数据包的匹配。
设置匹配长度之后,(1404或1406),图形行走引擎从有效载荷中提取多个字节,其中,字节的数量为该匹配长度,并且还提取字符串数据节点(例如,图23的字符串数据2340)(1408)。字符串数据节点包括有待与有效载荷段进行比较的实际字符串元素(例如,图23的字符串数据2340的元素2314)。然后,图形行走引擎将所提取的有效载荷段的数量与相同字符串字节数量进行并行比较(1410)。然后,节点确定有效载荷的“匹配长度”字节是否与所有所提取的字符串字节匹配(1412)。如果不匹配,则图形行走引擎将结果的终止行走位设置为真(1418)并且返回(1420)。如果有效载荷的字节与字符串的字节匹配(1412),则图形行走引擎确定匹配长度是否与字符串长度相同(1414)。
如果匹配长度和字符串长度相同(1414),则图形行走引擎返回(1420)。如果匹配长度和字符串长度不相同(1414),则图形行走引擎将包含字符串的剩余长度的堆栈条目(图27)推送至保存缓冲区/堆栈,从而使得来自同一流的后续有效载荷的剩余“字符串长度”字节可以与“剩余字符串数据”、和以上关于图27中所描述的信息一起匹配(1416),将结果的终止行走位设置为真(1418)并返回(1420)。
图15A和图15B为流程图1500和1501,展示了对固定计数节点进行处理的示例实施例。关于图24,以上描述了固定计数节点的格式。关于图15A-B,流程图1500和1501为关于图12所描述的对固定计数节点进行处理(1220)的扩展。
图28为表2800,展示了固定计数匹配类型的堆栈条目的示例实施例。堆栈条目包括指示固定计数匹配的堆栈条目类型2802、指示字符或字符类索引的元素2806、指示图形中的下一节点的下一节点地址2808、以及指示有待匹配的字节的剩余计数的计数值2810。该堆栈条目进一步包括指示运行堆栈中的节点是否为副本的复制位2812、指示图形是否要逆向行走的逆向位2814、以及指示下一字节的偏移以在有效载荷中进行处理的偏移位2816。该堆栈条目进一步包括指示其不适用的匹配类型2804。针对固定计数匹配类型,堆栈条目被排队到保存缓冲区/堆栈,因为不需要将它们推送至运行堆栈。
关于图15A,图形行走引擎开始对固定计数节点进行处理(1502)。图形行走引擎读取节点中所存储的“计数”(例如,图24的计数值2410)(1504)。节点中所存储的计数表示字符或字符类有待与有效载荷匹配的次数。例如,针对源自部分图样“b{5}”的固定节点,因为字符‘b’要与有效载荷匹配5次,计数为5。
然后,图形行走引擎确定有效载荷中是否有可用的字节“计数”数量(1506)。如果有,则图形行走引擎将匹配长度设置为“计数”(1510)。以另外的方式,图形行走引擎将匹配长度设置为可用有效载荷段的数量(1508)。“匹配长度”为固定计数图样的有待与有效载荷匹配的字节数量。如果匹配长度小于固定计数节点的计数(1508),则匹配长度被设置为可用字节数量,从而使得固定计数节点可以是部分匹配的,并且继续进行与同一流的后续数据包的匹配。设置匹配长度(1508或1510)之后,图形行走引擎从有效载荷提取字节的“匹配长度”数量的字节(1512)。
然后,图形行走引擎例如通过读取图24的元素2406中的数据来确定节点是否为固定计数字符类节点或固定计数字符节点,该数据指示字符类中的字符或索引数量(1514)。如果其为固定计数字符类节点(1514),则图形行走引擎使用从固定字符类节点(例如,图24的元素2406)提取的字符类索引来读取字符类位图/遮罩(1516)。然后,图形行走引擎试图使“匹配长度”数量的有效载荷段与遮罩中的相应条目并行匹配(1518)。以与以上字符类节点的上下文中所述的相同的方式执行字符类节点匹配。如果节点为固定计数字符节点(1514),图形行走引擎将“匹配长度”数量的有效载荷段平行于节点中所存储的元素(例如,图24的元素2406)进行匹配(1520)。
确定节点是否为固定计数字符类节点或固定计数字符节点(1514)和响应于该确定(分别为1516和1518或1520)之后,参照图15B的流程图1501,图形行走引擎确定有效载荷的“匹配长度”数量的字节是否与该字符或字符类匹配(1522)。如果匹配,则图形行走引擎确定该匹配长度是否与该固定计数节点的计数相同(1524)。如果相同,则图形行走引擎返回(1530)。如果不相同,图形行走引擎将堆栈条目(图28)推送至保存缓冲区/堆栈,从而使得来自同一流的后续有效载荷的剩余“计数”字节与剩余固定计数节点元素(1526)匹配,将结果的终止行走位设置为真(1528)并返回(1530)。
如果有效载荷的“匹配长度”数量的字节与字符类的字符不匹配(1522),则图形行走引擎将结果的终止行走位设置为真(1528)并返回(1530)。
图16为流程图1600,展示了对可变计数节点进行处理的示例实施例。关于图25,以上描述了可变计数节点的格式。关于图16,流程图1600为关于图12所描述的对可变计数节点进行处理(1222)的扩展。
图29为流程图2900,展示了用于可变计数匹配类型的堆栈条目的示例实施例。该堆栈条目包括指示可变计数匹配的堆栈条目类型2902、指示字符或字符类索引的元素2906、指示图形中的下一节点的下一节点地址2908、以及指示有待匹配的字节的剩余计数的计数值2910。该堆栈条目进一步包括指示运行堆栈中的节点是否为副本的复制位2912、指示图形是否要逆向行走的逆向位2914、以及指示下一字节的偏移以在有效载荷中进行处理的偏移位2916。该堆栈条目进一步包括指示节点是否为懒惰、贪婪、领属、或全匹配节点的匹配类型2904。可以将该堆栈条目推送和弹出至运行堆栈,或在用尽有效载荷的情况下,可以将其从运行堆栈拷贝至保存缓冲区/堆栈。
关于图16,图形行走引擎开始对可变计数节点进行处理(1602)。图形行走引擎加载图25的匹配类型2504并确定该节点匹配类型是否为懒惰的(1604)。如果是,则其对该可变计数懒惰节点进行处理(1614),在图17中对此进行了进一步的详细解释。然后,该图形行走引擎返回(1622)。
如果不是,则图形行走引擎确定该节点匹配类型是否为贪婪的(1606)。如果是,则其对该可变计数贪婪节点进行处理(1616),在图18中对此进行了进一步的详细解释。然后,该图形行走引擎返回(1622)。
如果不是,则图形行走引擎确定该节点是否为领属匹配类型(1608)。如果是,则其对该可变计数领属节点进行处理(1618),在图19中对此进行了进一步的详细解释。然后,图形行走引擎返回(1622)。
如果不是,则图形行走引擎确定该节点匹配类型是否为“全”或“全匹配”节点并按照可变计数全匹配节点对该节点进行处理(1620),图20中对此进行了进一步的详细解释。然后,该图形行走引擎返回(1622)。
图17为流程图1700,展示了对可变计数懒惰节点进行处理的示例实施例。关于图25,以上描述了可变计数节点的格式,并且关于图29,以上描述了可变计数堆栈条目的格式。关于图17,流程图1700为关于图16所描述的对可变计数懒惰节点进行处理(1614)的扩展。
图形行走引擎开始处理可变计数懒惰节点(1702)。图形行走引擎确定该节点是否是从运行堆栈条目读取的(1704)。如果该节点不是从从运行堆栈条目读取的,这意味着该节点第一次被处理,则图形行走引擎确定该计数(例如,图25的计数值2510)是否大于零,并且如果大于,则其推送其复制位被设置为“1”(例如,图29的复制位2912)的带有如上解释填充的所有相关信息的运行堆栈条目(图29,2900)(1706)。然后,图形行走引擎返回(1724)。所推送的运行堆栈条目允许图形行走引擎记住其返回路径并继续行走至位于下一节点地址(例如,图25的2508)处的下一节点。如果当行走下一节点路径时找到匹配,则将复制位设置为“1”允许从运行堆栈弹出和丢弃节点。如果没有找到匹配,则当从运行堆栈弹出这些这些节点时,可以对它们进行处理。
如果该节点是从运行堆栈条目读取的(1704),则图形行走引擎确定有效载荷中是否有有待处理的至少又一个字节(1708)。如果不再有有效载荷的字节(1708),图形行走引擎将带有节点信息的堆栈条目(图29,2900)推送至保存缓冲区/堆栈(1710),将结果的终止行走位设置为“真”(1712)并返回(1724)。将节点推送至保存缓冲区/堆栈(1710)保存了匹配的进度,从而使得当图形行走引擎处理属于同一应用流的后续数据包时,其可以从保存缓冲区/堆栈加载之前的匹配进度并恢复匹配。
如果有效载荷没有用尽(即,如果存在有效载荷的有待处理的至少一个字节)(1708),则图形行走引擎通过检查图29的元素2906来确定可变计数节点是否为字符类节点或字符节点(1714)。如果该可变计数节点为可变计数字符类节点(1714),则其使用可变计数字符类节点中的图29的元素2906中所存储的字符类索引来读取位图/遮罩(1720)。然后,图形行走引擎从有效载荷提取一个字节并通过将来自该有效载荷的字节用作该位图/遮罩的索引来将该字节与该位图/遮罩中的相应条目进行比较(1722)。如果设置了该条目,则图形行走引擎确定匹配。
另一方面,如果该可变计数节点为可变计数字符节点(1714),则图形行走引擎从有效载荷中提取一个字节并将其与该节点中所存储的图29的元素2906进行匹配(1716)。
确定该节点是否为可变计数字符类节点或可变计数字符节点(1714)并响应于该确定(分别为1720和1722或1716),则图形行走引擎确定该字节是否与该元素匹配(1718)。如果匹配,则图形行走引擎使该计数(例如,图29的计数值2910)减量1(1705),如果该计数大于零则推送设置了复制位(例如,图29的复制位2912)的运行堆栈条目(例如,图29的2900)(1706)并返回(1724)。如果该计数等于零,则不将条目推送至运行堆栈内。以另外的方式,图形行走引擎将结果中的终止行走位设置为“真”(1712)并且返回(1724)。
图18为流程图1800,展示了对可变计数贪婪节点进行处理的示例实施例。关于图25,以上描述了可变计数节点的格式,并且关于图29,以上描述了可变计数堆栈条目的格式。关于图18,流程图1800为关于图16所描述的对可变计数贪婪节点进行处理(1616)的扩展。
图形行走引擎开始处理可变计数贪婪节点(1802)。图形行走引擎确定该节点是否从运行堆栈条目读取该节点(1804)。如果是,则图形行走引擎在运行堆栈条目中使该计数(例如,图29的计数值2910)减量1(1806)。然后,如果该计数(例如,图29的计数值2910)大于零,则其将运行堆栈条目与所设置的复制位一起推送至运行堆栈(1808)。然后,该图形行走引擎返回(1818)。
如果没有从运行堆栈读取运行堆栈条目(即,第一次处理该节点)(1804),则图形行走引擎通过检查图25的元素2506来确定该可变计数节点是否为可变计数字符类节点或可变计数字符节点(1810)。如果该可变计数节点为可变计数字符类节点(1810),则其通过读取图25的元素2506来读取与该可变计数字符类节点中所存储的字符类索引相对应的位图/遮罩(1814)。然后,图形行走引擎从有效载荷提取一个字节并通过将来自该有效载荷的字节用作该位图/遮罩的索引来将该字节与该位图/遮罩中的相应条目进行比较,直到存在不匹配或该有效载荷中不再具有可用的字节,或所匹配的字节数量等于该计数值(图25的2510)(1816)。然后,图形行走引擎将有待存储的可用计数(图29的2910)分配在运行堆栈条目中作为可用计数节点所匹配的字节数量(1817)。然后,如果该运行堆栈条目的计数大于零,则图形行走引擎将复制位设置为1的运行堆栈条目(图29的2900)(1808)。如果该运行堆栈条目的计数等于零,则图形行走引擎不推送运行堆栈条目。然后,图形行走引擎返回(1818)。
如果该节点为可变计数字符节点(1810),则图形行走引擎从有效载荷提取字节并将它们与节点元素(图25的2506)所存储的字符进行匹配,直到其失败、用尽有效载荷、或所匹配的字节数量等于该计数(图25的2510))。然后,图形行走引擎将有待存储的计数值(例如,图29的计数值2910)分配在运行堆栈条目中作为可用计数节点所匹配的字节数量(1817)。
图19为流程图1900,展示了对可变计数领属节点进行处理的示例实施例。关于图25,以上描述了可变计数节点的格式,并且关于图29,以上描述了可变计数堆栈条目的格式。关于图19,流程图1900为关于图16所描述的对可变计数领属节点进行处理(1618)的扩展。
关于图19,图形行走引擎开始对可变计数节点进行处理(1902)。图形行走引擎通过检查图25的元素2506来确定该节点是否为可变计数字符类节点或可变计数字符节点(1904)。如果该节点为可变计数字符类节点(1904),则其读取与该可变计数字符类节点元素(图25的2506)中所存储的字符类索引相对应的位图/遮罩。然后,图形行走引擎从有效载荷提取字节并通过将来自该有效载荷的字节用作该位图/遮罩的索引来将它们与该位图/遮罩中的相应条目进行比较,直到存在不匹配,该有效载荷中不再具有可用的字节或所匹配的字节数量等于该计数(图25的2510)。
如果该节点为可变计数字符节点(1904),则图形行走引擎从有效载荷提取一个字节并将其与该节点中所存储的元素(图25的2506)进行比较,并继续对字节进行匹配,直到存在不匹配、该有效载荷中不再具有可用字节、或所匹配的字节数量等于该计数(图25的2510)(1906)。
将来自有效载荷的字节与字符类或值/字符/字母进行匹配(分别为1916或1906)后,图形行走引擎确定该有效载荷中是否具有剩余的字节(1908)。如果图形行走引擎已经用尽有效载荷(即,没有剩余字节)(1908),则图形行走引擎将该节点推送至保存缓冲区/堆栈(1910),将终止行走位设置为真(1912),并返回(1918)。如果图形行走引擎没有用尽有效载荷(即,有剩余字节)(1908),图形行走引擎返回(1918)。
图20为流程图2000,展示了对可变计数全匹配节点进行处理的示例实施例。关于图25,以上描述了可变计数节点的格式。关于图20,流程图2000为关于图16所描述的对可变计数全匹配节点进行处理(1620)的扩展。
图形行走引擎开始处理可变计数节点(2002)。图形行走引擎确定该节点是否是从运行堆栈条目读取的(2004)。如果该节点不是从运行堆栈读取的(2004),则其推送没有设置(例如,设置为0)复制位(图29,2912)的运行堆栈条目(图29,2900)(2007)。然后,图形行走引擎返回(2020)。
如果该节点是从运行堆栈读取的,(2004),则图形行走引擎确定其是否用尽有效载荷(例如,有效载荷中是否没有剩余字节)(2005)。如果没有,或如果有效载荷中剩余了字节,则图形行走引擎通过检查图29的元素2906来确定该可变计数节点是否为可变计数字符类节点或可变计数字符节点(2006)。
如果该节点为可变计数字符类节点(2006),则图形行走引擎读取与该可变计数字符类节点(2012)中所存储的字符类索引相对应的位图/遮罩。然后,图形行走引擎从有效载荷提取一个字节并通过将来自该有效载荷的字节用作该位图/遮罩的索引来将该字节与该位图/遮罩中的相应条目进行比较(2014)。
如果该节点为可变计数字符节点(2006),则图形行走引擎从有效载荷中提取一个字节并将其与该节点中所存储的值/字符/字母进行匹配(2008)。
将来自有效载荷的字节与字符类或字符进行匹配(分别为2014或2008)后,图形行走引擎确定该字节是否与该字符类或字符匹配(2010)。如果存在匹配(2010),则图形行走引擎使计数(即,图29的计数值2910)减量1(2022)。如果该计数大于零,则图形行走引擎推送没有设置(例如,设置为0)复制位(图29,2912)的运行堆栈条目(图29,2900)(2007)并返回(2020)。如果该计数等于零,则图形行走引擎不推送任何堆栈条目并返回(2020)。如果没有匹配,则图形行走引擎将终止行走位设置为真(2018)并且返回(2020)。
如果图形行走引擎已经用尽有效载荷,或者没有剩余的有效载荷字节(2005),则图形行走引擎将该节点推送至保存缓冲区/堆栈(2016)。然后,图形行走引擎将终止行走位设置为真(2018)并且返回(2020)。
图21为表2100,展示了字符类中所使用的位图/遮罩的示例实施例。表2100示出了字符类索引2102、字符类定义2104、以及ASCII值2106。在实现字符类表的实施例中,存储器可以存储字符类索引2102的值、字符类定义2104、或ASCII值2106;然而,在此示出了它们以展示这些字符类定义如何与字符类矩阵相关和这些索引可以如何访问该字符类矩阵。图21示出了五个字符类定义仅作为一个示例实施例。其他实施例可以包括不同种类的字符类,并且唯一字符类的数量可以是任何数量。
被分配有字符类索引1的[^\n]字符类转换以与除了换行以外的每个字符匹配,因为“^”运算符产生跟在其后面的任何事物的倒数,并且“\n”指示换行。因此,位图/遮罩中的每个位被设置为“1”,除了与换行相对应的ASCII值,其为12。因此,处理具有为12的值的字节的节点访问此字符类字符类矩阵[1][12],其中“1”为字符类索引并且“12”为到字符类的有效载荷的值。由于该表中的此位置处的值为“0”,该有效载荷不匹配。然而,加载到CharacterClassMatrix[1][PayloadByte]中的任何其他有效载荷产生匹配。
被分配有字符类索引2的[a-z]字符类转换以与‘a’至‘z’的范围内的每个字符匹配。因此,在与字符类索引2相对应的位图/遮罩中,来自97至122的值被设置为“1”并且所有其他值被设置为“0”。因此,处理表示ASCII值“c”的有效载荷段的节点访问字符类矩阵[2][99],其中“2”为字符类索引并且“99”为有效载荷的值。由于该表中的此位置处的值为“1”,该有效载荷与该字符类匹配。然而,针对此字符类,97-122范围以外的有效载荷不匹配。例如,如果该有效载荷为数字“4”,则该节点访问字符类矩阵[2][52],其具有为“0”的值,该值指示不匹配。
被分配有字符类索引3的[^a-z]字符类转换以与除了‘a’至‘z’的范围内的那些以外的每个值/字符/字母匹配。因此,在与字符类索引3相对应的位图/遮罩中,来自97至122的值被设置为“0”并且所有其他值被设置为“1”。因此,处理表示ASCII值“c”的有效载荷段的节点访问字符类矩阵[3][99],其中“3”为字符类索引并且“99”为有效载荷的值。由于该表中的此位置处的值为“0”,该有效载荷不与该字符类匹配。然而,针对此字符类,97-122范围以外的有效载荷是匹配。例如,如果该有效载荷为数字“4”,则该节点访问字符类矩阵[3][52],其具有为“1”的值,该值指示匹配。
被分配有字符类索引4的[0-9]字符类转换以与‘0’至‘9’的范围内的每个值/字符/字母匹配。因此,在与字符类索引4相对应的位图/遮罩中,来自48至57的值被设置为“1”并且所有其他值被设置为“0”。因此,处理表示ASCII值“D”的有效载荷段的节点访问CharacterClassMatrix[4][68],其中“4”为字符类索引并且“68”为有效载荷的值。由于该表中的此位置处的值为“0”,该有效载荷不与该字符类匹配。然而,针对此字符类,48-57范围以内的有效载荷是匹配。例如,如果该有效载荷为数字“4”,则该节点访问CharacterClassMatrix[4][52],其具有为“1”的值,该值指示匹配。
被分配有字符类索引5的[ABCabc]字符类转换以与单独值/字符/字母“A”、“B”、“C”、“a”、“b”、和“c”匹配。因此,在与字符类索引5相对应的位图/遮罩中,来自65、66、67、97、98和99的值被设置为“1”并且所有其他值被设置为“0”。因此,处理表示ASCII值“c”的有效载荷段的节点访问CharacterClassMatrix[5][99],其中“5”为字符类索引并且“99”为有效载荷的值。由于该表中的此位置处的值为“1”,该有效载荷与该字符类匹配。然而,针对此字符类,65、66、67、97、98和99的值不匹配。例如,如果该有效载荷为数字“4”,则该节点访问CharacterClassMatrix[5][52],其具有为“0”的值,该值指示不匹配。
在一个实施例中,该字符类矩阵可以用于任何数据类型或数据长度。在上述实施例中,这些有效载荷为字符,其可以是7位或8位。然而,可以使用任何长度的数据并且其不一定必须以字符为形式。可以使用其他数据编码。此类表的其他应用的示例为视频处理、音频处理、二分搜索、或任何图样搜索应用。
在此引证的全部专利、公开的申请以及参考文献的教导通过引用以其全文进行结合。
尽管本发明已经参照其示例实施例做了具体的展示和说明,本领域技术人员将理解到通过在不偏离由所附的权利要求书涵盖的本发明的范围下可以从中做出在形式和细节上的不同的变化。

Claims (60)

1.一种将图样编译成非确定有限自动机(NFA)图形的方法,该方法包括:
对该图样进行多个元素和多种节点类型检查,每种节点类型与一个元素相对应,有待对该图样的每个元素进行匹配至少零次,该元素表示一个字符、字符类或字符串;
生成该NFA图形的多个节点,该多个节点中的每个节点被配置成用于与该多个元素中的一个元素匹配,其中,该节点指示与该元素相对应的节点类型、该NFA图形中的下一个节点地址、一个计数值、以及该元素。
2.如权利要求1所述的方法,其中,该节点类型是以下各项其中之一:可变计数、固定计数、固定计数和可变计数、字符、不区分大小写的字符、字符类、区分大小写的字符串、不区分大小写的字符串、标记的或分离的。
3.如权利要求2所述的方法,其中,如果该节点类型是可变计数,则该节点可以进一步指示一种为字符、字符类、或字符串节点的元素类型。
4.如权利要求2所述的方法,其中,如果该节点类型是固定计数,则该节点可以进一步指示一种为字符、字符类、或字符串节点的元素类型。
5.如权利要求1所述的方法,其中,对该图样进行该节点类型检查包括针对以下各节点类型的指示中的至少一种对该图样进行匹配:可变计数节点类型、固定计数节点类型、固定-可变计数节点类型、字符节点类型、不区分大小写的字符节点类型、字符类节点类型、字符串节点类型、不区分大小写的字符串节点类型、标记节点类型、以及分离节点类型。
6.如权利要求1所述的方法,其中,该字符串节点类型表示多个值的图样的一部分,每个值为字节、字母、或字符中的至少一项。
7.如权利要求1所述的方法,其中,对该图样进行该字符串节点类型检查包括确定该图样的一部分指示多个连续值。
8.如权利要求7所述的方法,其中,对该图样进行该字符串节点类型检查进一步包括确定该图样的该部分的这些连续值没有介于多种非字符串节点类型中间。
9.如权利要求1所述的方法,其中,该可变计数节点类型表示该图样中的有待针对一个元素进行匹配可变次数的部分。
10.如权利要求1所述的方法,其中,对该图样进行该可变计数节点类型检查包括确定该图样的一部分指示针对该元素进行匹配可变次数。
11.如权利要求10所述的方法,其中,该可变次数可以是有限次数或无限次数中的至少一种。
12.如权利要求11所述的方法,其中,该图样包括一个表示无限的符号,该符号用于触发确定该图样的一部分指示针对该元素进行匹配该无限次数。
13.如权利要求11所述的方法,其中,对该图样进行该可变计数节点类型检查进一步包括确定该图样的一部分指示针对该元素进行匹配至少零次。
14.如权利要求1所述的方法,其中,该固定计数节点类型表示该图样中的有待针对一个元素进行匹配固定次数的部分。
15.如权利要求1所述的方法,其中,该固定-可变计数节点类型表示该图样中的有待针对一个元素进行匹配固定次数然后可变次数的部分。
16.如权利要求1所述的方法,其中,对该图样进行该固定-可变计数节点类型检查包括确定该图样的一部分指示针对该元素进行匹配至少一次和最多有限次数或无限次数。
17.如权利要求16所述的方法,其中,该图样包括一个表示无限的符号,该符号用于触发确定该图样的一部分指示针对该元素进行匹配该无限次数。
18.如权利要求1所述的方法,其中,该字符类节点类型表示该图样中的有待通过使用至少一个值的布尔或运算来针对一个元素进行匹配的部分。
19.如权利要求18所述的方法,进一步包括存储每个字符类作为一个遮罩,其中,如果该遮罩中的每个可能的字符为该字符类的一部分,则设置该字符,并且如果其不是该字符类的一部分,则不设置。
20.如权利要求19所述的方法,其中,该节点的元素包括一个与唯一字符类相对应的字符类索引。
21.如权利要求20所述的方法,其中,该字符类索引和有效载荷段被用作该遮罩的一个索引,从而使得如果设置所标引的条目,则该图形行走引擎确定该有效载荷与该字符类匹配。
22.如权利要求1所述的方法,其中,该可变计数节点类型进一步指示该节点为一个贪婪节点、懒惰节点、领属节点、或全匹配节点。
23.如权利要求1所述的方法,其中,贪婪匹配类型和领属匹配类型的可变计数类型的节点针对该有效载荷中的最长可能的匹配而进行匹配。
24.如权利要求1所述的方法,其中,懒惰匹配类型的可变计数类型的节点针对该有效载荷中的最短可能的匹配而进行匹配。
25.如权利要求1所述的方法,其中,全节点匹配类型的可变计数类型的节点针对该有效载荷中的所有匹配而进行匹配。
26.如权利要求1所述的方法,其中,对该图样进行该节点类型和该元素检查包括标识该图样的至少一部分作为一种字符类节点类型和相应的元素。
27.如权利要求26所述的方法,其中,对该图样进行该节点类型和该元素检查包括标识该图样的至少两个部分作为一种字符类节点类型和相应的元素,并且进一步包括:
为这些部分中的每个部分生成一个位图,其中,该位图中的每个位表示一个与该元素匹配的值,并且每个位图与一个唯一字符类索引相关联。
28.如权利要求27所述的方法,进一步包括,如果该至少两个部分中的一个第一部分和该至少两个部分中的一个第二部分具有同一个相应元素,则使该第一和第二部分与同一位图相关联。
29.如权利要求28所述的方法,其中,对该图样进行检查包括检查多个图样,其中,该第一和第二部分可以在分开的图样中。
30.如权利要求1所述的方法,其中,对该图样进行检查包括找到至少一个元字符,并且生成该多个节点包括基于该至少一个元字符确定该节点类型或该计数值中的至少一项。
31.一种用于将图样编译成非确定有限自动机(NFA)图形的计算机系统,该系统包括:
一个图样确定模块,被配置成用于对该图样进行多个元素和多种节点类型检查,每种节点类型与一个元素相对应,有待对该图样的每个元素进行匹配至少零次,该元素表示一个字符、字符类或字符串;以及
一个节点生成模块,被配置成用于生成该NFA图形的多个节点,该多个节点中的每个节点被配置成用于与该多个元素中的一个元素匹配,其中,该节点指示与该元素相对应的节点类型、该NFA图形中的下一个节点地址、一个计数值、以及该元素。
32.如权利要求31所述的系统,其中,该节点类型是以下各项其中之一:可变计数、固定计数、固定计数和可变计数、字符、不区分大小写的字符、字符类、区分大小写的字符串、不区分大小写的字符串、标记的或分离的。
33.如权利要求32所述的系统,其中,如果该节点类型是可变计数,则该节点可以进一步指示一种为字符、字符类、或字符串节点的元素类型。
34.如权利要求32所述的系统,其中,如果该节点类型是固定计数,则该节点可以进一步指示一种为字符、字符类、或字符串节点的元素类型。
35.如权利要求31所述的系统,其中,该图样确定模块被进一步配置成用于针对以下各节点类型的指示中的至少一种对该图样进行匹配:可变计数节点类型、固定计数节点类型、固定-可变计数节点类型、字符节点类型、不区分大小写的字符节点类型、字符类节点类型、字符串节点类型、不区分大小写的字符串节点类型、标记节点类型、以及分离节点类型。
36.如权利要求31所述的系统,其中,一种字符串节点类型表示多个值的图样的一部分,每个值为字节、字母、或字符中的至少一项。
37.如权利要求31所述的系统,其中,该图样确定模块被配置成用于确定该图样的一部分指示多个连续值。
38.如权利要求37所述的系统,其中,该图样确定模块被配置成用于确定该图样的该部分的这些连续值没有介于多种非字符串节点类型中间。
39.如权利要求31所述的系统,其中,该可变计数节点类型表示该图样中的有待针对一个元素进行匹配可变次数的部分。
40.如权利要求31所述的系统,其中,该图样确定模块被配置成用于通过确定该图样的一部分指示针对该元素进行匹配可变次数来确定该可变计数节点类型。
41.如权利要求40所述的系统,其中,该可变次数可以是有限次数或无限次数中的至少一种。
42.如权利要求41所述的系统,其中,该图样包括一个表示无限的符号,该符号用于触发确定该图样的一部分指示针对该元素进行匹配该无限次数。
43.如权利要求41所述的系统,其中,该图样确定模块被进一步配置成用于确定该图样的一部分指示针对该元素进行匹配至少零次。
44.如权利要求31所述的系统,其中,一种固定计数节点类型表示该图样中的有待针对一个元素进行匹配固定次数的部分。
45.如权利要求31所述的系统,其中,该固定计数和可变计数节点类型表示该图样中的有待针对一个元素进行匹配固定次数然后可变次数的部分。
46.如权利要求31所述的方法,其中,该图样确定模块被进一步配置成用于确定该图样的一部分指示针对该元素进行匹配至少一次和最多有限次数或无限次数。
47.如权利要求46所述的系统,其中,该图样包括一个表示无限的符号,该符号用于触发确定该图样的一部分指示针对该元素进行匹配该无限次数。
48.如权利要求31所述的系统,其中,一种字符类节点类型表示该图样中的有待通过使用至少一个值的布尔或运算来针对一个元素进行匹配的部分。
49.如权利要求48所述的系统,进一步包括一个字符类存储模块,该字符类存储模块被配置成用于存储每个字符类作为一个遮罩,其中,如果该遮罩中的每个可能的字符为该字符类的一部分,则设置该字符,并且如果其不是该字符类的一部分,则不设置。
50.如权利要求49所述的系统,其中,该节点的元素包括一个与唯一字符类相对应的字符类索引。
51.如权利要求50所述的系统,其中,该字符类索引和该有效载荷段被用作该遮罩的一个索引,从而使得如果设置所标引的条目,则该图形行走引擎确定该有效载荷与该字符类匹配。
52.如权利要求31所述的系统,其中,该可变计数节点类型进一步指示该节点为一个贪婪节点、懒惰节点、领属节点、或全节点。
53.如权利要求31所述的系统,其中,贪婪匹配类型和领属匹配类型的可变计数类型的节点针对该有效载荷中的最长可能的匹配而进行匹配。
54.如权利要求31所述的系统,其中,懒惰匹配类型的可变计数类型的节点针对该有效载荷中的最短可能的匹配而进行匹配。
55.如权利要求31所述的系统,其中,全节点匹配类型的可变计数类型的节点针对该有效载荷中的所有匹配而进行匹配。
56.如权利要求31所述的系统,其中,该图样确定模块被配置成用于标识该图样的至少一部分作为一种字符类节点类型和相应的元素。
57.如权利要求56所述的系统,其中,该图样确定模块被配置成用于标识该图样的至少两个部分作为一种字符类节点类型和相应的元素以及为这些部分中的每个部分生成一个位图,其中,该位图中的每个位表示一个与该元素匹配的值,并且每个位图与一个唯一字符类索引相关联。
58.如权利要求57所述的系统,其中,该图样确定模块被配置成用于,如果该至少两个部分中的一个第一部分和该至少两个部分中的一个第二部分具有同一个相应元素,则使该第一和第二部分与同一位图相关联。
59.如权利要求58所述的系统,其中,该图样确定模块被配置成用于对多个图样进行检查,其中,该第一和第二部分可以在分开的图样中。
60.如权利要求31所述的系统,其中,该图样确定模块被进一步配置成用于找到至少一个元字符,并且该节点生成模块被配置成用于通过基于该至少一个元字符确定节点类型或计数值中的至少一项来生成该多个节点。
CN201410431555.1A 2013-08-30 2014-08-28 用于将图样编译成非确定有限自动机(nfa)图形的方法和计算机系统 Active CN104426909B (zh)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201361872612P 2013-08-30 2013-08-30
US201361872622P 2013-08-30 2013-08-30
US61/872,612 2013-08-30
US61/872,622 2013-08-30
US14/186,978 US9563399B2 (en) 2013-08-30 2014-02-21 Generating a non-deterministic finite automata (NFA) graph for regular expression patterns with advanced features
US14/186,978 2014-02-21

Publications (2)

Publication Number Publication Date
CN104426909A true CN104426909A (zh) 2015-03-18
CN104426909B CN104426909B (zh) 2019-01-04

Family

ID=52584716

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201410432318.7A Active CN104516940B (zh) 2013-08-30 2014-08-28 用于处理有限自动机的引擎架构
CN201410431555.1A Active CN104426909B (zh) 2013-08-30 2014-08-28 用于将图样编译成非确定有限自动机(nfa)图形的方法和计算机系统

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201410432318.7A Active CN104516940B (zh) 2013-08-30 2014-08-28 用于处理有限自动机的引擎架构

Country Status (4)

Country Link
US (5) US9563399B2 (zh)
KR (1) KR101615915B1 (zh)
CN (2) CN104516940B (zh)
HK (2) HK1207179A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106897447A (zh) * 2017-03-02 2017-06-27 广州算易软件科技有限公司 一种基于规则电气图纸箱号的自动化查找方法
CN111159496A (zh) * 2019-12-31 2020-05-15 奇安信科技集团股份有限公司 正则表达式nfa的构造方法及装置

Families Citing this family (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9398033B2 (en) 2011-02-25 2016-07-19 Cavium, Inc. Regular expression processing automaton
US8954700B2 (en) 2011-08-02 2015-02-10 Cavium, Inc. Method and apparatus for managing processing thread migration between clusters within a processor
US9203805B2 (en) 2011-11-23 2015-12-01 Cavium, Inc. Reverse NFA generation and processing
US9426165B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for compilation of finite automata
US9426166B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for processing finite automata
US9563399B2 (en) 2013-08-30 2017-02-07 Cavium, Inc. Generating a non-deterministic finite automata (NFA) graph for regular expression patterns with advanced features
WO2015065015A1 (ko) 2013-10-28 2015-05-07 엘지전자 주식회사 무선 통신 시스템에서 장치 대 장치 단말의 신호 송수신 방법 및 장치
WO2015084360A1 (en) * 2013-12-05 2015-06-11 Hewlett-Packard Development Company, L.P. Regular expression matching
US9419943B2 (en) 2013-12-30 2016-08-16 Cavium, Inc. Method and apparatus for processing of finite automata
US9544402B2 (en) 2013-12-31 2017-01-10 Cavium, Inc. Multi-rule approach to encoding a group of rules
US9275336B2 (en) 2013-12-31 2016-03-01 Cavium, Inc. Method and system for skipping over group(s) of rules based on skip group rule
US9667446B2 (en) 2014-01-08 2017-05-30 Cavium, Inc. Condition code approach for comparing rule and packet data that are provided in portions
US10362093B2 (en) * 2014-01-09 2019-07-23 Netronome Systems, Inc. NFA completion notification
US9904630B2 (en) 2014-01-31 2018-02-27 Cavium, Inc. Finite automata processing based on a top of stack (TOS) memory
US9602532B2 (en) 2014-01-31 2017-03-21 Cavium, Inc. Method and apparatus for optimizing finite automata processing
US10110558B2 (en) 2014-04-14 2018-10-23 Cavium, Inc. Processing of finite automata based on memory hierarchy
US10002326B2 (en) 2014-04-14 2018-06-19 Cavium, Inc. Compilation of finite automata based on memory hierarchy
US9438561B2 (en) 2014-04-14 2016-09-06 Cavium, Inc. Processing of finite automata based on a node cache
US9223551B1 (en) * 2014-07-22 2015-12-29 Here Global B.V. Rendergraph compilation method and use thereof for low-latency execution
EP3198474A1 (en) * 2014-09-26 2017-08-02 British Telecommunications Public Limited Company Improved pattern matching
US10776427B2 (en) 2014-09-26 2020-09-15 British Telecommunications Public Limited Company Efficient conditional state mapping in a pattern matching automaton
US10929419B2 (en) * 2015-09-25 2021-02-23 Netapp, Inc. Object storage backed file system
US11334540B2 (en) 2015-09-25 2022-05-17 Netapp, Inc. Namespace hierarchy preservation with multiple object storage objects
CN107025129B (zh) * 2016-01-29 2020-10-09 腾讯科技(深圳)有限公司 一种数据处理方法以及装置
CN106230863B (zh) * 2016-09-19 2019-05-07 成都知道创宇信息技术有限公司 一种基于WAF的ReDoS攻击检测方法
CN106789447B (zh) * 2017-02-20 2019-11-26 成都欧飞凌通讯技术有限公司 一种多核中实现超有限自动机图变更时不丢包的方法
US10481881B2 (en) * 2017-06-22 2019-11-19 Archeo Futurus, Inc. Mapping a computer code to wires and gates
US9996328B1 (en) * 2017-06-22 2018-06-12 Archeo Futurus, Inc. Compiling and optimizing a computer code by minimizing a number of states in a finite machine corresponding to the computer code
US10528556B1 (en) * 2017-12-31 2020-01-07 Allscripts Software, Llc Database methodology for searching encrypted data records
US10901887B2 (en) * 2018-05-17 2021-01-26 International Business Machines Corporation Buffered freepointer management memory system
US10983721B2 (en) 2018-07-13 2021-04-20 Fungible, Inc. Deterministic finite automata node construction and memory mapping for regular expression accelerator
US10645187B2 (en) 2018-07-13 2020-05-05 Fungible, Inc. ARC caching for determininstic finite automata of regular expression accelerator
US10656949B2 (en) 2018-07-13 2020-05-19 Fungible, Inc. Instruction-based non-deterministic finite state automata accelerator
US10635419B2 (en) 2018-07-13 2020-04-28 Fungible, Inc. Incremental compilation of finite automata for a regular expression accelerator
US10908880B2 (en) * 2018-10-19 2021-02-02 Knowles Electronics, Llc Audio signal circuit with in-place bit-reversal
US10990627B1 (en) * 2018-12-11 2021-04-27 Amazon Technologies, Inc. Sharing character data across lookups to identify matches to a regular expression
CN109933973B (zh) * 2019-01-24 2024-01-19 平安科技(深圳)有限公司 密码校验方法、装置、计算机设备及存储介质
US10831691B1 (en) * 2019-05-24 2020-11-10 International Business Machines Corporation Method for implementing processing elements in a chip card
JP7423757B2 (ja) * 2019-08-22 2024-01-29 グーグル エルエルシー 同期プロセッサのためのシャーディング
US11636154B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Data flow graph-driven analytics platform using data processing units having hardware accelerators
US11263190B2 (en) 2019-09-26 2022-03-01 Fungible, Inc. Data ingestion and storage by data processing unit having stream-processing hardware accelerators
US11636115B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Query processing using data processing units having DFA/NFA hardware accelerators
CN111176582A (zh) * 2019-12-31 2020-05-19 北京百度网讯科技有限公司 矩阵存储方法、矩阵访问方法、装置和电子设备
US11934964B2 (en) 2020-03-20 2024-03-19 Microsoft Technology Licensing, Llc Finite automata global counter in a data flow graph-driven analytics platform having analytics hardware accelerators
US11449344B1 (en) * 2020-04-21 2022-09-20 Xilinx, Inc. Regular expression processor and parallel processing architecture
US11630729B2 (en) 2020-04-27 2023-04-18 Fungible, Inc. Reliability coding with reduced network traffic
CN112087507B (zh) * 2020-09-02 2022-09-09 深圳市朗强科技有限公司 接口数据的发送、接收方法及设备
CN112416251B (zh) * 2020-11-24 2023-02-10 上海壁仞智能科技有限公司 计算系统
US11782983B1 (en) * 2020-11-27 2023-10-10 Amazon Technologies, Inc. Expanded character encoding to enhance regular expression filter capabilities
CN112579651A (zh) * 2020-12-28 2021-03-30 北京浩瀚深度信息技术股份有限公司 一种网络信息监管方法、装置及存储介质
CN113703715B (zh) * 2021-08-31 2024-02-23 深信服科技股份有限公司 一种正则表达式匹配方法、装置、fpga及介质
KR20230042986A (ko) 2021-09-23 2023-03-30 연세대학교 산학협력단 글루시코프 오토마타 생성과 하이브리드 매칭을 활용한 정규 표현식 엔진에 관한 오토마타 처리 장치 및 방법
US11861171B2 (en) 2022-04-26 2024-01-02 Xilinx, Inc. High-throughput regular expression processing with capture using an integrated circuit

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6954424B2 (en) * 2000-02-24 2005-10-11 Zarlink Semiconductor V.N., Inc. Credit-based pacing scheme for heterogeneous speed frame forwarding
US20070282833A1 (en) * 2006-06-05 2007-12-06 Mcmillen Robert J Systems and methods for processing regular expressions
US20080228991A1 (en) * 2007-03-13 2008-09-18 Stmicroelectronics Sa Ring buffer management
WO2009017131A1 (ja) * 2007-08-02 2009-02-05 Nec Corporation ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム
US20100174770A1 (en) * 2005-12-30 2010-07-08 Pandya Ashish A Runtime adaptable search processor
US20110072199A1 (en) * 2009-09-23 2011-03-24 Lsi Corporation Startup reconstruction of logical-to-physical address translation data for solid state disks
US20110093496A1 (en) * 2009-10-17 2011-04-21 Masanori Bando Determining whether an input string matches at least one regular expression using lookahead finite automata based regular expression detection
CN102902713A (zh) * 2012-03-29 2013-01-30 中国科学技术大学 一种基于图形处理单元的非确定有限自动机的匹配方法及装置

Family Cites Families (117)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5428554A (en) 1992-09-03 1995-06-27 International Business Machines Corporation Hierarchical graph analysis method and apparatus
US5608662A (en) 1995-01-12 1997-03-04 Television Computer, Inc. Packet filter engine
JP4153989B2 (ja) 1996-07-11 2008-09-24 株式会社日立製作所 文書検索配送方法および装置
US5893142A (en) 1996-11-14 1999-04-06 Motorola Inc. Data processing system having a cache and method therefor
US6314513B1 (en) 1997-09-30 2001-11-06 Intel Corporation Method and apparatus for transferring data between a register stack and a memory resource
US20070192863A1 (en) 2005-07-01 2007-08-16 Harsh Kapoor Systems and methods for processing data flows
US8010469B2 (en) 2000-09-25 2011-08-30 Crossbeam Systems, Inc. Systems and methods for processing data flows
US20110238855A1 (en) 2000-09-25 2011-09-29 Yevgeny Korsunsky Processing data flows with a data flow processor
US7046848B1 (en) 2001-08-22 2006-05-16 Olcott Peter L Method and system for recognizing machine generated character glyphs and icons in graphic images
US7369984B2 (en) 2002-02-01 2008-05-06 John Fairweather Platform-independent real-time interface translation by token mapping without modification of application code
US7225188B1 (en) 2002-02-13 2007-05-29 Cisco Technology, Inc. System and method for performing regular expression matching with high parallelism
JP4047053B2 (ja) 2002-04-16 2008-02-13 富士通株式会社 繰り返しを含む順序パターンを用いた検索装置および方法
US7487264B2 (en) 2002-06-11 2009-02-03 Pandya Ashish A High performance IP processor
WO2004013777A1 (en) 2002-08-05 2004-02-12 Fish Robert System and method of parallel pattern matching
US7119577B2 (en) 2002-08-28 2006-10-10 Cisco Systems, Inc. Method and apparatus for efficient implementation and evaluation of state machines and programmable finite state automata
US7464254B2 (en) 2003-01-09 2008-12-09 Cisco Technology, Inc. Programmable processor apparatus integrating dedicated search registers and dedicated state machine registers with associated execution hardware to support rapid application of rulesets to data
US7308446B1 (en) 2003-01-10 2007-12-11 Cisco Technology, Inc. Methods and apparatus for regular expression matching
JP2004240766A (ja) 2003-02-06 2004-08-26 Toshiba Corp パターン検出処理プログラム生成システムおよびパターン検出処理プログラム生成方法
WO2004072797A2 (en) 2003-02-07 2004-08-26 Safenet, Inc. System and method for determining the start of a match of a regular expression
US7594002B1 (en) 2003-02-14 2009-09-22 Istor Networks, Inc. Hardware-accelerated high availability integrated networked storage system
CA2521576A1 (en) 2003-02-28 2004-09-16 Lockheed Martin Corporation Hardware accelerator state table compiler
US7093231B2 (en) 2003-05-06 2006-08-15 David H. Alderson Grammer for regular expressions
US20050108518A1 (en) 2003-06-10 2005-05-19 Pandya Ashish A. Runtime adaptable security processor
US20050114700A1 (en) 2003-08-13 2005-05-26 Sensory Networks, Inc. Integrated circuit apparatus and method for high throughput signature based network applications
US7870161B2 (en) 2003-11-07 2011-01-11 Qiang Wang Fast signature scan
US7685637B2 (en) 2004-06-14 2010-03-23 Lionic Corporation System security approaches using sub-expression automata
US7779464B2 (en) 2004-06-14 2010-08-17 Lionic Corporation System security approaches utilizing a hierarchical memory system
US7941585B2 (en) 2004-09-10 2011-05-10 Cavium Networks, Inc. Local scratchpad and data caching system
US8392590B2 (en) 2004-09-10 2013-03-05 Cavium, Inc. Deterministic finite automata (DFA) 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
US7594081B2 (en) 2004-09-10 2009-09-22 Cavium Networks, Inc. Direct access to low-latency memory
WO2006031496A2 (en) 2004-09-10 2006-03-23 The Regents Of The University Of California Method and apparatus for deep packet inspection
US8301788B2 (en) 2004-09-10 2012-10-30 Cavium, Inc. Deterministic finite automata (DFA) instruction
US7260558B1 (en) 2004-10-25 2007-08-21 Hi/Fn, Inc. Simultaneously searching for a plurality of patterns definable by complex expressions, and efficiently generating data for such searching
US7356663B2 (en) 2004-11-08 2008-04-08 Intruguard Devices, Inc. Layered memory architecture for deterministic finite automaton based string matching useful in network intrusion detection and prevention systems and apparatuses
US7710988B1 (en) 2005-03-11 2010-05-04 Xambala Corporation Method and system for non-deterministic finite automaton filtering
US20080229415A1 (en) 2005-07-01 2008-09-18 Harsh Kapoor Systems and methods for processing data flows
US7979368B2 (en) 2005-07-01 2011-07-12 Crossbeam Systems, Inc. Systems and methods for processing data flows
JP4320004B2 (ja) 2005-07-04 2009-08-26 日本電信電話株式会社 XPath式処理方法、XPath式処理装置、XPath式処理プログラムおよびそのプログラムを格納した記憶媒体
US7805392B1 (en) 2005-11-29 2010-09-28 Tilera Corporation Pattern matching in a multiprocessor environment with finite state automaton transitions based on an order of vectors in a state transition table
US7702629B2 (en) 2005-12-02 2010-04-20 Exegy Incorporated Method and device for high performance regular expression pattern matching
US20070226362A1 (en) 2006-03-21 2007-09-27 At&T Corp. Monitoring regular expressions on out-of-order streams
US20080097959A1 (en) 2006-06-14 2008-04-24 Nec Laboratories America, Inc. Scalable xml filtering with bottom up path matching and encoded path joins
US20080071783A1 (en) 2006-07-03 2008-03-20 Benjamin Langmead System, Apparatus, And Methods For Pattern Matching
US20080034427A1 (en) 2006-08-02 2008-02-07 Nec Laboratories America, Inc. Fast and scalable process for regular expression search
US8220048B2 (en) 2006-08-21 2012-07-10 Wisconsin Alumni Research Foundation Network intrusion detector with combined protocol analyses, normalization and matching
GB2441351B (en) 2006-09-01 2010-12-08 3Com Corp Positionally dependent pattern checking in character strings using deterministic finite automata
US20080077793A1 (en) 2006-09-21 2008-03-27 Sensory Networks, Inc. Apparatus and method for high throughput network security systems
US8024691B2 (en) 2006-09-28 2011-09-20 Mcgill University Automata unit, a tool for designing checker circuitry and a method of manufacturing hardware circuitry incorporating checker circuitry
GB2443240B (en) 2006-10-27 2009-05-06 3Com Corp Signature checking using deterministic finite state machines
US7996348B2 (en) 2006-12-08 2011-08-09 Pandya Ashish A 100GBPS security and search architecture using programmable intelligent search memory (PRISM) that comprises one or more bit interval counters
US7899977B2 (en) 2006-12-08 2011-03-01 Pandya Ashish A Programmable intelligent search memory
WO2008073824A1 (en) 2006-12-08 2008-06-19 Pandya Ashish A Dynamic programmable intelligent search memory
CN101013441A (zh) 2007-02-12 2007-08-08 杭州华为三康技术有限公司 确定性有限自动机生成方法和装置及索引方法和索引系统
US7962434B2 (en) 2007-02-15 2011-06-14 Wisconsin Alumni Research Foundation Extended finite state automata and systems and methods for recognizing patterns in a data stream using extended finite state automata
WO2008129635A1 (ja) 2007-04-12 2008-10-30 Fujitsu Limited 性能障害要因分析プログラムおよび性能障害要因分析装置
US9021582B2 (en) 2007-04-24 2015-04-28 Juniper Networks, Inc. Parallelized pattern matching using non-deterministic finite automata
US7788206B2 (en) 2007-04-30 2010-08-31 Lsi Corporation State machine compression using multi-character state transition instructions
CN101360088B (zh) 2007-07-30 2011-09-14 华为技术有限公司 正则表达式编译、匹配系统及编译、匹配方法
US8024802B1 (en) 2007-07-31 2011-09-20 Hewlett-Packard Development Company, L.P. Methods and systems for using state ranges for processing regular expressions in intrusion-prevention systems
CN101201836B (zh) 2007-09-04 2010-04-14 浙江大学 基于带记忆确定有限自动机的正则表达式匹配加速方法
US8819217B2 (en) 2007-11-01 2014-08-26 Cavium, Inc. Intelligent graph walking
US8086609B2 (en) 2007-11-01 2011-12-27 Cavium, Inc. Graph caching
US7949683B2 (en) 2007-11-27 2011-05-24 Cavium Networks, Inc. Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph
US8180803B2 (en) 2007-11-27 2012-05-15 Cavium, Inc. Deterministic finite automata (DFA) graph compression
US8051085B1 (en) 2008-07-18 2011-11-01 Netlogic Microsystems, Inc. Determining regular expression match lengths
CN101650718A (zh) 2008-08-15 2010-02-17 华为技术有限公司 字符串匹配方法和装置
US8176300B2 (en) 2008-08-25 2012-05-08 Cavium, Inc. Method and apparatus for content based searching
US8683590B2 (en) 2008-10-31 2014-03-25 Alcatel Lucent Method and apparatus for pattern matching for intrusion detection/prevention systems
US8473523B2 (en) 2008-10-31 2013-06-25 Cavium, Inc. Deterministic finite automata graph traversal with nodal bit mapping
TWI482083B (zh) 2008-12-15 2015-04-21 Univ Nat Taiwan 二階段式正規表示式比對處理方法及系統
TWI383618B (zh) 2008-12-22 2013-01-21 Univ Nat Taiwan 管線架構型正規表示式樣式比對處理電路
US20100192225A1 (en) 2009-01-28 2010-07-29 Juniper Networks, Inc. Efficient application identification with network devices
KR101034389B1 (ko) 2009-04-22 2011-05-16 (주) 시스메이트 패킷 내 시그니처 위치에 따른 시그니처 검색 방법
US20110016154A1 (en) 2009-07-17 2011-01-20 Rajan Goyal Profile-based and dictionary based graph caching
CN101639861B (zh) 2009-09-02 2012-06-27 福建星网锐捷网络有限公司 一种基于有限状态自动机的字符串匹配方法及装置
CN101876986B (zh) 2009-11-27 2012-11-21 福建星网锐捷网络有限公司 基于有限状态自动机的字符串匹配方法及内容过滤设备
US8291258B2 (en) 2010-01-08 2012-10-16 Juniper Networks, Inc. High availability for network security devices
US8458354B2 (en) 2010-01-27 2013-06-04 Interdisciplinary Center Herzliya Multi-pattern matching in compressed communication traffic
CN102148805B (zh) 2010-02-09 2015-04-08 华为技术有限公司 特征匹配方法和装置
US8522199B2 (en) 2010-02-26 2013-08-27 Mcafee, Inc. System, method, and computer program product for applying a regular expression to content based on required strings of the regular expression
CN101853301A (zh) 2010-05-25 2010-10-06 华为技术有限公司 正则表达式匹配的方法和系统
US8650146B2 (en) 2010-06-24 2014-02-11 Lsi Corporation Impulse regular expression matching
CN101944121B (zh) 2010-09-20 2012-05-30 北京星网锐捷网络技术有限公司 有限状态自动机生成方法、关键字匹配方法及装置和设备
CN102075511B (zh) 2010-11-01 2014-05-14 北京神州绿盟信息安全科技股份有限公司 一种数据匹配设备和方法以及网络入侵检测设备和方法
US8516456B1 (en) 2010-11-11 2013-08-20 Netlogic Microsystems, Inc. Compact instruction format for content search systems
US20120221494A1 (en) 2011-02-25 2012-08-30 International Business Machines Corporation Regular expression pattern matching using keyword graphs
US9398033B2 (en) 2011-02-25 2016-07-19 Cavium, Inc. Regular expression processing automaton
CN102184197B (zh) 2011-04-22 2012-10-10 湖南亿谷信息科技发展有限公司 基于智能有限自动机的正则表达式匹配方法
US8848970B2 (en) 2011-04-26 2014-09-30 Digimarc Corporation Salient point-based arrangements
US9246928B2 (en) 2011-05-02 2016-01-26 International Business Machines Corporation Compiling pattern contexts to scan lanes under instruction execution constraints
US8990259B2 (en) 2011-06-24 2015-03-24 Cavium, Inc. Anchored patterns
US9223618B2 (en) 2011-09-20 2015-12-29 Intel Corporation Multi-threaded queuing system for pattern matching
US9465662B2 (en) 2011-10-17 2016-10-11 Cavium, Inc. Processor with efficient work queuing
US8850125B2 (en) 2011-10-25 2014-09-30 Cavium, Inc. System and method to provide non-coherent access to a coherent memory system
US9203805B2 (en) 2011-11-23 2015-12-01 Cavium, Inc. Reverse NFA generation and processing
CN102420750B (zh) 2011-11-28 2015-09-23 曙光信息产业(北京)有限公司 单包正则匹配设备和方法
CN103166802B (zh) 2011-12-12 2016-12-07 中国移动通信集团湖南有限公司 一种确定有限自动机的构建方法及装置
US9280600B2 (en) 2012-03-20 2016-03-08 Yissum Research Development Company Of The Hebrew University Of Jerusalem Ltd. Method and system for decompression-free inspection of shared dictionary compressed traffic over HTTP
US9558299B2 (en) 2012-04-30 2017-01-31 Hewlett Packard Enterprise Development Lp Submatch extraction
US9524248B2 (en) 2012-07-18 2016-12-20 Micron Technology, Inc. Memory management for a hierarchical memory system
IN2015DN01932A (zh) 2012-09-28 2015-08-07 Ericsson Telefon Ab L M
US9064032B2 (en) 2012-10-05 2015-06-23 Intel Corporation Blended match mode DFA scanning
US8862585B2 (en) 2012-10-10 2014-10-14 Polytechnic Institute Of New York University Encoding non-derministic finite automation states efficiently in a manner that permits simple and fast union operations
US9046916B2 (en) 2012-11-06 2015-06-02 Intel Corporation Cache prefetch for NFA instructions
US9304768B2 (en) 2012-12-18 2016-04-05 Intel Corporation Cache prefetch for deterministic finite automaton instructions
US9177253B2 (en) 2013-01-31 2015-11-03 Intel Corporation System and method for DFA-NFA splitting
US9563399B2 (en) 2013-08-30 2017-02-07 Cavium, Inc. Generating a non-deterministic finite automata (NFA) graph for regular expression patterns with advanced features
US9426165B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for compilation of finite automata
US9426166B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for processing finite automata
US9419943B2 (en) 2013-12-30 2016-08-16 Cavium, Inc. Method and apparatus for processing of finite automata
US9432284B2 (en) 2014-01-08 2016-08-30 Cavium, Inc. Method and apparatus for compiling search trees for processing request keys based on a key size supported by underlying processing elements
US9904630B2 (en) 2014-01-31 2018-02-27 Cavium, Inc. Finite automata processing based on a top of stack (TOS) memory
US9602532B2 (en) 2014-01-31 2017-03-21 Cavium, Inc. Method and apparatus for optimizing finite automata processing
US10002326B2 (en) 2014-04-14 2018-06-19 Cavium, Inc. Compilation of finite automata based on memory hierarchy
US9438561B2 (en) 2014-04-14 2016-09-06 Cavium, Inc. Processing of finite automata based on a node cache
US10110558B2 (en) 2014-04-14 2018-10-23 Cavium, Inc. Processing of finite automata based on memory hierarchy

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6954424B2 (en) * 2000-02-24 2005-10-11 Zarlink Semiconductor V.N., Inc. Credit-based pacing scheme for heterogeneous speed frame forwarding
US20100174770A1 (en) * 2005-12-30 2010-07-08 Pandya Ashish A Runtime adaptable search processor
US20070282833A1 (en) * 2006-06-05 2007-12-06 Mcmillen Robert J Systems and methods for processing regular expressions
US20080228991A1 (en) * 2007-03-13 2008-09-18 Stmicroelectronics Sa Ring buffer management
WO2009017131A1 (ja) * 2007-08-02 2009-02-05 Nec Corporation ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム
US20110072199A1 (en) * 2009-09-23 2011-03-24 Lsi Corporation Startup reconstruction of logical-to-physical address translation data for solid state disks
US20110093496A1 (en) * 2009-10-17 2011-04-21 Masanori Bando Determining whether an input string matches at least one regular expression using lookahead finite automata based regular expression detection
CN102902713A (zh) * 2012-03-29 2013-01-30 中国科学技术大学 一种基于图形处理单元的非确定有限自动机的匹配方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106897447A (zh) * 2017-03-02 2017-06-27 广州算易软件科技有限公司 一种基于规则电气图纸箱号的自动化查找方法
CN111159496A (zh) * 2019-12-31 2020-05-15 奇安信科技集团股份有限公司 正则表达式nfa的构造方法及装置
CN111159496B (zh) * 2019-12-31 2024-01-23 奇安信科技集团股份有限公司 正则表达式nfa的构造方法及装置

Also Published As

Publication number Publication date
CN104426909B (zh) 2019-01-04
US20150067836A1 (en) 2015-03-05
CN104516940B (zh) 2019-03-01
HK1207179A1 (zh) 2016-01-22
KR101615915B1 (ko) 2016-04-27
US20150067200A1 (en) 2015-03-05
KR20150026979A (ko) 2015-03-11
US20180004483A1 (en) 2018-01-04
CN104516940A (zh) 2015-04-15
US10466964B2 (en) 2019-11-05
US9507563B2 (en) 2016-11-29
HK1208104A1 (zh) 2016-02-19
US20150067123A1 (en) 2015-03-05
US9785403B2 (en) 2017-10-10
US9563399B2 (en) 2017-02-07
US20150066927A1 (en) 2015-03-05
US9823895B2 (en) 2017-11-21

Similar Documents

Publication Publication Date Title
CN104426909A (zh) 为具有高级特征的正则表达式图样生成非确定有限自动机(nfa)图形
US9652505B2 (en) Content search pattern matching using deterministic finite automata (DFA) graphs
US9762544B2 (en) Reverse NFA generation and processing
EP2215563B1 (en) Method and apparatus for traversing a deterministic finite automata (dfa) graph compression
US8819217B2 (en) Intelligent graph walking
US8180803B2 (en) Deterministic finite automata (DFA) graph compression
US9419943B2 (en) Method and apparatus for processing of finite automata
US9602532B2 (en) Method and apparatus for optimizing finite automata processing
US7805392B1 (en) Pattern matching in a multiprocessor environment with finite state automaton transitions based on an order of vectors in a state transition table
US20110016154A1 (en) Profile-based and dictionary based graph caching
US20120221497A1 (en) Regular Expression Processing Automaton
US20100114973A1 (en) Deterministic Finite Automata Graph Traversal with Nodal Bit Mapping
CN104820666A (zh) 基于栈顶(tos)存储器的有限自动机处理
US9996387B2 (en) Context switching for computing architecture operating on sequential data
CN104714995A (zh) 用于遍历为具有高级特征的正则表达式图样生成的非确定有限自动机(nfa)的系统和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1208104

Country of ref document: HK

CB02 Change of applicant information
CB02 Change of applicant information

Address after: California, USA

Applicant after: Cavium, Inc.

Address before: California, USA

Applicant before: Cavium, Inc.

GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200427

Address after: Singapore City

Patentee after: Marvell Asia Pte. Ltd.

Address before: Ford street, Grand Cayman, Cayman Islands

Patentee before: Kaiwei international Co.

Effective date of registration: 20200427

Address after: Ford street, Grand Cayman, Cayman Islands

Patentee after: Kaiwei international Co.

Address before: California, USA

Patentee before: Cavium, Inc.