一种名字查找方法和网络设备与流程

文档序号:17049128发布日期:2019-03-05 19:51阅读:301来源:国知局
本申请涉及通信
技术领域
:,尤其涉及一种名字查找方法和网络设备。
背景技术
::与当前互联网以主机为中心的网络服务器模式不同,命名数据网络(named-datanetwork,ndn)采用以内容为中心的网络服务模式,更符合网络用户对内容的分发与获取的主流需求,不仅可以提升互联网的可伸缩性和安全性,而且还可以增加移动性支持和容错能力。ndn采用基于层次化名字的数据包转发算法,即通过依次查找内容缓存表(contentstore,cs)、兴趣记录表(pendinginteresttable,pit)、转发表(forwardinginformationbase,fib)等进行数据包的路由转发。ndn名字查找算法是ndn数据包转发的关键,其面临查找和更新吞吐量等性能的挑战。其主要原因是,ndn名字查找算法中待查找的名字长度不固定且无限制大小,采用基于层次化名字的最长前缀匹配,会导致ndn名字查找复杂且低效。例如命名数据网络转发程序(nameddatanetworkingforwardingdaemon,nfd)算法是当前ndn项目研究提出的ndn转发程序中所使用的名字查找算法。其设计实现基于哈希表。图1为nfd算法的数据结构设计。该算法使用单个哈希表存储各层次名字前缀,查找名字时从最长层次开始,首先对要查询的名字前缀进行相应长度的截取,然后在哈希表中查找截取后的名字前缀。若无匹配结果,则将截取长度逐步递减,继续进行查找,直至完成匹配,由此实现最长前缀匹配。再例如线性搜索(linearsearch,ls)算法的设计也是基于链式哈希表,如图2所示,该算法使用线性结构组织多个哈希表分别存储不同层次名字前缀,查找名字时从最长层次的哈希表开始,截取对应层次长度的名字前缀在哈希表中查找,若无匹配结果,则将截取长度逐步线性递减,继续进行查找,直至完成匹配,由此实现最长前缀匹配。可以看出,这两种算法在进行名字前缀查找时都是从最长层次开始进行线性搜索的,使得平均哈希表查找次数为o(w),w表示名字前缀的层数,也可以称为层次长度,查找吞吐量低。技术实现要素:本申请实施例提供一种名字查找算法和网络设备,能够解决ndn名字查找算法查找吞吐量低的问题。第一方面,提供一种名字查找方法,应用于二叉树类型的数据结构,二叉树中的每个结点对应一个哈希表,不同的哈希表对应不同层次长度的字段,每个哈希表中包括至少一个哈希桶,每个哈希桶中包括至少一个存储位置,每个存储位置包括字段的指纹、计数器以及指针,该字段的层次长度等于该存储位置所在的当前结点的层次总数;计数器的计数用于指示第一字段集合中与计数器所在的存储位置的指针指向的字段相同的字段数量,第一字段集合包括将计数器所在的当前结点的第一子树中的结点对应的第二字段集合按照当前结点的层次总数截取后的字段,第一子树中每个结点的层次总数大于当前结点的层次总数;也就是说,当前结点的哈希表中的存储位置的指针指向的字段的层次长度等于当前结点的层次总数,该字段可以作为名字前缀,也可以作为名字前缀的标记。计数器的计数用于记录标记在当前结点被记录的重复次数。指针指向当前存储位置对应的字段和下一跳端口信息,方法包括:网络设备从二叉树的根结点开始查找第一名字前缀,确定当前结点的哈希表中是否存在第一存储位置,第一存储位置的指针指向的字段与将第一名字前缀按照当前结点的层次总数截取后的字段匹配;若确定存在第一存储位置,则网络设备确定第一存储位置对应的计数器的计数;若计数器的计数在第一范围内,则网络设备确定第一存储位置的指针指向的字段为待查找的第一名字前缀;若计数器的计数在第二范围内,则网络设备向当前结点的第一子树继续查找第一名字前缀,第一范围与第二范围不存在交集。第一子树可以为右子树,右子树的结点的层次长度大于当前结点的层次长度。这样一来,在根据当前结点的层次总数截取待查找的第一名字前缀并在当前结点的哈希表中查询到截取后的第一名字前缀时,可根据匹配的存储位置的计数器的计数确定下一步的查找方向,相当于存储位置的类型确定下一步的查找方向,不需要根据截取对应层次长度的名字前缀在哈希表中查找,即不需要将截取长度逐步线性递减,这样可以提升查找时的吞吐量。在一种可能的设计中,该方法还包括:若确定不存在第一存储位置,则网络设备向当前结点的第二子树继续查找第一名字前缀,第二子树中每个结点的层次总数小于当前结点的层次总数。第二子树可以为当前结点的左子树。也就是说,当前结点中不存在第一存储位置时,需要将第一名字前缀截取更短的层次在左子树中继续尝试匹配。在一种可能的设计中,该方法还包括:若计数器的计数在第二范围内,第一存储位置的指针中的下一跳端口信息为空,则网络设备在当前结点的第一子树中未查找到第一名字前缀时,向当前结点的第二子树继续查找第一名字前缀。第一范围可以为0,第二范围可以为大于0的数。若计数器的计数大于0,下一跳端口信息为空,说明第一存储位置的指针指向的字段是作为标记存在的,与第一名字前缀匹配的字段的层次长度可能大于当前结点的层次总数,当前结点的右子树中可能存在更高层次长度的字段与第一名字前缀匹配。但是如果在右子树中未查找到第一名字前缀时,则向当前结点的左子树继续查找第一名字前缀,即将第一名字前缀截取更短的层次长度后查找与之匹配的字段。在一种可能的设计中,该方法还包括:若计数器的计数在第二范围内,第一存储位置的指针中的下一跳端口信息不为空,则网络设备在当前结点的第一子树中未查找到与第一名字前缀时,确定第一存储位置的指针指向的字段为待查找的第一名字前缀。第二范围可以为大于0的数。若计数器的计数大于,下一跳端口信息不为空,说明第一存储位置的指针指向的字段是作为名字前缀和标记同时存在的,与第一名字前缀匹配的字段的层次长度可能大于当前结点的层次总数,当前结点的右子树中可能存在更高层次长度的字段与第一名字前缀匹配。但是如果在右子树中未查找到第一名字前缀时,则确定第一存储位置的指针指向的字段即为待查找的第一名字前缀。在一种可能的设计中,该方法还包括:网络设备需在二叉树中插入第二名字前缀时,从二叉树的根结点开始尝试插入第二名字前缀;其中,若当前结点的层次总数大于第二名字前缀的层次长度,则网络设备向当前结点的第二子树的结点尝试插入第二名字前缀;若当前结点的层次总数等于第二名字前缀的层次长度,则网络设备确定当前结点的哈希表中是否存在第二存储位置,第二存储位置的指针指向的字段与第二名字前缀匹配;若存在,且第二存储位置的计数器的计数大于0,第二存储位置的指针指向的下一跳端口信息为空,则网络设备建立第二存储位置的指针与下一跳端口信息的对应关系;若不存在,则网络设备在当前结点的哈希表中确定第三存储位置,建立第三存储位置的指针与第二名字前缀以及下一跳端口信息的对应关系,第三存储位置的指针指向的下一跳端口信息不为空,并将第三存储位置对应的计数器置为0;若当前结点的层次总数小于第二名字前缀的层次长度,则网络设备按照当前结点的层次总数截取第二名字前缀,并在当前结点的哈希表中查找是否存在第四存储位置,第四存储位置的指针指向的字段与截取后的第二名字前缀匹配,若存在,则网络设备将第四存储位置对应的计数器的计数加1;若不存在,则网络设备在当前结点的哈希表中确定第五存储位置,建立第五存储位置的指针与截取后的第二名字前缀以及下一跳端口信息的对应关系,第五存储位置的指针指向的下一跳端口信息为空,并将第五存储位置对应的计数器置为1;网络设备继续向当前结点的第一子树的结点尝试插入第二名字前缀。也就是说,要插入第二名字前缀时,需要在与第二名字前缀的层次长度相同的层次总数的结点中插入,还需要在该结点的父辈结点的哈希表中调整第二名字前缀的标记的计数器的值,并结合下一跳端口信息以区分不同的更高层次的名字前缀在当前层次的标记。在一种可能的设计中,该方法还包括:网络设备需在二叉树中删除第三名字前缀时,从二叉树的根结点开始尝试删除第三名字前缀;其中,若当前结点的层次总数大于第三名字前缀的层次长度,则网络设备向当前结点的第二子树的结点尝试删除第三名字前缀;若当前结点的层次总数等于第三名字前缀的层次长度,则网络设备确定当前结点中是否存在第六存储位置,第六存储位置的指针指向的字段与第三名字前缀匹配;若存在,且第六存储位置的计数器的计数为0,则网络设备删除第六存储位置,或,若存在,且第六存储位置的计数器的计数大于0,且第六存储位置的指针指向的下一跳端口信息不为空,则网络设备将第六存储位置的指针指向的下一跳端口信息置为空;若当前结点的层次总数小于第三名字前缀的层次长度,则网络设备按照当前结点的层次总数截取第三名字前缀,并在当前结点的哈希表中查找是否存在第七存储位置,第七存储位置的指针指向的字段与截取后的第三名字前缀匹配,若存在,且第七存储位置的计数器的计数大于0,第七存储位置的指针指向的下一跳端口信息为空,则网络设备将第七存储位置对应的计数器的计数减1,并在减至0时删除第七存储位置,或,若存在,且第七存储位置的计数器的计数大于0,第七存储位置的指针指向的下一跳端口信息不为空,则网络设备将第七存储位置对应的计数器的计数减1;网络设备继续向当前结点的第二子树的结点尝试删除第三名字前缀。也就是说,要删除第三名字前缀时,需要在与第三名字前缀的层次长度相同的层次总数的结点中删除,还需要在该结点的父辈结点的哈希表中调整第三名字前缀的标记的计数器的值,并结合下一跳端口信息以区分不同的更高层次的名字前缀在当前层次的标记。另一方面,提供一种网络设备,应用于二叉树类型的数据结构,二叉树中的每个结点对应一个哈希表,不同的哈希表对应不同层次长度的字段,每个哈希表中包括至少一个哈希桶,每个哈希桶中包括至少一个存储位置,每个存储位置包括字段的指纹、计数器以及指针,该字段的层次长度等于该存储位置所在的当前结点的层次总数;计数器的计数用于指示第一字段集合中与计数器所在的存储位置的指针指向的字段相同的字段数量,第一字段集合包括将计数器所在的当前结点的第一子树中的结点对应的第二字段集合按照当前结点的层次总数截取后的字段,第一子树中每个结点的层次总数大于当前结点的层次总数;指针指向当前存储位置对应的字段和下一跳端口信息,该网络设备包括:确定单元,用于从二叉树的根结点开始查找第一名字前缀,确定当前结点的哈希表中是否存在第一存储位置,第一存储位置的指针指向的字段与将第一名字前缀按照当前结点的层次总数截取后的字段匹配;确定单元,还用于若确定存在第一存储位置,则确定第一存储位置对应的计数器的计数;确定单元,还用于若计数器的计数在第一范围内,则确定第一存储位置的指针指向的字段为待查找的第一名字前缀;查找单元,用于若计数器的计数在第二范围内,则向当前结点的第一子树继续查找第一名字前缀,第一范围与第二范围不存在交集。在一种可能的设计中,查找单元还用于:若确定不存在第一存储位置,则向当前结点的第二子树继续查找第一名字前缀,第二子树中每个结点的层次总数小于当前结点的层次总数。在一种可能的设计中,查找单元还用于:若计数器的计数在第二范围内,第一存储位置的指针中的下一跳端口信息为空,则在当前结点的第一子树中未查找到第一名字前缀时,向当前结点的第二子树继续查找第一名字前缀。在一种可能的设计中,确定单元还用于:若计数器的计数在第二范围内,第一存储位置的指针中的下一跳端口信息不为空,则网络设备在当前结点的第一子树中未查找到与第一名字前缀时,确定第一存储位置的指针指向的字段为待查找的第一名字前缀。在一种可能的设计中,第一范围的计数为0,第二范围的计数大于0。在一种可能的设计中,还包括插入单元,用于:网络设备需在二叉树中插入第二名字前缀时,从二叉树的根结点开始尝试插入第二名字前缀;其中,若当前结点的层次总数大于第二名字前缀的层次长度,则向当前结点的第二子树的结点尝试插入第二名字前缀;若当前结点的层次总数等于第二名字前缀的层次长度,则确定当前结点的哈希表中是否存在第二存储位置,第二存储位置的指针指向的字段与第二名字前缀匹配;若存在,且第二存储位置的计数器的计数大于0,第二存储位置的指针指向的下一跳端口信息为空,则建立第二存储位置的指针与下一跳端口信息的对应关系;若不存在,则在当前结点的哈希表中确定第三存储位置,建立第三存储位置的指针与第二名字前缀以及下一跳端口信息的对应关系,第三存储位置的指针指向的下一跳端口信息不为空,并将第三存储位置对应的计数器置为0;若当前结点的层次总数小于第二名字前缀的层次长度,则按照当前结点的层次总数截取第二名字前缀,并在当前结点的哈希表中查找是否存在第四存储位置,第四存储位置的指针指向的字段与截取后的第二名字前缀匹配,若存在,则将第四存储位置对应的计数器的计数加1;若不存在,则在当前结点的哈希表中确定第五存储位置,建立第五存储位置的指针与截取后的第二名字前缀以及下一跳端口信息的对应关系,第五存储位置的指针指向的下一跳端口信息为空,并将第五存储位置对应的计数器置为1;而后继续向当前结点的第一子树的结点尝试插入第二名字前缀。在一种可能的设计中,还包括删除单元,用于:网络设备需在二叉树中删除第三名字前缀时,从二叉树的根结点开始尝试删除第三名字前缀;其中,若当前结点的层次总数大于第三名字前缀的层次长度,则向当前结点的第二子树的结点尝试删除第三名字前缀;若当前结点的层次总数等于第三名字前缀的层次长度,则确定当前结点中是否存在第六存储位置,第六存储位置的指针指向的字段与第三名字前缀匹配;若存在,且第六存储位置的计数器的计数为0,则删除第六存储位置,或,若存在,且第六存储位置的计数器的计数大于0,且第六存储位置的指针指向的下一跳端口信息不为空,则将第六存储位置的指针指向的下一跳端口信息置为空;若当前结点的层次总数小于第三名字前缀的层次长度,则按照当前结点的层次总数截取第三名字前缀,并在当前结点的哈希表中查找是否存在第七存储位置,第七存储位置的指针指向的字段与截取后的第三名字前缀匹配,若存在,且第七存储位置的计数器的计数大于0,第七存储位置的指针指向的下一跳端口信息为空,则将第七存储位置对应的计数器的计数减1,并在减至0时删除第七存储位置,或,若存在,且第七存储位置的计数器的计数大于0,第七存储位置的指针指向的下一跳端口信息不为空,则将第七存储位置对应的计数器的计数减1;而后继续向当前结点的第二子树的结点尝试删除第三名字前缀。又一方面,本申请实施例提供了一种计算机存储介质,用于储存为上述网络设备所用的计算机软件指令,其包含用于执行上述方面所设计的程序。又一方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面的方法。本申请实施例提供一种名字查找方法和网络设备,应用于二叉树类型的数据结构,二叉树中的每个结点对应一个哈希表,不同的哈希表对应不同层次长度的字段,每个哈希表中包括至少一个哈希桶,每个哈希桶中包括至少一个存储位置,每个存储位置包括字段的指纹、计数器以及指针,该字段的层次长度等于该存储位置所在的当前结点的层次总数;计数器的计数用于指示第一字段集合中与计数器所在的存储位置的指针指向的字段相同的字段数量,第一字段集合包括将计数器所在的当前结点的第一子树中的结点对应的第二字段集合按照当前结点的层次总数截取后的字段,第一子树中每个结点的层次总数大于当前结点的层次总数;指针指向当前存储位置对应的字段和下一跳端口信息,该方法为:从二叉树的根结点开始查找第一名字前缀,确定当前结点的哈希表中是否存在第一存储位置,第一存储位置的指针指向的字段与将第一名字前缀按照当前结点的层次总数截取后的字段匹配;若确定存在第一存储位置,则确定第一存储位置对应的计数器的计数;若计数器的计数在第一范围内,则确定第一存储位置的指针指向的字段为待查找的第一名字前缀;若计数器的计数在第二范围内,则向当前结点的第一子树继续查找第一名字前缀,第一范围与第二范围不存在交集。这样一来,在根据当前结点的层次总数截取待查找的第一名字前缀并在当前结点的哈希表中查询到截取后的第一名字前缀时,可根据匹配的存储位置的计数器的计数确定下一步的查找方向,相当于存储位置的类型确定下一步的查找方向,可以提升查找时的吞吐量。附图说明图1为一种nfd算法的数据结构设计的示意图;图2为一种ls算法的数据结构设计的示意图;图3为一种二叉搜索算法的数据结构示意图;图4为本申请实施例提供的一种二叉搜索算法的数据结构示意图;图5为本申请实施例提供的一种二叉搜索算法的数据结构示意图;图6为一种ndn数据包转发的流程与名字匹配模式的示意图;图7为本申请实施例提供的一种网络架构的示意图;图8为本申请实施例提供的一种名字查找方法的流程示意图;图9为本申请实施例提供的一种二叉搜索算法的数据结构示意图;图10为本申请实施例提供的一种二叉搜索算法的哈希表的数据结构示意图;图11为本申请实施例提供的一种网络设备的结构示意图;图12为本申请实施例提供的一种网络设备的结构示意图;图13为本申请实施例提供的一种网络设备的结构示意图。具体实施方式为了便于理解,示例地给出了部分与本申请相关概念的说明以供参考。如下所示:ndn:命名数据网络,其关注数据内容本身,并使用层次结构的内容名字识别和路由报文。ndn中数据内容的获取由用户发送兴趣(interest)报文向网络获取数据内容,interest报文的内容名字指定请求的数据内容,具有匹配名字的数据(data)报文响应interest报文的请求,data报文中包括数据内容的名字、数据本身以及数据生成者的签名。哈希表(hashtable):是根据关键码值(keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个存储位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做哈希表。哈希表中可以包括至少一个哈希桶(bucket),每个哈希桶可以包括多个存储位置(slot)。二叉搜索(binarysearch,bs)算法:其设计实现基于链式哈希表,如图3所示为该算法数据结构设计的示意图。该算法使用平衡二叉树数据结构组织多个哈希表,二叉树的每个结点对应一个哈希表,不同的哈希表对应不同层次长度的名字前缀(prefixname),哈希表中的每个哈希桶的slot存储名字前缀的指纹(fingerprint,fp)以及指针(pointer,ptr),指纹为名字前缀的哈希计算值,指针指向与当前结点的层次总数相同的层次长度的名字前缀或更高层次长度的名字前缀,以及转发数据包的下一跳端口信息(nexthop)。更高层次长度的名字前缀称为在该层结点的标记(marker),其指明在更高层次存有较长匹配前缀的可能性。例如图3中的层次总数len=4(可简写为l4)的结点的哈希表中可以存储层次长度为4,内容为“/a/b/c/d/”的名字前缀,也可以存储层次长度为6,内容为“/a/b/c/d/e/a/”这一名字前缀,“/a/b/c/d/e/a/”在len=4的结点中作为标记,该标记指示在len=4的结点的右子树中存在更高层次长度的名字前缀,例如在len=6的结点的哈希表中存储有“/a/b/c/d/e/a/”这一名字前缀。若不同的更高层次的名字前缀在当前层出现标记重复,则只存储一个更高层次的名字前缀,例如层次长度为7的名字前缀“/a/b/c/d/e/a/b/”存储在len=7的结点中,但是“/a/b/c/d/e/a/b/”在len=4的结点的哈希表中的标记“/a/b/c/d/e/a/”与len=4的结点中已经存储的名字前缀“/a/b/c/d/e/a/”相同,那么名字前缀“/a/b/c/d/e/a/b/”在len=4的结点的哈希表中的标记“/a/b/c/d/e/a/”不需要再次存储在len=4的结点中。查找名字时以二叉搜索顺序对各树结点对应的哈希表进行递归查找,过程中存在回溯。插入名字时除插入到相应层次长度的哈希表以外,还需要插入到当前树结点的父辈结点对应的哈希表。删除名字时由于重复标记只记录一次,不支持增量删除。例如上述举例中,如果要删除len=7的结点的哈希表中的名字前缀“/a/b/c/d/e/a/b/”,由于“/a/b/c/d/e/a/b/”在len=4的结点的哈希表中的标记与len=6的结点的哈希表中的“/a/b/c/d/e/a/”在len=4的结点的哈希表中的标记相同,那么在len=4的结点的哈希表中无法删除len=7的结点的哈希表中的名字前缀“/a/b/c/d/e/a/b/”的标记“/a/b/c/d/e/a/”。平衡二叉树数据结构:本申请提出的平衡二叉树数据结构与bs算法中的平衡二叉树数据结构类似,二叉树中的每个结点对应一个哈希表,但是本申请提出的平衡二叉树数据结构与bs算法中的平衡二叉树数据结构不同的是,本申请的平衡二叉树数据结构不同结点的哈希表对应不同层次长度的字段,该字段可以为裁剪的名字前缀和/或名字前缀的标记,名字前缀的层次长度与该结点的层次总数相同,标记所指示的名字前缀的层次长度与该结点右子树的各结点的层次总数相同。当前结点的哈希表中的标记是将当前结点的右子树的哈希表中的名字前缀按照当前结点的层次总数裁剪后生成的,使得当前结点的哈希表中存储的字段的层次长度都等于当前结点的层次总数。举例来说,如图4所示中的二叉树,共7个结点,l4表示该结点的层次总数为4,对应的哈希表存储裁剪的层次长度为4的名字前缀和/或标记。层次长度为4的标记指示的名字前缀的层次长度与该结点右子树的各结点的层次总数相同,即l4对应的结点中存储的标记指示的名字前缀的层次长度可以为右子树中各结点的层次总数,例如l4对应的结点中存储的标记对应的名字前缀的层次长度可以等于l5的层次总数5、或l6的层次总数6或l7的层次总数7。l4中的标记可以是将l5、l6以及l7中对应的哈希表中的名字前缀裁剪为层次长度为4的名字前缀生成的,该标记的作用用于指示l4的结点的右子树中可能存在更长匹配的名字前缀。为了更清楚的说明本申请的二叉树的结点中的哈希表与bs算法中的哈希表的不同,以上述介绍bs算法中的举例为例,假设结点l4的哈希表中存储有名字前缀“/a/b/c/d/”,结点l6的哈希表中存储有“/a/b/c/d/e/a/”,那么“/a/b/c/d/e/a/”在l4的哈希表中的标记不再是“/a/b/c/d/e/a/”,而是将“/a/b/c/d/e/a/”按照结点l4的层次总数裁剪为“/a/b/c/d/”,将“/a/b/c/d/”作为“/a/b/c/d/e/a/”在结点l4中的标记,该标记与结点l4中本身存储的名字前缀“/a/b/c/d/”相同,那么结点l4中存储的“/a/b/c/d/”同时作为纯名字前缀和标记存在。类似的,假设结点l7的哈希表中存储有名字前缀“/a/b/c/d/e/a/b/”,那么“/a/b/c/d/e/a/b/”在结点l4的哈希表中的标记也为“/a/b/c/d/”。这样一来,由于多个节点的名字前缀在结点l4中也存在相同的标记,为了解决上述bs算法不支持增量删除的问题,本申请在哈希表中增加标记的计数器(counterofmarkers,cnt),计数器用于记录相同的标记在同一结点中被重复记录的次数。这样可以在结点中插入或删除名字前缀时,可以对相同标记的计数器的计数进行累加或减小,以表征在某一结点插入或删除名字前缀时,该名字前缀在该结点的父辈结点中的标记的计数也会相应地累加或减小。本申请的这种算法可以称为计数二叉搜索(countingbinarysearch,cbs)的ndn名字查找算法。因此,本申请实施例提出的cbs算法,应用于二叉树类型的数据结构,二叉树的每个结点对应一个哈希表,如图4所示,每个哈希表包括至少一个哈希桶,每个哈希桶包括至少一个slot,每个slot包括字段的指纹、计数器以及指针,该字段的层次长度等于该slot所在的当前结点的层次总数;计数器的计数用于指示第一字段集合中与计数器所在的slot的指针指向的字段相同的字段数量,第一字段集合包括将计数器所在的当前结点的第一子树中的结点对应的第二字段集合按照当前结点的层次总数截取后的字段,第一子树中每个结点的层次总数大于当前结点的层次总数;指针指向当前slot对应的字段和下一跳端口信息。第一子树可以为上述右子树。也就是说,本申请的slot包括指纹(fingerprintofprunedname,fp)、标记的计数器cnt以及指针(pointertoprunednameandnexthop,ptr)。指针指向裁剪的名字前缀和/或标记(prunedname),以及下一跳端口信息。于是,根据计数器和下一跳端口信息的取值的不同,可以将哈希表中的slot分为三种类型,如表1所示。表1slot类型对照表slottypecounternexthoppureprefix0notnullpuremarker>0nullprefixandmarker>0notnull其中,pureprefix表示当前slot中存储的字段为纯名字前缀,不具有标记的作用,因此,该slot对应的计数器的计数counter的值为0,该slot对应的下一跳端口信息不为空,当待查找的名字前缀与该slot中的指针指向的纯名字前缀匹配时,可以根据该指针指向的下一跳端口信息转发数据;puremarker表示当前slot中存储的字段为纯标记,即为该slot所在的当前结点的右子树的哈希表中的名字前缀在当前结点中的标记,那么该slot对应的计数器的计数大于0,指针指向的下一跳端口信息为空;prefixandmarker表示当前slot中存储的字段为名字前缀和标记,即该字段同时作为名字前缀和标记存在,那么对应的计数器的计数也大于0,指针指向的下一跳端口信息不为空。以本申请提出的cbs算法中的结点l4对应的哈希表的示意图如图5所示为例。假设该哈希表包括m个哈希桶,即标号为0至m-1的哈希桶,每个哈希桶中包括至少一个slot,该slot包括fp、cnt以及ptr,ptr指向字段和下一跳端口信息,字段为裁剪后的名字前缀和/或标记。例如标号为4的哈希桶中包括两个slot,一个slot中的fp为123654,cnt的值为2,ptr指向的字段为/a/b/c/d/,指向的下一跳端口信息为端口3,即port3,说明该slot的类型为名字前缀和标记;另一个slot中的fp为246321,cnt为0,ptr指向的字段为/b/a/d/c/,指向的下一跳端口信息为端口4,即port4,说明该slot的类型为纯名字前缀。再例如,标号为m-1的哈希桶包括的任一slot中的fp为345642,cnt为2,ptr指向的字段为/c/d/e/a/,指向的下一跳端口信息为空,说明该slot的类型为纯标记。需要说明的是,该二叉树是根据层次总数的大小按序组织各个结点的,一般来说,从根结点开始左子树的层次总数小于根结点的层次总数,右子树的层次总数大于根结点的层次总数。当然本申请并不限于此,也可以是从根结点开始左子树的层次总数大于根结点的层次总数,右子树的层次总数小于根结点的层次总数。本申请实施例的以下说明以左子树层次总数小于根结点的层次总数,右子树的层次总数大于根结点的层次总数为例进行说明。本申请描述的网络架构以及业务场景是为了更加清楚的说明本申请的技术方案,并不构成对于本申请提供的技术方案的限定,本领域普通技术人员可知,随着网络架构的演变和新业务场景的出现,本申请提供的技术方案对于类似的技术问题,同样适用。本申请实施例可以应用于ndn数据包转发过程中,如图6所示为ndn采用基于层次化名字的数据包转发的基本流程示意图。即通过依次查找内容缓存表(contentstore,cs)、兴趣记录表(pendinginteresttable,pit)以及转发表(forwardinginformationbase,fib)等进行数据包的路由转发。图4为ndn数据包转发的基本流程和cs、pit和fib的名字匹配模式。首先,根据兴趣包查询cs,如果查询成功则返回所请求的数据包给请求方。如果查询失败,则继续查询pit,如果pit已经存储该兴趣包的表项,则直接等待数据包返回后发送给请求方。如果查询pit未存储该兴趣包的表项,则在pit中创建该表项,并继续查询fib,查询fib后的匹配结果存储到pit中,以根据pit中的表项从给定的端口转发给数据包。当接收到数据包时,查询pit表,以根据查询结果将数据包发送给相应的请求方,并删除pit中对应的兴趣包的表项。在该流程中,ndn名字查找主要采用最长前缀匹配和精确匹配等方式,例如在fib中采用最长前缀匹配进行名字查询,在cs中采用精确匹配进行名字查询,在pit中采用两种匹配模式。本申请实施例可以用于对cs、pit以及fib中的至少一种进行名字查询。cs、pit以及fib可以存储于ndn的ip路由转发。此外,本申请实施例还可以用于url过滤等网络应用。如图7所示,本申请的网络架构可以包括请求方、路由器以及内容提供方。请求方可以为手机、个人计算机、平板电脑等终端,内容提供方可以为服务器等,用于存储所请求的内容的数据包。路由器用于根据请求方请求的兴趣包进行名字查询,在查询成功,则在路由器缓存数据包时将数据包返回给请求方,在未缓存数据包时从内容提供方获取数据包并通过路由器返回给请求方。本申请为了解决ndn名字查询过程吞吐量低的问题,提供一种名字查找方法,采用二叉搜索作为基本手段,借助哈希表中的slot的类型,在各阶段对哈希表进行查找时,根据匹配结果返回的slot的类型判断下一步查找方向,以提升名字查找吞吐量。应用上述数据结构,如图8所示,本申请实施例提出一种名字查找方法,该方法流程可以为:801、网络设备从二叉树的根结点开始查找第一名字前缀,确定当前结点的哈希表中是否存在第一存储位置,第一存储位置的指针指向的字段与将第一名字前缀按照当前结点的层次总数截取后的字段匹配。网络设备在二叉树中查找名字前缀时,需从根结点开始查找,确定当前结点的哈希表中是否存在待查找的名字前缀。以网络设备为路由器为例进行说明。当路由器接收到兴趣包,该兴趣包查询pit表或fib表,pit表或fib表的结构可以为以本申请提出的cbs算法中的平衡二叉树的数据结构。假设兴趣包查询的第一名字前缀的层次长度为5,查询的当前结点的层次总数为4,根据第一名字前缀的哈希算法确定在标号为m的哈希桶中查找第一名字前缀,需要确定该哈希桶中是否存在第一存储位置,记为第一slot,第一slot中的指纹匹配,指针指向的字段需与将第一名字前缀按照当前结点的层次总数4截取后的字段匹配。假设名字前缀与下一跳端口信息的对应规则如表2所示,平衡二叉树的数据结构如图9所示。表2名字前缀与下一跳端口信息的对应规则nameprefixnexthopr0/*port0r1/a/*port1r2/a/b/*port2r3/a/b/c/*port1r4/a/b/c/d/*port3r5/b/a/d/c/*port4r6/c/d/e/a/b/*port2r7/a/b/c/d/e/a/*port3r8/a/b/c/d/e/a/b/*port4r9/c/d/e/a/b/c/d/*port1从表2可以看出,根结点l4的哈希表中存储有规则{r4、r5、r64、r74、r84}以及r94,r4和r5层次长度均为4,r64表示r6的名字前缀/c/d/e/a/b/*本身存储在结点l5中,但是该名字前缀按照结点l4的层次总数的裁剪后得到的标记/c/d/e/a/存储在结点l4中,r74、r84以及r94同理。假设待查找的第一名字前缀为“/b/a/d/c/c/c/c/”,从如图9所示的二叉树的根结点l4对应的哈希表开始查找,先将第一名字前缀按照结点l4的层次总数4截取为“/b/a/d/c/”后开始查找,由于结点l4的哈希表中存储有规则r5,如图5所示,例如结点l4标号为4的哈希桶的slot的指纹匹配,指针指向的字段“/b/a/d/c/”与第一名字前缀截取后的字段匹配,那么该slot即为上述第一slot,可以继续执行步骤802。如果在结点l4的哈希表中不存在第一slot,则执行步骤805。802、若确定存在第一存储位置,则网络设备确定第一存储位置对应的计数器的计数,而后执行步骤803或步骤804。按照步骤801中的举例,如果在结点l4的哈希表中查找到第一slot,还需要确定第一slot中的计数器的计数,以根据表1对应的slot类型对照表确定下一步查找方向。803、若计数器的计数在第一范围内,则网络设备确定第一存储位置的指针指向的字段为待查找的第一名字前缀。第一范围的计数可以为0。按照步骤801中的举例,第一slot中的计数器的计数为0,按照表1,第一slot的类型为纯名字前缀,则路由器可以确定第一slot的指针指向的字段“/b/a/d/c/”为待查找的第一名字前缀“/b/a/d/c/c/c/c/”,在结点l4中已经查找到满足最长前缀匹配的名字前缀,与第一名字前缀匹配的字段的层次长度等于当前结点l4的层次总数,port4即为兴趣包要转发的下一跳端口信息。804、若计数器的计数在第二范围内,则网络设备向当前结点的第一子树继续查找第一名字前缀,第一范围与第二范围不存在交集。第二范围的计数可以大于0,第一子树可以为右子树。例如,在结点l4的哈希表中匹配到第一名字前缀,这时如果匹配到的第一slot的计数器的计数大于0,说明在结点l4的右子树中可能存在更长层次长度的名字前缀匹配,这时需要分两种情况继续查找,这是由于与第一名字前缀匹配的字段所在的第一slot的类型可能为纯标记,也可能为名字前缀和标记。一种情况下,若计数器的计数在第二范围内,第一存储位置的指针中的下一跳端口信息为空,说明第一slot的类型为纯标记,与第一名字前缀匹配的字段的层次长度可能大于当前结点的层次总数,可以向结点l4的右结点继续查找第一名字前缀。如果在结点l4的右子树中查找到与第一名字前缀匹配的字段,则获取查找到的结点的哈希表中的slot对应的下一跳端口信息。例如待查找的名字前缀为“/c/d/e/a/b/b/b/b”,从结点l4对应的哈希表中开始查找“/c/d/e/a/”,由于结点l4的哈希表中存在r64,即与第一名字前缀匹配的字段所在的第一slot的类型为纯标记,则转向结点l6继续查找,最终在结点l5中得到匹配结果。如果路由器在当前结点的右子树中未查找到第一名字前缀时,向当前结点的第二子树继续查找第一名字前缀。第二子树可以为左子树。假设待查找的第一名字前缀为“/a/b/d/d/a/d/”,从图9所示的二叉树的根结点l4对应的哈希表开始查找,先将第一名字前缀截取为“/a/c/b/d/”在结点l4的哈希表中查找,按照步骤801中的举例,结点l4的哈希表中存在规则r4“/a/c/b/d/”与第一名字前缀匹配,若匹配的字段所在的第一slot中的计数器的计数大于0,则在结点l4的右子树中可能存在更长层次长度的名字长度匹配,按照图9以及表2,右子树的结点的哈希表中并不存在与第一名字前缀匹配的字段,这时需要向结点l4的左子树继续查找第一名字前缀。这时将第一名字前缀按照结点l2的层次总数截取为“/a/b/”,由于结点l2的哈希表中存在规则r2对应的字段与截取的“/a/b/”匹配,那么该字段所在的slot的指针指向的port2即为下一跳端口信息。另一种情况下,若计数器的计数在第二范围内,第一存储位置的指针中的下一跳端口信息不为空,说明与第一名字前缀匹配的字段所在的第一slot的类型为名字前缀和标记,在当前结点l4的右子树中可能存在更长层次的名字前缀匹配,则转向结点l4的右子树继续查找,这时如果路由器在当前结点l4的右子树中未查找到与第一名字前缀时,确定第一存储位置的指针指向的字段为待查找的第一名字前缀。也就是说,结点l4中与第一名字前缀匹配的字段所在的slot的指针指向的下一跳端口信息为兴趣包待转发的端口信息。805、若确定不存在第一存储位置,则网络设备向当前结点的第二子树继续查找第一名字前缀,第二子树中每个结点的层次总数小于当前结点的层次总数。第二子树可以为左子树。例如在步骤801中待查找的第一名字前缀为“/a/b/d/e/”,在结点l4的哈希表中未匹配到第一slot,可以向结点l4的左子树的结点l2继续查找,那么就需要将“/a/b/d/e/”截取为“/a/b/”,从表2的规则可知,结点l2的哈希表中存在字段“/a/b/”,那么在指纹匹配的前提下,指针指向“/a/b/”的slot对应的下一跳端口信息为port2。此外,本申请实施例还可以对利用计数器记录标记的数量,以区分不同的更高名字前缀在当前结点中的标记,并结合下一跳端口信息实现不同的slot的类型的灵活转换,从而支持高速的增量更新。若网络设备需在二叉树中插入第二名字前缀时,也是从二叉树的根结点开始尝试插入第二名字前缀;其中,若当前结点的层次总数大于第二名字前缀的层次长度,则网络设备向当前结点的第二子树的结点尝试插入第二名字前缀。例如待插入的第二名字前缀为“/a/b/d/”,层次长度为3,当前结点为结点l4,其层次总数为4,那么需要向结点的第二子树即左子树尝试插入第二名字前缀,按照表2以及图9中所示的二叉树,最终可以将结点l2的哈希表中作为标记“/a/b/”对应的slot中的计数器的值加1,并在结点l3的哈希表中新增一slot,并将该slot的指针指向字段“/a/b/d/”。若当前结点的层次总数等于第二名字前缀的层次长度,则网络设备确定当前结点的哈希表中是否存在第二存储位置,第二存储位置的指针指向的字段与第二名字前缀匹配;若存在,且第二存储位置的计数器的计数大于0,第二存储位置的指针指向的下一跳端口信息为空,则网络设备建立第二存储位置的指针与下一跳端口信息的对应关系;若不存在,则网络设备在当前结点的哈希表中确定第三存储位置,建立第三存储位置的指针与第二名字前缀以及下一跳端口信息的对应关系,第三存储位置的指针指向的下一跳端口信息不为空,并将第三存储位置对应的计数器置为0。举例来说,待插入的第二名字前缀为“/a/b/c/d/”,层次长度为4,首先在根结点l4的哈希表中确定是否存在第二slot,第二slot的指针指向的字段与“/a/b/c/d/”匹配,假设根结点l4的哈希表中标号为4的哈希桶中存在第二slot,该第二slot中的指针指向的字段为“/a/b/c/d/”,那么就确定存在第二slot,这时如图10所示,如果第二slot中计数器的计数为2,即大于0,指针指向的下一跳端口信息为空,说明原有的第二slot中的“/a/b/c/d/”作为标记存在,那么现在要插入第二名字前缀,就需要将第二slot的类型转换为名字前缀和标记,需要建立第二slot的指针与下一跳端口信息的对应关系,例如下一跳端口信息为port3,那么转换后的根结点l4的哈希表的数据结构可以如图5所示。当然,如果在根结点l4的哈希表中不存在第二slot,那么就需要在根结点l4的哈希表中新增一第三slot,并建立第三slot的指针与第二名字前缀以及下一跳端口信息的对应关系,第三slot的指针指向的下一跳端口信息不为空,并将第三slot对应的计数器置为0,使得第三slot的类型为纯名字前缀。若当前结点的层次总数小于第二名字前缀的层次长度,则网络设备按照当前结点的层次总数截取第二名字前缀,并在当前结点的哈希表中查找是否存在第四存储位置,第四存储位置的指针指向的字段与截取后的第二名字前缀匹配,若存在,则网络设备将第四存储位置对应的计数器的计数加1;若不存在,则网络设备在当前结点的哈希表中确定第五存储位置,建立第五存储位置的指针与截取后的第二名字前缀以及下一跳端口信息的对应关系,第五存储位置的指针指向的下一跳端口信息为空,并将第五存储位置对应的计数器置为1;网络设备继续向当前结点的第一子树的结点尝试插入第二名字前缀。举例来说,待插入的第二名字前缀为“/c/d/e/a/b/c/d/”,层次长度为7,如果从根结点l4开始尝试插入第二名字前缀,结点l4的层次长度为4,那么首先需要将第二名字前缀按照根结点l4的层次总数截取为“/c/d/e/a/”,待截取后的第二名字前缀“/c/d/e/a/”需要在根节点l4的哈希表中作为标记插入,并在结点l4的哈希表中查找是否存在第四slot,第四slot的指针指向的字段与截取后的第二名字前缀“/c/d/e/a/”匹配,假设根结点l4的哈希表的数据结构如图10所示,可知,根节点l4的哈希表中存在第四slot,那么作为标记插入“/c/d/e/a/”时,就需要将第四slot对应的计数器的计数加1,更新后的根节点l4的哈希表的数据结构可以如图5所示,计数值更新为2,可知,第四slot中“/c/d/e/a/”原本也作为标记存在。但是,如果根节点中不存在截取后的第二名字前缀,就需要在根结点l4的哈希表中新增一第五slot,并建立第五slot的指针与截取后的第二名字前缀以及下一跳端口信息的对应关系,第五slot的指针指向的下一跳端口信息为空,第五slot的计数器置为1,如图10所示。而后,路由器还需要向根结点l4的右子树的结点尝试插入第二名字前缀。同理,假设结点l6的哈希表中不存在将第二名字前缀截取后的“/c/d/e/a/b/c/”字段,还需要在结点l6的哈希表中插入作为标记的“/c/d/e/a/b/c/”字段,而后在结点l7的哈希表中插入第二名字前缀“/c/d/e/a/b/c/d/”。也就是说,待插入的名字前缀不仅要插入到与该名字前缀的层次长度相同的层次总数的结点中,还需要对该结点的父辈结点中的标记的计数器的计数进行更新。若网络设备需在二叉树中删除第三名字前缀时,也需要从二叉树的根结点开始尝试删除第三名字前缀。其中,若当前结点的层次总数大于第三名字前缀的层次长度,则网络设备向当前结点的第二子树的结点尝试删除第三名字前缀。例如待删除的第三名字前缀为“/a/b/c/”,层次长度为3,当前结点为结点l4,层次总数为4,那么路由器需要向结点l4的左子树的结点尝试删除第三名字前缀,最终在结点l3的哈希表中删除第三名字前缀。若当前结点的层次总数等于第三名字前缀的层次长度,则网络设备确定当前结点中是否存在第六存储位置,第六存储位置的指针指向的字段与第三名字前缀匹配;若存在,且第六存储位置的计数器的计数为0,说明第六存储位置中第三名字前缀是作为名字前缀存在的,第六存储位置的类型为纯名字前缀,那么可直接在当前结点的哈希表中删除第六存储位置。或,若存在,且第六存储位置的计数器的计数大于0,则说明第六存储位置的类型为纯标记,或为纯名字前缀和标记,这时如果第六存储位置的指针指向的下一跳端口信息不为空,则说明第六存储位置的类型为名字前缀和标记,那么要删除第三名字前缀时,需要将第六存储位置的指针指向的下一跳端口信息置为空,使得第六存储位置的类型更新为纯标记。若当前结点的层次总数小于第三名字前缀的层次长度,则网络设备按照当前结点的层次总数截取第三名字前缀,并在当前结点的哈希表中查找是否存在第七存储位置,第七存储位置的指针指向的字段与截取后的第三名字前缀匹配,若存在,且第七存储位置的计数器的计数大于0,第七存储位置的指针指向的下一跳端口信息为空,则网络设备将第七存储位置对应的计数器的计数减1,并在减至0时删除第七存储位置,或,若存在,且第七存储位置的计数器的计数大于0,第七存储位置的指针指向的下一跳端口信息不为空,则网络设备将第七存储位置对应的计数器的计数减1;网络设备继续向当前结点的第二子树的结点尝试删除第三名字前缀。举例来说,待删除的第三名字前缀为“/c/d/e/a/b/c/d/”,层次长度为7,当前结点为l4,层次总数为4,则需要按照结点l4的层次总数截取第三名字前缀,第三名字前缀截取后为“/c/d/e/a/”,并在结点l4的哈希表中查找是否存在第七slot,第七slot的指针指向的字段与“/c/d/e/a/”,若结点l4的哈希表的数据结构如图5所示,即存在第七slot,第七slot的计数为2,大于0,指针指向的下一跳端口信息为空,说明字段“/c/d/e/a/”在第七slot中作为纯标记存在,那么就将第七slot的计数器的计数减1,那么更新后的结点l4的哈希表的数据结构如图10所示。或者,如果结点l4的哈希表中存在第七slot,该第七slot的计数大于0,指针指向的下一跳端口信息不为空,说明字段“/c/d/e/a/”在第七slot中作为名字前缀和标记存在,那么只需要将第七slot对应的计数器的计数减1即可,而后继续向结点l4的右子树的结点尝试删除第三名字前缀,同理,路由器还需要在结点l6的哈希表中更新“/c/d/e/a/b/c/”所在的slot的计数器的计数以及下一跳端口信息,以及在结点l7中删除字段“/c/d/e/a/b/c/d/”所在的slot。由此,本申请采用cbs算法采用二叉树作为基本手段,借助计数器和下一跳端口信息区分三种哈希表的存储位置的类型,在各阶段对哈希表查找时,可以根据存储位置的类型判断下一步查找方向,可以提升名字查找的吞吐量。同时,采用计数器记录各结点中的标记的数量,可以区分不同的更高层次的名字前缀在当前层次的标记,并结合下一跳端口信息实现三种存储位置的类型的灵活转换,从而支持高速的增量更新。上述主要从网络设备的角度对本申请实施例提供的方案进行了介绍。可以理解的是,网络设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。本申请实施例可以根据上述方法示例对网络设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在采用对应各个功能划分各个功能模块的情况下,图11示出了上述实施例中所涉及的网络设备的一种可能的结构示意图,网络设备11包括:确定单元111,查找单元112,插入单元113以及删除单元114。确定单元111用于支持网络设备执行图8中的过程801,802,803,查找单元112用于支持网络设备执行图8中的过程804。插入单元113用于执行方法实施例中插入第二名字前缀的过程,删除单元114用于执行方法实施例中删除第三名字前缀的过程,其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。例如该网络设备应用于二叉树类型的数据结构,二叉树中的每个结点对应一个哈希表,不同的哈希表对应不同层次长度的字段,每个哈希表中包括至少一个哈希桶,每个哈希桶中包括至少一个存储位置,每个存储位置包括字段的指纹、计数器以及指针,该字段的层次长度等于该存储位置所在的当前结点的层次总数;计数器的计数用于指示第一字段集合中与计数器所在的存储位置的指针指向的字段相同的字段数量,第一字段集合包括将计数器所在的当前结点的第一子树中的结点对应的第二字段集合按照当前结点的层次总数截取后的字段,第一子树中每个结点的层次总数大于当前结点的层次总数;指针指向当前存储位置对应的字段和下一跳端口信息。在本申请实施例中,可选的,确定单元111,用于从二叉树的根结点开始查找第一名字前缀,确定当前结点的哈希表中是否存在第一存储位置,第一存储位置的指针指向的字段与将第一名字前缀按照当前结点的层次总数截取后的字段匹配;确定单元111,还用于若确定存在第一存储位置,则确定第一存储位置对应的计数器的计数;确定单元111,还用于若计数器的计数在第一范围内,则确定第一存储位置的指针指向的字段为待查找的第一名字前缀;查找单元112,用于若计数器的计数在第二范围内,则向当前结点的第一子树继续查找第一名字前缀,第一范围与第二范围不存在交集。在本申请实施例中,可选的,查找单元112还用于:若确定不存在第一存储位置,则向当前结点的第二子树继续查找第一名字前缀,第二子树中每个结点的层次总数小于当前结点的层次总数。在本申请实施例中,可选的,查找单元112还用于:若计数器的计数在第二范围内,第一存储位置的指针中的下一跳端口信息为空,则在当前结点的第一子树中未查找到第一名字前缀时,向当前结点的第二子树继续查找第一名字前缀。在本申请实施例中,可选的,确定单元111还用于:若计数器的计数在第二范围内,第一存储位置的指针中的下一跳端口信息不为空,则网络设备在当前结点的第一子树中未查找到与第一名字前缀时,确定第一存储位置的指针指向的字段为待查找的第一名字前缀。在本申请实施例中,可选的,第一范围的计数为0,第二范围的计数大于0。在本申请实施例中,可选的,还包括插入单元113,用于:网络设备需在二叉树中插入第二名字前缀时,从二叉树的根结点开始尝试插入第二名字前缀;其中,若当前结点的层次总数大于第二名字前缀的层次长度,则向当前结点的第二子树的结点尝试插入第二名字前缀;若当前结点的层次总数等于第二名字前缀的层次长度,则确定当前结点的哈希表中是否存在第二存储位置,第二存储位置的指针指向的字段与第二名字前缀匹配;若存在,且第二存储位置的计数器的计数大于0,第二存储位置的指针指向的下一跳端口信息为空,则建立第二存储位置的指针与下一跳端口信息的对应关系;若不存在,则在当前结点的哈希表中确定第三存储位置,建立第三存储位置的指针与第二名字前缀以及下一跳端口信息的对应关系,第三存储位置的指针指向的下一跳端口信息不为空,并将第三存储位置对应的计数器置为0;若当前结点的层次总数小于第二名字前缀的层次长度,则按照当前结点的层次总数截取第二名字前缀,并在当前结点的哈希表中查找是否存在第四存储位置,第四存储位置的指针指向的字段与截取后的第二名字前缀匹配,若存在,则将第四存储位置对应的计数器的计数加1;若不存在,则在当前结点的哈希表中确定第五存储位置,建立第五存储位置的指针与截取后的第二名字前缀以及下一跳端口信息的对应关系,第五存储位置的指针指向的下一跳端口信息为空,并将第五存储位置对应的计数器置为1;而后继续向当前结点的第一子树的结点尝试插入第二名字前缀。在本申请实施例中,可选的,还包括删除单元114,用于:网络设备需在二叉树中删除第三名字前缀时,从二叉树的根结点开始尝试删除第三名字前缀;其中,若当前结点的层次总数大于第三名字前缀的层次长度,则向当前结点的第二子树的结点尝试删除第三名字前缀;若当前结点的层次总数等于第三名字前缀的层次长度,则确定当前结点中是否存在第六存储位置,第六存储位置的指针指向的字段与第三名字前缀匹配;若存在,且第六存储位置的计数器的计数为0,则删除第六存储位置,或,若存在,且第六存储位置的计数器的计数大于0,且第六存储位置的指针指向的下一跳端口信息不为空,则将第六存储位置的指针指向的下一跳端口信息置为空;若当前结点的层次总数小于第三名字前缀的层次长度,则按照当前结点的层次总数截取第三名字前缀,并在当前结点的哈希表中查找是否存在第七存储位置,第七存储位置的指针指向的字段与截取后的第三名字前缀匹配,若存在,且第七存储位置的计数器的计数大于0,第七存储位置的指针指向的下一跳端口信息为空,则将第七存储位置对应的计数器的计数减1,并在减至0时删除第七存储位置,或,若存在,且第七存储位置的计数器的计数大于0,第七存储位置的指针指向的下一跳端口信息不为空,则将第七存储位置对应的计数器的计数减1;而后继续向当前结点的第二子树的结点尝试删除第三名字前缀。在采用集成的单元的情况下,图12示出了上述实施例中所涉及的网络设备的一种可能的结构示意图。网络设备12包括:处理模块122和通信模块123。处理模块122用于对网络设备的动作进行控制管理,例如,处理模块122用于支持网络设备执行图8中的过程801-805,和/或用于本文所描述的技术的其它过程。通信模块123用于支持网络设备与其他网络实体的通信,例如与图7中示出的功能模块或网络实体之间的通信。网络设备12还可以包括存储模块121,用于存储网络设备的程序代码和数据。其中,处理模块122可以是处理器或控制器,例如可以是中央处理器(centralprocessingunit,cpu),通用处理器,数字信号处理器(digitalsignalprocessor,dsp),专用集成电路(application-specificintegratedcircuit,asic),现场可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等等。通信模块123可以是收发器、收发电路或通信接口等。存储模块121可以是存储器。当处理模块122为处理器,通信模块123为收发器,存储模块121为存储器时,本申请实施例所涉及的网络设备可以为图13所示的网络设备。参阅图13所示,该网络设备13包括:处理器1312、收发器1313、存储器1311以及总线1314。其中,收发器1313、处理器1312以及存储器1311通过总线1314相互连接;总线1314可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图13中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。结合本申请公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(randomaccessmemory,ram)、闪存、只读存储器(readonlymemory,rom)、可擦除可编程只读存储器(erasableprogrammablerom,eprom)、电可擦可编程只读存储器(electricallyeprom,eeprom)、寄存器、硬盘、移动硬盘、只读光盘(cd-rom)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于asic中。另外,该asic可以位于核心网接口设备中。当然,处理器和存储介质也可以作为分立组件存在于核心网接口设备中。本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1