CN103404092B - 路由前缀存储方法、装置及路由地址查找方法、装置 - Google Patents
路由前缀存储方法、装置及路由地址查找方法、装置 Download PDFInfo
- Publication number
- CN103404092B CN103404092B CN201180002985.6A CN201180002985A CN103404092B CN 103404092 B CN103404092 B CN 103404092B CN 201180002985 A CN201180002985 A CN 201180002985A CN 103404092 B CN103404092 B CN 103404092B
- Authority
- CN
- China
- Prior art keywords
- node
- little tree
- tree
- address
- memory space
- 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.)
- Expired - Fee Related
Links
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/48—Routing tree calculation
- H04L45/484—Routing tree calculation using multiple routing trees
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种路由前缀存储方法、装置及路由地址查找方法、装置。其中,存储方法包括:根据待存储的路由前缀建立路径压缩树,并将路径压缩树划分为一棵或多棵小树;为每棵小树的每个节点设置位置域信息,所述位置域信息包括节点的父节点到所述节点的路径长度和路径、标识节点是否有下一跳地址的路由标识和标识节点是否存在子节点的子节点标识;按照划分出的小树的层数顺序,依次将每棵小树所有节点的位置域信息和每棵小树指向连续存储下一跳地址的地址存储空间的首地址的指针,存储到每棵小树的小树存储空间中。使用本发明技术方案可以提升稀疏大树的路由容量。
Description
技术领域
本发明实施例涉及网络通信技术,尤其涉及一种路由前缀存储方法、装置及路由地址查找方法、装置。
背景技术
互联网工程任务组(InternetEngineeringTaskForce;简称为:IETF)于1993年提出了称为无类型域间路由(ClasslessInter-DomainRouting;简称为:CIDR)的地址结构。虽然CIDR只是为了阻止地址空间耗尽而采用的临时解决办法,但正是这项技术成了目前实际路由查表的基础。在CIDR中,一个IP网络由一个前缀代表,这个前缀是由IP地址和标识其有效位的掩码复合表示。CIDR允许路由器进行路由聚合,即大小相同、在地址空间中相互邻近、路由相同的2的整数次幂个子网的路由表条目可以合并成一条路径,并在路由表中只占用一个表项。CIDR避免了网络地址的过快枯竭和骨干路由器路由表项的快速膨胀,但同时使网络地址前缀的长度可以为任意值,进行路由查找时必须进行最长前缀匹配(thelongestprefixmatch)搜索。
目前,所有的路由查表算法都是在以下三个方面进行权衡:1、路由表查询速度,这主要是由访问存储器的次数决定;2、路由表所需要的存储器容量;3、插入或删除路由表项的难易程度。
针对上述问题,现有技术中最有应用前景的方法是将存储路由前缀的数据结构分级,小树的顶点(称为提升节点)放在大树中,并且小树采用路径压缩树结构。在路径压缩树中,所有路由前缀都存放在它的叶结点上,假设有N个路由前缀则有N个叶结点,另外有N-1个内部结点。路径压缩树允许每个内部结点包含一个“比特位置”域,用来指示该结点以下的分支节点对应的比特位置,即表明连续跳过的比特个数和所跳过的比特数值,这样路径压缩树就将冗余的支路链压缩到了一个结点上,在查找路由时不需要做连续的比特匹配而是可以一次匹配多个比特来快速到达叶结点。小树的最大高度限制为固定值h,h的取值和具体的硬件环境相关。在添加表项过程中,如果小树的高度超过h,则将小树分裂,将分裂后的小树顶点放在大树中。在删除表项过程中,可以按照合并后的高度不大于h的条件将小树合并。而对大树的具体实现方法不作限定,例如:可以用RangeMatch,B-tree,TCAM等方法,具体采用哪种方法可视具体硬件实现而定。该方法在查询速度、存储容量以及在路由表项的更新方面均具有一定优势,因此,是具有前途的路由存储和查找方案。
但是,对于某些稀疏的大树来说,该方案中每棵小树对应的路由前缀数量一般比较少,而小树的数量是有限的,故整棵大树的路由容量将会受到影响。
发明内容
本发明提供一种路由前缀存储方法、装置及路由地址查找方法、装置,用以提升稀疏大树的路由容量。
本发明一方面提供一种路由前缀存储方法,包括:
根据待存储的路由前缀建立路径压缩树,并将所述路径压缩树根据小树存储空间的大小划分为一棵或多棵小树,每棵小树包括多个节点;
为每棵小树的每个节点设置位置域信息,所述位置域信息包括所述节点的父节点到所述节点的路径长度和路径、标识所述节点是否有下一跳地址的路由标识和标识所述节点是否存在子节点的子节点标识;
按照划分出的小树的层数顺序,依次将每棵小树所有节点的位置域信息和每棵小树指向连续存储所述路由前缀对应的所有下一跳地址的地址存储空间的首地址的指针,存储到每棵小树所对应的小树存储空间中。
本发明一方面提供一种路由前缀存储装置,包括:
小树划分模块,用于根据待存储的路由前缀建立路径压缩树,并将所述路径压缩树根据小树存储空间的大小划分为一棵或多棵小树,每棵小树包括多个节点;
信息设置模块,用于为每棵小树的每个节点设置位置域信息,所述位置域信息包括所述节点的父节点到所述节点的路径长度和路径、标识所述节点是否有下一跳地址的路由标识和标识所述节点是否存在子节点的子节点标识;
存储模块,用于按照划分出的小树的层数顺序,依次将每棵小树所有节点的位置域信息和每棵小树指向连续存储所述路由前缀对应的所有下一跳地址的地址存储空间的首地址的指针,存储到每棵小树所对应的小树存储空间中。
本发明另一方面提供一种路由地址查找方法,包括:
按照小树的层数顺序,从第一层小树的第一个节点开始,根据各层小树对应的小树存储空间中存储的各个节点的位置域信息对待查找的路由前缀进行匹配查找;所述位置域信息包括所述节点的父节点到所述节点的路径长度和路径、标识所述节点是否有下一跳地址的路由标识和标识所述节点是否存在子节点的子节点标识;
如果匹配到最长匹配的节点,根据存储匹配到的最长匹配的节点的小树存储空间中指向连续存储下一跳地址的地址存储空间的首地址的指针和匹配到的最长匹配的节点的位置,从连续存储下一跳地址的地址存储空间中获取所述路由前缀的下一跳地址。
本发明另一方面提供一种路由地址查找装置,包括:
查找模块,用于按照小树的层数顺序,从第一层小树的第一个节点开始,根据各层小树对应的小树存储空间中存储的各个节点的位置域信息对待查找的路由前缀进行匹配查找;所述位置域信息包括所述节点的父节点到所述节点的路径长度和路径、标识所述节点是否有下一跳地址的路由标识和标识所述节点是否存在子节点的子节点标识;
获取模块,用于在所述查找模块匹配到最长前缀节点,根据存储匹配到的最长前缀节点的小树存储空间中指向连续存储下一跳地址的地址存储空间的首地址的指针和匹配到的最长前缀节点的位置,从连续存储下一跳地址的地址存储空间中获取所述路由前缀的下一跳地址。
本发明一方面提供的路由前缀存储方法及装置,通过存储标识节点是否有下一跳地址的路由标识,而不再直接存储节点的下一跳地址,所占用的存储空间明显减小,有利于提高小树存储空间所存储的节点的个数,提高了小树所对应的路由前缀的数量,进而提高了整个大树的路由容量,尤其对某些稀疏的大树来说,对整棵大树的路由容量的提升效果更为明显。
本发明另一方面提供的路由地址查找方法及装置,与本发明实施例提供的路由前缀存储方法及装置相配合,按照小树的层数顺序,根据对各层小树对应的小树存储空间中各个节点的位置域信息对待查找的路由前缀进行查找,由于每个小树存储空间中不再存储节点对应的下一跳地址而是存储节点是否具有下一跳地址的路由标识,每个小树存储空间中所存储的节点信息增多,使得一次查找可以查找更多比特,提高了查找速度和效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1A为本发明一实施例提供的路由前缀存储方法的流程图;
图1B为本发明一实施例提供的由路由前缀所建立的路径压缩树以及所划分出的小树的一种结构示意图;
图2为本发明另一实施例提供的路由前缀存储方法的流程图;
图3为本发明一实施例提供的路由地址查找方法的流程图;
图4A为本发明一实施例提供的路由前缀存储装置的结构示意图;
图4B为本发明另一实施例提供的路由前缀存储装置的结构示意图;
图5为本发明一实施例提供的路由地址查找装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1A为本发明一实施例提供的路由前缀存储方法的流程图。如图1A所示,本实施例的存储方法包括:
步骤101、根据待存储的路由前缀建立路径压缩树,并将路径压缩树根据小树存储空间的大小划分为一棵或多棵小树,每棵小树包括多个节点。
在本实施例中,当需要存储某一路由前缀时,首先根据路由前缀建立路径压缩树(PathCompressedTrie),也就是按照路由前缀中每比特是0还是1进行路径分支从而形成一棵路径压缩树。其中,所建立的路径压缩树即为大树。然后,按照硬件设备上大小固定的存储空间的大小(例如128bit为一固定存储空间),将所建立的路径压缩树划分为一棵或多棵小树。其中,每棵小树的有关信息被存储到一个大小固定的存储空间中。在本实施例中,将大小固定的存储空间称为小树存储空间,意味着每个小树存储空间对应一棵小树。
本实施例以一些路由前缀为例,根据该些路由前缀建立了路径压缩树,并将所建立的路径压缩树划分成了3棵小树,划分结果如图1B所示。如1B所示,3棵小树分别为小树1、小树2和小树3。每棵小树包括多个节点。另外,如图1B所示,小树2和小树3的顶节点是小树1中某个节点的子节点。根据各个小树之间节点的“父子关系”,可以将划分出的小树进行分层,对于顶节点的父节点来自同一层中的小树的各个小树作为一层。以图1B为例,小树1是第一层,小树2的和小树3的顶节点的父节点都来自小树1,故小树2和小树3是第二层。在图1B中包括的路由前缀如表1所示。
表1
步骤102、为每棵小树的每个节点设置位置域信息,所述位置域信息包括该节点的父节点到该节点的路径长度和路径、标识该节点是否有下一跳地址的路由标识和标识该节点是否存在子节点的子节点标识。
当划分出各棵小树后,为每棵小树中的每个节点设置位置域信息。每个节点的位置域信息包括:该节点的父节点到该节点的路径长度和路径、标识该节点是否有下一跳地址的路由标识和标识该节点是否有子节点的子节点标识。
其中,每个节点对应一个路由前缀,该路由前缀可能有下一跳地址,也可能没有下一跳地址,故在本实施例中,通过路由标识来表示该节点是否有下一跳地址。例如,可以使用1比特对该路由标识进行编码,如果该节点对应的路由前缀有下一跳地址,则路由标识用1表示(或者说路由标识取值为1);如果该节点对应的路由前缀没有下一跳地址,则路由标识用0表示(或者说路由标识取值为0)。又例如,可以使用1比特对该路由标识进行编码,如果该节点对应的路由前缀有下一跳地址,则路由标识用0表示(或者说路由标识取值为0);如果该节点对应的路由前缀没有下一跳地址,则路由标识用1表示(或者说路由标识取值为1)。另外,除了使用1比特对路由标识进行编码外,还可以使用2比特、3比特等。举例说明,使用2比特对路由标识进行编码,如果该节点对应的路由前缀有下一跳地址,路由标识用01表示(或者说路由标识取值为01);如果该节点对应的路由前缀没有下一跳地址,路由标识用00表示(或者说路由标识取值为00)。路由标识使用“01”和“00”表示仅是一种举例,还可以是其他值。如图1B所示,黑色节点表示的是有下一跳地址的节点,空心的节点表示没有下一跳地址的节点。
在此说明,使用1比特对路由标识进行编码是优选实施方式,所占用的存储空间少,具有节约存储空间的优势。
与现有技术相比,本实施例的并不直接存储每个节点对应的下一跳地址,而是存储一个路由标识。本实施例的路由标识一般要小于下一跳地址,故所占用的存储空间相对较少,提高了小树存储空间所能存储的小树数量,进而提升了整个大树的存储容量。
其中,每个节点最多有2个子节点,分别记为左子节点和右子节点。在实际应用中,一个节点可以只有左子节点,还可以只有右子节点,还可以没有任何子节点,或者同时具有左子节点和右子节点。在本实施例中,使用子节点标识来标识节点具有子节点的情况。例如,可以使用2比特对子节点标识进行编码。使用2比特对子节点标识进行编码的一种方式为:如果节点没有子节点,子节点标识用00表示;如果节点仅有一个左子节点,子节点标识用10表示;如果节点仅有一个右子节点,子节点标识用01;如果节点同时有左子节点和右子节点,则子节点标识用11表示。使用2比特对子节点标识进行编码的另一种方式为:如果节点没有子节点,子节点标识用11表示;如果节点仅有一个左子节点,子节点标识用10表示;如果节点仅有一个右子节点,子节点标识用01;如果节点同时有左子节点和右子节点,则子节点标识用00表示。
另外,除了使用2比特对子节点标识进行编码外,还可以使用3比特、4比特等。举例说明,使用3比特对子节点标识进行编码的一种方式为:如果节点没有子节点,子节点标识用000表示;如果节点仅有一个左子节点,子节点标识用100表示;如果节点仅有一个右子节点,子节点标识用001;如果节点同时有左子节点和右子节点,则子节点标识用111表示。但不限于这一种编码方式。
本实施例使用子节点标识来标识一个节点的子节点情况,而不再像现有技术那样使用指针指向来标识,存储子节点标识与指针相比具有简单、易于实现的优势。
对于一个节点,该节点的父节点到该节点的路径长度和路径可以直接使用其实际值表示。
步骤103、按照划分出的小树的层数顺序,依次将每棵小树所有节点的位置域信息和每棵小树指向连续存储该路由前缀对应的所有下一跳地址的地址存储空间的首地址的指针,存储到每棵小树所对应的小树存储空间中。
当为每棵小树的每个节点设置好位置域信息后,按照划分出的小树的层数顺序,例如按照先低层再高层的顺序,依次将每棵小树的相关信息存储到每棵小树所对应的小树存储空间中。其中,每棵小树的相关信息主要包括:该棵小树中所有节点的位置域信息和该棵小树指向连续存储该待存储的路由前缀对应的所有下一跳地址的地址存储空间的首地址的指针。即对于一棵小树来说,需要将该棵小树中所有节点的位置信息和该棵小树指向连续存储该待存储的路由前缀对应的所有下一跳地址的地址存储空间的首地址的指针,都存储到该棵小树对应的小树存储空间中。
其中,每个节点的位置域信息用于在进行路由前缀查找时,与路由前缀进行查找匹配。而指向所述地址存储空间的首地址的指针用于在路由前缀查找过程中找到最长前缀匹配的节点时,去获取该最长前缀匹配的节点的下一跳地址。
在本实施例中,通过存储标识节点是否有下一跳地址的路由标识,而不再直接存储节点的下一跳地址,所占用的存储空间明显减小,有利于提高小树存储空间所存储的节点的个数,提高了小树所对应的路由前缀的数量,进而提高了整个大树的路由容量。尤其对某些稀疏的大树来说,由于小树的数量是有限,本实施例通过提升每棵小树对应的路由前缀的数量,对整棵大树的路由容量的提升效果更为明显。
图2为本发明另一实施例提供的路由前缀存储方法的流程图。如图2所示,本实施例的存储方法包括:
步骤201、根据待存储的路由前缀建立路径压缩树,并将路径压缩树根据小树存储空间的大小划分为一棵或多棵小树,每棵小树包括多个节点。
本实施例的执行主体可以是路由前缀存储装置,例如路由器或交换机等。为简化描述,后续将省略路由前缀存储装置。
本步骤201可参见步骤101的描述。
步骤202、判断划分出的小树的层数是否小于或等于预设层数阈值;如果判断结果为是,执行步骤203;如果判断结果为否,执行步骤206。
通常,路径压缩树划分出的小树的层数大于某个数值时,说明该路径压缩树比较密集;如果路径压缩树划分出的小树的层数小于或等于该数值,说明该路径压缩树比较稀疏。本实施例将该数值定义为层数阈值。其中,层数阈值的大小视路由前缀存储装置的存储能力而定。例如,对于小树存储空间大小为128bit的路由前缀存储装置,其所对应的层数阈值一般为3层。
本实施例主要针对路径压缩树比较稀疏的情况,用以解决路径压缩树在稀疏情况下,因受小树数量限制而无法提升整体容量的问题。
故在本实施例中,当划分出小树后,通过判断划分出的小树的层数来判断根据待存储的路由前缀所建立的路径压缩树是否比较稀疏。如图1B所示,该路径压缩树划分出3棵小树,分为2层。如果层数阈值为3,则图1B所示的路径压缩树比较稀疏。
步骤203、为每棵小树的每个节点设置位置域信息,所述位置域信息包括该节点的父节点到该节点的路径长度和路径、标识该节点是否有下一跳地址的路由标识和标识该节点是否存在子节点的子节点标识。
当判断出路径压缩树比较稀疏时,为每棵小树的每个节点设置位置域信息。每个节点的位置域信息包括:该节点的父节点到该节点的路径长度和路径、标识该节点是否有下一跳地址的路由标识和标识该节点是否有子节点的子节点标识。
其中,每个节点对应一个路由前缀,该路由前缀可能有下一跳地址,也可能没有下一跳地址,故在本实施例中,通过路由标识来表示该节点是否有下一跳地址。
其中,每个节点最多有2个子节点,分别记为左子节点和右子节点。在实际应用中,一个节点可以只有左子节点,还可以只有右子节点,还可以没有任何子节点,或者同时具有左子节点和右子节点。在本实施例中,使用子节点标识来标识节点具有子节点的情况。
有关本步骤203的其他描述可参见步骤102的描述,在此不再赘述。
步骤204、按照划分出的小树的层数顺序,依次将每棵小树所有节点的位置域信息和每棵小树指向连续存储该路由前缀对应的所有下一跳地址的地址存储空间的首地址的指针,存储到每棵小树所对应的小树存储空间中。
当为每棵小树的每个节点设置好位置域信息后,按照划分出的小树的层数顺序,例如按照先低层再高层的顺序,依次将每棵小树的相关信息存储到每棵小树所对应的小树存储空间中。
在本实施例中,每棵小树的相关信息主要包括:该棵小树中所有节点的位置域信息、该棵小树指向连续存储该待存储的路由前缀对应的所有下一跳地址的地址存储空间的首地址的指针、以及指向下一层小树对应的小树存储空间的首地址的指针。即对于一棵小树来说,不仅要将该棵小树中所有节点的位置信息和该棵小树指向连续存储该待存储的路由前缀对应的所有下一跳地址的地址存储空间的首地址的指针存储到该棵小树对应的小树存储空间中,还需要将当前层小树指向下一层小树对应的小树存储空间的首地址的指针,存储到当前层小树对应的小树存储空间中。
在本实施例中,各层所包含的小树的相关信息是连续存储的,这种存储方式既可以节约存储空间,又便于进行路由地址查找。由于每个小树对应的小树存储空间的大小是固定的,故在进行路由地址查找时,通过当前层小树指向下一层小树对应的小树存储空间的首地址的指针,并按照小树存储空间的大小进行地址偏移可以找到下一层中各个小树对应的小树存储空间。另外,通过当前层小树指向下一层小树对应的小树存储空间的首地址的指针和小树存储空间的大小,还可以找到父节点在下一层中的子节点和子节点对应的小树存储空间。
其中,每个节点的位置域信息用于在进行路由前缀查找时,与路由前缀进行查找匹配。而指向所述地址存储空间的首地址的指针用于在路由前缀查找过程中找到最长前缀匹配的节点时,去获取该最长前缀匹配的节点的下一跳地址。
步骤205、将路由前缀对应的所有下一跳地址连续存储到所述的地址存储空间中,并结束存储操作。
在本实施例中,除了将路由前缀建立的路径压缩树中各个节点的位置域信息存储到对应的小树存储空间中,还将路由前缀对应的所有下一跳地址连续存储到所述的地址存储空间中。这种连续存储下一跳地址的存储方式有利于节约存储空间。
步骤206、按照现有路径压缩树的存储方式进行存储。
其中,如果根据待存储的路由前缀所建立的路径压缩树比较密集,则可以按照现有路径压缩树的存储方式进行存储。
其中,现有路径压缩树的存储方式本实施例不再详述。
在本实施例中,通过对路径压缩树进行疏密判断,在路径压缩树比较稀疏时,通过存储标识节点是否有下一跳地址的路由标识,而不再直接存储节点的下一跳地址,所占用的存储空间明显减小,有利于提高小树存储空间所存储的节点的个数,提高了小树的压缩率,提高了小树所对应的路由前缀的数量,进而提高了整个大树的路由容量,尤其对某些稀疏的大树来说,对整棵大树的路由容量的提升效果更为明显。另外,本实施例通过将地址前缀对应的所有下一跳地址进行单独存储且连续存储,有利于节约存储空间和提高存储空间的利用率。
图3为本发明一实施例提供的路由地址查找方法的流程图。如图3所示,本实施例的查找方法包括:
步骤301、按照小树的层数顺序,从第一层小树的第一个节点开始,根据各层小树对应的小树存储空间中存储的各个节点的位置域信息对待查找的路由前缀进行匹配查找;所述位置域信息包括:该节点的父节点到该节点的路径长度和路径、标识该节点是否有下一跳地址的路由标识和标识所述节点是否存在子节点的子节点标识。
本实施例的执行主体为路由地址查找装置,例如路由器或交换机等。为简化描述,将省略路由地址查找装置。
本实施例的路由地址查找方法与上述实施例提供的路由前缀存储方法相适应。本实施例的路由地址查找方法在上述实施例提供的路由前缀存储方法的基础上实现。
具体的,在路由空间中,已经预先按照待存储的路由前缀划分出的小树的层数,将各个小树的位置域信息存储到了相应的小树存储空间中。其中,小树存储空间是路由空间中具有固定大小的存储空间。
当接收到某个路由前缀,需要查询该路由前缀对应的下一跳地址时,路由空间中存储的第一层小树(只有一棵小树)的第一个节点开始,根据各层小树对应的小树存储空间中存储的各个节点的位置域信息对待查找的路由前缀进行匹配查找。
其中,每个节点的位置域信息包括:节点的父节点到该节点的路径长度和路径、标识该节点是否有下一跳地址的路由标识和标识该节点是否存在子节点的子节点标识。
其中,根据每棵小树对应的小树存储空间中的各节点的位置域信息对待查找的路由前缀进行匹配查找的过程包括:
当查询到当前节点时,判断当前节点所在的小树存储空间中所存储的当前节点的父节点到当前节点的路径是否与路由前缀当前匹配到的部分相一致。如果判断结果为不一致,说明发生错误,则结束对该路由前缀的查找。如果判断结果为一致,说明匹配正确,则继续根据当前节点所在的小树存储空间中所存储的当前节点的路由标识,判断当前节点是否有下一跳地址。例如,如果查询到当前节点的路由标识未1,表明当前节点有下一跳地址;如果查询到当前节点的路由标识为0,表明当前节点没有下一跳地址。如果当前节点有下一跳地址,则记录当前节点的位置并标识具有下一跳地址。其中,当前节点的位置亦即路由前缀当前匹配到的部分。
另外,在判断结果为一致的情况下,还要根据当前节点所在的小树存储空间中所存储的当前节点的子节点标识判断当前节点是否有子节点。例如,如果查询到当前节点的子节点标识为00,表示当前节点没有子节点;如果查询到当前节点的子节点标识为10,表示当前节点仅有左子节点;如果查询到当前节点的子节点标识为01,表示当前节点仅有右子节点;如果查询到当前节点的子节点标识为11,表示当前节点同时有左子节点和右子节点。如果当前节点没有子节点,则结束对路由前缀的查找。如果当前子节点有子节点,继续查询子节点。具体的,如果当前节点仅有左子节点,则直接去查询左子节点;如果当前节点仅有右子节点,则直接去查询右子节点;如果当前子节点同时具有左子节点和右子节点,则可以先查询左子节点,当对左子节点查询失败时,去查询右子节点;或者可以先查询右子节点,当右子节点查询失败时,去查询左子节点。
本实施例按照最长前缀匹配原则进行匹配。
步骤302、判断路由前缀是否匹配到最长前缀节点;如果判断结果为是,执行步骤303;如果判断结果为否,执行步骤304。
当匹配结束后,判断路由前缀是否匹配到了最长前缀节点。其中,最长前缀节点是有下一跳地址的节点,且对该最长前缀节点的匹配长度是相对而言的。
如果匹配到了前缀最长且具有下一跳地址的节点,则执行步骤303;如果没有匹配到任何具有下一跳地址的节点,说明匹配失败,则执行步骤304,即结束操作。
步骤303、根据存储匹配到的最长前缀节点的小树存储空间中指向连续存储下一跳地址的地址存储空间的首地址的指针和匹配到的最长前缀节点的位置,从连续存储下一跳地址的地址存储空间中获取所述路由前缀的下一跳地址,并执行步骤304。
当匹配到了前缀最长且具有下一跳地址的节点时,根据存储匹配到的最长前缀节点的小树存储空间中指向连续存储下一跳地址的地址存储空间的首地址的指针,找到连续存储下一跳地址的地址存储空间的首地址。然后,根据最长前缀匹配节点的位置,确定该最长前缀匹配节点对应的下一跳地址在所述的地址存储空间中的相对位置,从而获取下一跳地址。
在本实施例中,所有下一跳地址连续存储在所述的地址存储空间中。所述的地址存储空间与各个小树存储空间是独立的。
步骤304、结束操作。
本实施例在上述实施例提供的路由前缀存储方法的基础上,按照小树的层数顺序,根据对各层小树对应的小树存储空间中各个节点的位置域信息对待查找的路由前缀进行查找。由于每个小树存储空间中不再存储节点对应的下一跳地址而是存储节点是否具有下一跳地址的路由标识,因此,每个小树存储空间中所存储的节点信息增多,使得一次查找可以查找更多比特,提高了查找速度和效率。
图4A为本发明一实施例提供的路由前缀存储装置的结构示意图。如图4A所示,本实施例的装置包括:小树划分模块41、信息设置模块42和存储模块43。
其中,小树划分模块41,用于根据待存储的路由前缀建立路径压缩树,并将路径压缩树根据小树存储空间的大小划分为一棵或多棵小树,每棵小树包括多个节点。信息设置模块42,与小树划分模块41连接,用于为小树划分模块41划分出的每棵小树的每个节点设置位置域信息,所述位置域信息包括该节点的父节点到该节点的路径长度和路径、标识该节点是否有下一跳地址的路由标识和标识该节点是否存在子节点的子节点标识。存储模块43,与信息设置模块42连接,用于按照划分出的小树的层数顺序,依次将每棵小树所有节点的位置域信息和每棵小树指向连续存储路由前缀对应的所有下一跳地址的地址存储空间的首地址的指针,存储到每棵小树所对应的小树存储空间中。
本实施例路由前缀存储装置的各功能模块可用于执行图1A所示路由前缀存储方法的流程图,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例的路由前缀存储装置,通过存储标识节点是否有下一跳地址的路由标识,而不再直接存储节点的下一跳地址,所占用的存储空间明显减小,有利于提高小树存储空间所存储的节点的个数,提高了小树所对应的路由前缀的数量,进而提高了整个大树的路由容量。尤其对某些稀疏的大树来说,由于小树的数量是有限,本实施例通过提升每棵小树对应的路由前缀的数量,对整棵大树的路由容量的提升效果更为明显。
图4B为本发明另一实施例提供的路由前缀存储装置的结构示意图。本实施例基于图4A所示实施例实现,如图4B所示,本实施例的信息设置模块42包括:第一设置单元421、第二设置单元422和第三设置单元423。
其中,第一设置单元421,与小树划分模块41和存储模块43连接,用于对每个节点,用2比特对所述子节点标识进行编码,如果所述节点没有子节点,所述子节点标识用00表示,如果所述节点仅有一个左子节点,所述子节点标识用10表示,如果所述节点仅有一个右子节点,所述子节点标识用01表示,如果所述节点同时有左子节点和右子节点,所述子节点标识用11表示。
第二设置单元422,与小树划分模块41和存储模块43连接,用于对每个节点,用1比特对所述路由标识进行编码,如果所述节点有下一跳地址,所述路由标识用1表示,如果所述节点没有下一跳地址,所述路由节点用0表示。
第三设置单元423,与小树划分模块41和存储模块43连接,用于设置所述节点的父节点到该节点的路径长度和路径。
进一步,存储模块43还用于将所述路由前缀对应的所有下一跳地址连续存储到所述地址存储空间中。
更进一步,存储模块43还用于将当前层小树指向下一层小树对应的小树存储空间的首地址的指针,存储到当前层小树对应的小树存储空间中。
本实施例的路由前缀存储装置还包括:判断模块44。
其中,判断模块44与小树划分模块41和信息设置模块42连接,用于在信息设置模块42为每棵小树的每个节点设置位置域信息之前,判断划分出的小树的层数是否小于或等于预设层数阈值,如果判断结果为是,触发信息设置模块42为每棵小树的每个节点设置位置域信息。
上述各功能单元或模块可用于执行图1A或图2所示路由前缀存储方法中的相应流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例的路由前缀存储装置,通过对路径压缩树进行疏密判断,在路径压缩树比较稀疏时,通过存储标识节点是否有下一跳地址的路由标识,而不再直接存储节点的下一跳地址,所占用的存储空间明显减小,有利于提高小树存储空间所存储的节点的个数,提高了小树的压缩率,提高了小树所对应的路由前缀的数量,进而提高了整个大树的路由容量,尤其对某些稀疏的大树来说,对整棵大树的路由容量的提升效果更为明显。另外,本实施例的路由前缀存储装置通过将地址前缀对应的所有下一跳地址进行单独存储且连续存储,有利于节约存储空间和提高存储空间的利用率。
图5为本发明一实施例提供的路由地址查找装置的结构示意图。如图5所示,本实施例的路由地址查找装置包括:查找模块51和获取模块52。
其中,查找模块51,用于按照小树的层数顺序,从第一层小树的第一个节点开始,根据各层小树对应的小树存储空间中存储的各个节点的位置域信息对待查找的路由前缀进行匹配查找;所述位置域信息包括节点的父节点到该节点的路径长度和路径、标识所述节点是否有下一跳地址的路由标识和标识所述节点是否存在子节点的子节点标识。
获取模块52,与查找模块51连接,用于在查找模块51匹配到最长前缀节点,根据存储匹配到的最长前缀节点的小树存储空间中指向连续存储下一跳地址的地址存储空间的首地址的指针和匹配到的最长前缀节点的位置,从连续存储下一跳地址的地址存储空间中获取所述路由前缀的下一跳地址。
其中,查找模块51根据小树存储空间中存储的各个节点的位置域信息对待查找的路由前缀进行匹配查找的过程具体为:查找模块51判断小树存储空间中存储的当前节点的父节点到当前节点的路径是否与路由前缀当前匹配到的部分相一致;如果相一致,查找模块51根据小树存储空间中当前节点的路由标识,确定当前节点是否有下一跳地址,如果当前节点有下一跳地址,则记录当前节点的位置并标识具有下一跳地址,并根据小树存储空间中的子节点标识,判断当前节点是否存在子节点;如果当前节点存在子节点,继续查询当前节点的子节点;如果当前节点不存在子节点,结束对路由前缀的查找。如果不一致,查找模块51结束对路由前缀的查找。
本实施例路由地址查找模块的各功能模块可用于执行图3所示路由地址查找方法的流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例的路由地址查找装置,与上述实施例提供的路由前缀存储装置相配合,按照小树的层数顺序,根据对各层小树对应的小树存储空间中各个节点的位置域信息对待查找的路由前缀进行查找,由于每个小树存储空间中不再存储节点对应的下一跳地址而是存储节点是否具有下一跳地址的路由标识,每个小树存储空间中所存储的节点信息增多,使得一次查找可以查找更多比特,提高了查找速度和效率。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (14)
1.一种路由前缀存储方法,其特征在于,包括:
根据待存储的路由前缀建立路径压缩树,并将所述路径压缩树根据小树存储空间的大小划分为一棵或多棵小树,每棵小树包括多个节点,所述路径压缩树根据所述路由前缀中每个比特是0还是1进行路径分支从而形成;
为每棵小树的每个节点设置位置域信息,所述位置域信息包括所述节点的父节点到所述节点的路径长度和路径、标识所述节点是否有下一跳地址的路由标识和标识所述节点是否存在子节点的子节点标识;
按照划分出的小树的层数顺序,依次将每棵小树所有节点的位置域信息和每棵小树指向连续存储所述路由前缀对应的所有下一跳地址的地址存储空间的首地址的指针,存储到每棵小树所对应的小树存储空间中。
2.根据权利要求1所述的路由前缀存储方法,其特征在于,为每棵小树的每个节点设置位置域信息包括:
对每个节点,用2比特对所述子节点标识进行编码,如果所述节点没有子节点,所述子节点标识用00表示,如果所述节点仅有一个左子节点,所述子节点标识用10表示,如果所述节点仅有一个右子节点,所述子节点标识用01表示,如果所述节点同时有左子节点和右子节点,所述子节点标识用11表示;
对每个节点,用1比特对所述路由标识进行编码,如果所述节点有下一跳地址,所述路由标识用1表示,如果所述节点没有下一跳地址,所述路由节点用0表示;
设置所述节点的父节点到所述节点的路径长度和路径。
3.根据权利要求1或2所述的路由前缀存储方法,其特征在于,还包括:
将所述路由前缀对应的所有下一跳地址连续存储到所述地址存储空间中。
4.根据权利要求1或2所述的路由前缀存储方法,其特征在于,还包括:
将当前层小树指向下一层小树对应的小树存储空间的首地址的指针,存储到当前层小树对应的小树存储空间中。
5.根据权利要求1或2所述的路由前缀存储方法,其特征在于,为每棵小树的每个节点设置位置域信息之前包括:
判断划分出的小树的层数是否小于或等于预设层数阈值;如果判断结果为是,执行为每棵小树的每个节点设置位置域信息的操作。
6.一种路由地址查找方法,其特征在于,包括:
按照小树的层数顺序,从第一层小树的第一个节点开始,根据各层小树对应的小树存储空间中存储的各个节点的位置域信息对待查找的路由前缀进行匹配查找;所述位置域信息包括所述节点的父节点到所述节点的路径长度和路径、标识所述节点是否有下一跳地址的路由标识和标识所述节点是否存在子节点的子节点标识;
如果匹配到最长前缀节点,根据存储匹配到的最长前缀节点的小树存储空间中指向连续存储下一跳地址的地址存储空间的首地址的指针和匹配到的最长前缀节点的位置,从连续存储下一跳地址的地址存储空间中获取所述路由前缀的下一跳地址。
7.根据权利要求6所述的路由地址查找方法,其特征在于,根据所述小树存储空间中存储的各个节点的位置域信息对待查找的路由前缀进行匹配查找包括:
判断所述小树存储空间中当前节点的父节点到当前节点的路径是否与所述路由前缀当前匹配到的部分相一致;
如果相一致,根据所述小树存储空间中当前节点的路由标识,确定当前节点是否有下一跳地址,如果当前节点有下一跳地址,则记录当前节点的位置并标识具有下一跳地址,并根据所述小树存储空间中的子节点标识,判断当前节点是否存在子节点;如果当前节点存在子节点,继续查询所述子节点;如果当前节点不存在子节点,结束对所述路由前缀的查找;
如果不一致,结束对所述路由前缀的查找。
8.一种路由前缀存储装置,其特征在于,包括:
小树划分模块,用于根据待存储的路由前缀建立路径压缩树,并将所述路径压缩树根据小树存储空间的大小划分为一棵或多棵小树,每棵小树包括多个节点,所述路径压缩树根据所述路由前缀中每个比特是0还是1进行路径分支从而形成;
信息设置模块,用于为每棵小树的每个节点设置位置域信息,所述位置域信息包括所述节点的父节点到所述节点的路径长度和路径、标识所述节点是否有下一跳地址的路由标识和标识所述节点是否存在子节点的子节点标识;
存储模块,用于按照划分出的小树的层数顺序,依次将每棵小树所有节点的位置域信息和每棵小树指向连续存储所述路由前缀对应的所有下一跳地址的地址存储空间的首地址的指针,存储到每棵小树所对应的小树存储空间中。
9.根据权利要求8所述的路由前缀存储装置,其特征在于,所述信息设置模块包括:
第一设置单元,用于对每个节点,用2比特对所述子节点标识进行编码,如果所述节点没有子节点,所述子节点标识用00表示,如果所述节点仅有一个左子节点,所述子节点标识用10表示,如果所述节点仅有一个右子节点,所述子节点标识用01表示,如果所述节点同时有左子节点和右子节点,所述子节点标识用11表示;
第二设置单元,用于对每个节点,用1比特对所述路由标识进行编码,如果所述节点有下一跳地址,所述路由标识用1表示,如果所述节点没有下一跳地址,所述路由节点用0表示;
第三设置单元,用于设置所述节点的父节点到所述节点的路径长度和路径。
10.根据权利要求8或9所述的路由前缀存储装置,其特征在于,所述存储模块还用于将所述路由前缀对应的所有下一跳地址连续存储到所述地址存储空间中。
11.根据权利要求8或9所述的路由前缀存储装置,其特征在于,所述存储模块还用于将当前层小树指向下一层小树对应的小树存储空间的首地址的指针,存储到当前层小树对应的小树存储空间中。
12.根据权利要求8或9所述的路由前缀存储装置,其特征在于,还包括:
判断模块,用于在所述信息设置模块为每棵小树的每个节点设置位置域信息之前,判断划分出的小树的层数是否小于或等于预设层数阈值,如果判断结果为是,触发所述信息设置模块为每棵小树的每个节点设置位置域信息。
13.一种路由地址查找装置,其特征在于,包括:
查找模块,用于按照小树的层数顺序,从第一层小树的第一个节点开始,根据各层小树对应的小树存储空间中存储的各个节点的位置域信息对待查找的路由前缀进行匹配查找;所述位置域信息包括所述节点的父节点到所述节点的路径长度和路径、标识所述节点是否有下一跳地址的路由标识和标识所述节点是否存在子节点的子节点标识;
获取模块,用于在所述查找模块匹配到最长前缀节点,根据存储匹配到的最长前缀节点的小树存储空间中指向连续存储下一跳地址的地址存储空间的首地址的指针和匹配到的最长前缀节点的位置,从连续存储下一跳地址的地址存储空间中获取所述路由前缀的下一跳地址。
14.根据权利要求13所述的路由地址查找装置,其特征在于,所述查找模块具体用于判断所述小树存储空间中当前节点的父节点到当前节点的路径是否与所述路由前缀当前匹配到的部分相一致;如果相一致,根据所述小树存储空间中当前节点的路由标识,确定当前节点是否有下一跳地址,如果当前节点有下一跳地址,则记录当前节点的位置并标识具有下一跳地址,并根据所述小树存储空间中的子节点标识,判断当前节点是否存在子节点;如果当前节点存在子节点,继续查询所述子节点;如果当前节点不存在子节点,结束对所述路由前缀的查找;如果不一致,结束对所述路由前缀的查找。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2011/083242 WO2013078644A1 (zh) | 2011-11-30 | 2011-11-30 | 路由前缀存储方法、装置及路由地址查找方法、装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103404092A CN103404092A (zh) | 2013-11-20 |
CN103404092B true CN103404092B (zh) | 2015-11-25 |
Family
ID=48534625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180002985.6A Expired - Fee Related CN103404092B (zh) | 2011-11-30 | 2011-11-30 | 路由前缀存储方法、装置及路由地址查找方法、装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103404092B (zh) |
WO (1) | WO2013078644A1 (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104090942A (zh) * | 2014-06-30 | 2014-10-08 | 中国电子科技集团公司第三十二研究所 | 应用于网络处理器中的Trie搜索方法及装置 |
CN106330716B (zh) * | 2015-06-30 | 2019-12-13 | 新华三技术有限公司 | Ip路由查找方法及装置 |
CN106330721B (zh) * | 2015-06-30 | 2019-09-17 | 新华三技术有限公司 | Ip路由查找方法及装置 |
CN110800008B (zh) * | 2019-03-04 | 2023-06-30 | 创新先进技术有限公司 | 构建区块链世界状态默克尔帕特里夏字典树子树 |
CN111641729B (zh) * | 2019-05-23 | 2021-03-30 | 北京航空航天大学 | 一种基于前缀树的域间路径标识前缀冲突检测与分解方法 |
CN113133052B (zh) * | 2020-01-13 | 2023-01-13 | 中国移动通信有限公司研究院 | 路径选择方法、装置及iab基站 |
CN112134805B (zh) * | 2020-09-23 | 2022-07-08 | 中国人民解放军陆军工程大学 | 基于硬件实现的快速路由更新电路结构及更新方法 |
CN112527753B (zh) * | 2020-12-11 | 2023-05-26 | 平安科技(深圳)有限公司 | Dns解析记录无损压缩方法、装置、电子设备及存储介质 |
CN115567444B (zh) * | 2022-09-23 | 2024-02-27 | 北京香哈网络股份有限公司 | 一种控制器路由地址查找调用方法及系统 |
CN117150086B (zh) * | 2023-09-12 | 2024-03-22 | 北京云枢创新软件技术有限公司 | 基于层次结构树的子节点的生成方法、电子设备和介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101459569A (zh) * | 2008-12-12 | 2009-06-17 | 华为技术有限公司 | 建立路由索引树的方法、装置和查找路由索引树的方法、装置 |
CN102045412A (zh) * | 2010-12-28 | 2011-05-04 | 赛尔网络有限公司 | IPv6地址前缀压缩存储方法及设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030236793A1 (en) * | 2002-06-19 | 2003-12-25 | Ericsson Inc. | Compressed prefix tree structure and method for traversing a compressed prefix tree |
CN101645844A (zh) * | 2009-08-14 | 2010-02-10 | 华为技术有限公司 | 路由存储、查找的方法及装置 |
-
2011
- 2011-11-30 CN CN201180002985.6A patent/CN103404092B/zh not_active Expired - Fee Related
- 2011-11-30 WO PCT/CN2011/083242 patent/WO2013078644A1/zh active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101459569A (zh) * | 2008-12-12 | 2009-06-17 | 华为技术有限公司 | 建立路由索引树的方法、装置和查找路由索引树的方法、装置 |
CN102045412A (zh) * | 2010-12-28 | 2011-05-04 | 赛尔网络有限公司 | IPv6地址前缀压缩存储方法及设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2013078644A1 (zh) | 2013-06-06 |
CN103404092A (zh) | 2013-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103404092B (zh) | 路由前缀存储方法、装置及路由地址查找方法、装置 | |
CN102484610B (zh) | 路由表建立方法和装置及路由表查找方法和装置 | |
CN107770076A (zh) | 一种哈希冲突的处理方法、装置及交换设备 | |
CN103595637B (zh) | 基于树与哈希表的内容中心网络结点处理数据方法 | |
CN102377664B (zh) | 一种基于tcam的区域匹配装置和方法 | |
CN102739520B (zh) | 查找方法及装置 | |
CN101110778A (zh) | 一种利用默认路由压缩路由转发表的方法 | |
CN105119834B (zh) | 一种基于复合trie树结构的源地址目的地址联合查找方法 | |
CN102035738B (zh) | 一种获取路由信息的方法及装置 | |
CN106549872A (zh) | 最长前缀匹配与精确匹配结合的星载快速路由查找系统 | |
CN105141525A (zh) | IPv6路由查找方法及装置 | |
CN109921995A (zh) | 一种配置地址表的方法、fpga和应用该fpga的网络设备 | |
CN108322394A (zh) | 路由表建立、查找、删除及状态变更方法和装置 | |
CN102045412A (zh) | IPv6地址前缀压缩存储方法及设备 | |
WO2009132556A1 (zh) | 一种数据查找的方法及装置 | |
CN101997755B (zh) | 映射信息交换的方法及映射节点 | |
CN110096458B (zh) | 基于神经网络的命名数据网内容存储池数据检索方法 | |
WO2010054599A1 (zh) | 存储数据的方法、装置及系统 | |
CN105959224A (zh) | 基于比特向量的高速路由查找装置及方法 | |
CN106656816B (zh) | 分布式ipv6路由查找方法和系统 | |
CN102984071B (zh) | 分段地址路由的路由表组织方法及查找路由的方法 | |
CN101938424B (zh) | 建立路由表的方法和装置及报文转发方法和装置 | |
CN110109616B (zh) | 基于神经网络的命名数据网内容存储池数据删除方法 | |
CN103209128B (zh) | 同时支持数据报和虚电路服务的数据转发方法及路由器 | |
CN106302178A (zh) | 一种路由查询方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20151125 Termination date: 20191130 |