用于生成具有用于快速树遍历和在叶节点处的减少数量的全比较的节点比较字段和剪切值的树结构的方法、系统和非暂时性计算机可读介质与流程

文档序号:13986921阅读:193来源:国知局

优先权要求

本申请要求于2015年5月12日提交的美国专利申请序列号14/710,534的权益,该申请的公开内容通过引用被整体结合于本文中。

本文描述的主题涉及处理信息。更具体地,本文描述的主题涉及用于生成和使用具有用于快速树遍历和减少数量的叶节点处的全比较的节点比较字段剪切值的树结构的方法、系统和非暂时性计算机可读介质。



背景技术:

计算设备(诸如网络包处理设备)通常需要将信息与优先级列表集合或者数据结构(诸如规则)进行匹配,以对信息进行分类或其它处理。例如,网络包处理设备将传入包或帧与在优先级化的信息项集合中的规则进行匹配,其中信息项在一个示例中是规则。本文使用的术语“包”是指任何离散的信息单元,包括但不限于对应于一个或多个开放系统互连(osi)层的包或帧。将信息项应用到传入包包括将包的部分与每个信息项的对应部分进行比较,以定位管理包处理的最高优先级匹配信息项。需要对一些网络包执行的处理操作的示例包括策略应用、路由查找、地址解析协议(arp)解析等。

将优先级化的项(诸如规则)的列表应用到包的一种可能方式是将每个包中的每个字段值与列表中每个规则中的每个字段值进行比较,以定位最高优先级匹配。虽然这样的方法将准确定位最高优先级匹配规则,但是随着规则数量的增加,这种方法是效率低下并且不可扩展的。例如,需要许多包处理设备来以线路速率处理包或帧,其中该线路速率当前可以在每秒太比特的数量级上。如果将每个包与规则集合中的每个规则进行比较,那么对于大规则集合而言,以线路速率处理可能是不可能的。

识别匹配包的最高优先级规则的问题的另一个可能的解决方案是使用诸如三态内容可寻址存储器(tcam)的硬件来对包进行分类。tcam具有能够将数据与指定为“不关心”值的一些比特进行匹配的优点。但是,随着规则数量增加,使用tcam可能成本昂贵。

识别匹配包的最高优先级规则问题的还有的另一种可能的解决方案是使用散列表。但是,使用散列表的问题包括以下事实:规则必须具有明确定义的所有字段,而不允许范围或通配符。此外,由于可散列字化段集合可能在一个规则和另一个规则之间不同,因此要求对于每个包在同一字段集合上操作的散列表的散列将在这样的情形下不工作。同样的问题阻碍了其它树构建机制(诸如anderson-velsky和landis树(avl))在其中所使用的可以匹配特定规则的字段改变的优先级化规则集合上工作。

因此,需要用于生成具有用于快速树遍历和减少数量的叶节点处的全比较的节点的比较字段和剪切值的树结构的方法、系统和计算机可读介质。



技术实现要素:

提供了用于生成具有用于快速树遍历和减少数量的叶节点处的全规则比较的节点比较字段和剪切值的树结构的方法、系统和非暂时性计算机可读介质。本文描述的主题利用在直方图结构中实现的分布频率来选择树结构中用于非叶节点的比较字段和剪切值。比较字段和剪切值被存储在非叶节点处或与非叶节点相关联,而不是在非叶节点处存储整个规则。对于每个比较字段/剪切值组合,在每个非叶节点的子节点之间划分规则。在树遍历期间,在每个非叶节点处的比较包括使用比较字段来从信息单元中选择对应的字段并且将字段的值与剪切值进行比较。全规则比较发生在叶节点处。但是,由于叶节点处的规则数量比原始规则集中的数量减少了,因此全规则比较的数量减少,因此用于对信息单元进行分类的处理时间减少。

在一个示例中,如果规则集合包括以街道号1000开始并且在1000和2000之间均匀分布的居住地址列表,并且用于给定节点的比较字段被选择为街道号,那么用于在节点的左子节点和右子节点之间划分规则的理想剪切值将是1500。本文描述的主题为树结构中的每个非叶节点选择比较字段和最优剪切值,其中最优剪切值是使得子节点和最短结果分支之间的规则的最均衡划分的值。

虽然本文描述的示例主要涉及选择数字剪切值,但是本文描述的主题不限于数字剪切值。如本文所述,剪切值旨在指可以被量化并且可以与被分类的对应信息进行比较的任何信息单元。

公开了用于生成具有用于快速树遍历和减少数量的叶节点处的全规则比较的节点比较字段和剪切值的树结构的方法。在包括处理器和存储器的计算设备实现该方法。该方法包括由处理器接收用于处理信息单元的信息项集合。该方法还包括由处理器选择信息项集合中的字段并确定字段值的分布频率。该方法还包括由处理器使用分布频率来将剪切值和比较字段分配给树结构中的非叶节点。该方法还包括由处理器使用剪切值和比较字段将信息项集合中的信息项分配给树结构中的叶节点。

本文描述的主题可以用硬件、软件、固件或其任何组合来实现。因此,如本文使用的术语“功能”、“节点”或“模块”指用于实现所描述的特征、也可以包括软件和/或固件组件的硬件。在一个示例性实现中,本文描述的主题可以使用具有存储于其上的计算机可执行指令的计算机可读介质来实现,当由计算机的处理器执行计算机可执行指令时,控制计算机执行步骤。适合于实现本文描述的主题的示例性计算机可读介质包括非暂时性计算机可读介质(诸如盘存储器设备、芯片存储器设备、可编程逻辑设备和专用集成电路)。此外,实现本文描述的主题的计算机可读介质可以位于单个设备或计算平台上,或者可以跨多个设备或计算平台分布。

附图说明

现在将参考附图解释本文描述的主题,其中:

图1是示出根据本文描述的主题的实施例的、用于生成具有用于快速树遍历和减少数量的叶节点处的全规则比较的节点比较字段和剪切值的树结构的示例性系统的框图;

图2是示出根据本文描述的主题的实施例的、使用剪切值在左节点和右节点之间示例性划分规则的树形图;

图3是示出根据本文描述的主题的实施例的、具有引用分配给叶节点的减少数量的规则的四个级别的树结构的示例的树形图;

图4是根据本文描述的主题的实施例的、可以从中选择用于包分类树的剪切值的示例性源ip地址表;

图5是示出将图4中的地址分成不同字段的表,其中每个字段对应于每个地址的一个字节;

图6是来自图5中示出的表中每个地址的第一字节的值的图;

图7a是使用存储图6中示出的地址的第一字节的值的分布频率的阵列实现的直方图结构的示图;

图7b是示出在选择地址的第一字节作为比较字段并且使用图7a中示出的直方图结构来选择剪切值之后,左子节点和右子节点之间划分规则的树形图;

图8是示出对应于包规则的网络地址的表,其中包规则中的一些规则具有匹配值的范围;

图9是图8中示出的地址的最后一个字节的值的图;

图10a是示出使用存储图9示出的地址的最后一个字节的分布频率的阵列实现的直方图结构的示图。

图10b是示出当地址的最后一个字节被选择作为比较字段并且使用图10a示出的直方图结构选择剪切值时,在左子节点和右子节点之间划分规则的树状图;以及

图11是示出根据本文描述的主题的实施例的、用于构建具有用于快速树遍历和减少数量的叶节点处的全规则比较的节点比较字段和剪切值的树结构的示例性处理的流程图。

具体实施方式

本文描述的主题包括用于生成具有用于快速树遍历和减少数量的叶节点处的全规则比较的节点比较字段和剪切值的树结构的方法、系统和计算机可读介质。本文描述的主题假定规则集合包含优先级化的规则列表。优先级化的规则列表意味着列表中的规则以明确的或者隐含的优先级顺序布置。规则可以具有特定的匹配字段,其中字段或字段集合的单个值与要处理的信息的一个或多个对应部分进行比较。其它规则可以具有匹配值的范围的广义匹配字段。还有的其它规则可以具有匹配任何值的指定或未指定的匹配字段,通常被称为“通配符”。本文描述的机制倾向于针对优先级化的项或规则进行优化,但是对于其它搜索、匹配或查找类型也是有效的。

如上所述,使用优先级化规则列表来处理信息单元的一种可能的机制是将信息单元中的所有字段值与规则集合中的每个规则中的所有字段值进行比较,直到定位到匹配或达到规则列表末尾为止。如果规则中的字段值与信息单元中的所有对应字段值匹配,则结果是匹配的。如果规则中的字段值没有与信息单元中的所有对应字段值匹配,则对以降序优先级的顺序的每个附加规则重复该过程。继续进行比较,直到定位到匹配或达到规则列表末尾为止。这种机制的问题包括:由于将信息单元中的每个字段值与每个规则中的每个对应字段值进行比较直到定位到匹配或到达列表末尾为止所需要的比较次数引起的延迟,以及一些信息单元(诸如包)必须以非常高的速率被处理来满足包线路速率或其它可接受的处理速度要求的事实。此外,一些具有许多字段和不同层的包可能需要比较。使用散列或avl树的问题包括无法对范围和通配符工作,以及无法定义在包的不同字段上或不同iu类型中操作的规则。

本文描述的主题的一个目标是找到一种机制,该机制通过最小化每个字段值必须与信息单元中的每个字段值进行比较的规则的数量,从而比遍历每个信息单元的整个优先级规则列表更快。其它目标包括优化查找性能、最小化存储器消耗以及找到代替成本高昂的硬件(诸如tcam)的软件解决方案。但是,本文描述的主题不限于用软件实现。在一些或全部部分用硬件实现的情况下,本文描述的机制将同样很好地工作(如果不是更好的话)。

方法

本文描述的主题的一个方面包括用于构建树数据结构(典型地,将导致树的叶子处减少的匹配规则集合的二叉树)的处理。该方法是将需要搜索的规则智能地分割成多个更小的集合,其中每个更小的集合都附连到二叉树的不同叶子上。二叉树应该具有最优可能的均衡、所要求的最小深度以及在每个节点处进行快速分支的简单测试条件。每次需要将任何规则应用到信息单元时,需要将该树完全遍历至叶节点。这种始终需要遍历树的权衡是为了弥补需要在叶节点处全面检查的减少的规则集合。在树的每个节点处进行的测试理想上是小而快的,可能比叶节点处的任何一个规则的单个匹配快10-100倍。叶节点处的“最长规则列表”将决定最差情况的规则查找时间。这直接转化为最长的包处理时间,并且因此转化为最大支持的包到达速率。限制叶节点处的最长规则列表的需求驱动了对均衡的树的需求。向树添加级别可能会将规则集合划分成在叶节点处的较小列表,或者可能不会,这取决于规则集合的构成,因为一些集合在没有重复每个子集中的规则的情况下不能被分割。可以也应该使用大量的努力来建立高效的树。这可以是即使当树正在使用中时也进行的后台任务。由于只有在规则改变(通常经由管理员进行的网络管理或策略改变)时树结构才改变,因此构建树的速率会比遍历树的需要的速率要慢许多个数量级,其中遍历树的需要通常在交换机和路由器中以包接收速率发生。

均衡树

为了建立均衡树,我们需要选择机制来最均匀地分割我们的规则。通常可以基于规则本身的结构来定义我们的规则列表中的字段。然后可以检查每个字段,包括检查规则集合中的每一个规则的字段值。给定可以检查字段的所有值的规则集合,基于在用于该字段的规则中使用的值的中值(而不是基于字段的中点),可以发现该字段可以用于均匀地划分规则集合。作为示例,一字节宽的字段可以支持256个值,但是规则集合中的规则可能只有从1到63的值,其中值为40(在40的任一侧具有相等数量的规则)。在这个示例中,40将被定义为该字段的剪切值。因此,如果在树中使用该字段,并且将值40用作树节点测试点值,则可以将一半规则放置在每个子节点上。

比较字段

术语“比较字段”将用于描述从规则集合的规则中被选择用于划分规则集合的字段。规则集合的比较字段被用于构建树结构,以在叶节点处包含规则。如果规则集合的规则中的字段的值允许通过测试该字段和在树节点处的特定“中值”来最均匀地分割规则,则该字段最可能被用作比较字段。可以考虑所有字段来找到对于规则集合的最均匀分割的最优匹配。然后,规则在该字段上进行划分,并且字段的剪切值被分配给它们相应的子节点。每个相应的规则子集被分配给子节点。然后对于每个子规则子集重复进行“比较字段/剪切值”选择处理。新找到的比较字段和剪切值被用于进一步分割规则集合。这一直继续到规则的子集的子集被留在每个叶节点处以用于测试。

规则集合中的字段通常但不一定存在于信息单元中。当为了规则匹配而检查信息单元时,从所讨论的树节点的信息单元中提取对应于比较字段的字段值,并且基于该值而选择子节点。在每个节点处使用这样的比较,树被遍历至在每个叶节点处的规则集合子集。在叶节点处找到的规则按优先级顺序进行遍历,直到找到匹配或叶节点的规则子集耗尽。存储在树中的每个节点处的比较字段可以包括在任何osi层的包或信息单元(包括诸如ieee802.3帧的以太网帧、ip包、tcp、udp、sctp或其它第3层协议数据单元、以及应用层协议数据单元)中使用的全部或部分字段。比较字段可以小至协议数据单元中的字段的单个比特。比较字段甚至可以模糊定义协议字段的边界,或者可以实际上是规则集合中的比特的任意组合(例如,跨越多个不同字段的比特的组合)。

用于使用的一些典型的比较字段可能包括媒体访问控制(mac)地址、网络地址(诸如ipv4或ipv6地址或其中一些或全部的部分或组合)、协议类型(tcp、udp、sctp等)以及其它。这些字段中的每一个由一些数量的比特或字节组成(ipv4地址具有4个字节,ipv6地址可以具有16个字节,mac/以太网地址具有6个字节等)。在典型的网络中,在某些字段中使用的许多值通常在每个包中重复,这使得在构建树时那些字段不太理想。例如,网络中的所有ip地址均为0.a.b.c格式的情况并不罕见。如果所有的“10”个网络规则都到树的一侧,那么使用ip地址的最高位字节作为比较字段将不会有用,因为所有的规则都将在树的同一侧。

树属性

在一个实施例中,实现规则集合的二叉树可以不使用树节点处的任何规则,仅用包含长度为1至“n”比特的比较字段和其值来相对字段进行测试,以做出关于采用哪个子节点分支的决定。在本文描述的主题的一个示例性实现中,树中的每个节点包含一对值,该一对值指示要检查信息单元中的哪个字节(比较“字段”)以及将其与哪个值(剪切值)进行比较。在树的每个节点处比较单个字节值通常比其它字段/值大小更快,但是这将随着实现细节(诸如硬件辅助)而不同。通常,字段越小,字段值与信息单元数据比较可以越快。反过来,要使用的数据越少,存储器和中央处理单元(cpu)的性能就越好。

在第二种方法中,可以定义2个单独的树并且使用简单方法来分离(可以在硬件中)信息单元(在本示例中,包或接收到的帧),以便处理到每个相应的树中。示例可以包括将包分离成单播和广播/多播接收队列的硬件。每个队列利用单独的树来用于规则处理。可替代地,包可以基于ipv4处理与具有对于ipv4处理和ipv6处理的单独的树和规则的ipv6而分离。其它包(既不是ipv4也不是ipv6)可能具有第三个树,或者与该协议规则集合共享这两个树中使用较少的那个树。这些方法的好处可以是:

·将包分割成单独的树的硬件协助,

·对于每个单独的树的专用处理器,

·用于树遍历的硬件辅助逻辑,

·用于从包中收集树中使用的字段的硬件协助或专用处理器,和/或

·用于任务集合中的任何/所有进程的硬件协助或专用处理器,

·对于一个或多个最长叶节点规则子集明智地使用tcam

cpu操作

在一个实现中,可以由cpu执行如本文所述的使用树结构的信息单元处理查找。cpu可以执行存储器读取操作以从树结构中提取要与来自信息单元的、待分类或以其它方式被处理的数据进行比较的数据。在大多数计算系统中,可以通过存储器读取操作(诸如脉冲读取操作)来检索的最大字节数可能是有限的。因此,期望最小化树结构的大小以减少在包规则分类过程期间需要检索的数据量。

在树中的每个节点处,cpu需要确定由节点指示的比较字段,从包中检索对应的值,并将来自包的值与存储在节点中的剪切值进行比较。例如,如果树节点具有2个字节的数据,一个用于剪切值并且另一个用于比较字段,并且例如数据可以一次读取10个字节,则一次读取操作可以检索5个树节点数据的数据以用于比较。每节点的数据越少,每读取操作可以检索的节点就越多。减少比较所需的字节数就减少了获取数据所需的读取次数。从树中的多个节点读取和存储数据的操作在一些系统中被称为高速缓存行读取。这些高速缓存行的读取是非常耗时的操作。

比较

规则将具有明确的或隐含的值。规则中的值可以是单个值、值的范围或任何值(在通配符的情况下)。来自信息单元中的选定字段和其中包含的值与定义树中节点的相同字段/值进行比较。“小于或等于”的结果被认为是切口(cut)的左边,“大于”的结果是去往右边。在我们的示例性实现中,树中的比较仅可以导致“左”或者“右”的决定。

在一个示例性实现中,在树遍历期间,从节点检索一对字节。节点对的第一字节被用于从iu中检索iu中在该字节位置处的信息(即,如果值是22,则检索iu中在位置22处的字节)。然后将检索到的字节与剪切值进行比较,并且做出“左-右”决定。随后每个节点类似地被遍历到叶节点。

示例计算系统

图1是示出根据本文描述的主题的实施例的、用于创建和使用具有比较字段和最优选择的剪切值的树结构的示例性计算设备的框图。参考图1,计算设备100包括处理器102和存储器104。处理器102可以是执行指令并访问存储在存储器104中的数据的微处理器。在示出的示例中,存储在存储器104中的数据可以包括规则集合105。规则集合105包含用于对包进行分类的规则。树构建器106从规则集合105构建树结构107。如上所述,可以使用规则中的字段值的使用分布频率来生成树结构107,以选择树结构107中的每个非叶节点的比较字段和剪切值。分配给树结构107中的结点的比较字段和剪切值可以用于在叶节点之间划分规则。全部规则可以被分配给树结构107中的叶节点。

当接收到待分类的信息单元时,针对每个非叶节点树遍历器108通过使用比较字段从信息单元中提取对应的字段值,将来自信息单元的字段值与节点的剪切值进行比较,并且基于来自信息单元的值与剪切值的关系而前进到节点的一个或其它子节点,以遍历树结构107。树遍历器108重复这个过程,直到到达叶节点。当到达叶节点时,规则匹配器109将存储在叶节点处的规则子列表与来自信息单元的对应字段值执行全规则比较。执行全规则比较包括将规则子列表中的每个规则中的每个值与信息单元中的每个对应值进行比较,直到找到匹配为止。每个叶节点处的规则子列表可以被布置为使得按优先级顺序将规则与信息单元进行比较,并且因此所找到的第一匹配将是最高优先级匹配。

在一个实施例中,计算设备100可以是通用或专用计算机,该计算机通过从规则中选择比较字段和剪切值、将比较字段和剪切值分配给树结构107中的非叶节点、以及将相关规则分配给树结构的叶节点来构建树结构107。树结构107将包含用于树结构107中的每个非叶节点的比较字段和剪切值以及附连在每个叶节点处的规则或到规则的链接。在一个特定示例中,计算设备100可以是使用树结构来处理接收到的包以查找访问控制列表(acl)的规则的包处理设备。

树构建器106接收作为输入的分类或查找规则,并且通过选择用于树结构107中的每个非叶节点的比较字段和剪切值来构建树结构107。该处理试图在从非叶节点发出的树结构107的左分支和右分支之间以可能是最均衡的方式来分割规则。在确定在每个节点处使用哪个字段作为比较字段时可以考虑所有字段。如果多个字段/剪切值对都导致规则的均等分布,则树构建器106可以选择当查看树结构107的实际深度时产生最短分支的比较字段和剪切值,但是目标通常是在每个叶节点处产生最小规则列表。下面将详细描述树和树的比较字段/剪切值选择的示例。当规则对应于包中的各个值或者字段值的范围时,树构建器106能够选择比较字段和剪切值。比较字段选择可以仅基于所呈现的规则中的字段(例如,选择规则之间最均匀变化的字段)而定义,或者基于实现(硬件加速、tcam等)或其它机制或iu组织知识进行选择、计算或布置。

当iu或包被接收以用于处理时,树遍历器108从iu中检索与用于构建树的字段对应的iu中的字段。要与树结构107中不同节点处的剪切值进行比较的来自iu的字段可以一次从存储器被读取一个字段(即,对于在树遍历期间遇到的每个非叶节点一次),或者在单个读取操作中获得在树中的不同节点处要被(或可能被)比较的多个字段的情况下进行块读取。iu字段值被用于遍历树到叶节点。在每个叶节点处都有规则列表,希望是整个规则集合的小子集。在每个叶节点处的规则列表中的规则将按优先级顺序与iu的iu字段值的完整集合进行比较(其中针对该iu字段值,树已经被遍历到的给定叶节点)。应该注意,与每个叶节点处的规则进行比较的、用于遍历树的iu字段值可能是(并且希望是)iu字段值的子集。规则匹配器109被用于将附连到叶节点的实际规则与iu或包进行比较。来自树遍历器108和规则匹配器109的操作的输出可以被进一步处理或直接用于帮助对iu或包进行分类。还可以执行其它处理,诸如将包发送到转发、路由、日志、安全或策略功能。如由规则或例外所规定的,规则匹配功能也可以选择要本地镜像或远程镜像的包。

虽然图1中示出的组件被一般地示出为存储器驻留结构,但是这些组件中的任何一个或全部都可以在硬件、固件、逻辑或其它合适的环境中被创建、保持或操作。此外,可以独立于或与其它组件分开保持图1中示出的一些或全部组件,即,规则集合105中的规则可以被集中保存或存储在与计算设备100分开的服务器上。规则匹配器109可以用专用硬件来实现。

构建树

为了发起树结构107的构建,首先需要为树的根节点选择比较字段。为根节点选择的比较字段可以是一个或多个比特位置的组合,该组合的值能够在左分支和右分支之间将规则集合最均匀地划分。例如,特定协议字段具有在规则集合中在1和10之间均匀分布的值,那么该协议字段可以被选择作为根节点的比较字段,并且5可以被选择作为根节点的剪切值。

图2以图形的方式示出了根节点的比较字段和剪切值的选择。在图2中,根节点200存储在子节点204和206之间最均匀地划分十个规则的集合202的比较字段和剪切值组合。选择根节点的比较字段和剪切值的处理可以包括:分析规则202,并且在一个示例中选择以最短分支深度以可能的最均衡的方式在左侧子节点204和右侧子节点和206之间划分规则202的字段/剪切值组合。在示出的示例中,原始规则集合在左侧子节点和右侧子节点之间被分割为7与5。例如,由于具有范围的规则可能需要将一些规则添加到两者子节点,因此分割规则子集中的规则的数量可能不等于原始规则集合中的规则的数量。

选择用于树中给定节点的最佳比较字段和剪切值组合的处理包括选择导致以进入左分支和右分支中的唯一规则的最佳均衡作为主要度量的最佳字段/剪切值组合。作为次要度量,如果多个字段/剪切值组合看起来同样的好,则一种方法可能选择在查看树的实际深度时产生最短分支的字段/剪切值(较短的树遍历较快)。树中的每个非叶节点都包含字段/剪切值组合。在一个实现中,存储在树结构中的非叶节点处的每个比较字段值被理解为引用iu中的一字节宽字段,并且是指示从iu中检索哪个字节(偏移字节)的数字。例如,如果存储在树节点处的比较字段是1,则将来自信息单元的第一字节与和节点相关联的剪切值进行比较。因此,在这个示例中,由2字节的对定义节点。每个叶节点包含原始规则集合的子集,其中子集中的每个规则将被完整地与要处理或分类的信息单元中的对应字段进行比较。通过应用树参数(即,对每个节点的比较字段和剪切值)以将规则集合分割成左侧表和右侧表来划分原始规则集合,如图2中的左侧规则子集和右侧规则子集所示。

对从根创建的左子节点和右子节点重复选择比较字段和剪切值的处理。原始节点组合已基于选定字段将规则的一部分进行分组到左侧和右侧。这些左侧规则和右侧规则的分组不包含在树中。但是,在树构建处理期间,它们会作为两个新列表被检查并且被用于构建子节点字段/剪切值参数。

如在根节点处执行的那样,选择用于左列表和右列表的比较字段和剪切值组合。每次进行分割时,节点引用的规则列表都被划分为对于每个子节点通常具有减少数量的规则的左规则子集和右规则子集。当选择比较字段和剪切值组合时,每个子集中的规则以原始优先级顺序保持(或者每个规则的优先级被保留,使得全规则比较可以按优先级顺序发生)。树的最低级别处的规则的数量是树中存在多少级别、规则可以如何被均匀划分以及可以划分/进一步划分规则的函数。树的每个级别潜在地将引用单个节点的规则的数量减少50%,左侧子节点和右侧子节点中的每一个一半。图3示出了具有在每个最低级别节点处引用减少的规则集合的四个级别的树的示例。在图3中,树中的最低级别或叶节点包括两个或三个规则,这导致比完整的匹配规则集合可能与每个包进行比较的实现(在这个示例中可能为20个规则)减少数量的比较。

使用源ip地址的比较字段和剪切值选择的示例

为了示出选择本文描述的比较字段和剪切值的方法,现在将呈现使用源ip地址的示例。图4是示出源ip地址的表,其中每个源ip地址对应于包分类规则。在图4中,源ip地址用具有32比特掩码的点分十进制示出,其中用于每个地址的32比特掩码指示整个32比特地址对应于每个规则。在示出的示例中,每个规则/地址中的第一字节被选择作为评估为潜在比较字段的字段。

可以评估规则集合中的所有字段或字段的子集来选择特定树节点的比较字段和剪切值。例如,在图4中,可以将ip地址的每个字节评估为用于划分规则集合的潜在比较字段。为了选择比较字段,如下面将更详细描述的,确定待评估的规则中的字段的值的分布频率。根据每个分布频率,选择剪切值并且分析导致的规则划分。在子节点之间最均匀划分规则集合的字段/剪切值组合可以被分配为给定节点的比较字段和剪切值。

在以下示例中,图4中示出的ip地址规则集合的第一字节通过确定其值的分布频率和选择剪切值来评估。图5示出了图4中的ip地址,其中ip地址根据字节进行了细分。在这个示例中,由图5中的表中的第一列所指示的,将选择字节1(最高有效位字节)的剪切值。可以为ip地址中的剩余字节中的每一个字节重复选择字段的潜在比较字段和剪切值的处理,并且最均匀地划分规则集合的组合可以被选择为给定树节点的剪切值和比较字段。

图6以图形的方式示出了图4和图5中的表的每个ip地址的第一字节的分布值。由于第一字节有8比特,因此二进制值的范围可以从0到255。但是,在这个示例中,任何规则的第一字节的最大值是100,并且因此图6中的图形只示出了直到100的第一字节的值。在图6中,行对应于第一字节的值。每行包括与“0”间隔开等于第一字节的值的数量的单元格(cell)的标记。以图形方式选择最佳剪切值包括穿过图形中的所有行绘制垂直线,以使得在线的左手侧和右手侧有均衡的数字和标记。在计算上,可以通过创建在本文中被称为直方图结构的构造来执行这种操作,该直方图结构存储被评估的字段的值的分布频率。在一个示例实现中,直方图结构是具有存储被评估的字段的给定值的规则集合中的出现频率的计数的索引的阵列。

图7a是示出图6中的数据的直方图结构的示图。在图7a中,直方图结构700包括阵列,其中阵列索引存储指示该特定阵列索引处的规则值出现次数的数字。例如,图6中的ip地址的第一字节中存在值10的一次出现。因此,阵列索引10在“出现”行中包括值1。存在值55的两个出现。因此,阵列索引55在“出现”行中用数字2对此进行指示。与被评估的字段的值不对应的索引可能包含零或空值。这些索引在图7a中由省略号表示,并且空值或零值由点指示。

假定没有具有值的范围的规则或通配符的规则,则可以通过遍历图7a中示出的阵列并且累计计数找到在左分支和右分支之间具有最优均衡的剪切值。这样的累计由图7a中标记为“总数”的行指示。如果从第一个阵列索引“0”向右进行,则在阵列元素10处累计的总数是1,在阵列元素20处累计的总数是2,依此类推。当累计达到等于规则总数的一半时找到该规则字段的最优剪切值。在这个示例中,规则的总数为10。因此,当达到累计计数等于对应于阵列元素44的5时,则44的剪切值被选择作为该规则集合的那个字段的最优剪切值。一旦达到5的累计计数,这就意味着存在5个ip地址的第一字节小于或等于44的规则。由于总共有10个规则,因此也存在5个第一字节大于44的规则。因此,44被选择作为该ip地址的第一字节的最优剪切值,并且导致在左分支上的5个规则和右分支上的5个规则的均衡分支。

图7b中示出了这种划分的规则集合。在图7b中,根节点包括剪切值44。左子节点包括具有小于或等于44的字节值的5个规则,并且右节点包括具有大于44的字节值的5个规则。在图7b中,示出具有作为叶节点的第二级节点的树,每个叶节点具有五个规则。虽然基于一个比较字段/剪切值组合而划分规则集合旨在处于本文描述的主题的范围内,但是可以对规则集合中的ip地址的其余字节重复选择节点的比较字段和最优剪切值的处理。在树中的非叶节点的节点处安装最优比较字段和最优剪切值。每个叶节点包括要与传入包中的每个字段值(在这种情况下是整个源ip地址)进行比较的规则的子集。

因此,当计算设备100接收到要分类的包时,树遍历器108遍历树并且使用在每个节点处的比较字段来确定要从包中提取哪个字段值。规则匹配器使用在每个树节点处的剪切值来比较从包中选择的字段值。在这个示例中,由于树中第一级节点处的比较字段指定了ip地址的第一字节,因此规则匹配器首先查看接收到的包中的ip地址的第一字节。如果ip地址的第一字节小于或等于44,则树遍历器108沿着树的左分支向下进行。如果ip地址的第一字节大于44,则树遍历器108沿着树的右半部分向下进行。在下一个节点处,树匹配器再次基于那个节点的比较字段从iu中提取适当的字段,并且将iu字段值与剪切值进行比较,并基于比较的结果沿着左分支或右分支向下进行。假定具有一个级别对应于ip地址中的每个字节的四级树,则该处理重复四次–每个级别处一次–直到达到叶节点。叶节点不包括剪切值或比较字段。相反,叶节点包括包中的ip地址必须与之进行比较的规则列表(在这种情况下是整个ip地址)。在没有这种布置的情况下,包中ip地址中的四个字节将必须与列表中每个规则中的四个字节进行比较,直到找到完全匹配或到达列表的末尾。

具有范围的规则

除了能够选择具有特定或单个值的字段的比较字段和剪切值之外,树构建器106还能够针对包括范围或通配符的规则选择最佳剪切值。图8是示出具有值的范围或通配符的规则的表。图8中的表包括与图4类似的各个ip地址和添加的附加ip地址,该附加ip地址中一些规则与源ip地址的范围匹配。例如,该表的第一个ip地址是10.1.44.0/25。10.1.44.0是范围中的最低地址。“/25”指定从地址的最高有效位开始的25比特的位掩码,其留下7比特来指定范围。7比特的可能值的范围是0-127,因此,表中的第一项与从10.1.44.0到10.1.44.127的范围的ip地址匹配。

和以上一样,目标是选择比较字段并且找到表示在每个叶节点处具有最少规则的情况下将规则均衡到树的左分支和右分支中的最佳剪切的值。图9以图形的方式示出了规则字段值的规则和相对位置。在图9中,与各个值对应的规则由与那个值对应的行中的单个标记来指示。与值的范围对应的规则在行中用与每个范围对应的值进行着色。在这个示例中,正在审查ip地址的第四个字节,以确定该字节的最优剪切值。如果条目对应于值的范围,则该范围具有起始值和结束值。例如,表中第一个规则的起始值为0并且结束值为127。如果条目或规则对应于单个值,则该值被认为既是起始值又是结束值。例如,对于表中的第二个规则,开始值和结束值是8。因此,通过将单值规则视为具有以该单值开始和结束的范围,本文描述的树构建机制能够为具有单个值、范围和通配符的规则选择最优比较字段和剪切值。

选择比较字段/剪切值组合的处理包括记录在规则字段的每个可能的值处具有相同起始值的条目的数量,并且还记录在规则的每个可能的值处具有相同停止值的条目的数量。

如以上示例一样,可以生成正在被评估的字段的值的分布频率,并且在一个示例中该分布频率被存储在直方图结构中。图10a示出了这样的直方图结构的示例。在图10a中,使用阵列来实现直方图结构700,其中每个阵列索引可以存储与正在被评估的字段的值的分布频率有关的多个值。例如,在阵列索引0处,图8的表中存在3个其“开始”值是0的规则,即,第一个规则、第五个规则和第七个规则。因此,3被存储在阵列索引0处的“开始”元素中。不存在其“结束值”为0的规则。因此,阵列索引0的“结束值”等于0。

在任何可能的字节值处,在该值处或之前结束的条目都在该点的左边。例如,在阵列索引21处,“结束”的总数被记录为5。在图9中示出的图中,绘制通过阵列索引21的水平线。存在5个小于或等于21的条目或规则。另一种考虑这个计数的方式是到左边的条目是在该点处结束的总数(如果条目的范围已经从特定点结束,则它必须在那一点的左边)。

特定值右边的条目或规则的总数等于规则集合中条目的总数减去从该值开始的条目的数量。这里的逻辑是,如果条目从特定点开始,那么它或到标记的左边或是跨越标记的范围。再次查看阵列索引21,在21处,“开始”的总数是8,并且条目的总数是19。因此,完全到21的右边的条目的总数是11。例如,“右边”等于“条目总数”减去“开始”(11=19-8)。

在每个点处,一些数量的条目将到左边,并且一些数量的条目将到右边。目标是找到给出条目的最优分割的值。“最优分割”的指示是当列表分成最短、均匀均衡的双支路时。比较每个索引处的左边和右边,并且确定两者中较小的一个。例如,在索引21处,左边(总端点)是5并且右边等于11。这两个数中较小的一个是5,因此记录5作为索引21处的最小值。在每个索引处这么做并且找到其中最小值最大的索引。在索引44和63处,最小值等于8。在这两个选项中,在44处的分割是左边8个和右边8个。在63处,分割是左边9个和右边8个。

作为剪切点,63比44好吗?要记住的是,这些是完全到左边或右边的条目。总共有19个条目。缺失的条目实际上在索引的两侧均有的条目。实际上,实际有3个跨越44的条目,因此使用这个索引将创建左边有11个条目并且右边有11个条目的树,这是因为当规则跨越时,剪切值必须被添加到每个子节点。63的剪切具有跨越它的2个条目,其给出左边11个和右边10个的分割。

我们正在寻找具有最短支路的最好的均衡。在这种情况下,最好的剪切将是在63处。原因是产生的左边11个和右边11个的剪切需要我们在树的底部进行11次测试。产生左边11个和右边10个的剪切可能只需要10次测试(规则匹配)(如果我们幸运的话)。由于这个机会存在,因此平局进行到这个剪切。基于更少的规则要检查,因此11l,10r优于11l,11r。

图10b示出了当选择63作为剪切值时图8中示出的规则的示例性树结构。在示出的示例中,根节点指定地址的第四个字节和63的剪切值。左子节点包括具有比较字段值<=63的所有规则,并且右节点包括具有比较字段值>63的所有规则。如图7b示出的示例一样,图10b示出的示例示出了在仅单个比较字段/剪切值选择之后的树结构,使得树中的第二级节点是叶节点。注意,按照规则跨越剪切值并且需要位于每个子规则列表中的要求,规则1和规则5在左子节点和右子节点中被复制。应当理解的是,可以针对节点的n个级别重复选择比较字段/剪切值组合的处理,其中n是大于或等于1的整数并且被选择来实现在叶节点处的特定树深度和/或规则列表大小。

假定树中的第二级节点是如图10b所示的叶节点,如果包以网络地址55.166.96.200到达,则规则匹配器107将ip地址的最后一个字节(在这个示例中为200)与根节点的剪切值进行比较。由于200大于63,因此树遍历沿着右手分支向下进行。然后包中的整个ip地址与和右子节点相关联的规则按优先级顺序(在这个示例中从上到下)进行比较,以找到具有最高优先级的匹配规则。在这个示例中,匹配的唯一规则是最后一个规则或55.166.96.192/27。比较的总数是10,而相对于如果规则如图8所示被布置成线性集合,则将需要20次比较。

通配符可以与范围相同地处理。例如,从10.1.1.0开始的ip地址的最后四位的通配符覆盖范围从10.1.1.0到10.1.1.31的地址。对于这个示例,树构建器110将针对通配符化的地址记录开始值0和结束值31。然后,树构建器110将使用与上面对于图10a和10b所述的范围相同的方法来选择最优剪切值。

虽然在图7a和图10a示出的示例中使用阵列来存储字段值的出现次数,但是本文描述的主题不限于使用阵列。用于存储字段值的出现次数和字段值的相对值的任何合适的数据结构旨在处于本文描述的主题的范围内。通常,用于存储比较字段值的出现次数的结构可以被认为是其中的行中的每个元素记录规则集合中的字段值的出现次数的直方图类型。

用于找到最优比较字段/剪切值组合的定义和等式

在图10a中示出的阵列中使用了以下定义和等式。

“唯一”是指完全到剪切点的左侧(<=)或完全到剪切点的右侧(>)的条目。因此,在图10a中,在63的剪切点或值处,“唯一左边”行中的数字9意味着有9个条目具有小于或等于63开始和结束的规则字段值。

“实际”包括实际上在列表的每个支路中的所有条目,包括已经被分割的规则。已经被分割的规则被包括在树的左支路和右支路中。例如,对于剪切点63,规则10.1.44.0/25包括跨越63的范围0-127,并且因此出现在树的左支路和右支路两者中。每个支路不仅包括完全到分割的一侧的条目,而且还包括跨越剪切点的那些条目。

“结束”是指以特定阵列索引值结束的范围。例如,在图10a中,在阵列索引63处的值1指示1个规则范围以值63结束。“唯一左边”是在给定阵列索引处的结束的累计。例如,存储在阵列索引63处的唯一左边行中的值9意味着有9个范围以63结束或在63之前结束。

“实际左边”与在每个索引处的“开始总数”相同。在阵列索引左边开始的任何条目都必须完全到左边或跨越那个索引。

“唯一右边”是“条目总数”减去“开始总数”。(考虑到“实际左边”=“开始总数”)。在这个示例中,总共有19个条目。对于阵列索引1,总共有4个开始。因此,阵列索引1处的唯一右边等于19-4=15。

以下规则也可以用于描述和/或计算图10a中的数据:

任何实际左边的东西不能是唯一右边的,

“唯一右边”=“条目总数”-“实际左边”或

“唯一右边”=“条目总数”-“开始总数”。

“实际右边”是“条目总数”减去“结束总数”。

完全左边的任何条目不能在右边。

“实际右边”=“条目总数”-“唯一左边”

图11是示出根据本文描述的主题的实施例的、用于生成具有用于快速树遍历和减少数量的叶节点处的全规则比较的节点比较字段和剪切值的树结构的示例性过程的流程图。参考图11,在步骤1100中,接收用于处理信息单元的信息项集合。信息项集合可以包括用于处理信息的任何合适的信息项。在一个示例中,信息项集合可以包括包处理规则。

在步骤1102中,选择信息项集合中的字段,并确定字段的值的分布频率。如上所述,可以评估信息项集合中的所有字段或字段的子集以确定最均匀地划分信息项集合的比较字段/剪切值组合。对于所选择的每个字段,可以生成发生频率值。在上述示例中,在直方图结构中生成和实现分布频率。

在步骤1104中,使用分布频率将比较字段和剪切值分配给树结构中的非叶节点。对于树结构中的每个节点,可以选择使得子节点之间的信息项的均衡划分的比较字段和剪切值。比较字段和剪切值组合被分配给每个非叶节点并存储在每个非叶节点中或以其它方式与每个非叶节点相关联。对于每个子节点,基于相应的信息项子集重复选择比较字段/剪切值组合的处理。基于期望的信息项集合优化的级别、信息项集合的硬件或软件实现等,可以重复该处理许多次。例如,可能期望构建树,使得在叶节点处的最大信息项数量或平均信息项数量小于或等于预定值。在另一个示例中,可能期望划分信息项集合,直到树到达预定深度为止。在又一个示例中,可能期望划分信息项集合,直到进一步的划分将不在叶节点处产生更少数量的信息项。在不脱离本文描述的主题的范围的情况下,可以执行这样的优化中的任何一个或多个。

一旦已经实现期望的优化,来自信息项集合的信息项就被分配给树中的叶节点(步骤1106)。分配给每个叶节点的信息项取决于通向每个叶节点的树的分支的比较字段和剪切值。使用图3中的示例,分配给最左侧叶节点的信息项子集取决于从根节点开始通向叶节点的所有节点的比较字段和剪切值。如上所述,分配给叶节点的信息项集合中的信息项可以是原始信息项集合的子集,使得在叶节点处执行的全信息项比较的次数比原始信息项集合的比较次数减少。信息项可以物理地或逻辑地存储在叶节点中或与叶节点分开存储。在每个叶节点处的子集中的信息项的优先级被逻辑地、虚拟地、明确地或隐含地维持。

本文描述的许多示例涉及作为iu与相关联规则列表的匹配或处理的示例的“规则匹配”技术。在匹配对象、规则、列表、表或通常任何类型的对象集合以及具有优先级的对象集合的领域的技术人员将认识到,本文描述的查找/匹配能力具有远超过用于包处理的规则匹配的其它用途。列表、有序列表、优先级列表和数据集匹配是所有类型的数据处理中的常见事件,并且使用本文描述的树生成技术来将大数据集细分为更小的集合以便更快处理这些和其它应用旨在处于本文描述的主题的范围内。

因此,本文描述的主题通过创建具有实现树的子节点之间的规则划分的比较字段和剪切值的树,来改进包括包处理的信息处理的技术领域。这种树结构通过减少比较次数和定位匹配规则或数据集的查找时间来改善处理计算机自身的功能。当计算设备(诸如包处理设备)被配置有如本文描述的树生成器、树遍历器规则树和规则匹配器时,该计算设备成为用于处理信息单元或包的特殊用途的计算设备。

应理解的是,在不脱离本公开主题的范围的情况下,可以改变当前本公开主题的各种细节。此外,前面的描述仅用于说明的目的,而不是为了限制的目的。

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