CN109428822B - 一种名字查找方法和网络设备 - Google Patents
一种名字查找方法和网络设备 Download PDFInfo
- Publication number
- CN109428822B CN109428822B CN201710783595.6A CN201710783595A CN109428822B CN 109428822 B CN109428822 B CN 109428822B CN 201710783595 A CN201710783595 A CN 201710783595A CN 109428822 B CN109428822 B CN 109428822B
- Authority
- CN
- China
- Prior art keywords
- name prefix
- current node
- node
- pointer
- storage position
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/7453—Address table lookup; Address filtering using hashing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/30—Managing network names, e.g. use of aliases or nicknames
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/45—Network directories; Name-to-address mapping
- H04L61/4552—Lookup mechanisms between a plurality of directories; Synchronisation of directories, e.g. metadirectories
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请实施例提供一种名字查找方法和网络设备,涉及通信技术领域,能够解决NDN名字查找算法查找吞吐量低的问题。其方法为:网络设备从二叉树的根结点开始查找第一名字前缀,确定当前结点的哈希表中是否存在第一存储位置,第一存储位置的指针指向的字段与将第一名字前缀按照当前结点的层次总数截取后的字段匹配;若确定存在第一存储位置,则网络设备确定第一存储位置对应的计数器的计数;若计数器的计数在第一范围内,则网络设备确定第一存储位置的指针指向的字段为待查找第一名字前缀;若计数器的计数在第二范围内,则向当前结点的第一子树继续查找第一名字前缀,第一范围与第二范围不存在交集。本申请实施例可用于IP路由转发和URL过滤等网络应用。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种名字查找方法和网络设备。
背景技术
与当前互联网以主机为中心的网络服务器模式不同,命名数据网络(Named-DataNetwork,NDN)采用以内容为中心的网络服务模式,更符合网络用户对内容的分发与获取的主流需求,不仅可以提升互联网的可伸缩性和安全性,而且还可以增加移动性支持和容错能力。
NDN采用基于层次化名字的数据包转发算法,即通过依次查找内容缓存表(Content Store,CS)、兴趣记录表(Pending Interest Table,PIT)、转发表(ForwardingInformation Base,FIB)等进行数据包的路由转发。NDN名字查找算法是NDN数据包转发的关键,其面临查找和更新吞吐量等性能的挑战。其主要原因是,NDN名字查找算法中待查找的名字长度不固定且无限制大小,采用基于层次化名字的最长前缀匹配,会导致NDN名字查找复杂且低效。
例如命名数据网络转发程序(Named Data Networking Forwarding Daemon,NFD)算法是当前NDN项目研究提出的NDN转发程序中所使用的名字查找算法。其设计实现基于哈希表。图1为NFD算法的数据结构设计。该算法使用单个哈希表存储各层次名字前缀,查找名字时从最长层次开始,首先对要查询的名字前缀进行相应长度的截取,然后在哈希表中查找截取后的名字前缀。若无匹配结果,则将截取长度逐步递减,继续进行查找,直至完成匹配,由此实现最长前缀匹配。再例如线性搜索(Linear Search,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报文中包括数据内容的名字、数据本身以及数据生成者的签名。
哈希表(Hash Table):是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个存储位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做哈希表。哈希表中可以包括至少一个哈希桶(bucket),每个哈希桶可以包括多个存储位置(slot)。
二叉搜索(Binary Search,BS)算法:其设计实现基于链式哈希表,如图3所示为该算法数据结构设计的示意图。该算法使用平衡二叉树数据结构组织多个哈希表,二叉树的每个结点对应一个哈希表,不同的哈希表对应不同层次长度的名字前缀(prefix name),哈希表中的每个哈希桶的slot存储名字前缀的指纹(fingerprint,FP)以及指针(Pointer,PTR),指纹为名字前缀的哈希计算值,指针指向与当前结点的层次总数相同的层次长度的名字前缀或更高层次长度的名字前缀,以及转发数据包的下一跳端口信息(next hop)。更高层次长度的名字前缀称为在该层结点的标记(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算法不支持增量删除的问题,本申请在哈希表中增加标记的计数器(Counter of markers,CNT),计数器用于记录相同的标记在同一结点中被重复记录的次数。这样可以在结点中插入或删除名字前缀时,可以对相同标记的计数器的计数进行累加或减小,以表征在某一结点插入或删除名字前缀时,该名字前缀在该结点的父辈结点中的标记的计数也会相应地累加或减小。本申请的这种算法可以称为计数二叉搜索(Counting Binary Search,CBS)的NDN名字查找算法。
因此,本申请实施例提出的CBS算法,应用于二叉树类型的数据结构,二叉树的每个结点对应一个哈希表,如图4所示,每个哈希表包括至少一个哈希桶,每个哈希桶包括至少一个slot,每个slot包括字段的指纹、计数器以及指针,该字段的层次长度等于该slot所在的当前结点的层次总数;计数器的计数用于指示第一字段集合中与计数器所在的slot的指针指向的字段相同的字段数量,第一字段集合包括将计数器所在的当前结点的第一子树中的结点对应的第二字段集合按照当前结点的层次总数截取后的字段,第一子树中每个结点的层次总数大于当前结点的层次总数;指针指向当前slot对应的字段和下一跳端口信息。第一子树可以为上述右子树。也就是说,本申请的slot包括指纹(Fingerprint ofpruned name,FP)、标记的计数器CNT以及指针(Pointer to pruned name and next hop,PTR)。指针指向裁剪的名字前缀和/或标记(pruned name),以及下一跳端口信息。
于是,根据计数器和下一跳端口信息的取值的不同,可以将哈希表中的slot分为三种类型,如表1所示。
表1 slot类型对照表
slot type | counter | next hop |
Pure prefix | 0 | not null |
Pure marker | >0 | null |
Prefix and marker | >0 | not null |
其中,Pure prefix表示当前slot中存储的字段为纯名字前缀,不具有标记的作用,因此,该slot对应的计数器的计数counter的值为0,该slot对应的下一跳端口信息不为空,当待查找的名字前缀与该slot中的指针指向的纯名字前缀匹配时,可以根据该指针指向的下一跳端口信息转发数据;Pure marker表示当前slot中存储的字段为纯标记,即为该slot所在的当前结点的右子树的哈希表中的名字前缀在当前结点中的标记,那么该slot对应的计数器的计数大于0,指针指向的下一跳端口信息为空;Prefix and marker表示当前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采用基于层次化名字的数据包转发的基本流程示意图。即通过依次查找内容缓存表(Content Store,CS)、兴趣记录表(Pending Interest Table,PIT)以及转发表(Forwarding InformationBase,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名字前缀与下一跳端口信息的对应规则
name prefix | next hop | |
R<sub>0</sub> | /* | port 0 |
R<sub>1</sub> | /a/* | port 1 |
R<sub>2</sub> | /a/b/* | port 2 |
R<sub>3</sub> | /a/b/c/* | port 1 |
R<sub>4</sub> | /a/b/c/d/* | port 3 |
R<sub>5</sub> | /b/a/d/c/* | port 4 |
R<sub>6</sub> | /c/d/e/a/b/* | port 2 |
R<sub>7</sub> | /a/b/c/d/e/a/* | port 3 |
R<sub>8</sub> | /a/b/c/d/e/a/b/* | port 4 |
R<sub>9</sub> | /c/d/e/a/b/c/d/* | port 1 |
从表2可以看出,根结点L4的哈希表中存储有规则{R4、R5、R6 4、R7 4、R8 4}以及R9 4,R4和R5层次长度均为4,R6 4表示R6的名字前缀/c/d/e/a/b/*本身存储在结点L5中,但是该名字前缀按照结点L4的层次总数的裁剪后得到的标记/c/d/e/a/存储在结点L4中,R7 4、R8 4以及R9 4同理。
假设待查找的第一名字前缀为“/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的哈希表中存在R6 4,即与第一名字前缀匹配的字段所在的第一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可以是处理器或控制器,例如可以是中央处理器(CentralProcessing Unit,CPU),通用处理器,数字信号处理器(Digital Signal Processor,DSP),专用集成电路(Application-Specific Integrated Circuit,ASIC),现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。通信模块123可以是收发器、收发电路或通信接口等。存储模块121可以是存储器。
当处理模块122为处理器,通信模块123为收发器,存储模块121为存储器时,本申请实施例所涉及的网络设备可以为图13所示的网络设备。
参阅图13所示,该网络设备13包括:处理器1312、收发器1313、存储器1311以及总线1314。其中,收发器1313、处理器1312以及存储器1311通过总线1314相互连接;总线1314可以是外设部件互连标准(Peripheral Component Interconnect,PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图13中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
结合本申请公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(Random Access Memory,RAM)、闪存、只读存储器(ReadOnly Memory,ROM)、可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)、电可擦可编程只读存储器(Electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于核心网接口设备中。当然,处理器和存储介质也可以作为分立组件存在于核心网接口设备中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请的保护范围之内。
Claims (12)
1.一种名字查找方法,其特征在于,应用于二叉树类型的数据结构,所述二叉树中的每个结点对应一个哈希表,不同的哈希表对应不同层次长度的字段,每个所述哈希表中包括至少一个哈希桶,每个所述哈希桶中包括至少一个存储位置,每个存储位置包括字段的指纹、计数器以及指针,该字段的层次长度等于该存储位置所在的当前结点的层次总数;所述计数器的计数用于指示第一字段集合中与所述计数器所在的存储位置的指针指向的字段相同的字段数量,所述第一字段集合包括将所述计数器所在的当前结点的第一子树中的结点对应的第二字段集合按照所述当前结点的层次总数截取后的字段,所述第一子树中每个结点的层次总数大于所述当前结点的层次总数;所述指针指向当前存储位置对应的字段和下一跳端口信息,所述方法包括:
网络设备从所述二叉树的根结点开始查找第一名字前缀,确定当前结点的哈希表中是否存在第一存储位置,所述第一存储位置的指针指向的字段与将所述第一名字前缀按照所述当前结点的层次总数截取后的字段匹配;
若确定存在所述第一存储位置,则所述网络设备确定所述第一存储位置对应的计数器的计数;
若所述计数器的计数在第一范围内,则所述网络设备确定所述第一存储位置的指针指向的字段为待查找的所述第一名字前缀,所述第一范围的计数为0;
若所述计数器的计数在第二范围内,则所述网络设备向所述当前结点的第一子树继续查找所述第一名字前缀,所述第二范围的计数大于0,所述第一范围与所述第二范围不存在交集。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若确定不存在所述第一存储位置,则所述网络设备向所述当前结点的第二子树继续查找所述第一名字前缀,所述第二子树中每个结点的层次总数小于所述当前结点的层次总数。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若所述计数器的计数在所述第二范围内,所述第一存储位置的指针中的下一跳端口信息为空,则所述网络设备在所述当前结点的第一子树中未查找到所述第一名字前缀时,向所述当前结点的第二子树继续查找所述第一名字前缀。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若所述计数器的计数在第二范围内,所述第一存储位置的指针中的下一跳端口信息不为空,则所述网络设备在所述当前结点的第一子树中未查找到与所述第一名字前缀时,确定所述第一存储位置的指针指向的字段为待查找的所述第一名字前缀。
5.根据权利要求3或4所述的方法,其特征在于,所述方法还包括:
所述网络设备需在所述二叉树中插入第二名字前缀时,从所述二叉树的根结点开始尝试插入所述第二名字前缀;
其中,若所述当前结点的层次总数大于所述第二名字前缀的层次长度,则所述网络设备向所述当前结点的第二子树的结点尝试插入所述第二名字前缀;
若所述当前结点的层次总数等于所述第二名字前缀的层次长度,则所述网络设备确定所述当前结点的哈希表中是否存在第二存储位置,所述第二存储位置的指针指向的字段与所述第二名字前缀匹配;若存在,且所述第二存储位置的计数器的计数大于0,所述第二存储位置的指针指向的下一跳端口信息为空,则所述网络设备建立所述第二存储位置的指针与所述下一跳端口信息的对应关系;若不存在,则所述网络设备在所述当前结点的哈希表中确定第三存储位置,建立所述第三存储位置的指针与所述第二名字前缀以及下一跳端口信息的对应关系,所述第三存储位置的指针指向的下一跳端口信息不为空,并将所述第三存储位置对应的计数器置为0;
若所述当前结点的层次总数小于所述第二名字前缀的层次长度,则所述网络设备按照所述当前结点的层次总数截取所述第二名字前缀,并在所述当前结点的哈希表中查找是否存在第四存储位置,所述第四存储位置的指针指向的字段与截取后的所述第二名字前缀匹配,若存在,则所述网络设备将所述第四存储位置对应的计数器的计数加1;若不存在,则所述网络设备在所述当前结点的哈希表中确定第五存储位置,建立所述第五存储位置的指针与截取后的所述第二名字前缀以及下一跳端口信息的对应关系,所述第五存储位置的指针指向的下一跳端口信息为空,并将所述第五存储位置对应的计数器置为1;所述网络设备继续向所述当前结点的第一子树的结点尝试插入所述第二名字前缀。
6.根据权利要求3或4所述的方法,其特征在于,所述方法还包括:
所述网络设备需在所述二叉树中删除第三名字前缀时,从所述二叉树的根结点开始尝试删除所述第三名字前缀;
其中,若所述当前结点的层次总数大于所述第三名字前缀的层次长度,则所述网络设备向所述当前结点的第二子树的结点尝试删除所述第三名字前缀;
若所述当前结点的层次总数等于所述第三名字前缀的层次长度,则所述网络设备确定所述当前结点中是否存在第六存储位置,所述第六存储位置的指针指向的字段与所述第三名字前缀匹配;若存在,且所述第六存储位置的计数器的计数为0,则所述网络设备删除所述第六存储位置,或,若存在,且所述第六存储位置的计数器的计数大于0,且所述第六存储位置的指针指向的下一跳端口信息不为空,则所述网络设备将所述第六存储位置的指针指向的下一跳端口信息置为空;
若所述当前结点的层次总数小于所述第三名字前缀的层次长度,则所述网络设备按照所述当前结点的层次总数截取所述第三名字前缀,并在所述当前结点的哈希表中查找是否存在第七存储位置,所述第七存储位置的指针指向的字段与截取后的所述第三名字前缀匹配,若存在,且所述第七存储位置的计数器的计数大于0,所述第七存储位置的指针指向的下一跳端口信息为空,则所述网络设备将所述第七存储位置对应的计数器的计数减1,并在减至0时删除所述第七存储位置,或,若存在,且所述第七存储位置的计数器的计数大于0,所述第七存储位置的指针指向的下一跳端口信息不为空,则所述网络设备将所述第七存储位置对应的计数器的计数减1;所述网络设备继续向所述当前结点的第二子树的结点尝试删除所述第三名字前缀。
7.一种网络设备,其特征在于,应用于二叉树类型的数据结构,所述二叉树中的每个结点对应一个哈希表,不同的哈希表对应不同层次长度的字段,每个所述哈希表中包括至少一个哈希桶,每个所述哈希桶中包括至少一个存储位置,每个存储位置包括字段的指纹、计数器以及指针,该字段的层次长度等于该存储位置所在的当前结点的层次总数;所述计数器的计数用于指示第一字段集合中与所述计数器所在的存储位置的指针指向的字段相同的字段数量,所述第一字段集合包括将所述计数器所在的当前结点的第一子树中的结点对应的第二字段集合按照所述当前结点的层次总数截取后的字段,所述第一子树中每个结点的层次总数大于所述当前结点的层次总数;所述指针指向当前存储位置对应的字段和下一跳端口信息,该网络设备包括:
确定单元,用于从所述二叉树的根结点开始查找第一名字前缀,确定当前结点的哈希表中是否存在第一存储位置,所述第一存储位置的指针指向的字段与将所述第一名字前缀按照所述当前结点的层次总数截取后的字段匹配;
所述确定单元,还用于若确定存在所述第一存储位置,则确定所述第一存储位置对应的计数器的计数;
所述确定单元,还用于若所述计数器的计数在第一范围内,则确定所述第一存储位置的指针指向的字段为待查找的所述第一名字前缀,所述第一范围的计数为0;
查找单元,用于若所述计数器的计数在第二范围内,则向所述当前结点的第一子树继续查找所述第一名字前缀,所述第二范围的计数大于0,所述第一范围与所述第二范围不存在交集。
8.根据权利要求7所述的网络设备,其特征在于,所述查找单元还用于:
若确定不存在所述第一存储位置,则向所述当前结点的第二子树继续查找所述第一名字前缀,所述第二子树中每个结点的层次总数小于所述当前结点的层次总数。
9.根据权利要求8所述的网络设备,其特征在于,所述查找单元还用于:
若所述计数器的计数在所述第二范围内,所述第一存储位置的指针中的下一跳端口信息为空,则在所述当前结点的第一子树中未查找到所述第一名字前缀时,向所述当前结点的第二子树继续查找所述第一名字前缀。
10.根据权利要求8所述的网络设备,其特征在于,所述确定单元还用于:
若所述计数器的计数在第二范围内,所述第一存储位置的指针中的下一跳端口信息不为空,则所述网络设备在所述当前结点的第一子树中未查找到与所述第一名字前缀时,确定所述第一存储位置的指针指向的字段为待查找的所述第一名字前缀。
11.根据权利要求9或10所述的网络设备,其特征在于,还包括插入单元,用于:
所述网络设备需在所述二叉树中插入第二名字前缀时,从所述二叉树的根结点开始尝试插入所述第二名字前缀;
其中,若所述当前结点的层次总数大于所述第二名字前缀的层次长度,则向所述当前结点的第二子树的结点尝试插入所述第二名字前缀;
若所述当前结点的层次总数等于所述第二名字前缀的层次长度,则确定所述当前结点的哈希表中是否存在第二存储位置,所述第二存储位置的指针指向的字段与所述第二名字前缀匹配;若存在,且所述第二存储位置的计数器的计数大于0,所述第二存储位置的指针指向的下一跳端口信息为空,则建立所述第二存储位置的指针与所述下一跳端口信息的对应关系;若不存在,则在所述当前结点的哈希表中确定第三存储位置,建立所述第三存储位置的指针与所述第二名字前缀以及下一跳端口信息的对应关系,所述第三存储位置的指针指向的下一跳端口信息不为空,并将所述第三存储位置对应的计数器置为0;
若所述当前结点的层次总数小于所述第二名字前缀的层次长度,则按照所述当前结点的层次总数截取所述第二名字前缀,并在所述当前结点的哈希表中查找是否存在第四存储位置,所述第四存储位置的指针指向的字段与截取后的所述第二名字前缀匹配,若存在,则将所述第四存储位置对应的计数器的计数加1;若不存在,则在所述当前结点的哈希表中确定第五存储位置,建立所述第五存储位置的指针与截取后的所述第二名字前缀以及下一跳端口信息的对应关系,所述第五存储位置的指针指向的下一跳端口信息为空,并将所述第五存储位置对应的计数器置为1;而后继续向所述当前结点的第一子树的结点尝试插入所述第二名字前缀。
12.根据权利要求9或10所述的网络设备,其特征在于,还包括删除单元,用于:
所述网络设备需在所述二叉树中删除第三名字前缀时,从所述二叉树的根结点开始尝试删除所述第三名字前缀;
其中,若所述当前结点的层次总数大于所述第三名字前缀的层次长度,则向所述当前结点的第二子树的结点尝试删除所述第三名字前缀;
若所述当前结点的层次总数等于所述第三名字前缀的层次长度,则确定所述当前结点中是否存在第六存储位置,所述第六存储位置的指针指向的字段与所述第三名字前缀匹配;若存在,且所述第六存储位置的计数器的计数为0,则删除所述第六存储位置,或,若存在,且所述第六存储位置的计数器的计数大于0,且所述第六存储位置的指针指向的下一跳端口信息不为空,则将所述第六存储位置的指针指向的下一跳端口信息置为空;
若所述当前结点的层次总数小于所述第三名字前缀的层次长度,则按照所述当前结点的层次总数截取所述第三名字前缀,并在所述当前结点的哈希表中查找是否存在第七存储位置,所述第七存储位置的指针指向的字段与截取后的所述第三名字前缀匹配,若存在,且所述第七存储位置的计数器的计数大于0,所述第七存储位置的指针指向的下一跳端口信息为空,则将所述第七存储位置对应的计数器的计数减1,并在减至0时删除所述第七存储位置,或,若存在,且所述第七存储位置的计数器的计数大于0,所述第七存储位置的指针指向的下一跳端口信息不为空,则将所述第七存储位置对应的计数器的计数减1;而后继续向所述当前结点的第二子树的结点尝试删除所述第三名字前缀。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710783595.6A CN109428822B (zh) | 2017-09-01 | 2017-09-01 | 一种名字查找方法和网络设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710783595.6A CN109428822B (zh) | 2017-09-01 | 2017-09-01 | 一种名字查找方法和网络设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109428822A CN109428822A (zh) | 2019-03-05 |
CN109428822B true CN109428822B (zh) | 2020-10-09 |
Family
ID=65512883
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710783595.6A Active CN109428822B (zh) | 2017-09-01 | 2017-09-01 | 一种名字查找方法和网络设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109428822B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110995592B (zh) * | 2019-12-16 | 2021-09-07 | 北京信息科技大学 | 一种新型待定兴趣表的自维护方法及路由转发方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101783761A (zh) * | 2009-01-21 | 2010-07-21 | 华为技术有限公司 | 一种存储及查找路由表的方法及装置 |
CN103595637A (zh) * | 2013-10-27 | 2014-02-19 | 西安电子科技大学 | 基于树与哈希表的内容中心网络结点处理数据方法 |
CN106209645A (zh) * | 2016-07-29 | 2016-12-07 | 北京邮电大学 | 一种数据包的起始查找节点确定方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101430708A (zh) * | 2008-11-21 | 2009-05-13 | 哈尔滨工业大学深圳研究生院 | 一种基于标签聚类的博客层次分类树构建方法 |
CN105138478B (zh) * | 2015-07-28 | 2018-10-26 | 哈尔滨工程大学 | 一种非平衡哈希树的存储器完整性保护方法 |
US10313227B2 (en) * | 2015-09-24 | 2019-06-04 | Cisco Technology, Inc. | System and method for eliminating undetected interest looping in information-centric networks |
-
2017
- 2017-09-01 CN CN201710783595.6A patent/CN109428822B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101783761A (zh) * | 2009-01-21 | 2010-07-21 | 华为技术有限公司 | 一种存储及查找路由表的方法及装置 |
CN103595637A (zh) * | 2013-10-27 | 2014-02-19 | 西安电子科技大学 | 基于树与哈希表的内容中心网络结点处理数据方法 |
CN106209645A (zh) * | 2016-07-29 | 2016-12-07 | 北京邮电大学 | 一种数据包的起始查找节点确定方法及装置 |
Non-Patent Citations (1)
Title |
---|
《命名数据网络的路由查找算法研究》;贺雨虹;《中国优秀硕士学位论文全文数据库》;20170331;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109428822A (zh) | 2019-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7089240B2 (en) | Longest prefix match lookup using hash function | |
EP2869536B1 (en) | System and method for hash-based forwarding of packets with hierarchically structured variable-length identifiers | |
CN112866111B (zh) | 流表管理的方法和装置 | |
US20150365495A1 (en) | Data source movement processing method, packet forwarding method, and apparatus thereof | |
US20140003436A1 (en) | Internet Protocol and Ethernet Lookup Via a Unified Hashed Trie | |
CN113315705B (zh) | 基于单次哈希布隆过滤器的Flexible IP寻址方法及装置 | |
CN109067744B (zh) | Acl规则处理方法、装置及通信设备 | |
EP2429132B1 (en) | Table creating and searching method used by network processor | |
CN109428822B (zh) | 一种名字查找方法和网络设备 | |
TW200407010A (en) | Method and apparatus to perform network routing using multiple length trie blocks | |
CN112565091A (zh) | 一种报文转发方法、装置、存储介质及终端设备 | |
CN108111422B (zh) | 一种基于dpdk的数据高速多路转发方法及装置 | |
US11063863B2 (en) | Systems and methods for transmitting and receiving interest messages | |
WO2021184577A1 (zh) | 服务器ip地址获取方法、装置、设备及存储介质 | |
CN117435912A (zh) | 基于网络数据包属性值长短特征的数据包索引与检索方法 | |
US7523218B1 (en) | O(log n) dynamic router tables for prefixes and ranges | |
Berto et al. | Spatial bloom filter in named data networking: a memory efficient solution | |
CN111352938A (zh) | 数据处理方法、计算机设备及存储介质 | |
CN113824814B (zh) | 一种转发表的地址匹配方法、装置、网络设备及介质 | |
CN113328947B (zh) | 基于应用可控前缀扩展布隆过滤器的可变长路由查找方法及装置 | |
CN109495525B (zh) | 网络组件、解析内容标识的方法和计算机可读存储介质 | |
CN107870925B (zh) | 一种字符串过滤方法和相关装置 | |
KR100662254B1 (ko) | 라우팅 시스템에서의 패킷 분류 장치 및 이를 위한 룰 구축 방법 | |
Liu et al. | Longest prefix matching with pruning | |
Najafimehr et al. | SLCF: Single-hash lookup cuckoo filter |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210422 Address after: Unit 3401, unit a, building 6, Shenye Zhongcheng, No. 8089, Hongli West Road, Donghai community, Xiangmihu street, Futian District, Shenzhen, Guangdong 518040 Patentee after: Honor Device Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |