CN109831384B - 名字查找方法及路由器 - Google Patents
名字查找方法及路由器 Download PDFInfo
- Publication number
- CN109831384B CN109831384B CN201711202737.1A CN201711202737A CN109831384B CN 109831384 B CN109831384 B CN 109831384B CN 201711202737 A CN201711202737 A CN 201711202737A CN 109831384 B CN109831384 B CN 109831384B
- Authority
- CN
- China
- Prior art keywords
- name
- name prefix
- string
- shape
- target
- 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
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种名字查找方法,包括:路由器接收到终端主机的数据包后,获取该数据包的名字前缀和该名字前缀的外形字串;根据该外形字串,在TCAM表中按位搜索以得到第一目标外形字串,该第一目标外形字串为在TCAM表中与名字前缀的外形字串匹配的外形字串中最长的外形字串;根据所述数据包的名字前缀在第一目标外形字串对应的哈希表中进行搜索,以获取目标名字前缀,该目标名字前缀为所述SRAM中与所述数据包的名字前缀匹配的名字前缀中最长的名字前缀;将数据包从目标名字前缀对应的下一跳端口转发出去。本发明实施例还提供了一种路由器。采用本发明实施例可有效减少访问哈希表的次数,有利于提高名字查找和增量更新的吞吐量。
Description
技术领域
本发明涉及互联网领域,尤其涉及一种名字查找方法及路由器。
背景技术
与现有互联网的以主机为中心的网络服务模式不同,命名数据网络(Named-DataNetwork,NDN)采用以内容为中心的网络服务模式,更符合网络用户对内容的分发与获取的关键需求。NDN是未来网络体系结构的重要演变方向,不仅提升互联网的可伸缩性和安全性,而且增加移动性支持和容错能力。
NDN采用基于层次化名字的数据包转发算法,即通过依次查找内容缓存表(Content Store,CS)、兴趣记录表(Pending Interest Table,PIT)、转发表(ForwardingInformation Base,FIB)等进行数据包的路由转发。NDN数据包转发的基本流程包括:兴趣包查询CS,如果查询成功则返回数据包给请求方。如果查询失败,则查询PIT,如果PIT已存储该兴趣包的表项,则等待数据包返回后发送给请求方。如果PIT未存储该兴趣包的表项,则创建该条目,并继续查询FIB。查询FIB后的匹配结果存储到PIT中,最后从给定的端口转发该兴趣数据包。当接收到数据包时,查询PIT表,发送给相应的请求方,并删除PIT中对应的兴趣包的表项。NDN名字查找算法是NDN数据包转发的关键。NDN名字查找算法面临查找和更新吞吐量等性能挑战。其主要原因是NDN名字长度不固定且无限制大小,采用基于层次化名字的最长前缀匹配,导致NDN名字查找的复杂且低效。另外,NDN转发需要频繁动态的路由更新操作,因此NDN名字查找算法必须支持高速的增量更新。
现有的NDN名字查找算法主要是基于SRAM的软件实现方案,即采用哈希表(HashTable),布鲁姆过滤器(Bloom Filter),查找树(Trie)等数据结构存储名字,通过优化软件实现中的前缀匹配顺序来提高名字查找吞吐量;现有的NDN名字查找算法主要包括NFD算法、线性搜索(Liner Search,LS)算法、二叉搜索(Binary Search,BS)算法、布鲁姆过滤器辅助的哈希表(Bloom Filter-Aided Hash Table,BFAST)算法等。但是这些方法由于自身的局限性,存在不支持增量删除、查找吞吐量低、更新吞吐量低等缺点。
发明内容
本发明实施例提供一种名字查找方法及设备,克服了不支持增量删除、查找吞吐量低、更新吞吐量低等缺点。
第一方面,本发明实施例提供一种名字查找方法,包括:
接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串,所述外形字串为所述名字前缀每层的字符长度构成的字符串;
根据所述数据包的名字前缀的外形字串,在三态内容寻址存储器TCAM表中按位搜索以得到第一目标外形字串,所述第一目标外形字串为在所述TCAM表中与所述数据包的名字前缀的外形字串匹配的外形字串中最长的外形字串;
根据所述数据包的名字前缀在静态随机接入存储器SRAM中与所述第一目标外形字串对应的哈希表中进行搜索,以获取第一目标名字前缀,所述第一目标名字前缀为所述SRAM中与所述数据包的名字前缀匹配的名字前缀中最长的名字前缀,所述哈希表中存储有具有相同外形字串的名字前缀;
将数据包从所述第一目标名字前缀对应的下一跳端口转发出去。与现有技术相比,路由器分两个阶段查找名字前缀,首先在TCAM表中根据名字前缀的字串外形查找与其匹配的最长外形字串,然后在该外形字串对应的哈希表中查找与名字前缀匹配的且最长的名字前缀,可以有效减少哈希表的访问次数,有利于提高名字查找和增量更新吞吐量。
在一种可行的实施例中,所述获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串,包括:
对所述数据包的名字前缀进行裁剪,以得到裁剪后的名字前缀;
根据所述裁剪后的名字前缀获取所述数据包的名字前缀的外形字串。
在一种可行的实施例中,所述接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串之前,所述方法还包括:
根据名字前缀规则集构建名字外形树;
对所述名字外形树进行深度收缩操作和节点数量缩减操作。
在一种可行的实施例中,所述对所述名字外形树进行深度收缩操作和节点数量缩减操作,包括:
从所述名字外形树的底层节点开始,将所述名字外形树中每个节点的位宽度与TCAM的位宽度进行比较,所述节点的位宽度为该节点对应的外形字串在所述TCAM表中存储的位宽度,所述节点的位宽度通过如下方式得到:
获取所述名字外形树的所有节点对应的外形字串中的每个层次的字符长度,并得到所述所有节点对应的外形字串在每个层次的字符长度的最大值;
每个节点对应的外形字串在每个层次的所占位数为该层次的字符长度的最大值,所述节点的位宽度为所有层次的所占位数之和;
当所述名字外形树中节点A的位宽度大于所述TCAM的位宽度时,将所述节点A收缩至其父节点;
其中,所述节点A为所述名字外形树中任一节点。
在一种可行的实施例中,所述对所述名字外形树进行深度收缩操作和节点数量缩减操作,包括:
当所述名字外形树的节点数量大于TCAM的表项数时,根据负荷最小深度最大优先原则确定所述名字外形树中待缩减节点;
将所述待缩减节点缩减至其前驱节点,以使所述名字外形树的节点数量小于或者等于所述TCAM的表项数。
在一种可行的实施例中,所述方法还包括:
当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
在一种可行的实施例中,所述方法还包括:
当根据所述待插入名字前缀的外形字串在所述TCAM表中搜索到与所述待插入名字前缀的外形字串匹配的外形字串时,在所述TCAM表中创建一个新的表项,用于存储所述待插入名字前缀的外形字串;
创建一个与所述新的表项对应的新的哈希表;
在所述新的哈希表中存储所述待插入名字前缀。
在一种可行的实施例中,所述方法还包括:
接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
在一种可行的实施例中,所述方法还包括:
当在所述第三目标外形字串对应的哈希表中未搜索到第二目标名字前缀时,回溯到所述第三目标外形字串的前驱字串对应的哈希表中继续搜索;
当在所述前驱字串对应的哈希表搜索到第三目标名字前缀时,删除所述第三目标名字前缀,所述第三目标名字前缀为所述前驱字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
第二方面,本发明实施例提供了一种路由器,包括:
获取单元,用于接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串,所述外形字串为所述名字前缀每层的字符长度构成的字符串;
第一搜索单元,用于根据所述数据包的名字前缀的外形字串,在三态内容寻址存储器TCAM表中按位搜索以得到第一目标外形字串,所述第一目标外形字串为在所述TCAM表中与所述数据包的名字前缀的外形字串匹配的外形字串中最长的外形字串;
第二搜索单元,用于根据所述数据包的名字前缀在静态随机接入存储器SRAM中与所述第一目标外形字串对应的哈希表中进行搜索,以获取目第一标名字前缀,所述第一目标名字前缀为所述SRAM中与所述数据包的名字前缀匹配的名字前缀中最长的名字前缀,所述哈希表中存储有具有相同外形字串的名字前缀;
转发单元,用于将数据包从所述第一目标名字前缀对应的下一跳端口转发出去。
在一种可行的实施例中,所述获取单元包括:
裁剪子单元,用于对所述数据包的名字前缀进行裁剪,以得到裁剪后的名字前缀;
获取子单元,用于根据所述裁剪后的名字前缀获取所述数据包的名字前缀的外形字串。
在一种可行的实施例中,所述接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串之前,所述路由器还包括:
构建单元,用于根据名字前缀规则集构建名字外形树;
处理单元,用于对所述名字外形树进行深度收缩操作和节点数量缩减操作。
在一种可行的实施例中,所述处理单元具体用于:
从所述名字外形树的底层节点开始,将所述名字外形树中每个节点的位宽度与TCAM的位宽度进行比较,所述节点的位宽度为该节点对应的外形字串在所述TCAM表中存储的位宽度,所述节点的位宽度通过如下方式得到:
获取所述名字外形树的所有节点对应的外形字串中的每个层次的字符长度,并得到所述所有节点对应的外形字串在每个层次的字符长度的最大值;
每个节点对应的外形字串在每个层次的所占位数为该层次的字符长度的最大值,所述节点的位宽度为所有层次的所占位数之和;
当所述名字外形树中节点A的位宽度大于所述TCAM的位宽度时,将所述节点A收缩至其父节点;
其中,所述节点A为所述名字外形树中任一节点。
在一种可行的实施例中,所述处理单元还具体用于:
当所述名字外形树的节点数量大于TCAM的表项数时,根据负荷最小深度最大优先原则确定所述名字外形树中待缩减节点;
将所述待缩减节点缩减至其前驱节点,以使所述名字外形树的节点数量小于或者等于所述TCAM的表项数。
在一种可行的实施例中,所述路由器还包括:
所述获取单元,还用于当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
插入单元,用于当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
在一种可行的实施例中,所述路由器还包括:
创建单元,用于当根据所述待插入名字前缀的外形字串在所述TCAM表中搜索到与所述待插入名字前缀的外形字串匹配的外形字串时,在所述TCAM表中创建一个新的表项,用于存储所述待插入名字前缀的外形字串;
所述创建单元,还用于创建一个与所述新的表项对应的新的哈希表,用于存储所述待插入名字前缀。
在一种可行的实施例中,所述路由器还包括:
所述获取单元,还用于接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
所述获取单元,还用于根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
删除单元,用于当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
在一种可行的实施例中,所述路由器还包括:
回溯单元,用于当在所述第三目标外形字串对应的哈希表中未搜索到第二目标名字前缀时,回溯到所述第三目标外形字串的前驱字串对应的哈希表中继续搜索;
所述删除单元,还用于当在所述前驱字串对应的哈希表搜索到第三目标名字前缀时,删除所述第三目标名字前缀,所述第三目标名字前缀为所述前驱字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
第三方面,本发明实施例提供了一种路由器,包括:
存储有可执行程序代码的存储器;
与所述耦合的处理器;
所述处理器调用所述存储器中存储的所述可执行程序代码,执行如第一方面所述的全部或者部分方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如第一发面所述的全部或者部分方法。
可以看出,在本发明实施例的方案中,路由器接收到终端主机的数据包后,获取该数据包的名字前缀和该名字前缀的外形字串;根据该外形字串,在TCAM表中按位搜索以得到第一目标外形字串,该第一目标外形字串为在TCAM表中与名字前缀的外形字串匹配的外形字串中最长的外形字串;根据所述数据包的名字前缀在第一目标外形字串对应的哈希表中进行搜索,以获取目标名字前缀,该目标名字前缀为所述SRAM中与所述数据包的名字前缀匹配的名字前缀中最长的名字前缀;将数据包从目标名字前缀对应的下一跳端口转发出去。与现有技术相比,分两阶段(分别对应TCAM和SRAM)查找名字前缀,可有效减少访问哈希表的次数,有利于提高名字查找和增量更新的吞吐量;并且在TCAM中存储名字前缀的外形字串而非名字前缀自身,可减小TCAM的存储开销。
本发明的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种名字查找方法的应用场景示意图;
图2为本发明实施例提供的一种名字查找方法的流程示意图;
图3为本发明实施例提供的一种名字前缀规则集示意图;
图4为图3所示的名字前缀规则集对应的名字外形树;
图5为本发明实施例提供的一种名字外形树的节点收缩过程示意图;
图6为本发明实施例提供的一种名字外形树的节点缩减过程示意图;
图7为本发明实施例提供的一种SRAM哈希表的数据结构示意图;
图8为本发明实施例提供的一种名字前缀查找过程示意图;
图9为本发明实施例提供的另一种名字前缀查找过程示意图;
图10为本发明实施例提供的另一种名字查找方法的流程示意图;
图11为本发明实施例提供的一种路由器的结构示意图;
图12为本发明实施例提供的一种路由器的局部结构示意图;
图13为本发明实施例提供的另一种路由器的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
以下分别进行详细说明。
本发明的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
以下,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。
下面结合附图对本申请的实施例进行描述。
请参见图1,图1为本发明实施例提供的一种基于TCAM的NDN名字查找方法的应用共场景示意图。如图1所示,该应用场景示意图包括终端主机101、路由器102和内容服务器103。
其中,终端主机101,又称之为用户设备(User Equipment,UE),是一种向用户提供数据连通性的设备,常见的终端例如包括:智能手机、台式电脑、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(mobile internet device,MID)、可穿戴设备,例如智能手表、智能手环、计步器等。
上述路由器102为NDN路由器或者IP路由器。
上述内容服务器103可为提供上述终端主机101所请求的服务的服务器。
上述路由器102接收到用户通过终端主机101输入的兴趣包后,该路由器102获取该数据包的名字前缀的外形字串,并在三态内容寻址存储器(Ternary ContentAddressable Memory,TCAM)中的名字前缀表中查找该数据包的名字前缀的外形字串。当在名字前缀表中查找到目标外形字串时,该目标外形字串为与该数据包的名字前缀的外形字串匹配的且最长的名字前缀的外形字串,上述路由器102在静态随机存储器(StaticRandom Access Memory,SRAM)中存储的与上述目标外形字串对应的哈希表中查找与上述兴趣包的名字前缀匹配的且最长的名字前缀。当查找到该名字前缀时,将该数据包转发至与该名字前缀对应的端口。
请参见图2,图2为本发明实施例提供的一种名字查找方法的流程示意图。如图2所示,该方法包括:
S201、路由器接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串。
其中,上述外形字串为上述名字前缀每层的字符长度构成的字符串。
其中,所述获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串,包括:
对所述数据包的名字前缀进行裁剪,以得到裁剪后的名字前缀;
根据所述裁剪后的名字前缀获取所述数据包的名字前缀的外形字串。
具体地,上述路由器获取上述数据包的名字前缀后,将该数据包的名字前缀进行裁剪,得到裁剪后的名字前缀。然后路由器根据该裁剪后的名字前缀获取上述数据包的名字前缀的外形字串。
举例说明,假设上述数据包的名字前缀为“aabbcccd***”,裁剪后的名字前缀为“aabbcccd”。上述路由器对该裁剪后的名字前缀分层得到“aa/bb/ccc/d”,获取该名字前缀的外形字串“2231”。
其中,所述接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串之前,所述方法还包括:
根据名字前缀规则集构建名字外形树;
对所述名字外形树进行深度收缩操作和节点数量缩减操作。
其中,上述名字前缀规则集包括名字前缀(Name Prefix)和对应的下一跳(NextHop)两部分信息。
具体地,上述路由器获取上述名字前缀规则集中的每条名字前缀的外形字串,根据该名字前缀规则集中的每条名字前缀的外形字串构建上述名字规则集的名字外形树。名字前缀的外形字串由该名字前缀每层的字符串长度构成。比如:名字前缀为“aa/bb/ccc/d/”,则该名字前缀的外形字串为“2231”共占宽度位2+2+3+1=4bits,该名字前缀分为4层,“/”可以看成每层的分隔符。
举例说明,参见图3,图3为一种名字前缀规则集示意图。如图3所示,该名字前缀规则集包括14条名字前缀信息:R0-R13,该14条名字前缀信息中的名字前缀分别为“/*”,“/a/*”,“/abc/*”,“/a/bc/*”,“/ab/a/*”,“/a/ab/abc/*”,“/ab/abc/a/*”,“/ab/abc/ab/*”,“/abc/ab/ab/*”,“/a/ab/ab/a/*”,“/a/ab/ab/ab/*”,“/ab/abc/a/abcd/*”,“/abc/ab/ab/abc/*”和“/abc/abc/ab/ab/*”。该14条名字前缀的字串外形分别为“0”,“1”,“3”,“12”,“21”,“123”,“231”,“232”,“322”,“1221”,“1222”,“2314”“,3223”和“3322”。
上述路由器根据上述14条名字前缀的字串外形构建名字外形树。参见图4,图4为图3所示的名字前缀规则集对应的名字外形树。如图4所示,该名字外形树的根节点为R0,该根节点R0有三个子节点:R1、R2和S1。R1、R2和S1的名字前缀对应的外形字串分别为“1”、“3”和“2”;节点R1有一个子节点:R3。R3的名字前缀对应的外形字串为“12”;节点S1两个子节点:R4和S2。R4和S2的名字前缀对应的外形字串分别为“21”和“23”;节点R2有两个子节点:S3和S4。S3和S4的名字前缀对应的外形字串分别为“32”和“33”;节点R3有两个子节点:S5和R5。S5和R5的名字前缀对应的外形字串分别为“122”和“123”;节点S2有两个子节点:R6和R7,R6和R7的名字前缀对应的外形字串分别为“231”和“232”;节点S3有一个子节点:R8。R8的名字前缀对应的外形字串为“322”;节点S4有一个子节点:S6。S6的名字前缀对应的外形字串为“332”;节点S5有两个子节点:R9和R10,R9和R10的名字前缀对应的外形字串分别为“1221”和“1222”;节点R6有一个子节点:R11。R11的名字前缀对应的外形字串为“2314”;节点R8有一个子节点:R12,,R12的名字前缀对应的外形字串为“3223”;节点S6有一个子节点:R13,R13的名字前缀对应的外形字串为“3322”。
需要说明的是,在上述名字外形树中,节点S1-S6的名字前缀对应的外形字串在上述名字前缀规则集对应的外形字串不存在,故在上述名字外形树中节点S1-S6用白色圆圈标识,与上述节点R0-R13进行区分。
具体地,所述对所述名字外形树进行深度收缩操作和节点数量缩减操作,包括:
从所述名字外形树的底层节点开始,将所述名字外形树中每个节点的位宽度与TCAM的位宽度进行比较,所述节点的位宽度为该节点对应的外形字串在所述TCAM表中存储的位宽度,所述节点的位宽度通过如下方式得到:
获取所述名字外形树的所有节点对应的外形字串中的每个层次的字符长度,并得到所述所有节点对应的外形字串在每个层次的字符长度的最大值;
每个节点对应的外形字串在每个层次的所占位数为该层次的字符长度的最大值,所述节点的位宽度为所有层次的所占位数之和;
当所述名字外形树中节点A的位宽度大于所述TCAM的位宽度时,将所述节点A收缩至其父节点;
其中,所述节点A为所述名字外形树中任一节点。
具体地,所述对所述名字外形树进行深度收缩操作和节点数量缩减操作,包括:
当所述名字外形树的节点数量大于TCAM的表项数时,根据负荷最小深度最大优先原则确定所述名字外形树中待缩减节点;
将所述待缩减节点缩减至其前驱节点,以使所述名字外形树的节点数量小于或者等于所述TCAM的表项数。
其中,由于上述路由器的TCAM的存储空间有限,难以存储上述名字前缀规则集所有的名字前缀对应的外形字串,故需要根据上述名字外形树的外形字串的特点收缩上述名字外形树和缩减上述名字外形树中节点的数量。
在对上述名字外形树的节点进行深度收缩操作之前,获取上述名字外形树每个节点的位宽度,该节点的位度宽可通过下面方式计算得到:
首先求出名字外形树的所有节点对应的外形字串中的每个层次的字符长度,并得到所有节点对应的外形字串在每个层次的字符长度的最大值,这样每个节点的外形字串在每个层次的所占位数由每个层次的字符长度的最大值确定,所有层次的所占位数之和为该节点对应的外形字串存储在上述TCAM中所需要的位宽度。
具体地,从上述名字外形树的最底层开始,上述路由器将上述名字外形树中每个节点的位宽度与上述TCAM的位宽度进行比较。当节点的位宽度大于上述TCAM的位宽度时,上述路由器将该节点收缩至其父节点。当上述节点的位宽度小于或者等于上述TCAM的位宽度时,上述路由器比较下一个节点的位宽度与该TCAM的位宽度的关系,直至将上述名字外形树中的每个节点与上述TCAM的位宽度均进行比较完毕,得到第一名字外形树,该第一名字外形树为收缩后的名字外形树。
进一步地,由于上述TCAM表项数(即名字外形树中的节点数)的限制,当上述第一名字外形树中节点的数量无法满足上述TCAM表项数的限制条件时,上述路由器根据负荷最小深度最大优先的原则缩减上述第一名字外形树的节点,直至该第一名字外形树中节点的数量满足上述TCAM表项的限制条件。
需要指出的是,上述TCAM表项存储在上述路由器的TCAM中。
具体地,上述路由器根据负荷最小深度最大优先原则在上述第一名字外形树确定缩减到前驱节点的待缩减节点。上述路由器当将该待缩减节点中的一个节点A缩减到其前驱节点时,上述路由器确定上述名字外形树的节点数量是否大于上述TCAM的表项数;当确定该名字外形树的节点数量大于上述TCAM的表项数时,上述路由器将上述待缩减节点的不同于上述节点A的节点缩减到其前驱节点;当确定上述名字外形树的节点数量小于或者等于上述TCAM的表项数时,上述路由器停止缩减上述名字外形树的节点。上述路由器按照上述方法缩减上述名字外形树的节点,直至上述名字外形树的节点数量小于或者等于上述TCAM的表项数,得到第二名字外形树。
举例说明,参见图5,图5为本发明实施例提供的一种名字外形树的节点收缩过程示意图。如图5中的a图所示,该路由器的TCAM的宽度为6bits,节点数为13,而节点R9、R10、R11、R12和R13的位宽度均超过6bits,因此上述路由器将上述节点R9、R10、R11、R12和R13向各自的父节点收缩。如图6中的b图所示,节点R9和R10收缩至其父节点S5处;节点R11收缩至其父节点R6;节点R12收缩至其父节点R8;节点R13收缩至其父节点S6。节点(即R9、R10、R11、R12和R13)收缩到其父节点(即S5、R6、R8和S6)后得到的节点用灰色点表示,收缩后的名字外形树的节点(即包括用黑色标识和灰色标识的节点)数为11。图5中的b图所示的名字外形树为上述第一名字外形树。
参见图6,图6为本发明实施例提供的一种名字外形树的节点缩减过程示意图。如图6的a图所示,上述路由器根据上述负荷最小深度最大优先的原则确定上述节点R5、R4、R7和R13为待缩减节点。上述路由器将上述节点R5缩减至其前驱节点R3处,将上述节点R4和R7缩减至其前驱节点S1处,将上述节点R13缩减至其前驱节点R2处。上述名字外形树的节点数量为8,由此可知该名字外形树的节点数量等于上述TCAM的表项数,上述路由器停止对上述名字外形树节点的缩减。图6中的b图所示的名字外形树为上述第二名字外形树。
上述TCAM表项的每一行(即上述名字外形树的每个节点)对应一个SRAM哈希表,该SRAM哈希表存储在上述路由器的SRAM中。
下面介绍上述SRAM哈希表的数据结构。
参见图7,图7为本发明实施例提供的一种SRAM哈希表的数据结构示意图。如图7所示,该哈希表包括至少一条名字前缀信息,该至少一条名字前缀信息的每条名字前缀信息的数据格式为指纹、第一指针和第二指针。
需要说明的是,TCAM表项中的每一行(即每个外形字串)对应一个哈希表。
其中,上述指纹用于指示裁剪后的名字前缀,即相同的裁剪后的名字前缀具有相同的指纹。上述第一指针用于指向按照上述哈希表对应的外形字串裁剪得到的名字前缀,上述第二指针用于指向未裁剪的名字前缀和其对应的下一跳端口。
S202、路由器根据所述数据包的名字前缀的外形字串,在TCAM表中按位搜索以得到第一目标外形字串。
其中,上述第一目标外形字串为在上述TCAM表中与上述数据包的名字前缀的外形字串匹配的外形字串中最长的外形字串
具体地,上述路由器将上述数据包的名字前缀的外形字串与上述TCAM表中的外形字串逐位比较,以获取上述目标外形字串。
S203、路由器根据所述数据包的名字前缀在SRAM中与所述第一目标外形字串对应的哈希表中进行搜索,以获取第一目标名字前缀。
其中,上述第一目标名字前缀为上述SRAM中与上述数据包的名字前缀匹配的名字前缀中最长的名字前缀,上述哈希表中存储有具有相同外形字串的名字前缀。
具体地,上述第一目标名字前缀为与数据包的名字前缀匹配的且最长的匹配的名字前缀。上述路由器获取与上述目标外形字串对应的哈希表,并在该哈希表中搜索与上述数据包的名字前缀匹配的第一指针指向的名字前缀,然后在与该第一指针对应的第二指针所指向的名字前缀列表中按层次由大到小依次匹配,直到获取上述第一目标名字前缀。当在上述第二指针所指向的名字前缀列表中未匹配到上述第一目标名字前缀,上述路由器回溯到上述目标外形字串的前驱字串所对应的哈希表中继续搜索,直到获取上述第一目标名字前缀及其对应的下一跳端口。
S204、路由器将数据包从所述第一目标名字前缀对应的下一跳端口转发出去。
举例说明,假设上述数据包的名字前缀为“/a/ab/abc/abcd/”,由于在上述TCAM中搜索到的外形字串“1/2/”包括两个层次,故对上述数据包的名字前缀进行层数为2的裁剪,得到裁剪后的名字前缀为“/a/ab”,其外形字串为“12”。上述路由器将该外形字串“1234”与上述TCAM表中的外形字串进行比较,确定与外形字串“1234”匹配的外形字串有“1”和“12”。由于外形字串“12”最长,故该外形字串“12”为上述目标外形字串。
参见图8,图8为本发明实施例提供的一种名字前缀查找过程示意图。如图8中的a图所示,TCAM中存储有名字前缀集对应的外形字串表。在该外形字串表中,以二进制表示名字前缀中每层的字符串的长度。在上述外形字串表中,每一行对应第一名字外形树中的一个一个节点,每个节点对应一个哈希表。上述数据包的名字前缀的目标外形字串为“12”,对应的节点为R3和R5,该节点R3和R5对应的名字前缀为“/a/ab/*”和“/a/ab/abc/*”。上述路由器在节点R3和R5对应的哈希表中搜索名字前缀“/a/ab”。该节点R3和R5对应的哈希表的指纹为“123654”,该哈希表的第一指针对应的裁剪的名字前缀为“/a/ab”,该哈希表的第二指针指示的名字前缀列表中有“/a/ab/*”和“/a/ab/abc/*”,其分别对应的下一跳端口为“Port1”和“Port4”。由于上述名字前缀“/a/ab/abc/*”最长,故上述路由器将该名字前缀“/a/ab/abc/*”作为目标名字前缀,上述路由器将上述数据包从目标名字前缀对应的下一跳端口(即“Port4”)转发出去。
参见图9,图9为本发明实施例提供的另一种名字前缀查找过程示意图。如图9中的a图所示,假设上述数据包的名字前缀为“/a/bc/abc/abcd/”,按照图8所示的实施例的相关描述可知,该数据包对应的裁剪后名字前缀的目标外形字串为“12”,对应的节点为R3和R5。而R3和R5对应的名字前缀列表中的名字前缀分别为“/a/ab/*”和“/a/ab/abc/*”,与上述数据包的名字前缀“/a/bc/abc/abcd/”不匹配,故上述路由器在节点为R3和R5对应的哈希表中无法匹配到最长的名字前缀,因此上述路由器需要回溯到上述目标外形字串“12”的前驱字串对应的哈希表中继续搜索。如图9中的b图所示,,上述目标外形字串的前驱字串为“1”,对应的节点为R1,其对应的哈希表中的名字前缀为“/a/*”。上述路由器继续在上述节点R1对应的哈希表中的名字前缀列表继续搜索,直至找到目标名字前缀。
在一种可行的实施例中,所述方法还包括:
当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
进一步地,所述方法还包括:
当根据所述待插入名字前缀的外形字串在所述TCAM表中搜索到与所述待插入名字前缀的外形字串匹配的外形字串时,在所述TCAM表中创建一个新的表项,用于存储所述待插入名字前缀的外形字串;
创建一个与所述新的表项对应的新的哈希表,用于存储所述待插入名字前缀。
具体地,上述路由器接收到插入指令和待插入名字前缀后,该路由器获取该待插入名字前缀的外形字串,然后根据该外形字串在上述路由器的TCAM表中搜索,以得到上述第二目标外形字串,该第二目标外形字串为TCAM表中与上述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。上述路由器在其SRAM中与上述第二目标外形字串对应的哈希表中插入上述待插入名字前缀。当在上述路由器的TCAM中未搜索到与上述待插入名字前缀的外形字串相匹配的外形字串时,上述路由器在其TCAM的外形字串表中创建一个新的表项,并在该表项中添加上述待插入名字前缀的外形字串。上述路由器在其SRAM中创建一个新的哈希表,并在该新的哈希表中插入上述待插入名字前缀和下一跳端口的第二指针、对上述插入名字前缀进行裁剪后的名字前缀的第一指针和指纹。
在一种可行的实施例中,所述方法还包括:
接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
进一步地,所述方法还包括:
当在所述第三目标外形字串对应的哈希表中未搜索到第二目标名字前缀时,回溯到所述第三目标外形字串的前驱字串对应的哈希表中继续搜索;
当在所述前驱字串对应的哈希表搜索到第三目标名字前缀时,删除所述第三目标名字前缀,所述第三目标名字前缀为所述前驱字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
具体地,上述路由器接收到删除指令和待删除名字前缀后,该路由器获取该待删除名字前缀的外形字串,然后根据该外形字串在上述路由器的TCAM中搜索,以得到第三目标外形字串,该第三目标外形字串为TCAM中的外形字串表中与上述待删除名字前缀的外形字串相匹配的外形字串中最长的外形字串。上述路由器在该目标外形字串对应的哈希表中搜索以得到第二目标名字前缀。该第二目标名字前缀为与上述待删除名字前缀相匹配的名字前缀中最长的名字前缀。上述路由器获取上述第二目标名字前缀后,将该目标名字前缀从该哈希表中删除。当上述路由器搜索上述哈希表未搜索到与上述待删除名字前缀相匹配的名字前缀时,该路由器回溯到上述目标外形字串的前驱字串所对应的哈希表中继续搜索,直至搜索到与上述待删除名字前缀相匹配的且最长的名字前缀,并将该名字前缀从上述目标外形字串的前驱字串所对应的哈希表中删除。
可以看出,在本发明实施例的方案中,路由器接收到终端主机的数据包后,获取该数据包的名字前缀和该名字前缀的外形字串;根据该外形字串,在TCAM表中按位搜索以得到第一目标外形字串,该第一目标外形字串为在TCAM表中与名字前缀的外形字串匹配的外形字串中最长的外形字串;根据所述数据包的名字前缀在第一目标外形字串对应的哈希表中进行搜索,以获取目标名字前缀,该目标名字前缀为所述SRAM中与所述数据包的名字前缀匹配的名字前缀中最长的名字前缀;将数据包从目标名字前缀对应的下一跳端口转发出去。与现有技术相比,分两阶段(分别对应TCAM和SRAM)查找名字前缀,可有效减少访问哈希表的次数,有利于提高名字查找和增量更新的吞吐量;并且在TCAM中存储名字前缀的外形字串而非名字前缀自身,可减小TCAM的存储开销。
参见图10,图3为本发明实施例提供的另一种名字查找方法的流程示意图,如图3所示,该方法包括:
S301、路由器根据名字前缀规则集构建名字外形树。
其中,上述名字前缀规则集包括名字前缀(Name Prefix)和对应的下一跳(NextHop)两部分信息。
具体地,上述路由器获取上述名字前缀规则集中的每条名字前缀的外形字串,根据该名字前缀规则集中的每条名字前缀的外形字串构建上述名字规则集的名字外形树。名字前缀的外形字串由该名字前缀每层的字符串长度构成。比如:名字前缀为“aa/bb/ccc/d/”,则该名字前缀的外形字串为“2231”共占宽度位2+2+3+1=4bits,该名字前缀分为4层,“/”可以看成每层的分隔符。
举例说明,参见图3,图3为一种名字前缀规则集示意图。如图3所示,该名字前缀规则集包括14条名字前缀信息:R0-R13,该14条名字前缀信息中的名字前缀分别为“/*”,“/a/*”,“/abc/*”,“/a/bc/*”,“/ab/a/*”,“/a/ab/abc/*”,“/ab/abc/a/*”,“/ab/abc/ab/*”,“/abc/ab/ab/*”,“/a/ab/ab/a/*”,“/a/ab/ab/ab/*”,“/ab/abc/a/abcd/*”,“/abc/ab/ab/abc/*”和“/abc/abc/ab/ab/*”。该14条名字前缀的字串外形分别为“0”,“1”,“3”,“12”,“21”,“123”,“231”,“232”,“322”,“1221”,“1222”,“2314”“,3223”和“3322”。
上述路由器根据上述14条名字前缀的字串外形构建名字外形树。参见图4,图4为图3所示的名字前缀规则集对应的名字外形树。如图4所示,该名字外形树的根节点为R0,该根节点R0有三个子节点:R1、R2和S1。R1、R2和S1的名字前缀对应的外形字串分别为“1”、“3”和“2”;节点R1有一个子节点:R3。R3的名字前缀对应的外形字串为“12”;节点S1两个子节点:R4和S2。R4和S2的名字前缀对应的外形字串分别为“21”和“23”;节点R2有两个子节点:S3和S4。S3和S4的名字前缀对应的外形字串分别为“32”和“33”;节点R3有两个子节点:S5和R5。S5和R5的名字前缀对应的外形字串分别为“122”和“123”;节点S2有两个子节点:R6和R7,R6和R7的名字前缀对应的外形字串分别为“231”和“232”;节点S3有一个子节点:R8。R8的名字前缀对应的外形字串为“322”;节点S4有一个子节点:S6。S6的名字前缀对应的外形字串为“332”;节点S5有两个子节点:R9和R10,R9和R10的名字前缀对应的外形字串分别为“1221”和“1222”;节点R6有一个子节点:R11。R11的名字前缀对应的外形字串为“2314”;节点R8有一个子节点:R12,,R12的名字前缀对应的外形字串为“3223”;节点S6有一个子节点:R13,R13的名字前缀对应的外形字串为“3322”。
需要说明的是,在上述名字外形树中,节点S1-S6的名字前缀对应的外形字串在上述名字前缀规则集对应的外形字串不存在,故在上述名字外形树中节点S1-S6用白色圆圈标识,与上述节点R0-R13进行区分。
S302、路由器对名字外形树进行深度收缩操作和节点数量缩减操作。
其中,由于上述路由器的TCAM的存储空间有限,难以存储上述名字前缀规则集所有的名字前缀对应的外形字串,故需要根据上述名字外形树的外形字串的特点收缩上述名字外形树和缩减上述名字外形树中节点的数量。
在对上述名字外形树的节点进行深度收缩操作之前,获取上述名字外形树每个节点的位宽度,该节点的位度宽可通过下面方式计算得到:
首先求出名字外形树的所有节点对应的外形字串中的每个层次的字符长度,并得到所有节点对应的外形字串在每个层次的字符长度的最大值,这样每个节点的外形字串在每个层次的所占位数由每个层次的字符长度的最大值确定,所有层次的所占位数之和为该节点对应的外形字串存储在上述TCAM中所需要的位宽度。
具体地,从上述名字外形树的最底层开始,上述路由器将上述名字外形树中每个节点的位宽度与上述TCAM的位宽度进行比较。当节点的位宽度大于上述TCAM的位宽度时,上述路由器将该节点收缩至其父节点。当上述节点的位宽度小于或者等于上述TCAM的位宽度时,上述路由器比较下一个节点的位宽度与该TCAM的位宽度的关系,直至将上述名字外形树中的每个节点与上述TCAM的位宽度均进行比较完毕,得到第一名字外形树,该第一名字外形树为收缩后的名字外形树。
进一步地,由于上述TCAM表项数(即名字外形树中的节点数)的限制,当上述第一名字外形树中节点的数量无法满足上述TCAM表项数的限制条件时,上述路由器根据负荷最小深度最大优先的原则缩减上述第一名字外形树的节点,直至该第一名字外形树中节点的数量满足上述TCAM表项的限制条件。
需要指出的是,上述TCAM表项存储在上述路由器的TCAM中。
具体地,上述路由器根据负荷最小深度最大优先原则在上述第一名字外形树确定缩减到前驱节点的待缩减节点。上述路由器当将该待缩减节点中的一个节点A缩减到其前驱节点时,上述路由器确定上述名字外形树的节点数量是否大于上述TCAM的表项数;当确定该名字外形树的节点数量大于上述TCAM的表项数时,上述路由器将上述待缩减节点的不同于上述节点A的节点缩减到其前驱节点;当确定上述名字外形树的节点数量小于或者等于上述TCAM的表项数时,上述路由器停止缩减上述名字外形树的节点。上述路由器按照上述方法缩减上述名字外形树的节点,直至上述名字外形树的节点数量小于或者等于上述TCAM的表项数,得到第二名字外形树。
举例说明,参见图5,图5为本发明实施例提供的一种名字外形树的收缩过程示意图。如图5中的a图所示,该路由器的TCAM的宽度为6bits,节点数为13,而节点R9、R10、R11、R12和R13的位宽度均超过6bits,因此上述路由器将上述节点R9、R10、R11、R12和R13向各自的父节点收缩。如图5中的b图所示,节点R9和R10收缩至其父节点S5处;节点R11收缩至其父节点R6;节点R12收缩至其父节点R8;节点R13收缩至其父节点S6。节点(即R9、R10、R11、R12和R13)收缩到其父节点(即S5、R6、R8和S6)后得到的节点用灰色点表示,收缩后的名字外形树的节点(即包括用黑色标识和灰色标识的节点)数为11。图5中的b图所示的名字外形树为上述第一名字外形树。
参见图6,图6为本发明实施例提供的一种名字外形树的缩减过程示意图。如图6的a图所示,上述路由器根据上述负荷最小深度最大优先的原则确定上述节点R5、R4、R7和R13为待缩减节点。上述路由器将上述节点R5缩减至其前驱节点R3处,将上述节点R4和R7缩减至其前驱节点S1处,将上述节点R13缩减至其前驱节点R2处。上述名字外形树的节点数量为8,由此可知该名字外形树的节点数量等于上述TCAM的表项数,上述路由器停止对上述名字外形树节点的缩减。图6中的b图所示的名字外形树为上述第二名字外形树。
上述TCAM表项的每一行(即上述名字外形树的每个节点)对应一个SRAM哈希表,该SRAM哈希表存储在上述路由器的SRAM中。
下面介绍上述SRAM哈希表的数据结构。
参见图7,图7为本发明实施例提供的一种SRAM哈希表的数据结构示意图。如图7所示,该哈希表包括至少一条名字前缀信息,该至少一条名字前缀信息的每条名字前缀信息的数据格式为指纹、第一指针和第二指针。
需要说明的是,TCAM表项中的每一行(即每个外形字串)对应一个哈希表。
其中,上述指纹用于指示裁剪后的名字前缀,即相同的裁剪后的名字前缀具有相同的指纹,。上述第一指针用于指向按照上述哈希表对应的外形字串裁剪得到的名字前缀,上述第二指针用于指向未裁剪的名字前缀和其对应的下一跳端口。
S303、路由器接收到终端主机的数据包后,获取该数据包的名字前缀和外形字串。
其中,上述路由器对上述名字前缀进行裁剪,以得到裁剪后的名字前缀,并根据裁剪后的名字前缀获取其对应的外形字串。
S304、路由器根据数据包的名字前缀的外形字串,在TCAM表中按位搜索目标外形字串。
其中,上述目标外形字串为与上述数据包的名字前缀的外形字串匹配的且最长的外形字串。
具体地,上述路由器将上述数据包的名字前缀的外形字串与上述TCAM表中的外形字串逐位比较,以获取上述目标外形字串。
S305、路由器在SRAM中与目标外形字串对应的哈希表中进行搜索,以获取目标名字前缀对应的下一跳端口号。
其中,上述目标名字前缀为与数据包的名字前缀匹配的且最长的匹配的名字前缀。上述路由器获取与上述目标外形字串对应的哈希表,并在该哈希表中搜索与上述数据包的名字前缀匹配的第一指针指向的名字前缀,然后在与该第一指针对应的第二指针所指向的名字前缀列表中按层次由大到小依次匹配,直到获取上述目标名字前缀。当在上述第二指针所指向的名字前缀列表中未匹配到上述目标名字前缀,上述路由器回溯到上述目标外形字串的前驱字串所对应的哈希表中继续搜索,直到获取上述目标名字前缀及其对应的下一跳端口。
S306、路由器将数据包从目标名字前缀对应的下一跳端口转发出去。
举例说明,假设上述数据包的名字前缀为“/a/ab/abc/abcd/”,由于在上述TCAM中搜索到的外形字串“1/2/”包括两个层次,故对上述数据包的名字前缀进行层数为2的裁剪,得到裁剪后的名字前缀为“/a/ab”,其外形字串为“12”。上述路由器将该外形字串“1234”与上述TCAM表中的外形字串进行比较,确定与外形字串“1234”匹配的外形字串有“1”和“12”。由于外形字串“12”最长,故该外形字串“12”为上述目标外形字串。
参见图8,图8为本发明实施例提供的一种名字前缀查询过程示意图。如图8中的a图所示,TCAM中存储有名字前缀集对应的外形字串表。在该外形字串表中,以二进制表示名字前缀中每层的字符串的长度。在上述外形字串表中,每一行对应第一名字外形树中的一个一个节点,每个节点对应一个哈希表。上述数据包的名字前缀的目标外形字串为“12”,对应的节点为R3和R5,该节点R3和R5对应的名字前缀为“/a/ab/*”和“/a/ab/abc/*”。上述路由器在节点R3和R5对应的哈希表中搜索名字前缀“/a/ab”。该节点R3和R5对应的哈希表的指纹为“123654”,该哈希表的第一指针对应的裁剪的名字前缀为“/a/ab”,该哈希表的第二指针指示的名字前缀列表中有“/a/ab/*”和“/a/ab/abc/*”,其分别对应的下一跳端口为“Port1”和“Port4”。由于上述名字前缀“/a/ab/abc/*”最长,故上述路由器将该名字前缀“/a/ab/abc/*”作为目标名字前缀,上述路由器将上述数据包从目标名字前缀对应的下一跳端口(即“Port4”)转发出去。
参见图9,图9为本发明实施例提供的另一种名字前缀查询过程示意图。如图9中的a图所示,假设上述数据包的名字前缀为“/a/bc/abc/abcd/”,按照图8所示的实施例的相关描述可知,该数据包对应的裁剪后名字前缀的目标外形字串为“12”,对应的节点为R3和R5。而R3和R5对应的名字前缀列表中的名字前缀分别为“/a/ab/*”和“/a/ab/abc/*”,与上述数据包的名字前缀“/a/bc/abc/abcd/”不匹配,故上述路由器在节点为R3和R5对应的哈希表中无法匹配到最长的名字前缀,因此上述路由器需要回溯到上述目标外形字串“12”的前驱字串对应的哈希表中继续搜索。如图9中的b图所示,,上述目标外形字串的前驱字串为“1”,对应的节点为R1,其对应的哈希表中的名字前缀为“/a/*”。上述路由器继续在上述节点R1对应的哈希表中的名字前缀列表继续搜索,直至找到目标名字前缀。
在一种可行的实施例中,上述路由器在其TCAM和SRAM中更新名字前缀及其对应的哈希表,名字前缀的增量更新包括插入名字前缀和删除名字前缀。
下面具体介绍插入名字前缀过程。
上述路由器接收到插入指令和待插入名字前缀后,该路由器获取该待插入名字前缀的外形字串,然后根据该外形字串在上述路由器的TCAM中搜索,以得到目标外形字串,该目标外形字串为TCAM中的外形字串表中与上述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。上述路由器在其SRAM中与上述目标外形字串对应的哈希表中插入上述待插入名字前缀。当在上述路由器的TCAM中未搜索到与上述待插入名字前缀的外形字串相匹配的外形字串时,上述路由器在其TCAM的外形字串表中创建一个新的表项,并在该表项中添加上述待插入名字前缀的外形字串。上述路由器在其SRAM中创建一个新的哈希表,并在该新的哈希表中插入上述待插入名字前缀和下一跳端口的第二指针、对上述插入名字前缀进行裁剪后的名字前缀的第一指针和指纹。
下面具体介绍删除名字前缀过程。
上述路由器接收到删除指令和待删除名字前缀后,该路由器获取该待删除名字前缀的外形字串,然后根据该外形字串在上述路由器的TCAM中搜索,以得到目标外形字串,该目标外形字串为TCAM中的外形字串表中与上述待删除名字前缀的外形字串相匹配的外形字串中最长的外形字串。上述路由器在该目标外形字串对应的哈希表中搜索以得到目标名字前缀。该目标名字前缀为与上述待删除名字前缀相匹配的名字前缀中最长的名字前缀。上述路由器获取上述目标名字前缀后,将该目标名字前缀从该哈希表中删除。当上述路由器搜索上述哈希表未搜索到与上述待删除名字前缀相匹配的名字前缀时,该路由器回溯到上述目标外形字串的前驱字串所对应的哈希表中继续搜索,直至搜索到与上述待删除名字前缀相匹配的且最长的名字前缀,并将该名字前缀从上述目标外形字串的前驱字串所对应的哈希表中删除。
参见图11,图11为本发明实施例还提供了一种路由器的结构示意图。如图11所示,该路由器1100,包括:
获取单元1101,用于接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串,所述外形字串为所述名字前缀每层的字符长度构成的字符串。
其中,所述获取单元1101包括:
裁剪子单元11011,用于对所述数据包的名字前缀进行裁剪,以得到裁剪后的名字前缀;
获取子单元11012,用于根据所述裁剪后的名字前缀获取所述数据包的名字前缀的外形字串。
可选地,所述接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串之前,所述路由器1100还包括:
构建单元1105,用于根据名字前缀规则集构建名字外形树;
处理单元1106,用于对所述名字外形树进行深度收缩操作和节点数量缩减操作。
进一步地,所述处理单元1106具体用于:
从所述名字外形树的底层节点开始,将所述名字外形树中每个节点的位宽度与TCAM的位宽度进行比较,所述节点的位宽度为该节点对应的外形字串在所述TCAM表中存储的位宽度,所述节点的位宽度通过如下方式得到:
获取所述名字外形树的所有节点对应的外形字串中的每个层次的字符长度,并得到所述所有节点对应的外形字串在每个层次的字符长度的最大值;
每个节点对应的外形字串在每个层次的所占位数为该层次的字符长度的最大值,所述节点的位宽度为所有层次的所占位数之和;
当所述名字外形树中节点A的位宽度大于所述TCAM的位宽度时,将所述节点A收缩至其父节点;
其中,所述节点A为所述名字外形树中任一节点。
进一步地,所述处理单元1106还具体用于:
当所述名字外形树的节点数量大于TCAM的表项数时,根据负荷最小深度最大优先原则确定所述名字外形树中待缩减节点;
将所述待缩减节点缩减至其前驱节点,以使所述名字外形树的节点数量小于或者等于所述TCAM的表项数。
第一搜索单元1102,用于根据所述数据包的名字前缀的外形字串,在三态内容寻址存储器TCAM表中按位搜索以得到第一目标外形字串,所述第一目标外形字串为在所述TCAM表中与所述数据包的名字前缀的外形字串匹配的外形字串中最长的外形字串;
第二搜索单元1103,用于根据所述数据包的名字前缀在静态随机接入存储器SRAM中与所述第一目标外形字串对应的哈希表中进行搜索,以获取第一目标名字前缀,所述第一目标名字前缀为所述SRAM中与所述数据包的名字前缀匹配的名字前缀中最长的名字前缀,所述哈希表中存储有具有相同外形字串的名字前缀;
转发单元1104,用于将数据包从所述第一目标名字前缀对应的下一跳端口转发出去。
可选地,所述路由器1100还包括:
所述获取单元1101,还用于当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
插入单元1107,用于当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
可选地,所述路由器1100还包括:
创建单元1108,用于当根据所述待插入名字前缀的外形字串在所述TCAM表中搜索到与所述待插入名字前缀的外形字串匹配的外形字串时,在所述TCAM表中创建一个新的表项,用于存储所述待插入名字前缀的外形字串;
所述创建单元1108,还用于创建一个与所述新的表项对应的新的哈希表,用于存储所述待插入名字前缀。
可选地,所述路由器1100还包括:
所述获取单元1101,还用于接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
所述获取单元1101,还用于根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
删除单元1109,用于当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
可选地,所述路由器1100还包括:
回溯单元1110,用于当在所述第三目标外形字串对应的哈希表中未搜索到第二目标名字前缀时,回溯到所述第三目标外形字串的前驱字串对应的哈希表中继续搜索;
所述删除单元1109,还用于当在所述前驱字串对应的哈希表搜索到第三目标名字前缀时,删除所述第三目标名字前缀,所述第三目标名字前缀为所述前驱字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
需要说明的是,上述各单元(获取单元1101、第一搜索单元1102、第二搜索单元1103、转发单元1104、构建单元1105、处理单元1106、插入单元1107、创建单元1108、删除单元1109和回溯单元1110)用于执行上述方法的相关步骤。
在本实施例中,路由器1100是以单元的形式来呈现。这里的“单元”可以指特定应用集成电路(application-specific integrated circuit,ASIC),执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。此外,以上获取单元1101、第一搜索单元1102、第二搜索单元1103、转发单元1104、构建单元1105、处理单元1106、插入单元1107、创建单元1108、删除单元1109和回溯单元1110可通过图13所示的路由器的处理器1301来实现。
如图13所示,路由器1300可以以图13中的结构来实现,该路由器1300包括至少一个处理器1301,至少一个存储器1302以及至少一个通信接口1303。所述处理器1301、所述存储器1302和所述通信接口1303通过所述通信总线连接并完成相互间的通信。
处理器1301可以是通用中央处理器(CPU),微处理器,特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制以上方案程序执行的集成电路。
通信接口1303,用于与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(Wireless Local Area Networks,WLAN)等。
存储器1302可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、只读光盘(CompactDisc Read-Only Memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。
其中,所述存储器1302用于存储执行以上方案的应用程序代码,并由处理器1301来控制执行。所述处理器1301用于执行所述存储器1302中存储的应用程序代码。
存储器1302存储的代码可执行以上提供的终端设备执行的上述名字查找,比如接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串,所述外形字串为所述名字前缀每层的字符长度构成的字符串;根据所述数据包的名字前缀的外形字串,在三态内容寻址存储器TCAM表中按位搜索以得到第一目标外形字串,所述第一目标外形字串为在所述TCAM表中与所述数据包的名字前缀的外形字串匹配的外形字串中最长的外形字串;根据所述数据包的名字前缀在静态随机接入存储器SRAM中与所述第一目标外形字串对应的哈希表中进行搜索,以获取第一目标名字前缀,所述第一目标名字前缀为所述SRAM中与所述数据包的名字前缀匹配的名字前缀中最长的名字前缀,所述哈希表中存储有具有相同外形字串的名字前缀;将数据包从所述第一目标名字前缀对应的下一跳端口转发出去。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的任何一种名字查找方法的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取器(英文:Random Access Memory,简称:RAM)、磁盘或光盘等。
以上对本发明实施例进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上上述,本说明书内容不应理解为对本发明的限制。
Claims (42)
1.一种名字查找方法,其特征在于,包括:
接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串,所述外形字串为所述名字前缀每层的字符长度构成的字符串;
根据所述数据包的名字前缀的外形字串,在三态内容寻址存储器TCAM表中按位搜索以得到第一目标外形字串,所述第一目标外形字串为在所述TCAM表中与所述数据包的名字前缀的外形字串匹配的外形字串中最长的外形字串;
根据所述数据包的名字前缀在静态随机接入存储器SRAM中与所述第一目标外形字串对应的哈希表中进行搜索,若在与所述第一目标外形字串对应的哈希表中未搜索到与所述数据包的名字前缀匹配的名字前缀,在所述第一目标外形字串的前驱字串对应的哈希表中进行搜索,以获取第一目标名字前缀,所述第一目标名字前缀为所述SRAM中与所述数据包的名字前缀匹配的名字前缀中最长的名字前缀,所述哈希表中存储有具有相同外形字串的名字前缀;
将数据包从所述第一目标名字前缀对应的下一跳端口转发出去。
2.根据权利要求1所述的方法,其特征在于,所述获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串,包括:
对所述数据包的名字前缀进行裁剪,以得到裁剪后的名字前缀;
根据所述裁剪后的名字前缀获取所述数据包的名字前缀的外形字串。
3.根据权利要求1或2所述的方法,其特征在于,所述接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串之前,所述方法还包括:
根据名字前缀规则集构建名字外形树;
对所述名字外形树进行深度收缩操作和节点数量缩减操作。
4.根据权利要求3所述的方法,其特征在于,所述对所述名字外形树进行深度收缩操作和节点数量缩减操作,包括:
从所述名字外形树的底层节点开始,将所述名字外形树中每个节点的位宽度与TCAM的位宽度进行比较,所述节点的位宽度为该节点对应的外形字串在所述TCAM表中存储的位宽度,所述节点的位宽度通过如下方式得到:
获取所述名字外形树的所有节点对应的外形字串中的每个层次的字符长度,并得到所述所有节点对应的外形字串在每个层次的字符长度的最大值;
每个节点对应的外形字串在每个层次的所占位数为该层次的字符长度的最大值,所述节点的位宽度为所有层次的所占位数之和;
当所述名字外形树中节点A的位宽度大于所述TCAM的位宽度时,将所述节点A收缩至其父节点;
其中,所述节点A为所述名字外形树中任一节点。
5.根据权利要求3所述的方法,其特征在于,所述对所述名字外形树进行深度收缩操作和节点数量缩减操作,包括:
当所述名字外形树的节点数量大于TCAM的表项数时,根据负荷最小深度最大优先原则确定所述名字外形树中待缩减节点;
将所述待缩减节点缩减至其前驱节点,以使所述名字外形树的节点数量小于或者等于所述TCAM的表项数。
6.根据权利要求4所述的方法,其特征在于,所述对所述名字外形树进行深度收缩操作和节点数量缩减操作,包括:
当所述名字外形树的节点数量大于TCAM的表项数时,根据负荷最小深度最大优先原则确定所述名字外形树中待缩减节点;
将所述待缩减节点缩减至其前驱节点,以使所述名字外形树的节点数量小于或者等于所述TCAM的表项数。
7.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
8.根据权利要求3所述的方法,其特征在于,所述方法还包括:
当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
9.根据权利要求4或5所述的方法,其特征在于,所述方法还包括:
当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
10.根据权利要求6所述的方法,其特征在于,所述方法还包括:
当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
11.根据权利要求7所述的方法,其特征在于,所述方法还包括:
当根据所述待插入名字前缀的外形字串在所述TCAM表中搜索到与所述待插入名字前缀的外形字串匹配的外形字串时,在所述TCAM表中创建一个新的表项,用于存储所述待插入名字前缀的外形字串;
创建一个与所述新的表项对应的新的哈希表,用于存储所述待插入名字前缀。
12.根据权利要求9所述的方法,其特征在于,所述方法还包括:
当根据所述待插入名字前缀的外形字串在所述TCAM表中搜索到与所述待插入名字前缀的外形字串匹配的外形字串时,在所述TCAM表中创建一个新的表项,用于存储所述待插入名字前缀的外形字串;
创建一个与所述新的表项对应的新的哈希表,用于存储所述待插入名字前缀。
13.根据权利要求8或10所述的方法,其特征在于,所述方法还包括:
当根据所述待插入名字前缀的外形字串在所述TCAM表中搜索到与所述待插入名字前缀的外形字串匹配的外形字串时,在所述TCAM表中创建一个新的表项,用于存储所述待插入名字前缀的外形字串;
创建一个与所述新的表项对应的新的哈希表,用于存储所述待插入名字前缀。
14.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
15.根据权利要求3所述的方法,其特征在于,所述方法还包括:
接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
16.根据权利要求4或5所述的方法,其特征在于,所述方法还包括:
接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
17.根据权利要求6所述的方法,其特征在于,所述方法还包括:
接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
18.根据权利要求14所述的方法,其特征在于,所述方法还包括:
当在所述第三目标外形字串对应的哈希表中未搜索到第二目标名字前缀时,回溯到所述第三目标外形字串的前驱字串对应的哈希表中继续搜索;
当在所述前驱字串对应的哈希表搜索到第三目标名字前缀时,删除所述第三目标名字前缀,所述第三目标名字前缀为所述前驱字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
19.根据权利要求16所述的方法,其特征在于,所述方法还包括:
当在所述第三目标外形字串对应的哈希表中未搜索到第二目标名字前缀时,回溯到所述第三目标外形字串的前驱字串对应的哈希表中继续搜索;
当在所述前驱字串对应的哈希表搜索到第三目标名字前缀时,删除所述第三目标名字前缀,所述第三目标名字前缀为所述前驱字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
20.根据权利要求15或17所述的方法,其特征在于,所述方法还包括:
当在所述第三目标外形字串对应的哈希表中未搜索到第二目标名字前缀时,回溯到所述第三目标外形字串的前驱字串对应的哈希表中继续搜索;
当在所述前驱字串对应的哈希表搜索到第三目标名字前缀时,删除所述第三目标名字前缀,所述第三目标名字前缀为所述前驱字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
21.一种路由器,其特征在于,包括:
获取单元,用于接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串,所述外形字串为所述名字前缀每层的字符长度构成的字符串;
第一搜索单元,用于根据所述数据包的名字前缀的外形字串,在三态内容寻址存储器TCAM表中按位搜索以得到第一目标外形字串,所述第一目标外形字串为在所述TCAM表中与所述数据包的名字前缀的外形字串匹配的外形字串中最长的外形字串;
第二搜索单元,用于根据所述数据包的名字前缀在静态随机接入存储器SRAM中与所述第一目标外形字串对应的哈希表中进行搜索,若在与所述第一目标外形字串对应的哈希表中未搜索到与所述数据包的名字前缀匹配的名字前缀,在所述第一目标外形字串的前驱字串对应的哈希表中进行搜索,以获取第一目标名字前缀,所述第一目标名字前缀为所述SRAM中与所述数据包的名字前缀匹配的名字前缀中最长的名字前缀,所述哈希表中存储有具有相同外形字串的名字前缀;
转发单元,用于将数据包从所述第一目标名字前缀对应的下一跳端口转发出去。
22.根据权利要求21所述的路由器,其特征在于,所述获取单元包括:
裁剪子单元,用于对所述数据包的名字前缀进行裁剪,以得到裁剪后的名字前缀;
获取子单元,用于根据所述裁剪后的名字前缀获取所述数据包的名字前缀的外形字串。
23.根据权利要求21或22所述的路由器,其特征在于,所述接收到终端主机的数据包后,获取所述数据包的名字前缀和所述数据包的名字前缀的外形字串之前,所述路由器还包括:
构建单元,用于根据名字前缀规则集构建名字外形树;
处理单元,用于对所述名字外形树进行深度收缩操作和节点数量缩减操作。
24.根据权利要求23所述的路由器,其特征在于,所述处理单元具体用于:
从所述名字外形树的底层节点开始,将所述名字外形树中每个节点的位宽度与TCAM的位宽度进行比较,所述节点的位宽度为该节点对应的外形字串在所述TCAM表中存储的位宽度,所述节点的位宽度通过如下方式得到:
获取所述名字外形树的所有节点对应的外形字串中的每个层次的字符长度,并得到所述所有节点对应的外形字串在每个层次的字符长度的最大值;
每个节点对应的外形字串在每个层次的所占位数为该层次的字符长度的最大值,所述节点的位宽度为所有层次的所占位数之和;
当所述名字外形树中节点A的位宽度大于所述TCAM的位宽度时,将所述节点A收缩至其父节点;
其中,所述节点A为所述名字外形树中任一节点。
25.根据权利要求23所述的路由器,其特征在于,所述处理单元还具体用于:
当所述名字外形树的节点数量大于TCAM的表项数时,根据负荷最小深度最大优先原则确定所述名字外形树中待缩减节点;
将所述待缩减节点缩减至其前驱节点,以使所述名字外形树的节点数量小于或者等于所述TCAM的表项数。
26.根据权利要求24所述的路由器,其特征在于,所述处理单元还具体用于:
当所述名字外形树的节点数量大于TCAM的表项数时,根据负荷最小深度最大优先原则确定所述名字外形树中待缩减节点;
将所述待缩减节点缩减至其前驱节点,以使所述名字外形树的节点数量小于或者等于所述TCAM的表项数。
27.根据权利要求21或22所述的路由器,其特征在于,所述路由器还包括:
所述获取单元,还用于当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
插入单元,用于当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
28.根据权利要求23所述的路由器,其特征在于,所述路由器还包括:
所述获取单元,还用于当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
插入单元,用于当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
29.根据权利要求24或25所述的路由器,其特征在于,所述路由器还包括:
所述获取单元,还用于当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
插入单元,用于当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
30.根据权利要求26所述的路由器,其特征在于,所述路由器还包括:
所述获取单元,还用于当接收到插入指令和待插入的名字前缀时,获取所述待插入名字前缀的外形字串;
插入单元,用于当根据所述待插入名字前缀的外形字串在所述TCAM表中获取第二目标外形字串时,在与所述第二目标外形字串对应的哈希表中插入所述待插入名字前缀;
其中,所述第二目标外形字串为在所述TCAM表中与所述待插入名字前缀的外形字串相匹配的外形字串中最长的外形字串。
31.根据权利要求27所述的路由器,其特征在于,所述路由器还包括:
创建单元,用于当根据所述待插入名字前缀的外形字串在所述TCAM表中搜索到与所述待插入名字前缀的外形字串匹配的外形字串时,在所述TCAM表中创建一个新的表项,用于存储所述待插入名字前缀的外形字串;
所述创建单元,还用于创建一个与所述新的表项对应的新的哈希表,用于存储所述待插入名字前缀。
32.根据权利要求28或30所述的路由器,其特征在于,所述路由器还包括:
创建单元,用于当根据所述待插入名字前缀的外形字串在所述TCAM表中搜索到与所述待插入名字前缀的外形字串匹配的外形字串时,在所述TCAM表中创建一个新的表项,用于存储所述待插入名字前缀的外形字串;
所述创建单元,还用于创建一个与所述新的表项对应的新的哈希表,用于存储所述待插入名字前缀。
33.根据权利要求29所述的路由器,其特征在于,所述路由器还包括:
创建单元,用于当根据所述待插入名字前缀的外形字串在所述TCAM表中搜索到与所述待插入名字前缀的外形字串匹配的外形字串时,在所述TCAM表中创建一个新的表项,用于存储所述待插入名字前缀的外形字串;
所述创建单元,还用于创建一个与所述新的表项对应的新的哈希表,用于存储所述待插入名字前缀。
34.根据权利要求21或22所述的路由器,其特征在于,所述路由器还包括:
所述获取单元,还用于接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
所述获取单元,还用于根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
删除单元,用于当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
35.根据权利要求23所述的路由器,其特征在于,所述路由器还包括:
所述获取单元,还用于接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
所述获取单元,还用于根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
删除单元,用于当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
36.根据权利要求24或25所述的路由器,其特征在于,所述路由器还包括:
所述获取单元,还用于接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
所述获取单元,还用于根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
删除单元,用于当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
37.根据权利要求36所述的路由器,其特征在于,所述路由器还包括:
所述获取单元,还用于接收到删除指令和待删除名字前缀后,获取所述待删除名字前缀的外形字串;
所述获取单元,还用于根据所述待删除名字前缀的外形字串在所述TCAM表中获取第三目标外形字串;
删除单元,用于当在所述第三目标外形字串对应的哈希表中搜索到第二目标名字前缀时,将所述第二目标名字前缀删除;
其中,所述第二目标名字前缀为所述第三目标外形字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
38.根据权利要求34所述的路由器,其特征在于,所述路由器还包括:
回溯单元,用于当在所述第三目标外形字串对应的哈希表中未搜索到第二目标名字前缀时,回溯到所述第三目标外形字串的前驱字串对应的哈希表中继续搜索;
所述删除单元,还用于当在所述前驱字串对应的哈希表搜索到第三目标名字前缀时,删除所述第三目标名字前缀,所述第三目标名字前缀为所述前驱字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
39.根据权利要求35或37所述的路由器,其特征在于,所述路由器还包括:
回溯单元,用于当在所述第三目标外形字串对应的哈希表中未搜索到第二目标名字前缀时,回溯到所述第三目标外形字串的前驱字串对应的哈希表中继续搜索;
所述删除单元,还用于当在所述前驱字串对应的哈希表搜索到第三目标名字前缀时,删除所述第三目标名字前缀,所述第三目标名字前缀为所述前驱字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
40.根据权利要求36所述的路由器,其特征在于,所述路由器还包括:
回溯单元,用于当在所述第三目标外形字串对应的哈希表中未搜索到第二目标名字前缀时,回溯到所述第三目标外形字串的前驱字串对应的哈希表中继续搜索;
所述删除单元,还用于当在所述前驱字串对应的哈希表搜索到第三目标名字前缀时,删除所述第三目标名字前缀,所述第三目标名字前缀为所述前驱字串对应的哈希表中与所述待删除名字前缀相匹配的名字前缀中最长的名字前缀。
41.一种路由器,其特征在于,包括
存储有可执行程序代码的存储器;
与所述存储器耦合的处理器;
所述处理器调用所述存储器中存储的所述可执行程序代码,执行如权利要求1-20任一项所述的方法。
42.一种计算机可读存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-20任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711202737.1A CN109831384B (zh) | 2017-11-23 | 2017-11-23 | 名字查找方法及路由器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711202737.1A CN109831384B (zh) | 2017-11-23 | 2017-11-23 | 名字查找方法及路由器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109831384A CN109831384A (zh) | 2019-05-31 |
CN109831384B true CN109831384B (zh) | 2021-08-03 |
Family
ID=66858610
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711202737.1A Active CN109831384B (zh) | 2017-11-23 | 2017-11-23 | 名字查找方法及路由器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109831384B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110708251B (zh) * | 2019-09-24 | 2021-11-16 | 北京计算机技术及应用研究所 | 一种三态内容寻址存储器tcam转发单播查表方法 |
CN114090840A (zh) * | 2020-08-24 | 2022-02-25 | 华为技术有限公司 | 序列查找方法、装置、设备及介质 |
CN114745327B (zh) * | 2022-06-10 | 2022-08-26 | 鹏城实验室 | 业务数据转发方法、装置、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1441579A (zh) * | 2003-03-28 | 2003-09-10 | 清华大学 | 支持多nexthop的TCAM高速查找方法及其系统 |
CN101039215A (zh) * | 2006-08-10 | 2007-09-19 | 华为技术有限公司 | 一种维护三态内容可寻址存储器表项的方法和系统 |
CN102307149A (zh) * | 2011-09-23 | 2012-01-04 | 中国科学院计算技术研究所 | Ip查找方法和装置以及路由更新方法和装置 |
CN103780493A (zh) * | 2014-01-20 | 2014-05-07 | 清华大学 | 数据转发方法及系统 |
CN103873371A (zh) * | 2014-02-21 | 2014-06-18 | 北京邮电大学 | 一种名字路由快速匹配查找方法与装置 |
CN105763454A (zh) * | 2016-02-25 | 2016-07-13 | 比威网络技术有限公司 | 基于二维路由策略的数据报文转发方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7356033B2 (en) * | 2002-11-21 | 2008-04-08 | Lucent Technologies Inc. | Method and apparatus for performing network routing with use of power efficient TCAM-based forwarding engine architectures |
US8848707B2 (en) * | 2012-09-26 | 2014-09-30 | Avaya Inc. | Method for IP longest prefix match using prefix length sorting |
US9647941B2 (en) * | 2013-10-04 | 2017-05-09 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Hierarchical hashing for longest prefix matching |
-
2017
- 2017-11-23 CN CN201711202737.1A patent/CN109831384B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1441579A (zh) * | 2003-03-28 | 2003-09-10 | 清华大学 | 支持多nexthop的TCAM高速查找方法及其系统 |
CN101039215A (zh) * | 2006-08-10 | 2007-09-19 | 华为技术有限公司 | 一种维护三态内容可寻址存储器表项的方法和系统 |
CN102307149A (zh) * | 2011-09-23 | 2012-01-04 | 中国科学院计算技术研究所 | Ip查找方法和装置以及路由更新方法和装置 |
CN103780493A (zh) * | 2014-01-20 | 2014-05-07 | 清华大学 | 数据转发方法及系统 |
CN103873371A (zh) * | 2014-02-21 | 2014-06-18 | 北京邮电大学 | 一种名字路由快速匹配查找方法与装置 |
CN105763454A (zh) * | 2016-02-25 | 2016-07-13 | 比威网络技术有限公司 | 基于二维路由策略的数据报文转发方法及装置 |
Non-Patent Citations (2)
Title |
---|
A Hybrid IP Lookup Architecture with Fast Updates;Layong Luo,等;《2012 Proceedings IEEE INFOCOM》;20120330;全文 * |
可编程虚拟化路由器的转发表查找技术综述;黄昆 ,等;《重庆邮电大学学报(自然科学版)》;20160116;第25卷(第1期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109831384A (zh) | 2019-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6490592B1 (en) | Method of and apparatus for generating a tree data structure supporting longest match lookup | |
KR100586461B1 (ko) | 파이프라인 이진 트리를 이용한 ip 어드레스 검색 방법,하드웨어 구조 및 기록매체 | |
US7774538B2 (en) | Method for ternary contents address memory table management | |
JP4452183B2 (ja) | プログラマブル状態マシンのデータ構造を作成して入力単語連鎖を構文解析する方法、プログラマブル状態マシンのデータ構造を使用して入力単語連鎖に対応する結果として得られた値を検索する方法、ワイヤスピードのディープ・パケット処理を行う方法、ディープ・パケット処理のための装置、チップ埋め込み装置、およびプログラミング・コード命令を含むコンピュータ・プログラム(ディープ・パケット処理のための方法および装置) | |
EP2560327B1 (en) | Routing table establishment method and device | |
CN109831384B (zh) | 名字查找方法及路由器 | |
EP3280104B1 (en) | Ip routing lookup | |
WO2015127721A1 (zh) | 数据匹配的方法、装置及计算机存储介质 | |
US20130024649A1 (en) | Method and device for storing routing table entry | |
US8965911B2 (en) | Searching and storing data in a tree data structure using prefix-matching node | |
US11012358B2 (en) | Forwarding table management | |
WO2009132556A1 (zh) | 一种数据查找的方法及装置 | |
Wuu et al. | A longest prefix first search tree for IP lookup | |
CN114884877B (zh) | 一种哈希表和HOT相结合的IPv6路由查找方法 | |
Hsieh et al. | A classified multisuffix trie for IP lookup and update | |
CN110995876B (zh) | 一种ip存储与查找的方法及装置 | |
KR100999408B1 (ko) | 해시트리를 이용한 url 검색방법 | |
CN113824814B (zh) | 一种转发表的地址匹配方法、装置、网络设备及介质 | |
Lin et al. | A multi-index hybrid trie for lookup and updates | |
CN115086221A (zh) | 一种报文处理方法、装置、转发设备和存储介质 | |
CN106302178B (zh) | 一种路由查询方法及装置 | |
KR101587756B1 (ko) | 블룸 필터 선-검색을 이용한 스트링 정보 검색 장치 및 방법 | |
Kniesburges et al. | Hashed Patricia Trie: Efficient longest prefix matching in peer-to-peer systems | |
EP3319279B1 (en) | Ip routing lookup | |
CN109428822B (zh) | 一种名字查找方法和网络设备 |
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 |