首页> 中国专利> 用于产生具有数量减少的特里块的特里结构的方法

用于产生具有数量减少的特里块的特里结构的方法

摘要

本发明公开了一种产生具有数量减少的特里块的特里结构的方法。算法识别要被添加到特里结构中的数据。算法将该数据分为具有一定大小的部分,所述一定大小至少部分基于与该特里结构中的特里块相关的大小。算法在第一特里块的一个特里项中指示该前缀的第二部分存储在一个精减特里项中,其中该前缀的第一部分标识该特里项。算法在该第一特里块的该特里项中指示该精减特里项的位置,并且将该前缀的第二部分存储在该精减特里项中。算法在该精减特里项中指示该第二部分相对于该数据的其他部分所占据的位置。

著录项

  • 公开/公告号CN1578257A

    专利类型发明专利

  • 公开/公告日2005-02-09

    原文格式PDF

  • 申请/专利权人 英特尔公司;

    申请/专利号CN200310124766.2

  • 发明设计人 马卡尔阿姆·拉古纳恩丹;

    申请日2003-12-30

  • 分类号H04L12/56;H04L12/24;

  • 代理机构北京东方亿思专利代理有限责任公司;

  • 代理人杜娟

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-17 15:55:48

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2010-02-24

    专利权的终止(未缴年费专利权终止)

    专利权的终止(未缴年费专利权终止)

  • 2007-04-25

    授权

    授权

  • 2005-04-13

    实质审查的生效

    实质审查的生效

  • 2005-02-09

    公开

    公开

说明书

技术领域

本发明的实施例一般地涉及计算机联网领域,具体地说,涉及具有数量减少的特里(trie)块的特里结构。

背景技术

网络是一组通过有线或无线连接而链接的两台或多台计算机系统。一般以包形式的数据从发起包的源计算机系统被发送到目标计算机系统。源和目标计算机系统的例子包括台式计算机、个人数字助理或者可移动的或膝上型计算机。网络中的计算机系统通常称为节点。

包在传输过程中通常穿过中间计算机系统来传播。中间计算机系统的一个例子就是路由器。路由器是一种包转发设备,它接收包并确定一般被称为下一跳的下一节点,向其转发路由中的包以便到达目的地。

路由器通常查找其路由表以确定下一跳。路由表一般是包括多个项的数据结构,这些项通过前缀来进行查找。与各前缀相关联的是作为下一跳的计算机系统的地址。当包到达路由器时,查找算法通常识别包的目标地址,并且查找与目标地址相匹配的前缀。当算法识别出相匹配的前缀时,包就被转发到与该前缀相关联的下一跳。

路由表可以实现为一种特里结构。特里结构是由特里块构成的树形数据结构。通常,要添加到路由表中的前缀被划分为多个部分,例如一个32位前缀可以被划分为包括前缀的前14位的第一部分、包括接下来的6位的第二部分、包括接下来的3位的第三部分、包括接下来的5位的第四部分以及包括最后4位的最终部分。可以把它描述为14-6-3-5-4特里结构。前缀各部分的大小依赖于相应于那部分的特里块的大小。这样,在此称作根部的第一部分长度是14位,对应于在此称作根特里块的用于根部的14位特里块的大小。前缀可以被划分成任意数量的部分,其大小可以是按照相应特里块大小的任意数量的位。

前缀的每个部分都对应于特里块中用于那部分的一个相匹配的索引,并且每个索引都标识一个特里项。在此称作根特里项的特里项包括一个指向在此称作链接特里块的另一个特里块的指针,该根特里项由与前缀根部相匹配的索引来标识。链接特里块的特里项在此称作链接特里项,由与各前缀的下一部分相匹配的索引来标识,这些前缀都是以相同的根部开始的(见图1)。

这样,链接特里块中的索引就与根部后面的前缀的部分相匹配,并且该索引标识了一个链接特里项。链接特里项可以包括下一跳指针、下一特里块指针或者两者都被包括。如果标识链接特里项的索引与前缀的最后部分相匹配,则链接特里项将包括一个下一跳指针,该指针指向与前缀相关联的下一跳的地址。然而,如果标识链接特里项的索引与前缀位于根部和最后部分之间的中间部分相匹配,则链接特里项将包括指向下一链接特里块的下一特里块指针。最后,如果标识链接特里项的索引与存储在特里结构中的一个前缀的最后部分相匹配,但与存储在该特里结构中的一个更长的前缀的中间部分相匹配,则链接特里块可以包括下一跳指针和下一特里块指针。

当在特里结构中查找下一跳地址时,查找算法查找相应于该地址根部大小的根特里块来得到一个由与该地址的根部相匹配的索引所标识的根特里项。一旦算法找到这个根特里项,算法就确定该根特里项是否指向下一跳和/或下一特里块,并且根据情况访问下一跳地址或链接特里块。算法继续查找直到特里项既不提供链接特里块也不提供下一跳,或者提供下一跳但不提供链接特里块。此刻,由与该地址的最后部分相匹配并指向下一跳地址的索引所标识的特里项就是提供下一跳的特里项(见下面描述的图2)。

查找算法每次访问一个不同的特里块的时候,算法就执行一次存储器访问。例如,14-6-3-5-4特里结构包括5个特里块,因此会包含最多五次的存储器访问来找到下一跳。为了确定下一跳而执行的存储器访问的次数影响路由器的性能。随着存储器访问次数的增加,为了确定下一跳所用的时间量和所使用的存储器的数量也都增加了。因此,查找大量特里块就会负面地影响路由器的性能。所以,减少所查找的特里块的数量将会提高路由器的性能。

发明内容

为了解决上述问题,根据本发明的一个方面,提供了一种方法,包括:识别要被添加到特里结构中的数据;将所述数据分为具有一定大小的部分,所述一定大小至少部分基于与所述特里结构中的特里块相关的大小;在第一特里块的一个特里项中指示所述数据的第二部分存储在一个精减特里项中,其中,所述数据的第一部分标识所述特里项;将所述数据的所述第二部分存储在所述精减特里项中;以及在所述精减特里项中指示所述数据的所述第二部分相对于所述数据的其他部分所占据的位置。

根据本发明的另一个方面,提供了一种方法,包括:在数据包中识别网络设备的地址;在特里数据结构的第一特里块中,定位与所述地址的相应的第一部分相匹配的前缀的第一部分,其中,所述前缀的所述第一部分标识所述第一特里块的一个特里项;确定所述第一特里块的所述特里项是否指示了所述前缀的一个特里项部分存储在一个精减特里项中;如果所述第一特里块的所述特里项指示出所述前缀的所述特里项部分存储在所述精减特里项中,则:从所述第一特里块的所述特里项确定所述精减特里项的位置;确定所述前缀的所述特里项部分是否与所述地址的第二部分相匹配,所述地址的所述第二部分在所述地址中占据与所述特里项部分在所述前缀中所占据的位置相同的位置;如果所述特里项部分与所述地址的所述第二部分相匹配,则确定第二特里块的一个特里项是否指示了下一跳地址的位置,其中,所述第二特里块的所述特里项由与所述地址的第三部分相匹配的所述前缀的第二部分来标识;以及如果所述第二特里块的所述特里项指示了所述下一跳地址的位置,则从所述第二特里块的所述特里项确定所述下一跳地址。

根据本发明的另一个方面,提供了一种产品,包括:机器可访问介质,其上包括指令序列,所述指令序列当被执行时使电子系统:识别要被添加到特里结构中的数据;将所述数据分为具有一定大小的部分,所述一定大小至少部分基于与所述特里结构中的特里块相关的大小;在第一特里块的一个特里项中指示所述数据的第二部分存储在一个精减特里项中,其中,所述数据的第一部分标识所述特里项;将所述数据的所述第二部分存储在所述精减特里项中;以及在所述精减特里项中指示所述第二部分相对于所述数据的其他部分所占据的位置。

根据本发明的另一个方面,提供了一种产品,包括:机器可访问介质,其上包括指令序列,所述指令序列当被执行时使电子系统:在数据包中识别网络设备的地址;在特里数据结构的第一特里块中,定位与所述地址的相应的第一部分相匹配的前缀的第一部分,其中,所述前缀的所述第一部分标识所述第一特里块的一个特里项;确定所述第一特里块的所述特里项是否指示了所述前缀的一个特里项部分存储在一个精减特里项中;如果所述第一特里块的所述特里项指示出所述前缀所述特里项部分存储在所述精减特里项中,则:从所述第一特里块的所述特里项确定所述精减特里项的位置;确定所述前缀的所述特里项部分是否与所述地址的第二部分相匹配,所述地址的所述第二部分在所述地址中占据与所述特里项部分在所述前缀中所占据的位置相同的位置;如果所述特里项部分与所述地址的所述第二部分相匹配,则确定第二特里块的一个特里项是否指示了下一跳地址的位置,其中,所述第二特里块的所述特里项由与所述地址的第三部分相匹配的所述前缀的第二部分来标识;以及如果所述第二特里块的所述特里项指示了所述下一跳地址的位置,则从所述第二特里块的所述特里项确定所述下一跳地址。

根据本发明的另一个方面,提供了一种系统,包括:处理器;与所述处理器相耦合的网络接口;和包括其上包括有指令序列的机器可访问介质的产品,所述指令序列当被执行时使电子系统:识别要被添加到特里结构中的数据;将所述数据分为具有一定大小的部分,所述一定大小至少部分基于与所述特里结构中的特里块相关的大小;在第一特里块的一个特里项中指示所述数据的第二部分存储在一个精减特里项中,其中,所述数据的第一部分标识所述特里项;将所述数据的所述第二部分存储在所述精减特里项中;以及在所述精减特里项中指示所述第二部分相对于所述数据的其他部分所占据的位置。

根据本发明的另一个方面,提供了一种系统,包括:处理器;与所述处理器相耦合的网络接口;和包括其上包括有指令序列的机器可访问介质的产品,所述指令序列当被执行时使电子系统:在数据包中识别网络设备的地址;在特里数据结构的第一特里块中,定位与所述地址的相应的第一部分相匹配的前缀的第一部分,其中,所述前缀的所述第一部分标识所述第一特里块的一个特里项;确定所述第一特里块的所述特里项是否指示了所述前缀的一个特里项部分存储在一个精减特里项中;如果所述第一特里块的所述特里项指示出所述前缀的所述特里项部分存储在所述精减特里项中,则:从所述第一特里块的所述特里项确定所述精减特里项的位置;确定所述前缀的所述特里项部分是否与所述地址的第二部分相匹配,所述地址的所述第二部分在所述地址中占据与所述特里项部分在所述前缀中所占据的位置相同的位置;如果所述特里项部分与所述地址的所述第二部分相匹配,则确定第二特里块的一个特里项是否指示了下一跳地址的位置,其中,所述第二特里块的所述特里项由与所述地址的第三部分相匹配的所述前缀的第二部分来标识;以及如果所述第二特里块的所述特里项指示了所述下一跳地址的位置,则从所述第二特里块的所述特里项确定所述下一跳地址。

根据本发明所提供的方法、产品和系统,可以减少为了确定下一跳而执行的存储器访问的次数、所用的时间量和所使用的存储器的数量,从而提高路由器的性能。

附图说明

在附图的图形中,本发明的实施例以举例而不是限定的方式来表示,附图中相似的标号是指类似的元素。

图1是向被实现为特里数据结构的路由表添加一项的示意图。

图2是查找特里数据结构的例子的示意图。

图3是表示一种产生具有数量减少的特里块的特里数据结构的方法的示例实施例的流程图。

图4是具有数量减少的特里块的特里数据结构的示例实施例的示意图。

图5是具有数量减少的特里块的特里数据结构的另一个示例实施例的示意图。

图6是具有数量减少的特里块的特里数据结构的再一个示例实施例的示意图。

图7是具有数量减少的特里块的特里数据结构的另一个示例实施例的示意图。

图8是表示查找具有数量减少的特里块的特里数据结构的方法的示例

实施例的流程图。

图9是查找具有数量减少的特里块的特里数据结构的示例实施例的示意图。

图10是表示电子系统的一个实施例的框图。

具体实施方式

本发明描述了一种产生具有数量减少的特里块的特里结构的方法。以下说明中,为了解释的目的,提出了对许多特定细节。然而,本发明的实施例没有这些特定细节也能被实行,这对本领域技术人员而言是显而易见的。在其他例子中,为了避免混淆对本说明书的理解,以框图的形式示出了结构和设备。

一种算法识别要被添加到特里结构中的前缀。算法将前缀分成多个部分,这些部分的大小基于(至少部分基于)与特里结构中的特里块有关的大小。在第一特里块的特里项(其中前缀的第一部分标识该特里项)中,算法指示出前缀的第二部分存储在第一特里块或链接特里块中的特里项中。存储在特里项中的前缀的部分在此称为前缀的特里项部分,并且其中存储了特里项部分的特里项在此称作精减特里项。在第一特里块的特里项中,算法还指示链接特里块的位置,并且将特里项部分存储在精减特里项中。此外,在该精减特里项中,算法指出特里项部分在该前缀中相对于前缀其他部分所占据的位置。

图1是向被实现为特里数据结构的路由表添加一项的例子的示意图。特里数据结构100包括根特里块110和链接特里块120、130以及140。这个例子中的40位前缀3FFF020304(10)是十六进制格式,意味着每一位代表四个位。该前缀被分为16位根部20和3个8位部分30、40以及50。每一部分的大小都相应于对于那部分的特里块的大小。根特里块可以对应于前缀的任何大小的第一部分,不论该第一部分被确定为以前缀的最左位开始(通常称为大端(big-endian)表示法)还是以最右位开始(通常称为小端(little-endian)表示法)。

根特里块110中的索引3FFF与根部20相匹配。因为根部20不是前缀10的最后部分,所以指针114指向链接特里块120,它存储对于前缀的接下来的部分的数据,这些前缀共用3FFF作为其根部。也就是说,特里块中的每一特里项都指向一个不同的链接特里块,该链接特里块存储了对于各前缀的接下来的部分的数据,这些前缀包含与标识该特里项的索引相匹配的部分。

链接特里块120中的索引02与第二部分30相匹配。因为第二部分30不是前缀10的最后部分,所以指针124指向链接特里块130,它存储对于前缀的接下来的部分的数据,这些前缀共用3FFF作为其根部且共用02作为其根部后面的部分。类似地,链接特里块130中的索引03与第三部分40相匹配。因为第三部分40不是前缀10的最后部分,所以指针134指向链接特里块140,它存储对于前缀的接下来的部分的数据,这些前缀共用3FFF作为其根部、共用02作为其第二部分并且共用03作为其第三部分。链接特里块140中的索引04与第四部分50相匹配。因为第四部分50是前缀10的最后部分,所以指针144指向下一跳地址150。

图2是查找被实现为特里数据结构的路由表的例子的示意图。如果包具有按照十六进制格式的3FFF020306070809(200)的目标地址,则算法在与根部202相匹配的根特里块110中找到索引3FFF。由索引3FFF标识的特里项112包括指向链接特里块120的指针114。特里块120中的索引02与部分204相匹配。由索引02标识的特里项122包括指向链接特里块130的链接特里块指针124。

特里块130中的索引03与部分206相匹配。由索引03标识的特里项132包括指向链接特里块140的链接特里块指针134和指向下一跳地址160的下一跳指针136。特里块140中的索引06与部分208相匹配。由索引06标识的特里项148不包括下一跳指针或下一特里结构指针。因此,不存在对于06或地址其余部分即070809的匹配。这样,前缀0x3FFF0203被用于路由这个地址,并且相应于该地址最后相匹配的部分即03的特里项132提供下一跳地址。

如果图2中的地址200的最后部分已经是04,则由索引04标识的特里项146便会包括下一跳指针而不包括下一特里结构指针。这样,特里项146将提供下一跳地址。不管怎样,无论该地址的最后部分是06还是04,算法都会因这四个特里块而进行四次存储器访问。减少特里块的数量将会减少存储器访问的次数而加快下一跳的确定。此外,减少特里块的数量还会减少所使用的存储器的数量,从而除了其他以外,允许路由表中有更多的项,因为需要更少的存储器而减小了电路板的尺寸(或芯片尺寸),并且降低了功耗。

图3是表示产生具有数量减少的特里块的特里数据结构的方法的示例实施例的流程图。方法300的302中,算法识别要被添加到特里数据结构上的前缀。算法可以按照现有技术中公知的任何方式来识别前缀。

在304,算法将前缀分成多个部分,这些部分的大小与要向其添加前缀的特里结构中的特里块有关。前缀可以被分为任意数量的部分,其大小可以是根据相应特里块的大小的任意数量的位。例如,互联网协议(IP)是一种用于路由包的协议,在IP版本4(IPv4)中,32位前缀例如可以被分成16-4-4-4-4的特里结构。在IP版本6(IPv6)中,64位前缀可以被分成16-8-8-8-8-8-8的特里结构。例如参见互联网工程任务组(IETF)请求评论(RFC)1812,“IP版本4路由器需求”(“Requirements for IPVersion 4 Routers”),1995年6月;IETF RFC 2460,“互联网协议,版本6(IPv6)规范”(“Internet Protocol,Version 6(IPv6)Specification”),1998年12月。

在306,算法在精减特里项中存储前缀的一部分,该部分在此称作特里项部分。否则,该特里项部分将与和特里项部分的大小相对应的特里块中的相匹配的索引相关。特里项部分可以是前缀根部后面的下一部分(参见例如图4、图5以及图6)。此外,特里项部分可以是除了根部之外的某个部分后面的前缀的下一部分(参见例如图7);除了根部的前缀的部分在此也称作非根部分。此外,特里项部分后面可以跟随不是特里项部分的前缀的另一个部分,这个部分后面可以跟随另一个特里部分(参见例如图6)。特里项部分可以被存储在链接特里块的精减特里项中。特里项部分还可以被存储在与在特里项部分之前的前缀的部分相对应的特里块的精减特里项中,其中,在特里项部分之前的前缀的部分标识该精减特里项。

为了解释的示例性和简便,方法300是根据将前缀的一个部分存储在精减特里项中而描述的。然而,前缀的不止一个部分都可以被存储在精减特里项中。也就是说,前缀的任意数量的部分可以存储在精减特里项中(参见例如图7),否则,这些部分将与和各部分大小相对应的不同的特里块中的相匹配的索引相关。此外,特里块可以具有不止一个精减特里项。

在308,算法指出特里项部分在前缀中相对于前缀的其他部分所占据的位置。在一个实施例中,算法将与特里项部分在前缀中所占据的比特位置相对应的比特位置的范围添加到精减特里项中。在另一实施例中,算法将指示特里项部分在前缀中所占据的比特位置的掩码添加到精减特里项中。这样,在一个实施例中,精减特里项包括前缀的特里项部分和特里项部分在前缀中所占据的位置的指示。

在310,算法在特里块的特里项中指出特里项部分被存储在精减特里项中,其中该特里块相应于在该特里项部分之前的前缀的部分,并且该特里项由与该特里项部分之前的前缀的部分相匹配的索引来标识。在一个实施例中,算法设置一个值,在此称为精减值,来指出特里项部分被存储在精减特里项中,其中,该精减值是一位,被设定为1(或0)来指出前缀的一部分被存储在精减特里项中,或者被设定为0(或1)来指出没有进行精减。然而,精减值并不限于一位,例如,精减值可以是用与特里项部分之前的前缀的部分相匹配的索引来标识的特里项中所存储的特里项部分本身、一个指向链接特里块中的精减特里项的指针或者指示精减特里项的位置的存储器地址。

在312,算法指示链接特里块的位置。在一个实施例中,设置特里项中的指针来指示链接特里块的位置。然而,链接特里块的位置并不限于用指针来指示,例如,可以用标识符来指示链接特里块的地址。

如先前所解释的,因为对于包含与索引相匹配的部分的前缀的下一部分的所有下一跳和下一特里块的信息都存储在相同的特里块中,所以特里块中的各特里项指向或者以另外的方式指示一个不同的特里块。这样,特里项可能已经指示了一个链接特里块,例如,对于24位前缀的数据被添加到指向8位链接特里块的16位根特里块中,如此一来,前缀中就没有作为特里项部分存储在链接特里块中的部分。在那种情况下,因为链接特里块已经被指出,所以算法无需指示该链接特里块的位置。

在314,算法在链接特里块的链接特里项中指示与前缀相关联的下一跳地址的位置,其中,该特里项由与前缀的最终部分相匹配的索引来标识。在一个实施例中,特里项的下一跳字段中的指针被设定来指示下一跳地址的位置。然而,下一跳地址的指示并不限于指针,例如,沿着向包的目标的路由的计算机系统的设备地址,即中间计算机系统的地址或目标计算机系统本身的地址,可以被添加到根特里项的下一跳字段中来指示下一跳地址。

图4是具有数量减少的特里块的特里数据结构的示例实施例的示意图。跟图1相比,特里数据结构400包括根特里块410和链接特里块420,而不是特里块110、120、130和140。特里项412用与根部20相匹配的索引3FFF来标识。精减值41204是被设置为1的一位,用来指出应当查找所指示的链接特里块的精减特里项,并且链接特里块指针414指向链接特里块420。

第二部分30和第三部分40已作为特里项部分42202而存储在精减特里项422中。此外,掩码42204,即值0x3,指示第二部分30和第三部分40占据从前缀10的左边开始的比特位置16-31,其中,从左边起的第一比特位置是比特位置0。最后,由索引04标识的链接特里项424中的下一跳指针426指向下一跳地址430,其中,该索引04与最后部分50相匹配。因此,就产生了相对于当前特里结构的具有数量减少的特里块的特里结构。这减少了为确定下一跳的存储器访问的次数,并且提高了确定下一跳的速度。这还减少了所使用的存储器数量,从而除了其他以外,允许路由表有更多的项,因为需要更少的存储器少而减小了电路板的大小(或芯片大小),并且降低了功耗。存储器访问次数和所使用的存储器数量的减少改善了路由器或其他设备的性能,所述其他设备例如是用来确定下一节点来将路由上的包转发到其目的地的交换机、集线器或网桥。

图5是具有数量减少的特里块的特里数据结构的另一示例实施例的示意图。特里数据结构500包括根特里块510、链接特里块520、特里块530以及特里块540,链接特里块520是对于将3FFF作为根部的前缀的链接特里块,特里块530是对于将02、03和03分别作为其第二、第三和第四部分的前缀的链接特里块,特里块540是对于将02、03和04分别作为其第二、第三和第四部分的前缀的链接特里块。特里项512由与前缀5000的根部5002和前缀5050的根部5052相匹配的索引3FFF来标识。精减值51204是被设置为1的一位,它用来指示应当查找所指示的链接特里块的精减特里项,并且链接特里块指针51206指向链接特里块520。

第二部分5004和5054以及第三部分5006和5056已经作为特里项部分52202而存储在精减特里项522中。此外,掩码52204,即值0x3,指示第二部分5004和5054以及第三部分5006和5056分别占据从前缀5000和5050的左边开始的比特位置16-31,其中,从左边起的第一比特位置是比特位置0。

由与第四部分5008相匹配的索引03来标识的链接特里项524中的下一特里块指针52406指向下一特里块530,而由与最后部分5010相匹配的索引05来标识的链接特里项534中的下一跳指针53402指向下一跳地址53406。类似地,由与第四部分5058相匹配的索引04来标识的链接特里项526中的下一特里块指针52606指向下一特里块540,而由与最后部分5060相匹配的索引07来标识的链接特里项544中的下一跳指针54402指向下一跳地址54406。

图6是具有数量减少的特里块的特里数据结构的再一个示例实施例的示意图。特里数据结构600包括根特里块610、链接特里块620、特里块630以及特里块640,链接特里块620是对于将3FFF作为根部的前缀的链接特里块,特里块630是对于将02、03和03分别作为其第二、第三和第四部分的前缀的链接特里块,特里块640是对于将02、03和04分别作为其第二、第三和第四部分的前缀的链接特里块。特里项612由与前缀6000的根部6002和前缀6050的根部6052相匹配的索引3FFF来标识。精减值61204是被设置为1的一位,它用来指示应当查找所指示的链接特里块的精减特里项,并且链接特里块指针61206指向链接特里块620。

第二部分6004和6054以及第三部分6006和6056已经作为特里项部分62202而存储在精减特里项622中。此外,掩码62204,即值0x3,指示第二部分6004和6054以及第三部分6006和6056分别占据从前缀6000和6050的左边开始的比特位置16-31,其中,从左边起的第一比特位置是比特位置0。

由与第四部分6008相匹配的索引03来标识的链接特里项624中的精减值62404是被设置为1的一位,它用来指示应当查找所指示的链接特里块的精减特里项。相反,由与部分6058相匹配的索引04来标识的链接特里项626中的精减值并没有被设置,它指示不需要查找所指示的链接特里块的精减特里项。前缀6000的第五部分6010和第六部分6012已经作为特里项部分63202存储在特里块630的精减特里项632中。此外,掩码63204,即值0x18,指示第五部分6010和第六部分6012占据前缀6000中的比特位置40-55。

链接特里项624中的下一特里块指针62406指向下一特里块630,而由与第五部分6010相匹配的索引05来标识的链接特里项634中的下一跳指针63402指向下一跳地址63406。类似地,链接特里项626中的下一特里块指针62606指向下一特里块640,而由与最后部分6060相匹配的索引07来标识的链接特里项644中的下一跳指针64402指向下一跳地址64406。

图7是具有数量减少的特里块的特里数据结构的另一个示例实施例的示意图。特里数据结构700包括根特里块710、链接特里块720、特里块730以及特里块740,链接特里块720是对于将3FFF作为根部的前缀的链接特里块,特里块730是对于将03作为其第二部分的前缀的链接特里块,特里块740是对于将04作为其第二部分的前缀的链接特里块。特里项712由与前缀7000的根部7002和前缀7050的根部7052相匹配的索引3FFF来标识,具有指向链接特里块720的链接特里块指针71206。

由与前缀7000的第二部分7004相匹配的索引03来标识的链接特里项724中的精减值72404是被设置为1的一位,它用来指示应当查找所指示的链接特里块的精减特里项。第三部分7006和第四部分7008已经作为特里项部分73202存储在特里块730的精减特里项732中。此外,掩码73204,即值0x6,指示第三部分7006和第四部分7008占据前缀7000中的比特位置24-39。

类似地,由与前缀7050的第二部分7054相匹配的索引04来标识的链接特里项726中的精减值72604是被设置为1的一位,它用来指示应当查找所指示的链接特里块的精减特里项。前缀7050的第三部分7056已经作为特里项部分74202存储在特里块740的精减特里项742中。此外,掩码74204,即值0x2,表示第三部分7006占据前缀7050中的比特位置24-31。链接特里项724中的下一特里块指针72406指向下一特里块730,而由与最后部分7010相匹配的索引05来标识的链接特里项734中的下一跳指针73402指向下一跳地址73406。类似地,链接特里项726中的下一特里块指针72606指向下一特里块740,而由与最后部分7058相匹配的索引07来标识的链接特里项744中的下一跳指针74402指向下一跳地址74406。

图8是表示一种查找具有数量减少的特里块的特里数据结构的方法的示例实施例的流程图。在方法800的802中,算法在数据包中识别网络设备的地址。在一个实施例中,该地址是目标地址。然而,该地址并不限于目标地址,例如,该地址可以是源地址。在一个实施例中,该地址是IPv6地址。然而,该地址并不特定地限于IPv6地址,例如,该地址可以是IPv4地址,该地址也不限于一般的IP地址。算法可以以本领域所公知的任何方式来对前缀进行识别。

在804,算法在根特里块中定位与地址的根部相匹配的索引。该索引对应存储在特里结构中的前缀的根部并且标识根特里项。为了解释的示例性和简便,按照从跟随在根部之后的前缀的第一部分开始的特里项部分来描述方法800。然而,方法800并不限于从跟随在根部之后的前缀的第一部分开始的特里项部分。也就是说,该特里项部分也可以从除了紧跟根部之后的部分以外的前缀的某部分开始,参见例如图6和图7。

在806,算法确定由相匹配的索引标识的根特里项中的精减值是否指示其根部与该索引相匹配的前缀的特里项部分被存储在链接特里块的精减特里项中,所述指示例如基于被设置为1的精减值。为了解释的示例性和简便,按照将一位作为精减值以指示特里项部分被存储在精减特里项中来描述方法800。然而,方法800并不限于将一位作为精减值,例如,精减值可以是存储在由与特里项部分之前的前缀部分相匹配的索引来标识的特里项中的特里项部分本身、一个指向链接特里块中的精减特里项的指针或者一个指示精减特里项的位置的存储器地址。

如果根特里项指示前缀的一部分存储在链接特里块的精减特里项中,则在808,算法从根特里项中确定精减特里项的位置。在一个实施例中,精减特里项位于链接特里块中,并且根特里项的下一特里块字段中设置指针来指示该链接特里块的位置。链接特里块的位置并不限于用指针来指示,例如,可以向根特里项的下一特里块字段添加链接特里块的存储器地址来指示该链接特里块的位置。在另一实施例中,精减特里项位于根特里块中,或者位于与在特里项部分之前的地址部分相对应的其他特里块中,并且该特里项部分之前的所述地址部分标识精减特里项的位置。为了解释的示例性和简便,按照将链接特里块作为精减特里项的位置来描述方法800。在810,算法访问该链接特里块。

在812,算法确定链接特里块的精减特里项中的特里项部分是否与根部之后的地址的一部分相匹配。为了解释的示例性和简便,按照确定前缀的一个部分是否与地址的相应部分相匹配来描述方法800。然而,可以对前缀的不止一个部分是否与地址的相应部分相匹配而作出确定。如果特里项部分与根部之后的地址的部分不匹配,则在820,算法从根特里项中确定要将数据包向其转发的下一跳的地址。这样,地址的那一部分与特里项部分匹配的失败指示了与包的地址相匹配的前缀还没有被存储在特里结构中。

相反地,如果在812中特里项部分与根部之后的地址部分相匹配,则在814,算法确定链接特里块中的链接特里项是否表示下一跳地址,该链接特里项是由该特里项部分之后的前缀的一个部分来标识的。在一个实施例中,在特里项的下一跳字段中设置了指针来指示下一跳地址的位置。然而,下一跳地址的指示并不限于指针,例如,沿着向包的目的地的路由的计算机系统的设备地址,即中间计算机系统的地址或者目标计算机系统本身的地址,可以被添加到根特里项的下一跳字段中来指示下一跳地址。

如果链接特里项没有指示下一跳,则在820,算法从根特里项确定下一跳地址。这样,链接特里项不能指示下一跳地址就意味着与包的地址相匹配的前缀还没有被存储在特里结构中。相反,如果链接特里项指示出下一跳地址,则在816,算法从该链接特里项中确定下一跳地址。在一个实施例中,在特里项的下一跳字段中设置了指针来指示下一跳地址的位置。然而,下一跳地址的指示并不限于指针,例如,沿着向包的目的地的路由的计算机系统的设备地址,即中间计算机系统的地址或者目标计算机系统本身的地址,可以被添加到根特里项的下一跳字段中来指示下一跳地址。

返回到806,如果根特里项指示前缀中没有部分被存储在精减特里项中,所述指示例如基于被设置为0的精减值,则在830,算法确定根特里项是否指示链接特里块的位置。如果根特里项没有指示链接特里块的位置,则在820,算法从根特里项中确定下一跳的地址。

相反,如果在830中根项指示了链接特里块,则在832,算法访问该链接特里块。在834,算法确定链接特里项是否指示了下一跳地址,该链接特里项是由与根部之后的地址的中间部分相匹配的索引来标识的,而不是由与如上所述的特里项部分之后的地址的最后部分相匹配的索引来标识的。如果链接特里项没有指示出下一跳地址,则在820,算法从根特里项中确定下一跳地址。然而,如果链接特里项指示了下一跳地址,则在836,算法从链接特里项中确定下一跳地址。

方法800是按照由两个特里块,即根特里块和链接特里块,组成的特里数据结构以及从该根特里块的根特里项中或者从该链接特里块的链接特里项中确定下一跳来描述的。然而,方法800可以被用于具有多于两个特里块的特里数据结构,参见例如图5、6和7。

图9是查找具有数量减少的特里块的特里数据结构的示例实施例的示意图。如图2中的那样,算法将包目标地址以十六进制的格式识别为3FFF020306(200)。图9中,根特里块410中的索引3FFF与根部202相匹配,并且标识根特里项412。算法从精减值41204中确定将3FFF作为其根部的前缀的一个部分被存储在一个精减特里项中。下一特里指针414指向链接特里块420,因而算法访问该链接特里块420。

因为精减值41204指示前缀的一个部分被存储在一个精减特里项中,所以算法查找链接特里块420的精减项。算法从掩码42204,即值0x3,来确定特里项部分42202占据前缀中从左边起的比特位置16-31,其中,从左边起的第一比特位置是比特位置0。算法确定特里项部分42202与第二部分204和第三部分206相匹配,这两个部分占据了地址200中相应的比特位置。

因为存在匹配,所以算法确定由与地址200的第四部分208相匹配的索引06来标识的链接特里项424是否指示了下一跳地址。链接特里项424没有指示下一跳地址。这样,包括指向下一跳地址440的下一跳指针41202的特里项412指示下一跳。

为了解释的示例性和简便,已经按照将前缀存储到特里数据结构中以及查找与特里数据结构中的前缀相匹配的地址而描述了方法300和方法800。然而,方法300和方法800可以用于在具有数量减少的特里块的特里数据结构中存储任何数据,并且查找在这种特里数据结构中的任何数据。例如,以示例的方式而不是为了限定,方法300可以用于在具有数量减少的特里块的特里数据结构中存储多个字,并且类似于指示与前缀相关联的下一跳地址,最后指示出与各个字相关联的定义、正确拼写、同义词等。类似地,再次以示例的方式而不是为了限定,方法800结合定位与被查找的字相关联的定义、正确拼写、同义词等,可以被用于查找具有数量减少的特里块的特里数据结构中的字。

图3和图8按照方法描述了本发明的示例实施例。然而,还应当理解,它将代表在其上已经记录、编码或者以其他方式表示了指令、例程、操作、控制代码等等的机器可访问介质,所述指令、例程、操作、控制代码等等当被电子系统执行或者以其他方式被电子系统利用时,引起电子系统执行上述方法或者在其本发明公开的范围之内的其他实施例。而且,本方法可以以数字硬件逻辑或者以硬件和可存取机器介质的结合实现,在所述介质上已经记录、编码或者以其他方式表示了指令、例程、操作、控制代码等等,当它们被电子系统执行或者以其他方式被电子系统利用时,引起电子系统执行上述方法或者其他实施例。

图10是电子系统的一个实施例的框图。该电子系统是用来表示多种电子系统,包括例如个人计算机、个人数字助理(PDA)、膝上型或掌上型计算机、蜂窝电话、计算机系统、网络访问设备等。其他电子设备可以包括更多、更少和/或不同的组件。图3和图8的方法可以实现为由电子系统所执行的指令序列。指令序列可以由该电子系统来存储,或者指令可以由电子系统来接收(例如,通过网络连接)。电子系统可以例如通过诸如同轴电缆或者双绞电缆的电缆来与有线网络耦合,或者例如通过无线电或卫星信号与无线网络耦合,或者与有线网络和无线网络的组合相耦合。

电子系统1000包括总线1010或其他通信设备来传送信息,并包括与总线1010相耦合以处理信息的处理器1020。虽然电子系统1000被示为具有单个处理器,但是电子系统1000可以包括多处理器和/或协处理器。

电子系统1000还包括随机存取存储器(RAM)或其他动态存储设备1030(称作存储器),它们与总线1010相耦合来存储要被处理器1020执行的信息和指令。存储器1030还可以在处理器1020执行指令时用于存储临时变量或其他中间信息。电子系统1000还包括只读存储器(ROM)和/或其他静态存储设备1040,它们与总线1010相耦合来存储用于处理器1020的静态信息和指令。此外,数据存储设备1050可以被耦合到总线1010来存储信息和指令。数据存储设备1050可以包括磁盘(例如硬盘)或光盘(例如CD-ROM)以及相应的驱动器。

电子系统1000还可包括显示设备1060,例如阴极射线管(CRT)或液晶显示器(LCD),以将信息显示给用户。包括字母数字和其他键的字母数字输入设备1070一般与总线1010相耦合来将信息和命令选择传送给处理器1020。另一种用户输入设备是光标控制器1075,例如鼠标、轨迹球或光标方向键,用来将方向信息和命令选择传送给处理器1020并且控制平板显示设备1060上的光标移动。电子系统1000还包括网络接口1080来提供对诸如局域网或广域网的网络的访问。

指令从机器可访问介质或者通过远程连接(例如在网络上通过网络接口1080)可访问的外部存储设备等被提供给存储器,所述远程连接提供对一个或多个电可访问介质的访问。机器可访问介质包括以机器(例如计算机)可读形式提供(即存储和/或传输)信息的任何装置。例如,机器可访问介质包括:RAM;ROM;磁或光存储介质;闪存设备;电、光、声或其他形式传播的信号(例如,载波、红外信号、数字信号);等等。

在可替代的实施例中,硬连线电路可用来代替软件指令或与软件指令相结合来实现本发明的实施例。因而,本发明的实施例并不限于硬件电路和软件指令的任何特定组合。

在前面的说明中对“一个实施例”或“实施例”的提及意思是结合实施例所描述的特定特征、结构或特性被包括在本发明的至少一个实施例中。说明书中多处出现的短语“在一个实施例中”未必都是指相同的实施例。

在前面的说明中,本发明已经参照其特定实施例被描述。然而,显而易见,不脱离本发明实施例的更宽的精神和范围,可以对其作出多种修改和变化。因此,本说明书和附图应被看作是示例性的,而不是限制性的。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号