CN1894696A - 检测数据流中的模式的方法和装置 - Google Patents
检测数据流中的模式的方法和装置 Download PDFInfo
- Publication number
- CN1894696A CN1894696A CNA2004800370802A CN200480037080A CN1894696A CN 1894696 A CN1894696 A CN 1894696A CN A2004800370802 A CNA2004800370802 A CN A2004800370802A CN 200480037080 A CN200480037080 A CN 200480037080A CN 1894696 A CN1894696 A CN 1894696A
- Authority
- CN
- China
- Prior art keywords
- node
- suffix
- prefix
- trie
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1441—Countermeasures against malicious traffic
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Artificial Intelligence (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
在某些实施例中,一种方法包括为一组模式生成前缀特里结构,为该组模式生成后缀特里结构,并在前缀特里结构的节点与后缀特里结构的各个对应节点之间建立相应的链接。在某些实施例中,一种方法包括向后缀树添加后缀,以使后缀(至少是一个模式的一部分)在树中由在第一节点开始并在第二节点结束的路径所表示,并将标识该模式的模式标识符至少与第一节点和第二节点相关联。
Description
背景
除了扫描分组报头以外或作为替代,扫描分组的有效负荷以检测这些分组中所包含的数据中的模式的需要日益增长。一般称为深层分组检查的对这一方法的应用可包括蠕虫及病毒扫描、强化入侵检测、上下文和/或协议知悉的防火墙隔离、信息保护、负载平衡、或者按需网络服务投放。
因为分组可能、并且经常是无序接收的,所以要检测被分段在各分组上的模式可能是特别有挑战性的。为帮助检测分段的模式而在检查点重新组装分组序列带来很大的存储器和/或处理负担,特别是在要监视的流的个数可能非常多的时候。
附图简述
图1是示出根据某些实施例所提供的网络控制器的框图。
图2是可根据图1的网络控制器中的分组检查的某些实施例使用的数据结构(包括前缀特里结构(trie)和后缀特里结构)的示意图。
图3是示出生成图2的数据结构的过程的流程图。
图4A和4B一起构成示出使用图2的数据结构来检测数据流中的模式的过程的流程图。
图5是可根据图1的装置中的分组检查的某些其它实施例使用的数据结构(共享后缀树)的示意图。
图6是示出生成图5的数据结构的过程的流程图。
图7是示出图6的过程的一阶段的细节的流程图。
图8是图5的修订版本,示出因为向图5中所示的共享后缀树添加其它模式的后缀而产生的共享后缀树中的变化。
图9是示出使用图5和8中所示的类型的数据结构来检测分组有效负荷中的全模式的过程的流程图。
图10是示出使用图5中所示的数据结构来检测分组有效负荷开头处的模式的部分后缀的过程的流程图。
图11A和11B一起构成示出使用图5中所示的数据结构来检测分组有效负荷结尾处的模式的前缀的过程的流程图。
图12是示出根据某些实施例示出包含图1的网络控制器的系统的框图。
详细描述
图1是示出根据某些实施例提供的网络控制器100的框图。网络处理器100包括总线102、还包括处理器104、散列/其它功能块106、一个或多个存储器组件108、设备控制器110和接口控制器112,所有这些都被连接到总线102。网络处理器100还包括接收缓冲器114,它被耦合到处理器104,用于接收并临时存储传入的数据分组;还包括发送缓冲器116,它被耦合到处理器104,用于临时存储传出的数据分组。
在某些实施例中,处理器104可由数个并行处理的微引擎构成,图中没有单独示出这些微引擎。处理器104有时会被可互换地称为“处理单元”。处理器104可执行如下所述的分组检查,以及与传入和/或传出的分组相关的其它功能。
散列/其它功能块106可执行散列计算,并可处理输入/输出和/或其它功能。
存储器组件108可作为处理器104的程序和/或工作存储器。
设备控制器110可执行网络处理器100总的控制功能,而接口控制器112可控制经由例如PCI总线(未示出)的通信。
图2图示出为分组检查的目的可在某些实施例中使用的前缀特里结构200和后缀特里结构202。如本领域技术人员所熟悉的,“特里结构”是对存储字母表或其它符号集上的串有用的树状数据结构。共享一根公共树干的所有串悬挂在一个公共节点下。
为图2中所示的示例的目的,假定所要检测的一组模式包含以下单词,“timber”、“timberland”、“tentative”和“tension”。对于“timber”,详尽的前缀集是{t,ti,tim,timb,timbe,timber},而详尽的后缀集是{imber,mber,ber,er,r}。对于“timberland”,详尽的前缀集是{t,ti,tim,timb,timbe,timber,timberl,timberla,timberlan,timberland},而详尽的后缀集是{imberland,mberland,berland,erland,rland,land,and,nd,d}。对于“tentative”,详尽的前缀集是{t,te,ten,tent,tenta,tentat,tentati,tentativ,tentative},而详尽的后缀集是{entative,ntative,tative,ative,tive,ive,ve,e}。对于“tension”,详尽的前缀集是{t,te,ten,tens,tensi,tensio,tension},而详尽的后缀集是{ension,nsion,sion,ion,on,n}。(可以注意到,对于图2的实施例,不将整个模式视为后缀。)
前缀特里结构200以根节点204开始,并且随着在模式的每个字节处添加一个新的节点而从这些模式的开头延伸至这些模式的结尾,并且前缀特里结构200在两个模式分叉的每个点处分枝。每个节点(除根节点以外)表示由位于沿从根节点到所讨论的节点的路径上的字节组成的前缀。因此,节点206表示前缀“t”,而它由所有四个模式“timber”、“timberland”、“tentative”和“tension”共享。节点208表示前缀“te”,它为模式“tentative”和“tension”共有。一些(但未必是全部)模式可能在叶节点结束,诸如图2中所示的节点210、212、214。相反,模式“timber”在节点216结束,但与“timber”共享节点216的模式“timberland”继续延伸至叶节点214。
在为此示例使用的这组特定的模式中,所有模式均以“t”开头,因此根节点204只有单个子节点(节点206)。但是,如果这组模式包括以各种不同字节开头的模式,则根节点204对开始一个模式的每个不同的字节都有相应的子节点。
后缀特里结构202以根节点218开始,并反向地从这些模式的结尾延伸至距离这些模式的开头一个字节的地方。同样,在模式的每个字节处(反向地)添加一个新的节点。在特定示例的这组模式中,没有任何两个模式共享相同的最尾字母。由此,在此情形中,后缀特里结构202的根节点218对每个模式都有相应的子节点(节点220、222、224、226)。在两个或多个模式会以相同字节来结尾的情况下,后缀特里结构202的根节点218至少有一个子节点要由至少两个模式共享。如果两个或多个模式共享一个节点,则后缀特里结构202将在这些模式反向行进时分叉的每个点处分枝。除根节点218以外的每个节点表示由位于沿从根节点到所讨论的节点的路径上的字节组成的后缀,但要再次注意,这一路径包含字节的方向与后缀的正向相反。例如,节点228表示模式“timber”的后缀“ber”,而节点230表示模式“tentative”的后缀“ative”。
根据某些实施例,相应的流表232与每个节点(可能除前缀特里结构的根节点和叶节点之外)相关联。流表的目的和功能将在下文中描述。为简化附图,图中没有示出其中许多的流表232。(例如,相应的流表与节点208、222、224、226、230中的每一个相关联,但附图中没有示出这些流表。)在某些实施例中,流表的大小可能有所不同;例如,较深的节点(距离根节点较远的节点)可能有较小的流表。例如,在某些实施例中,可根据公式S=10*(10/d)+5来确立流表的大小,其中S是流表的大小,而d是所讨论的节点的深度(到根节点的距离)。
在某些实施例中,深度较浅的节点(例如,从根节点出发的前三级节点)除了表232之外,还可有高速缓存234与之相关联。(为简化附图,许多高速缓存没有示出。)高速缓存234的目的和功能将在以下描述。
此外,前缀特里结构200的每个节点(可能除前缀特里结构的叶节点和前缀特里结构的根节点204以外)都被链接到后缀特里结构202的一个或多个对应的节点。同样地,后缀特里结构的每个节点(可能除后缀特里结构的根节点218以外)都被链接到前缀特里结构200的一个或多个对应的节点。节点之间的链接在图2中由双箭头的虚线示意。例如,箭头标记236指示前缀特里结构的节点206与后缀特里结构的节点238之间的链接。一般而言,其中一棵特里结构的每个节点被链接到另一棵特里结构的所有对应节点。当且仅当由一棵特里结构中的一个节点和另一棵特里结构中的一个节点所表示的前缀和后缀组合在一起能确切构成其中一个模式时,这两个节点中的一个节点才是另一个节点的对应节点。例如,由前缀特里结构的节点206表示的前缀“t”与由后缀特里结构的节点238表示的后缀“imber”组合可构成模式“timber”。节点206有三个其它的对应后缀特里结构节点,即,节点240(表示后缀“imberland”)、节点242(表示后缀“entative”)和节点244(表示后缀“ension”)。为简化附图,节点206与节点240、242和244中的每一个之间的链接没有用双箭头指示。出于同样的原因,这两棵特里结构之间的许多其它链接也没有被示出。
仅举一个另外的例子,前缀特里结构的节点245(表示前缀“timbe”)在后缀特里结构中有两个对应节点,即,节点220(表示后缀“r”;链接由箭头标记246指示)和节点248(表示后缀“rland”;链接由箭头标记250表示)。
特里结构200与202之间的链接的特性和功能将在以下进一步描述。
图3是示出生成图2中所示的包括特里结构200和202的数据结构的过程的流程图。图3的过程可在网络处理器100的预处理模式中,即在开始分组检查之前执行。
在图3的300,确立要在数据流中检测的一组模式。在302,基于在300确立的这组模式来生成前缀特里结构200,而在304,基于在300确立的这组模式来生成后缀特里结构。(302和304的处理阶段可按任何次序来执行,或可实质上同步执行。)对特里结构200和202的构造能以直接的方式来完成,并且一般需要将每个模式与当前现有的前缀或后缀特里结构相比较,视情况而定,该比较在根节点处开始,并在模式与当前现有特里结构分叉的地方分枝。在向后缀特里结构添加模式的情形中,从模式的结尾向开头执行匹配和分枝。
在图3的305,创建流表232和高速缓存234(如上所述)。
在图3的306,在前缀特里结构的诸节点与后缀特里结构的各对应节点之间建立相应的链接。(同样,在后缀特里结构的诸节点与前缀特里结构的各对应节点之间建立相应的链接。)如上文中所提及的,如果后缀特里结构节点所表示的后缀和前缀特里结构节点所表示的前缀组合起来能够确切构成完整的模式,则该后缀特里结构节点对应于该前缀特里结构节点。
现在将参考附图4A和4B来描述根据一些实施例来执行的、并且使用上述链接的前缀和后缀特里结构的分组检查。
在图4A的400,接收数据流的下一个分组。在402,搜索该新接收的分组以确定该分组是否以完整形式包含其中一个或多个模式。这能以常规方式来完成,和/或可涉及前缀特里结构的使用。例如,可以确定分组中的一个或多个串是否完全匹配前缀特里结构的一个或多个分枝。
在404,使用后缀特里结构来确定该分组是否是以是其中一个或多个模式的一部分的一个或数个后缀开头。此处理阶段对分组有效负荷最前的Lmax个字节进行操作,其中Lmax是最长模式的长度。假定分组有效负荷中的第一个字节被称为第0字节,则对分组的开头的检查始于从第(Lmax-1)个字节反向扫描到第0字节,并从后缀特里结构的根节点开始,将最终所得的串与后缀特里结构相比较。如果检测到不匹配,则将搜索位置重置到后缀特里结构的根节点,并再次检查当前字节。在每个如判定阶段406所示的检测到后缀的情形中,检查与该串结束处的后缀特里结构节点相关联的流表,以确定流表是否存储了指示该分组与之相关联的流的数据(例如,源和目标的散列)。如果是,则这指示了最近在同一个流的分组的结尾处已检测到相应的前缀。由此可推断已检测到由该后缀和前缀构成的模式,并可作出模式检测的指示。(见图4A的408和410。)
如果在408确定与串结束处的后缀特里结构节点相关联的流表没有存储指示当前分组的流的数据,则如412所示,将该数据存储在被链接到(对应于)该串结束处的后缀特里结构节点的前缀树的每个节点处的相应流表中。可对流数据的条目加盖时间戳,以允许过时的流数据在合适的时间延迟期限之后被刷新掉。
在某些实施例中,在后缀特里结构节点处,作为流表的代替或补充,还可搜索高速缓存,特别是在后缀特里结构节点对应于较短后缀的情形中,从而可允许更迅速地搜索先前已被检测到的较长前缀。同样,当在后缀特里结构节点流表处没有找到匹配的流数据时,作为流表的替代或补充,可将当前分组的流数据存储在对应于该后缀特里结构节点的每个前缀特里结构节点处的高速缓存中。
如图4A的414所示,对后缀的搜索继续进行,直至已将上述在分组开头处的所有“反向”串与后缀特里结构相比较。
在图4B的416,使用前缀特里结构来确定分组是否以是其中一个或多个模式的一部分的一个或数个前缀结尾。此处理阶段对分组最后的Lmax个字节进行操作。对分组结尾的检查始于从距离分组结尾的第(Lmax-1)个字节开始正向扫描到分组的最后一个字节,并从前缀特里结构的根节点开始,将最后所得的串与前缀特里结构相比较。如果检测到不匹配,则将搜索位置重置到前缀特里结构的根节点,并再次检查当前字节。在每个如判定阶段418所示的检测到前缀的情形中,检查与该串结束处的前缀特里结构节点相关联的流表,以确定流表是否存储了指示该分组与之相关联的流的数据(例如,源和目标的散列)。如果是,则这指示了最近在同一个流的分组的开头处已检测到对应的后缀。由此可推断已检测到由该前缀和后缀构成的模式,并可随即作出模式检测的指示。(见图4B的420和422)。
如果在420确定与串结束处的前缀特里结构节点相关联的流表没有存储指示当前分组的流的数据,则如424所示,将该数据存储在链接到(对应于)该串结束处的前缀特里结构节点的后缀特里结构的每个节点处的相应流表中。同样,可对流数据的条目加盖时间戳,以允许过时的流数据被刷新掉。
在某些实施例中,在前缀特里结构节点处,作为流表的代替或补充,还可搜索高速缓存,特别是在前缀特里结构节点对应于较短前缀的情形中,从而可允许更迅速地搜索先前已被检测到的较长后缀。同样,当在前缀特里结构节点流表处没有找到匹配的流数据时,作为流表的替代或补充,可将当前分组的流数据存储在对应于该前缀特里结构节点的每个后缀特里结构节点处的高速缓存中。
如图4B的426所示,对前缀的搜索继续进行,直至已将上述在分组结尾处的所有串与前缀特里结构相比较。然后可检查下一个分组(图4A,400)。
应当理解,前缀搜索、后缀搜索和全模式搜索的次序可与图4A和4B的流程图所提议的次序有所不同。
参考图2-4B所描述的分组检查技术可适用于高效地审查可能在分组之间拆分的一组模式,而无需在检查设备处进行流的重新组装,该技术还可高效地处理无序或甚至倒序到达的分组。这一分组检查技术还可高效地处理在时间上延迟的分组之间拆分的模式的标识。此外,此技术的存储器要求是确定性的,并且是基于所要检测的模式的个数,这是有界的。在提供了适当的流表存储器大小的情况下,可将表溢出以及由此而产生的假否定检测的风险最小化。在某些实施例中,能以信道的全数据率来审查非常大量的分组流。在资源受限的系统中使用此技术也是很有吸引力的,并且此技术能启用诸如强化入侵检测、上下文知悉的防火墙隔离、病毒及蠕虫扫描、应用程序知悉的路由以及个人和/或机密信息保护等应用。
在其它实施例中,可结合分组检查使用另一种分组检查技术以及一种不同的数据结构。例如,图5图示出在分组检查的一些实施例中可使用的共享后缀树500的示例。对于示例树500,假定要检测以下模式:
模式P1:“xybcd”
模式P2:“xbcdy”
模式P3:“bcdxyz”
模式P1的详尽的后缀集是{xybcd,ybcd,bcd,cd,d}。模式P2的详尽的后缀集是{xbcdy,bcdy,cdy,dy,y}。模式P3的详尽的后缀集是{bcdxyz,cdxyz,dxyz,xyz,yz,z}。(注意,为图5的共享后缀树的目的,将整个模式视为该模式的后缀。由此后缀可与模式相同。)
后缀树500包括根节点502和若干第一级节点504、506、508、510、512、514,它们是根节点502的子节点。后缀树500还包括叶节点516、518、520、522、524、526、528、530、532、534、536,它们没有子节点。每个叶节点对应于单个字节或对应于两个或多个字节的串。(注意,第一级节点514没有子节点,它也被认为是叶节点。第一级节点对应于单个字节,除非它是叶节点,在后一种情形中,它可替换地对应于两个或多个字节的串。)
最后,后缀树包括中间节点538、540、542、544,其中每一个都至少有一个子节点,并且其中每一个不是根节点或第一级节点。每个中间节点对应于单个字节。
除根节点502以外的每个节点至少有一个模式标识符(在此例中,P1、P2和/或P3)与之相关联,模式标识符对应于具有由包括所讨论的节点的后缀树500中的一条路径表示的后缀的模式。在节点对应于模式的开头的地方,该节点处的模式标识符被适当地标记(在此例中,由指示符“**”棕记)。标记“**”只能与第一级节点相关联。例如见节点504,其中P1和P2都用“**”标记,以及节点506,其中P3用“**”标记。在节点对应于模式的结尾(因此是后缀的结尾)的地方,模式标识符也被标记,但却是用不同的指示符(在此例中,用标识符“*”)。例如见节点542,其中P1用“*”标记,以及节点512,其中P1再次用“*”标记。
每一个模式的每个后缀由贯穿后缀树的一条相应路径表示。在每个情形中,路径以第一级节点开头。如果后缀是单个字节,或者如果第一级节点是叶节点,则路径也在第一级节点处结束,并且相关模式的模式标识符用“*”来标记。或者,路径可能在不是第一级节点的叶节点处、或在中间节点处结束,这些情形中相关的模式标识符用“*”来标记。
作为路径的一个例子,对于模式P1(“xybcd”),对应的路径在节点504处开始(在此P1用“**”来标记),并延贯节点538以在节点516处结束(在此P1用“*”来标记)。
又如,对于模式P2的后缀-后缀“cdy”,对应的路径在节点508处开始(在此P1用“**”来标记),并延贯节点544以在节点526处结束(在此P1用“*”来标记)。
再如,对于模式P1的后缀-后缀“bcd”,对应的路径在节点506处开始,并延贯节点540以在节点542处结束(在此P1用“*”来标记)。
另如,对于模式P3最短的后缀(即模式P3的最后一个字节)-后缀“z”,对应的路径在节点514开始,并立即在该节点处结束。
在此实施例中,还可提供流状态表以跟踪检测到的模式片段,这将在下文中进一步描述。
图6是示出生成共享后缀树500的过程的流程图。为图6的目的,假定已确立一组模式,以使用从这些模式及其后缀构造的后缀树来进行检测。
在图6的600,通过例如创建根节点,然后创建对应于其中一个模式的整体的第一级节点来开始后缀树。然后,在602,确定对于当前模式,是否还有另一个后缀要添加到树中。如果有,则添加该后缀,如604所示(向树添加后缀的操作的细节在下文中提供)。如果在602确定对于当前模式,没有其它后缀要被添加,则接下来确定(如606所示)是否还留有任何其它模式要被添加到树中。如果有,则该模式(即,与该模式相同的后缀)被添加到树中,如608所示(向树添加模式的操作的细节在下文中提供)。在向树添加了模式或后缀之后,图6的过程回到602。一旦已将所有模式都添加到树中,则图6的过程结束,如610所示。
图7是示出如图6的604所示地向树500添加后缀的操作的细节的流程图。
在700,确定后缀中是否还有另一个字节(可以是该后缀的第一个字节)。如果有,则确定(如702所示)如其当前存在的形态的树是否提供了容纳下一个字节的匹配路径。更具体地,对于第一字节,搜索后缀树来寻找根节点的以所讨论的字节开头的子节点。对于每一个后续字节,确定当前节点中的下一个字节(如果当前节点是多字节的)是否匹配所讨论的字节,或者是否存在当前节点的以所讨论的字节开头的子节点。如果在702确定后缀树为下一个字节提供了匹配路径,则确定(如704所示)该匹配路径是否在树的当前节点中被表示。如果没有,则如706所示,该过程前进至提供了该匹配路径的下一个节点,并且用对应于当前正被添加的后缀是其一部分的那个模式的模式标识符来标志该下一个节点,并且过程回到700。
再次参考在704所作的确定,如果在此阶段确定匹配路径在树的当前节点中已被表示(只可能是在当前节点是对应于至少两个字节的串的叶节点的情况下出现的情形),则拆分当前节点(如708所示),这是通过将当前节点变为中间节点或仅对应于一个字节的第一级节点,并构造对应于先前由现正被拆分的节点所表示的串剩余的一个或数个字节的新的子(叶)节点来实现的。然后用对应于当前正被添加的后缀是其一部分的那个模式的模式标识符来标志该新的子节点,并且过程回到700。
再次参考在702所作的确定,如果在此阶段确定树没有在当前节点或从当前节点提供当前字节的匹配路径,则确定(如710所示)是否需要拆分当前节点(即,确定当前节点是否是表示至少两个字节的串的叶节点)。如果是,则如712所示,拆分当前节点,这是通过将当前节点变为中间节点或仅对应于一个字节的第一级节点,并构造对应于先前由现正被拆分的节点表示的串剩余的一个或数个字节的新的子(叶)节点来实现的。继续用现正被添加的后缀的模式标识符来标志该中间或单字节第一级节点,但不对新的子(叶)节点进行相同的标记。然后,如714所示,创建第二个新的叶节点,它是在712构造的中间或单字节第一级节点的子节点。第二个新的叶节点表示当前后缀的当前字节以及所有剩余的字节。第二个新的叶节点用当前正被添加的后缀是其一部分的那个模式的模式标识符来标志,并且该模式标识符用指示符“*”来标记以指示模式的结尾。由此,添加当前后缀的操作完成,如716所示。
再次参考在700所作的确定,如果在此阶段确定当前后缀中已没有其它字节,则向当前节点添加“*”指示符,如718所示。然后如720所示,确定是否需要拆分当前节点(即,确定当前节点是否是表示至少两个字节的串的叶节点)。如果不是,则添加当前后缀的操作由此完成。但是,如果在720作出肯定的确定,则拆分当前节点(如722所示),这是通过将当前节点变为中间节点或仅对应于一个字节的第一级节点,并构造对应于先前由现正被拆分的节点所表示的串剩余的一个或数个字节的新的子(叶)节点来实现的。继续用现正被添加的后缀的模式标识符(以及该标识符的指示符“*”)来标志该中间或单字节第一级节点,但不对新的子(叶)节点进行相同的标记。添加后缀的操作至此完成。
如图6的608所示的向树添加模式的操作一般与刚才参考图7所描述的操作相类似。此外,当在添加模式(即,与模式相等的后缀)的时候,在处理该模式的第一字节时,匹配第一字节的第一级节点(或在需要的情况下,新的第一级节点)用关于新模式的模式标识符的指示符“**”来标记。
为举例目的,将假定要将由串“cdzyx”组成的另外的模式P4添加到如图5中所显现的树500中。模式P4的详尽的后缀集是{cdzyx,dzyx,zyx,yx,x}。现在将参考图5和7以及图8来描述向共享后缀树添加模式P4及其所有后缀的过程,其中图8示出在完成这一过程之后将显现的共享后缀树。
最初,添加模式“cdzyx”。即,以在700和702(图7)处肯定的确定,并以根节点502为当前节点来考虑第一字节“c”。在704作出否定的确定,并且如图7的706所规定的匹配的第一级节点508(对应于“c”)用模式标识符P4来标志,而P4还用指示符“**”标记,如图8的800所示。考虑下一个字节“d”。在700和702再次作出肯定的确定,并再次在704作出否定的确定。由此,如706所规定的该下一个节点用模式标识符P4来标志,如图8的802所示。
考虑下一个字节“z”,在700作出肯定的确定,但在702作出否定的确定,因为在节点544或从节点544没有“z”的匹配路径可用。在710也作出否定的确定,因为节点544是单字节节点(实际上,不是叶节点的节点544必须是单字节节点)。由此如图7的714所规定地构造出新节点804,作为从节点544出发的子(叶)节点。新节点804对应于串“zyx”,它是当前字节“z”加上现正被添加到树中的模式(后缀)的剩余字节。此外,模式标识符P4与新节点804相关联地存储,并且标记或指示符“*”与模式标识符P4相关联地存储。
然后,下一个后缀“dzyx”被添加到树中。先考虑该后缀的第一字节“d”。在700和702作出肯定的确定,并在704作出否定的确定。根据706,第一级节点510用模式标识符P4来标志。然后考虑下一个字节“z”。在700作出了肯定的确定,但在702作出了否定的确定,因为在节点510或从节点510没有“z”的匹配路径可用。在710也作出否定的确定,因为节点510是单字节节点。由此如714所规定地构造出新节点806,作为从节点510出发的子(叶)节点。新节点806对应于串“zyx”,并用P4和“*”来标志。
然后将下一个后缀“zyx”添加到树中。先考虑该后缀的第一字节“z”。在700和702作出肯定的确定,并在704作出否定的确定。根据706,第一级节点514用模式标识符P4来标志。然后考虑下一个字节“y”。在700作出了肯定的确定,但在702作出了否定的确定,因为在节点514或从节点514没有“y”的匹配路径可用。在710作出否定的确定,因为节点514是单字节节点。由此如714所规定地构造出新节点808,作为从节点514出发的子(叶)节点。新节点808对应于串“yx”,并用P4和“*”来标志。
然后将下一个后缀“yx”添加到树中。先考虑第一字节“y”,在700和702作出肯定的确定,并在704作出否定的确定。根据706,第一级节点512用模式标识符P4来标志。然后考虑下一个字节“x”。在700作出了肯定的确定,但在702作出了否定的确定,因为在节点512或从节点512没有“x”的匹配路径可用。在710作出否定的确定,因为节点512是单字节节点。由此如714所规定地构造出新节点810,作为从节点512出发的子(叶)节点。新节点810对应于串“x”,并用P4和“*”来标志。
然后将最后的后缀“x”添加到树中。考虑字节“x”,并在700和702作出肯定的确定,但在704作出否定的确定。根据706,第一级节点504用模式标识符P4来标志。因为该后缀中已没有其它字节,所以接下来在700作出否定的确定。根据718,当前节点,即节点504用“*”来标志。在720作出否定的确定(节点504无需也不能拆分),并且添加后缀“x”的操作完成,并且向共享后缀树添加模式P4及其所有后缀所需的过程也完成了。再次要注意,图8示出了模式P4及其所有后缀均已被添加的共享后缀树的情况。可以观察到,模式标识符P4已被添加到节点504、508、544、510、512和514,并且新的叶节点804、806、808和810已被添加到该共享后缀树。
在某些实施例中,可从叶节点中省略标记或指示符“*”,因为每个叶节点必然表示模式的结尾。
图9是示出使用图5和8中所示的类型的共享后缀树来检测分组有效负荷中的全模式的过程的流程图。
如900所示,图9的过程在分组有效负荷中在被称为该分组有效负荷的“结束区”之前的每个字节处开始被连续应用。“结束区”可被视为是分组有效负荷的最后Lmax个字节,其中Lmax是所要检测的最长模式的长度。
如902所示,确定当前的开始字节是否匹配用标记“**”来标志的第一级节点,其中“**”指示第一级节点中的第一(通常是唯一)字节开始一个模式。如果不是,则过程返回以在该分组的下一个字节处开始。
如果在902作出肯定的确定,则扫描该分组中当前的开始字节后所跟的字节,以确定(如904所示)最后所得的字节串是否匹配贯穿该共享后缀树的、在用标记“*”来标志的节点的结尾处结束的路径,其中“*”指示模式的结束。如果是,则接下来确定(如905所示)用“*”标记的模式标识符是否匹配在902所找到的第一级节点处用“**”标记的模式标识符。如果是,则检测到了全模式,并可提供该结果的指示,如906所示。如果当前节点是叶节点,如接下来在908所确定的,则过程返回以寻找该分组中新的开始字节。否则,过程回到904。
再次参考在905所作的确定,如果确定用“*”标记的模式标识符不匹配在902所找到的第一级节点处用“**”标记的模式标识符,则图9的过程在绕过906的同时前进至908。
图10是示出使用图5中所示的类型的共享后缀树来检测分组有效负荷开头处的模式的部分后缀的过程的流程图。
如1000所示,对分组有效负荷的扫描始于该分组的第一个数据字节。如1002所示,确定该第一分组字节是否匹配后缀树中的第一级节点,以及随后的字节是否匹配贯穿后缀树的、在用标记“*”标志的节点的结尾处结束的路径,其中“*”指示模式的结束。如果是,则检测到了来自以用“*”标记的标识符所标识的模式的后缀。由此,可更新当前分组与之相关联的流的状态表,如1004所示。更具体地,该模式的模式标识符可与在分组开头处匹配贯穿该树的完整路径的串的长度的指示一起被存储在状态表中。
如果当前节点不是叶节点,如接下来在1006所确定的,则该过程循环回到1002,并且该过程继续尝试将沿该分组以下的字节与贯穿后缀树的以下的路径相匹配。如果在1006作出肯定的确定,则图10的过程结束。类似地,如果该分组的开头未能匹配贯穿后缀树的完整路径,则该过程不更新流状态表即结束。
图11A和11B是示出使用图5和8中所示类型的共享后缀树来检测分组有效负荷结尾处的模式的前缀的过程的流程图。
如1100所示,图11A和11B的过程在分组有效负荷的结束区中的每个字节处开始被连续应用。如1102所示,确定当前开始字节是否匹配用指示第一级节点中的第一(通常是唯一)字节开始一个模式的标记“**”来标志的第一级节点。如果不是,则过程返回并在分组中的下一个字节处开始。
如果在1102作出肯定的确定,则如1104所示,确定一直延伸到分组结束的以下字节是匹配贯穿后缀树的一条完整路径(即,在用指示符“*”标志的节点的结尾处结束的路径)还是贯穿后缀树的一条部分路径(即,不是完整路径的路径)。如果是这些可能性中的任何一个,则接下来如1106(图11B)所示确定该部分或完整路径结尾处的模式标识符是否匹配在1102找到的第一级节点处的用“**”标记的模式标识符。如果在1106作出肯定的确定,则如1108所示,确定该路径是否是完整路径。如果为是,则就已检测到全模式,并可提供如此的指示,如1110所示。
再次参考在1108所作的确定,如果确定该路径不是完整路径,则在分组结尾处检测到部分后缀(即,前缀,因为发现该后缀开始一个模式)。由此,如1112所示,可更新当前分组与之相关联的流的状态表。更具体地,该模式的模式标识符可与所检测到的前缀的长度的指示一起被存储在状态表中。(此外,可搜索流状态表以确定先前是否已找到该模式的互补后缀。可使用新近所找到的前缀和先前所找到的后缀的长度指示来确定是否该前缀和后缀一起构成了完整的模式。如果为是,则可提供已检测到该模式的指示。类似地,在图10的1104,可搜索流状态表以确定先前是否已找到该模式的互补前缀。同样,如果为是,则可提供已检测到该模式的指示。)应注意,作为阶段1108、1110、1112的结果,可能会检测到一个以上的完整模式和/或一个以上的前缀,或一个完整的模式和一个前缀。阶段1108的判定可根据对于在路径结尾处的节点所标识出的每个模式来作出。
参考图5-8所描述的共享后缀可能是存储要被深度分组检查所检测到的一组模式的后缀特别高效的方式。此外,这一后缀树使得以高效的方式来搜索分组开头或结尾处的部分模式成为可能。
如本领域技术人员将会认识到的,图9-11B的一些或所有过程可被组合为单个过程。
本文中所描述的一些或所有过程可由图1的网络处理器100来执行。在某些实施例中,这些过程在存储在存储器108中的合适的软件指令的控制下,由处理单元104的操作来执行。在其它实施例中,处理单元可包括适当的专用逻辑电路来执行本文中所描述的一些或所有处理。
图12是根据某些实施例示出包含网络控制器100的系统1200的框图。系统1200还包括接口1202,系统通过该接口1202耦合到诸如广域网(WAN)或局域网(LAN)等网络(未示出)。网络处理器100管理从网络传入的分组,并可根据上述的一个或多个过程来执行深层分组检查。系统1200中还包括管理传出分组的出口处理器1204。
一个或多个存储器组件1206被连接到网络处理器100以提供例如表、队列和/或传入分组的存储。并且,一个或多个存储器组件1208被连接到出口处理器1204以提供例如表、队列和/或传出分组的存储。
系统1200还包括光纤接口芯片1210,它被耦合到网络处理器100和出口处理器1204。光纤接口芯片1210提供系统1200与图中未示出的交换光纤之间的接口。
系统1200中还包括控制面处理器1212,它被耦合到网络处理器100和出口处理器1204。控制面处理器1212可为系统1200提供全面的控制功能。
本文中所描述的一些或全部过程可由除网络控制器以外的其它数据通信设备来执行。
本文中所描述的数个实施例纯粹是用于说明的目的。本文中所描述的各种特征无需被一起使用,并且那些特征中的任何一个或多个可被包含在单个实施例中。因此,本领域技术人员将会从此说明书认识到,进行各种修改和变更就可实施其它
实施例。
Claims (40)
1.一种方法,包括:
为一组模式生成前缀特里结构;
为所述的一组模式生成后缀特里结构;以及
在所述前缀特里结构的节点与所述后缀特里结构的各个对应节点之间建立相应的链接。
2.如权利要求1所述的方法,其特征在于,还包括:
在数据分组的结尾处检测来自所述的一组模式中的一个模式的前缀,所述前缀对应于所述前缀特里结构的一个节点;以及
响应于检测到所述前缀,与所述后缀特里结构的一个节点相关联地存储数据;
其中:
所述后缀特里结构中所述数据被与之相关联地存储的节点对应于所述前缀特里结构中对应于所检测到的前缀的节点;以及
所存储的数据指示所述数据分组与之相关联的流。
3.如权利要求2所述的方法,其特征在于,所存储的数据是所述流的源和目标数据的散列。
4.如权利要求1所述的方法,其特征在于,还包括:
在数据分组的开头处检测来自所述的一组模式中的一个模式的后缀,所述后缀对应于所述后缀特里结构中的一个节点;以及
响应于检测到所述后缀,与所述前缀特里结构的一个节点相关联地存储数据;
其中:
所述前缀特里结构中所述数据被与之相关联地存储的节点对应于所述后缀特里结构中对应于所检测到的后缀的节点;以及
所存储的数据指示所述数据分组与之相关联的流。
5.如权利要求4所述的方法,其特征在于,所存储的数据是所述流的源和目标数据的散列。
6.如权利要求1所述的方法,其特征在于,还包括:
在数据分组的结尾处检测来自所述一组模式中的一个模式的前缀,所述前缀对应于所述前缀特里结构的一个节点;
响应于检测到所述前缀,确定指示所述数据分组与之相关联的流的数据是否与所述前缀所对应的节点相关联地存储;以及
响应于发现指示所述数据分组与之相关联的流的数据与所述前缀所对应的节点相关联地存储,指示在所述数据分组与之相关联的流中检测到所述模式。
7.如权利要求1所述的方法,其特征在于,还包括:
在数据分组的开头处检测来自所述的一组模式中的一个模式的后缀,所述后缀对应于所述后缀特里结构的一个节点;
响应于检测到所述后缀,确定指示所述数据分组与之相关联的流的数据是否与所述后缀所对应的节点相关联地存储;以及
响应于发现指示所述数据分组与之相关联的流的数据与所述后缀所对应的节点相关联地存储,指示在所述数据分组与之相关联的流中检测到所述模式。
8.一种装置,包括:
处理器;以及
与所述处理器通信的存储器;
所述处理器用于:
为一组模式生成前缀特里结构;
为所述的一组模式生成后缀特里结构;以及
在所述前缀特里结构的节点与所述后缀特里结构的各个对应节点之间建立相应的链接。
9.如权利要求8所述的装置,其特征在于,所述处理器还用于:
在数据分组的结尾处检测来自所述的一组模式中的一个模式的前缀,所述前缀对应于所述前缀特里结构的一个节点;以及
响应于检测到所述前缀,与所述后缀特里结构的一个节点相关联地存储数据;
其中:
所述后缀特里结构中所述数据被与之相关联地存储的节点对应于所述前缀特里结构中对应于所检测到的前缀的节点;以及
所存储的数据指示所述数据分组与之相关联的流。
10.如权利要求8所述的装置,其特征在于,所述处理器还用于:
在数据分组的开头处检测来自所述的一组模式中的一个模式的后缀,所述后缀对应于所述后缀特里结构的一个节点;以及
响应于检测到所述后缀,与所述前缀特里结构的一个节点相关联地存储数据:
其中:
所述前缀特里结构中所述数据被与之相关联地存储的节点对应于所述后缀特里结构中对应于所检测到的后缀的节点;以及
所存储的数据指示所述数据分组与之相关联的流。
11.如权利要求8所述的装置,其特征在于,所述处理器还用于:
在数据分组的结尾处检测来自所述的一组模式中的一个模式的前缀,所述前缀对应于所述前缀特里结构的一个节点;
响应于检测到所述前缀,确定指示所述数据分组与之相关联的流的数据是否与所述前缀所对应的节点相关联地存储;以及
响应于发现指示所述数据分组与之相关联的流的数据与所述前缀所对应的节点相关联地存储,指示在所述数据分组与之相关联的流中检测到所述模式。
12.如权利要求8所述的装置,其特征在于,所述处理器还用于:
在数据分组的开头处检测来自所述的一组模式中的一个的后缀,所述后缀对应于所述后缀特里结构的一个节点;
响应于检测到所述后缀,确定指示所述数据分组与之相关联的流的数据是否与所述后缀所对应的节点相关联地存储;以及
响应于发现指示所述数据分组与之相关联的流的数据与所述后缀所对应的节点相关联地存储,指示在所述数据分组与之相关联的流中检测到所述模式。
13.一种装置,包括:
存储介质,其上存储了在由机器执行时导致以下结果的指令:
为一组模式生成前缀特里结构;
为所述的一组模式生成后缀特里结构;以及
在所述前缀特里结构的节点与所述后缀特里结构的各个对应节点之间建立相应的链接。
14.如权利要求13所述的装置,其特征在于,所述存储介质上还存储了当在由机器执行时导致以下结果的指令:
在数据分组的结尾处检测来自所述的一组模式中的一个模式的前缀,所述前缀对应于所述前缀特里结构的一个节点;以及
响应于检测到所述前缀,与所述后缀特里结构的一个节点相关联地存储数据;
其中:
所述后缀特里结构中所述数据被与之相关联地存储的节点对应于所述前
缀特里结构中对应于所检测到的前缀的节点;以及
所存储的数据指示所述数据分组与之相关联的流。
15.如权利要求13所述的装置,其特征在于,所述存储介质上还存储了在由机器执行时导致以下结果的指令:
在数据分组的开始处检测来自所述的一组模式中的一个模式的后缀,所述后缀对应于所述后缀特里结构的一个节点;以及
响应于检测到所述后缀,与所述前缀特里结构的一个节点相关联地存储数据;
其中:
所述前缀特里结构中所述数据被与之相关联地存储的节点对应于所述前缀特里结构中对应于所检测到的后缀的节点;以及
所存储的数据指示所述数据分组与之相关联的流。
16.如权利要求13所述的装置,其特征在于,所述存储介质上还存储了当在由机器执行时导致以下结果的指令:
在数据分组的结尾处检测来自所述的一组模式中的一个模式的前缀,所述前缀对应于所述前缀特里结构的一个节点;以及
响应于检测到所述前缀,确定指示所述数据分组与之相关联的流的数据是否与所述前缀所对应的节点相关联地存储;以及
响应于发现指示所述数据分组与之相关联的流的数据与所述前缀所对应的节点相关联地存储,指示在所述数据分组与之相关联的流中检测到所述模式。
17.如权利要求13所述的装置,其特征在于,所述存储介质上还存储了当在由机器执行时导致以下结果的指令:
在数据分组的开头处检测来自所述的一组模式中的一个模式的后缀,所述后缀对应于所述后缀特里结构的一个节点;
响应于检测到所述后缀,确定指示所述数据分组与之相关联的流的数据是否与所述后缀所对应的节点相关联地存储;以及
响应于发现指示所述数据分组与之相关联的流的数据与所述后缀所对应的节点相关联地存储,指示在所述数据分组与之相关联的流中检测到所述模式。
18.一种系统,包括:
光纤接口芯片;以及
被耦合到所述光纤接口芯片的网络处理器;
其中,所述网络处理器包括:
处理单元;以及
与所述处理单元通信的存储器;
所述处理单元用于:
为一组模式生成前缀特里结构;
为所述的一组模式生成后缀特里结构;和
在所述前缀特里结构的节点与所述后缀特里结构的各个对应节点之间建立相应的链接。
19.如权利要求18所述的系统,其特征在于,所述处理单元还用于:
在数据分组的结尾处检测来自所述的一组模式中的一个模式的前缀,所述前缀对应于所述前缀特里结构的一个节点;以及
响应于检测到所述前缀,与所述后缀特里结构的一个节点相关联地存储数据;
其中:
所述后缀特里结构中所述数据被与之相关联地存储的节点对应于所述前缀特里结构中对应于所检测到的前缀的节点;以及
所存储的数据指示所述数据分组与之相关联的流。
20.如权利要求18所述的系统,其特征在于,所述处理单元还用于:
在数据分组的开头处检测来自所述的一组模式中的一个模式的后缀,所述后缀对应于所述后缀特里结构中的一个节点;以及
响应于检测到所述后缀,与所述前缀特里结构的一个节点相关联地存储数据;
其中:
所述前缀特里结构中所述数据被与之相关联地存储的节点对应于所述后缀特里结构中对应于所检测到的后缀的节点;以及
所存储的数据指示所述数据分组与之相关联的流。
21.如权利要求18所述的系统,其特征在于,所述处理单元还用于:
在数据分组的结尾处检测来自所述一组模式中的一个模式的前缀,所述前缀对应于所述前缀特里结构的一个节点;
响应于检测到所述前缀,确定指示所述数据分组与之相关联的流的数据是否与所述前缀所对应的节点相关联地存储;以及
响应于发现指示所述数据分组与之相关联的流的数据与所述前缀所对应的节点相关联地存储,指示在所述数据分组与之相关联的流中检测到所述模式。
22.如权利要求18所述的系统,其特征在于,所述处理单元还用于:
在数据分组的开头处检测米自所述的一组模式中的一个模式的后缀,所述后缀对应于所述后缀特里结构的一个节点;
响应于检测到所述后缀,确定指示所述数据分组与之相关联的流的数据是否与所述后缀所对应的节点相关联地存储;以及
响应于发现指示所述数据分组与之相关联的流的数据与所述后缀所对应的节点相关联地存储,指示在所述数据分组与之相关联的流中检测到所述模式。
23.一种方法,包括:
向后缀树添加后缀,以使所述后缀在所述树中由在第一节点开始并在第二节点结束的路径所表示,所述后缀是一个模式的至少一部分;以及
将标识所述模式的模式标识符至少与所述第一节点和所述第二节点相关联。
24.如权利要求23所述的方法,其特征在于,还包括:
将一个标记与所述第二节点处的模式标识符相关联以指示所述模式的结尾。
25.如权利要求24所述的方法,其特征在于,所述第二节点是叶节点。
26.如权利要求23所述的方法,其特征在于,所述后缀与所述模式相同,并且所述方法还包括:
将一个标记与所述第一节点处的模式标识符相关联以指示所述模式的开头。
27.如权利要求23所述的方法,其特征在于,所述路径包括所述第一节点与所述第二节点之间的至少一个中间节点。
28.如权利要求23所述的方法,其特征在于,有至少两个模式标识符与所述第一节点相关联。
29.如权利要求23所述的方法,其特征在于,有至少两个模式标识符与所述第二节点相关联。
30.一种装置,包括:
处理器;以及
与所述处理器通信的存储器;
所述处理器用于:
向后缀树添加后缀,以使所述后缀在所述树中由在第一节点开始并在第二节点结束的路径所表示,所述后缀是一个模式的至少一部分;以及
将标识所述模式的模式标识符至少与所述第一节点和所述第二节点相关联。
31.如权利要求30所述的装置,其特征在于,所述处理器还用于:
将一个标记与所述第二节点处的模式标识符相关联以指示所述模式的结尾。
32.如权利要求30所述的装置,其特征在于,所述处理器还用于:
将一个标记与所述第一节点处的模式标识符相关联以指示所述模式的开头。
33.如权利要求30所述的装置,其特征在于,有至少两个模式标识符与所述第一节点相关联。
34.如权利要求30所述的装置,其特征在于,有至少两个模式标识符与所述第二节点相关联。
35.一种装置,包括:
存储介质,其上存储了在由机器执行时导致以下结果的指令:
向后缀树添加后缀,以使所述后缀在所述树中由在第一节点开始并在第二节点结束的路径所表示,所述后缀是一个模式的至少一部分;以及
将标识所述模式的模式标识符至少与所述第一节点和所述第二节点相关联。
36.如权利要求35所述的装置,其特征在于,所述存储介质上还存储了当由机器执行时导致以下结果的指令:
将一个标记与所述第二节点处的模式标识符相关联以指示所述模式的结尾。
37.如权利要求35所述的装置,其特征在于,所述存储介质上还存储了当由机器执行时导致以下结果的指令:
将一个标记与所述第一节点处的模式标识符相关联以指示所述模式的开头。
38.一种系统,包括:
光纤接口芯片;以及
被耦合到所述光纤接口芯片的网络处理器;
其中所述网络处理器包括:
处理单元;以及
与所述处理单元通信的存储器;
所述处理单元用于:
向后缀树添加后缀,以使所述后缀在所述树中由在第一节点开始并在第二节点结束的路径所表示,所述后缀是一个模式的至少一部分;以及
将标识所述模式的模式标识符至少与所述第一节点和所述第二节点相关联。
39.如权利要求38所述的系统,其特征在于,所述处理单元还用于:将一个标记与所述第二节点处的模式标识符相关联以指示所述模式的结尾。
40.如权利要求38所述的系统,其特征在于,所述处理单元还用于:将一个标记与所述第一节点处的模式标识符相关联以指示所述模式的开头。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/744,709 | 2003-12-23 | ||
US10/744,709 US7440461B2 (en) | 2003-12-23 | 2003-12-23 | Methods and apparatus for detecting patterns in a data stream |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1894696A true CN1894696A (zh) | 2007-01-10 |
CN100576222C CN100576222C (zh) | 2009-12-30 |
Family
ID=34678942
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200480037080A Expired - Fee Related CN100576222C (zh) | 2003-12-23 | 2004-12-17 | 检测数据流中的模式的方法和装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US7440461B2 (zh) |
EP (1) | EP1714227A1 (zh) |
CN (1) | CN100576222C (zh) |
WO (1) | WO2005064522A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103582880A (zh) * | 2011-06-03 | 2014-02-12 | 微软公司 | 压缩匹配枚举 |
CN106302021A (zh) * | 2016-08-18 | 2017-01-04 | 清华大学深圳研究生院 | 一种网络流转发异常检测方法 |
CN109815225A (zh) * | 2018-12-11 | 2019-05-28 | 中国科学院计算技术研究所 | 基于前缀树结构的并行化前缀数据检索方法和系统 |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7835361B1 (en) * | 2004-10-13 | 2010-11-16 | Sonicwall, Inc. | Method and apparatus for identifying data patterns in a file |
US7600257B2 (en) | 2004-10-13 | 2009-10-06 | Sonicwall, Inc. | Method and an apparatus to perform multiple packet payloads analysis |
US7565348B1 (en) | 2005-03-24 | 2009-07-21 | Palamida, Inc. | Determining a document similarity metric |
US7711719B1 (en) * | 2005-03-24 | 2010-05-04 | Palamida, Inc. | Massive multi-pattern searching |
US7870565B2 (en) * | 2005-06-30 | 2011-01-11 | Intel Corporation | Systems and methods for secure host resource management |
US7565685B2 (en) * | 2005-11-12 | 2009-07-21 | Intel Corporation | Operating system independent data management |
US20070198423A1 (en) * | 2006-02-20 | 2007-08-23 | Giancarlo Carbone | Method,system and computer program for metering usage of multiple instances of software components |
US7679504B2 (en) * | 2007-05-16 | 2010-03-16 | General Electric Company | System and method of discovering, detecting and classifying alarm patterns for electrophysiological monitoring systems |
US8483096B2 (en) * | 2008-07-22 | 2013-07-09 | The Regents Of The University Of California | Scalable commodity data center network architecture |
US8103764B2 (en) * | 2008-10-14 | 2012-01-24 | CacheIQ, Inc. | Method and apparatus for matching trigger pattern |
US8032660B2 (en) * | 2008-12-30 | 2011-10-04 | Intel Corporation | Apparatus and method for managing subscription requests for a network interface component |
US8179898B2 (en) * | 2009-06-11 | 2012-05-15 | Alcatel Lucent | Packet processing using braided tries |
US9769149B1 (en) | 2009-07-02 | 2017-09-19 | Sonicwall Inc. | Proxy-less secure sockets layer (SSL) data inspection |
US9189280B2 (en) | 2010-11-18 | 2015-11-17 | Oracle International Corporation | Tracking large numbers of moving objects in an event processing system |
US8990416B2 (en) | 2011-05-06 | 2015-03-24 | Oracle International Corporation | Support for a new insert stream (ISTREAM) operation in complex event processing (CEP) |
US8732207B2 (en) | 2012-07-02 | 2014-05-20 | International Business Machines Corporation | Attribute-based linked tries for rule evaluation |
US9953059B2 (en) | 2012-09-28 | 2018-04-24 | Oracle International Corporation | Generation of archiver queries for continuous queries over archived relations |
US9563663B2 (en) | 2012-09-28 | 2017-02-07 | Oracle International Corporation | Fast path evaluation of Boolean predicates |
US10956422B2 (en) | 2012-12-05 | 2021-03-23 | Oracle International Corporation | Integrating event processing with map-reduce |
US10298444B2 (en) | 2013-01-15 | 2019-05-21 | Oracle International Corporation | Variable duration windows on continuous data streams |
US9390135B2 (en) | 2013-02-19 | 2016-07-12 | Oracle International Corporation | Executing continuous event processing (CEP) queries in parallel |
US10409845B1 (en) * | 2013-03-15 | 2019-09-10 | EMC IP Holding Company LLC | Authenticated pattern matching and exact path queries |
KR102020673B1 (ko) | 2013-05-03 | 2019-09-11 | 삼성전자주식회사 | 시계열 패턴 마이닝 방법 및 장치 |
US9268749B2 (en) * | 2013-10-07 | 2016-02-23 | Xerox Corporation | Incremental computation of repeats |
US9934279B2 (en) * | 2013-12-05 | 2018-04-03 | Oracle International Corporation | Pattern matching across multiple input data streams |
US9712645B2 (en) | 2014-06-26 | 2017-07-18 | Oracle International Corporation | Embedded event processing |
US10120907B2 (en) | 2014-09-24 | 2018-11-06 | Oracle International Corporation | Scaling event processing using distributed flows and map-reduce operations |
US9886486B2 (en) | 2014-09-24 | 2018-02-06 | Oracle International Corporation | Enriching events with dynamically typed big data for event processing |
WO2017018901A1 (en) | 2015-07-24 | 2017-02-02 | Oracle International Corporation | Visually exploring and analyzing event streams |
WO2017135838A1 (en) | 2016-02-01 | 2017-08-10 | Oracle International Corporation | Level of detail control for geostreaming |
WO2017135837A1 (en) | 2016-02-01 | 2017-08-10 | Oracle International Corporation | Pattern based automated test data generation |
US10757053B2 (en) * | 2017-03-02 | 2020-08-25 | Microsoft Technology Licensing, Llc | High confidence digital content treatment |
US10348650B2 (en) | 2017-04-17 | 2019-07-09 | At&T Intellectual Property I, L.P. | Augmentation of pattern matching with divergence histograms |
US10558748B2 (en) * | 2017-11-01 | 2020-02-11 | International Business Machines Corporation | Recognizing transliterated words using suffix and/or prefix outputs |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5511159A (en) * | 1992-03-18 | 1996-04-23 | At&T Corp. | Method of identifying parameterized matches in a string |
US5953006A (en) * | 1992-03-18 | 1999-09-14 | Lucent Technologies Inc. | Methods and apparatus for detecting and displaying similarities in large data sets |
US5850516A (en) * | 1996-12-23 | 1998-12-15 | Schneier; Bruce | Method and apparatus for analyzing information systems using stored tree database structures |
US6493698B1 (en) * | 1999-07-26 | 2002-12-10 | Intel Corporation | String search scheme in a distributed architecture |
JP3344394B2 (ja) * | 1999-12-24 | 2002-11-11 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 配列の変換方法、構造解析方法、装置及び記録媒体 |
US7072876B1 (en) * | 2000-09-19 | 2006-07-04 | Cigital | System and method for mining execution traces with finite automata |
US7002965B1 (en) * | 2001-05-21 | 2006-02-21 | Cisco Technology, Inc. | Method and apparatus for using ternary and binary content-addressable memory stages to classify packets |
US6829602B2 (en) * | 2002-12-12 | 2004-12-07 | Microsoft Corporation | System and method for using a compressed trie to estimate like predicates |
-
2003
- 2003-12-23 US US10/744,709 patent/US7440461B2/en not_active Expired - Fee Related
-
2004
- 2004-12-17 WO PCT/US2004/042754 patent/WO2005064522A1/en not_active Application Discontinuation
- 2004-12-17 EP EP04814888A patent/EP1714227A1/en not_active Withdrawn
- 2004-12-17 CN CN200480037080A patent/CN100576222C/zh not_active Expired - Fee Related
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103582880A (zh) * | 2011-06-03 | 2014-02-12 | 微软公司 | 压缩匹配枚举 |
CN103582880B (zh) * | 2011-06-03 | 2017-05-03 | 微软技术许可有限责任公司 | 压缩匹配枚举 |
CN106302021A (zh) * | 2016-08-18 | 2017-01-04 | 清华大学深圳研究生院 | 一种网络流转发异常检测方法 |
CN106302021B (zh) * | 2016-08-18 | 2020-03-31 | 清华大学深圳研究生院 | 一种网络流转发异常检测方法 |
CN109815225A (zh) * | 2018-12-11 | 2019-05-28 | 中国科学院计算技术研究所 | 基于前缀树结构的并行化前缀数据检索方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
US7440461B2 (en) | 2008-10-21 |
US20050135380A1 (en) | 2005-06-23 |
EP1714227A1 (en) | 2006-10-25 |
WO2005064522A1 (en) | 2005-07-14 |
CN100576222C (zh) | 2009-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1894696A (zh) | 检测数据流中的模式的方法和装置 | |
CN1794236A (zh) | 高效的基于cam在分组有效载荷中进行串搜索的技术 | |
CN101035131A (zh) | 协议识别方法及装置 | |
CN1297936C (zh) | 用来比较两个计算机文件的方法及系统 | |
CN1195279C (zh) | 对软件管理树进行模式范围比较的方法、装置和系统 | |
Fan et al. | Answering graph pattern queries using views | |
CN1316696A (zh) | 用于网络处理器的全匹配搜索方法和设备 | |
CN1752934A (zh) | 编译器、编译方法以及编译程序 | |
JP3570323B2 (ja) | アドレスに関するプレフィクスの格納方法 | |
CN109614106A (zh) | 一种c++程序编译方法和装置 | |
CN1526104A (zh) | 分析结构化数据 | |
CN110008385B (zh) | 一种基于字符串的快速匹配识别方法和装置 | |
CN102968431B (zh) | 一种基于依存树的中文实体关系挖掘的控制装置 | |
CN101051321A (zh) | 一种多字符串匹配方法和芯片 | |
CN107239549A (zh) | 数据库术语检索的方法、装置及终端 | |
US10135851B2 (en) | Method for pattern processing | |
CN107025263A (zh) | 用于数据库语句的语句解析方法 | |
Wang et al. | A modular NFA architecture for regular expression matching | |
CN110505322A (zh) | 一种ip地址段查找方法及装置 | |
CN101030897A (zh) | 一种入侵检测中模式匹配的方法和装置 | |
CN104104557B (zh) | 面向IPv6安全网关的深度包检测装置 | |
CN1852238A (zh) | 一种快速索引方法 | |
WO2015192742A1 (zh) | 一种查找装置、查找方法和配置方法 | |
CN1279716C (zh) | 消除最长前缀匹配查找的并行路由查找方法及其系统 | |
CN1333616A (zh) | 路由选择检索系统及其方法以及使用的路由器 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091230 Termination date: 20191217 |