一种名字查找方法和网络设备技术

技术编号:20520043 阅读:22 留言:0更新日期:2019-03-06 03:48
本申请实施例提供一种名字查找方法和网络设备,涉及通信技术领域,能够解决NDN名字查找算法查找吞吐量低的问题。其方法为:网络设备从二叉树的根结点开始查找第一名字前缀,确定当前结点的哈希表中是否存在第一存储位置,第一存储位置的指针指向的字段与将第一名字前缀按照当前结点的层次总数截取后的字段匹配;若确定存在第一存储位置,则网络设备确定第一存储位置对应的计数器的计数;若计数器的计数在第一范围内,则网络设备确定第一存储位置的指针指向的字段为待查找第一名字前缀;若计数器的计数在第二范围内,则向当前结点的第一子树继续查找第一名字前缀,第一范围与第二范围不存在交集。本申请实施例可用于IP路由转发和URL过滤等网络应用。

【技术实现步骤摘要】
一种名字查找方法和网络设备
本申请涉及通信
,尤其涉及一种名字查找方法和网络设备。
技术介绍
与当前互联网以主机为中心的网络服务器模式不同,命名数据网络(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.一种名字查找方法,其特征在于,应用于二叉树类型的数据结构,所述二叉树中的每个结点对应一个哈希表,不同的哈希表对应不同层次长度的字段,每个所述哈希表中包括至少一个哈希桶,每个所述哈希桶中包括至少一个存储位置,每个存储位置包括字段的指纹、计数器以及指针,该字段的层次长度等于该存储位置所在的当前结点的层次总数;所述计数器的计数用于指示第一字段集合中与所述计数器所在的存储位置的指针指向的字段相同的字段数量,所述第一字段集合包括将所述计数器所在的当前结点的第一子树中的结点对应的第二字段集合按照所述当前结点的层次总数截取后的字段,所述第一子树中每个结点的层次总数大于所述当前结点的层次总数;所述指针指向当前存储位置对应的字段和下一跳端口信息,所述方法包括:网络设备从所述二叉树的根结点开始查找第一名字前缀,确定当前结点的哈希表中是否存在第一存储位置,所述第一存储位置的指针指向的字段与将所述第一名字前缀按照所述当前结点的层次总数截取后的字段匹配;若确定存在所述第一存储位置,则所述网络设备确定所述第一存储位置对应的计数器的计数;若所述计数器的计数在第一范围内,则所述网络设备确定所述第一存储位置的指针指向的字段为待查找的所述第一名字前缀;若所述计数器的计数在第二范围内,则所述网络设备向所述当前结点的第一子树继续查找所述第一名字前缀,所述第一范围与所述第二范围不存在交集。...

【技术特征摘要】
1.一种名字查找方法,其特征在于,应用于二叉树类型的数据结构,所述二叉树中的每个结点对应一个哈希表,不同的哈希表对应不同层次长度的字段,每个所述哈希表中包括至少一个哈希桶,每个所述哈希桶中包括至少一个存储位置,每个存储位置包括字段的指纹、计数器以及指针,该字段的层次长度等于该存储位置所在的当前结点的层次总数;所述计数器的计数用于指示第一字段集合中与所述计数器所在的存储位置的指针指向的字段相同的字段数量,所述第一字段集合包括将所述计数器所在的当前结点的第一子树中的结点对应的第二字段集合按照所述当前结点的层次总数截取后的字段,所述第一子树中每个结点的层次总数大于所述当前结点的层次总数;所述指针指向当前存储位置对应的字段和下一跳端口信息,所述方法包括:网络设备从所述二叉树的根结点开始查找第一名字前缀,确定当前结点的哈希表中是否存在第一存储位置,所述第一存储位置的指针指向的字段与将所述第一名字前缀按照所述当前结点的层次总数截取后的字段匹配;若确定存在所述第一存储位置,则所述网络设备确定所述第一存储位置对应的计数器的计数;若所述计数器的计数在第一范围内,则所述网络设备确定所述第一存储位置的指针指向的字段为待查找的所述第一名字前缀;若所述计数器的计数在第二范围内,则所述网络设备向所述当前结点的第一子树继续查找所述第一名字前缀,所述第一范围与所述第二范围不存在交集。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:若确定不存在所述第一存储位置,则所述网络设备向所述当前结点的第二子树继续查找所述第一名字前缀,所述第二子树中每个结点的层次总数小于所述当前结点的层次总数。3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:若所述计数器的计数在所述第二范围内,所述第一存储位置的指针中的下一跳端口信息为空,则所述网络设备在所述当前结点的第一子树中未查找到所述第一名字前缀时,向所述当前结点的第二子树继续查找所述第一名字前缀。4.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:若所述计数器的计数在第二范围内,所述第一存储位置的指针中的下一跳端口信息不为空,则所述网络设备在所述当前结点的第一子树中未查找到与所述第一名字前缀时,确定所述第一存储位置的指针指向的字段为待查找的所述第一名字前缀。5.根据权利要求1-4任一项所述的方法,其特征在于,所述第一范围的计数为0,所述第二范围的计数大于0。6.根据权利要求5所述的方法,其特征在于,所述方法还包括:所述网络设备需在所述二叉树中插入第二名字前缀时,从所述二叉树的根结点开始尝试插入所述第二名字前缀;其中,若所述当前结点的层次总数大于所述第二名字前缀的层次长度,则所述网络设备向所述当前结点的第二子树的结点尝试插入所述第二名字前缀;若所述当前结点的层次总数等于所述第二名字前缀的层次长度,则所述网络设备确定所述当前结点的哈希表中是否存在第二存储位置,所述第二存储位置的指针指向的字段与所述第二名字前缀匹配;若存在,且所述第二存储位置的计数器的计数大于0,所述第二存储位置的指针指向的下一跳端口信息为空,则所述网络设备建立所述第二存储位置的指针与所述下一跳端口信息的对应关系;若不存在,则所述网络设备在所述当前结点的哈希表中确定第三存储位置,建立所述第三存储位置的指针与所述第二名字前缀以及下一跳端口信息的对应关系,所述第三存储位置的指针指向的下一跳端口信息不为空,并将所述第三存储位置对应的计数器置为0;若所述当前结点的层次总数小于所述第二名字前缀的层次长度,则所述网络设备按照所述当前结点的层次总数截取所述第二名字前缀,并在所述当前结点的哈希表中查找是否存在第四存储位置,所述第四存储位置的指针指向的字段与截取后的所述第二名字前缀匹配,若存在,则所述网络设备将所述第四存储位置对应的计数器的计数加1;若不存在,则所述网络设备在所述当前结点的哈希表中确定第五存储位置,建立所述第五存储位置的指针与截取后的所述第二名字前缀以及下一跳端口信息的对应关系,所述第五存储位置的指针指向的下一跳端口信息为空,并将所述第五存储位置对应的计数器置为1;所述网络设备继续向所述当前结点的第一子树的结点尝试插入所述第二名字前缀。7.根据权利要求5所述的方法,其特征在于,所述方法还包括:所述网络设备需在所述二叉树中删除第三名字前缀时,从所述二叉树的根结点开始尝试删除所述第三名字前缀;其中,若所述当前结点的层次总数大于所述第三名字前缀的层次长度,则所述网络设备向所述当前结点的第二子树的结点尝试删除所述第三名字前缀;若所述当前结点的层次总数等于所述第三名字前缀的层次长度,则所述网络设备确定所述当前结点中是否存在第六存储位置,所述第六存储位置的指针指向的字段与所述第三名字前缀匹配;若存在,且所述第六存储位置的计数器的计数为0,则所述网络设备删除所述第六存储位置,或,若存在,且所述第六存储位置的计数器的计数大于0,且所述第六存储位置的指针指向的下一跳端口信息不为空,则所述网络设备将所述第六存储位置的指针指向的下一跳端口信息置为空;若所述当前结点的层次总数小于所述第三名字前缀的层次长度,则所述网络设备按照所述当前结点的层次总数截取所述第三名字前缀,并在所述当前结点的哈希表中查找是否存在第七存储位置,所述第七存储位置的指针指向的字段与截取后的所述第三名字前缀匹配,若存在,且所述第七存储位置的计数器的计数大于0,所述第七存储位置的指针指向的下一跳端口信息为空,则所述网络设备将所述第七存储位置对应的计数器的计数减1,并在减至0时删除所述第七存储位置,或,若存在,且所述第七存储位置的计数器的计数大于0,所述第七存储位置的指针指向的下一跳端口信息不为空,则所述网络设备将所述第七存储位置对应的计数器的计数减1;所述网络设...

【专利技术属性】
技术研发人员:黄昆王兆华谢高岗
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1