路由表项的存储方法、查找方法、装置及系统的制作方法

文档序号:7861903阅读:282来源:国知局
专利名称:路由表项的存储方法、查找方法、装置及系统的制作方法
技术领域
本发明涉及计算机领域,特别涉及一种路由表项的存储方法、查找方法、装置及系统。
背景技术
在网络数据传输过程中,路由器根据路由表项的查找结果进行数据的转发。为了减少网络设备的存储,通常路由表项的直接查找结果不是转发动作,而是查找结果的索引,根据索引进行线性表查找最终获取转发动作。随着网络的迅猛发展,路由表项的数量越来越大,位宽越来越长,种类也越来越多,对路由表项的存储空间和查找速率提出了更高的要求。 现有技术中,通常使用基于二叉树的路由表项的存储、查找方法。将每个已知路由地址分解成一个下界(low point)地址和一个上界(high point)地址,按照“左大右小”的原则存入二叉树,每个节点都存储一个边界地址。在查找的时候,将查询地址(search key)从二叉树的根节点开始比较,遍历二叉树,记录最后一次向左走的节点的位置,获得查找结果的索引,使用该索引可以得到相应的转发动作。同时,当需要存储和查找的路由表项的位宽大于存储空间的位宽时,只能做硬件的改变,例如换一个更大位宽的存储介质等。在实现本发明的过程中,发明人发现现有技术至少存在以下问题现有技术中路由地址需要分解为上界和下界两个地址存储,占用存储空间大,查找速率不高。当需要对位宽大于当前存储空间位宽的路由地址做路由表项存储和查找时,存储空间要做硬件改变以适应该网络地址的位宽需要。

发明内容
为了解决现有技术的问题,本发明实施例提供了一种路由表项的存储方法、查找方法、装置及系统。所述技术方案如下一方面,提供了一种路由表项的存储方法,所述方法包括将路由表项的每个路由地址按照预设长度划分成至少两个地址段;为每个路由地址的首地址段分配对应的地址后缀,并将所述每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀;将所述每个路由地址的首地址段存储至第一二叉树的节点中,并存储所述每个路由地址的首地址段对应的地址后缀;如果所述下一地址段为尾地址段,则将所述每个路由地址的尾地址段对应的地址前缀及尾地址段一并存储至第二二叉树的节点中,并存储所述每个路由地址对应的查找结果的索引,所述每个路由地址对应的查找结果的索引与所述每个路由地址的尾地址段的地址前缀及尾地址段相对应,且每个查找结果的索引对应一个查找结果。可选地,所述将路由表项的每个路由地址按照预设长度划分成至少两个地址段之后,还包括
为路由表项的每个路由地址中的每个类型的地址段分配对应的类型标识,以根据路由表项的每个路由地址的每个地址段所对应的类型标识确定每个地址段的类型;其中,所述路由表项的每个路由地址的地址段的类型至少包括首地址段及尾地址段。可选地,所述将所述每个路由地址的首地址段存储至第一二叉树的节点中,具体包括将所述每个路由地址的首地址段按照由大到小的顺序依次存储至所述第一二叉树的节点中。可选地,所述将所述每个路由地址的尾地址段对应的地址前缀及尾地址段一并存储至第二二叉树的节点中,具体包括将所述每个路由地址的尾地址段对应的地址前缀及尾地址段按照由大到小的顺·序依次存储至所述第二二叉树的节点中。可选地,所述路由表项的每个路由地址的地址段的类型还包括中间地址段,所述将所述每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀之后,还包括如果所述下一地址段为中间地址段,则为所述每个路由地址的中间地址段分配对应的地址后缀,并将所述地址后缀作为所述中间地址段的下一地址段的地址前缀;将所述每个路由地址的中间地址段对应的地址前缀及中间地址段一并存储至第三二叉树的节点中,并存储所述每个路由地址的中间地址段对应的地址后缀。可选地,所述将所述每个路由地址的中间地址段对应的地址前缀及中间地址段一并存储至第三二叉树的节点中,具体包括将所述每个路由地址的中间地址段对应的地址前缀及中间地址段按照由大到小的顺序依次存储至所述第三二叉树的节点中。可选地,如果所述每个路由地址有多个中间地址段,则将所述每个路由地址的每个中间地址段对应的地址前缀及中间地址段分别存储至不同的第三二叉树的节点中,所述第三二叉树的个数与所述每个路由地址的中间地址段的个数相同。可选地,所述为每个路由地址的首地址段分配对应的地址后缀,具体包括如果至少两个路由地址的首地址段相同,则为所述至少两个路由地址的首地址段分配相同的地址后缀。可选地,所述为所述每个路由地址的中间地址段分配对应的地址后缀,具体包括如果至少两个路由地址的首地址段与中间地址段均相同,则为所述至少两个路由地址的中间地址段分配相同的地址后缀。可选地,删除所述路由表项中的至少一个路由地址时,所述方法还包括从第二二叉树中删除被删除的路由地址的尾地址段的地址前缀及尾地址段;如果被删除的路由地址的首地址段与所述路由表项中的其他路由地址的首地址段相同,则在所述第一二叉树中保留所述被删除的路由地址的首地址段及其地址后缀;且如果所述被删除的路由地址具有中间地址段,所述被删除的路由地址的中间地址段与所述路由表项中的其他路由地址的中间地址段相同,则在所述第三二叉树中保留所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀,如果所述被删除的路由地址的中间地址段与所述路由表项中的其他路由地址的中间地址段不相同,从所述第三二叉树中删除所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀;如果被删除的路由地址的首地址段与所述路由表项中的其他路由地址的首地址段不同,从所述第一二叉树中删除所述被删除的路由地址的首地址段及其地址后缀,且如果所述被删除的路由地址具有中间地址段,从所述第三二叉树中删除所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀。另一方面,还提供了一种路由表项的查找方法,所述方法包括将查询地址按照预设长度划分成至少两个地址段;根据所述查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段,所述第一二叉树的节点中存储了路由表项的每个路由地址的首地址段;如果在所述第一二叉树中查找到与所述查询地址的首地址段相匹配的首地址段, 且所述查询地址的首地址段的下一地址段为所述查询地址的尾地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为所述查询地址的尾地址段的地址前
三双;根据所述查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段,所述第二二叉树的节点中存储了路由表项的每个路由地址的尾地址段的地址前缀及尾地址段;如果在所述第二二叉树中查找到与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则获取查找到的尾地址段的地址前缀及尾地址段对应的查找结果的索引,并根据所述查找结果的索引得到查找结果。可选地,所述将查询地址按照预设长度划分成至少两个地址段之后,还包括为查询地址中的每个类型的地址段分配对应的类型标识,以根据查询地址的每个地址段所对应的类型标识确定所述查询地址的每个地址段的类型;其中,所述查询地址的地址段的类型至少包括首地址段及尾地址段。可选地,所述根据所述查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段,具体包括从所述第一二叉树的根节点开始,将所述查询地址的首地址段与所述第一二叉树中存储的路由表项的每个路由地址的首地址段进行逐层比较;如果所述查询地址的首地址段大于等于当前比较的路由地址的首地址段,则将所述查询地址的首地址段与当前比较的路由地址的首地址段左侧的路由地址的首地址段进行比较;如果所述查询地址的首地址段小于当前比较的路由地址的首地址段,则将所述查询地址的首地址段与当前比较的路由地址的首地址段右侧的路由地址的首地址段进行比较;依此类推,直至得出与所述查询地址的首地址段相匹配的路由地址的首地址段;如果参与比较的路由地址的首地址段中不存在与所述查询地址的首地址段相匹配的首地址段,则查找结束。可选地,所述根据所述查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段,具体包括
从所述第二二叉树的根节点开始,将所述查询地址的尾地址段的地址前缀及尾地址段与所述第二二叉树中存储的路由表项的每个路由地址的尾地址段的地址前缀及尾地址段进行逐层比较;如果所述查询地址的尾地址段的地址前缀及尾地址段大于等于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将所述查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段左侧的路由地址的尾地址段的地址前缀及尾地址段进行比较;如果所述查询地址的尾地址段的地址前缀及尾地址段小于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将所述查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段右侧的路由地址的尾地址段的地址前缀及尾地址段进行比较;依此类推,直至得出与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的 路由地址的尾地址段的地址前缀及尾地址段;如果参与比较的路由地址的尾地址段的地址前缀及尾地址段中不存在与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则查找结束。可选地,所述查询地址的地址段的类型还包括中间地址段,所述根据所述查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段之后,还包括如果在所述第一二叉树中查找到与所述查询地址的首地址段相匹配的首地址段,且所述查询地址的首地址段的下一地址段为所述查询地址的中间地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为所述查询地址的中间地址段的地址iu缀;根据所述查询地址的中间地址段的地址前缀及中间地址段在第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段,所述第三二叉树的节点中存储了路由表项的每个路由地址的中间地址段的地址前缀及中间地址段;如果在所述第三二叉树中查找到与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则获取查找到的中间地址段对应的地址后缀,将获取到的地址后缀作为所述查询地址的尾地址段的地址前缀,并继续执行根据所述查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段。可选地,所述根据所述查询地址的中间地址段的地址前缀及中间地址段在第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段,具体包括从所述第三二叉树的根节点开始,将所述查询地址的中间地址段的地址前缀及中间地址段与所述第三二叉树中存储的路由表项的每个路由地址的中间地址段的地址前缀及中间地址段进行逐层比较;如果所述查询地址的中间地址段的地址前缀及中间地址段大于等于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将所述查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段左侧的路由地址的中间地址段的地址前缀及中间地址段进行比较;
如果所述查询地址的中间地址段的地址前缀及中间地址段小于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将所述查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段右侧的路由地址的中间地址段的地址前缀及中间地址段进行比较;依此类推,直至得出与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的路由地址的中间地址段的地址前缀及中间地址段;如果参与比较的路由地址的中间地址段的地址前缀及中间地址段中不存在与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则查找结束。可选地,如果所述查询地址有多个中间地址段,则根据所述查询地址的每个中间地址段的地址前缀及中间地址段在对应的第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段。
另一方面,还提供了一种路由表项的存储装置,所述装置包括划分模块,用于将路由表项的每个路由地址按照预设长度划分成至少两个地址段;分配模块,用于为所述划分模块划分得到的每个路由地址的首地址段分配对应的地址后缀,并将所述每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀;第一存储模块,用于将所述划分模块划分得到的每个路由地址的首地址段存储至第一二叉树的节点中,并存储所述分配模块分配的每个路由地址的首地址段对应的地址后
三双;第二存储模块,用于如果所述每个路由地址的首地址段的下一地址段为尾地址段,则将所述每个路由地址的尾地址段对应的地址前缀及尾地址段一并存储至第二二叉树的节点中,并存储所述每个路由地址对应的查找结果的索引,所述每个路由地址对应的查找结果的索引与所述每个路由地址的尾地址段的地址前缀及尾地址段相对应,且每个查找结果的索引对应一个查找结果。可选地,所述分配模块,还用于为路由表项的每个路由地址中的每个类型的地址段分配对应的类型标识,以根据路由表项的每个路由地址的每个地址段所对应的类型标识确定每个地址段的类型;其中,所述路由表项的每个路由地址的地址段的类型至少包括首地址段及尾地址段。可选地,所述第一存储模块,具体用于将所述每个路由地址的首地址段按照由大到小的顺序依次存储至所述第一二叉树的节点中。可选地,所述第二存储模块,具体用于将所述每个路由地址的尾地址段对应的地址前缀及尾地址段按照由大到小的顺序依次存储至所述第二二叉树的节点中。可选地,所述划分模块划分的路由表项的每个路由地址的地址段的类型还包括中间地址段;所述分配模块,还用于如果所述下一地址段为中间地址段,则为所述每个路由地址的中间地址段分配对应的地址后缀,并将所述地址后缀作为所述中间地址段的下一地址段的地址前缀;
所述装置还包括第三存储模块,用于将所述每个路由地址的中间地址段对应的地址前缀及中间地址段一并存储至第三二叉树的节点中,并存储所述每个路由地址的中间地址段对应的地址后缀。可选地,所述第三存储模块,具体用于将所述每个路由地址的中间地址段对应的地址前缀及中间地址段按照由大到小的顺序依次存储至所述第三二叉树的节点中。可选地,所述第三存储模块,用于如果所述每个路由地址有多个中间地址段,则将所述每个路由地址的每个中间地址段对应的地址前缀及中间地址段分别存储至不同的第三二叉树的节点中,所述中间段地址段存储子单元的个数与所述每个路由地址的中间地址段的个数相同。可选地,所述分配模块,用于如果至少两个路由地址的首地址段相同,则为所述至·少两个路由地址的首地址段分配相同的地址后缀。可选地,所述分配模块,用于如果至少两个路由地址的首地址段与中间地址段均相同,则为所述至少两个路由地址的中间地址段分配相同的地址后缀。可选地,所述装置还包括删除模块,用于从所述第二二叉树中删除被删除的路由地址的尾地址段的地址前缀及尾地址段;如果被删除的路由地址的首地址段与所述路由表项中的其他路由地址的首地址段相同,则在所述第一二叉树中保留所述被删除的路由地址的首地址段及其地址后缀;且如果所述被删除的路由地址具有中间地址段,所述被删除的路由地址的中间地址段与所述路由表项中的其他路由地址的中间地址段相同,则在所述第三二叉树中保留所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀,如果所述被删除的路由地址的中间地址段与所述路由表项中的其他路由地址的中间地址段不相同,从所述第三二叉树中删除所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀;如果被删除的路由地址的首地址段与所述路由表项中的其他路由地址的首地址段不同,从所述第一二叉树中删除所述被删除的路由地址的首地址段及其地址后缀,且如果所述被删除的路由地址具有中间地址段,从所述第三二叉树中删除所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀。另一方面,还提供了一种路由表项的查找装置,所述装置包括划分模块,用于将查询地址按照预设长度划分成至少两个地址段;第一查找模块,用于根据所述划分模块划分得到的查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段,所述第一二叉树的节点中存储了路由表项的每个路由地址的首地址段;第一获取模块,用于如果所述第一查找模块在所述第一二叉树中查找到与所述查询地址的首地址段相匹配的首地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为所述查询地址的下一地址段的地址前缀;第二查找模块,用于如果所述查询地址的首地址段的下一地址段为尾地址段,则根据所述查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段,所述第二二叉树的节点中存储了路由表项的每个路由地址的尾地址段的地址前缀及尾地址段;第二获取模块,用于如果所述第二查找模块在所述第二二叉树中查找到与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则获取查找到的尾地址段的地址前缀及尾地址段对应的查找结果的索引,并根据所述查找结果的索引得到查找结果。可选地,所述装置还包括分配模块,用于为所述划分模块划分得到的查询地址中的每个类型的地址段分配对应的类型标识,以根据查询地址的每个地址段所对应的类型标识确定所述查询地址的每个地址段的类型;其中,所述查询地址的地址段的类型至少包括首地址段及尾地址段。 可选地,所述第一查找模块,具体用于从所述第一二叉树的根节点开始,将所述查询地址的首地址段与所述第一二叉树中存储的路由表项的每个路由地址的首地址段进行逐层比较;如果所述查询地址的首地址段大于等于当前比较的路由地址的首地址段,则将所述查询地址的首地址段与当前比较的路由地址的首地址段左侧的路由地址的首地址段进行比较;如果所述查询地址的首地址段小于当前比较的路由地址的首地址段,则将所述查询地址的首地址段与当前比较的路由地址的首地址段右侧的路由地址的首地址段进行比较;依此类推,直至得出与所述查询地址的首地址段相匹配的路由地址的首地址段;如果参与比较的路由地址的首地址段中不存在与所述查询地址的首地址段相匹配的首地址段,则查找结束。可选地,所述第二查找模块,具体用于从所述第二二叉树的根节点开始,将所述查询地址的尾地址段的地址前缀及尾地址段与所述第二二叉树中存储的路由表项的每个路由地址的尾地址段的地址前缀及尾地址段进行逐层比较;如果所述查询地址的尾地址段的地址前缀及尾地址段大于等于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将所述查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段左侧的路由地址的尾地址段的地址前缀及尾地址段进行比较;如果所述查询地址的尾地址段的地址前缀及尾地址段小于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将所述查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段右侧的路由地址的尾地址段的地址前缀及尾地址段进行比较;依此类推,直至得出与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的路由地址的尾地址段的地址前缀及尾地址段;如果参与比较的路由地址的尾地址段的地址前缀及尾地址段中不存在与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则查找结束。可选地,所述划分模块划分得到的查询地址的地址段的类型还包括中间地址段;
所述装置还包括第三获取模块,用于如果在所述第一二叉树中查找到与所述查询地址的首地址段相匹配的首地址段,且所述查询地址的首地址段的下一地址段为所述查询地址的中间地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为所述查询地址的中间地址段的地址前缀;第三查找模块,用于根据所述查询地址的中间地址段的地址前缀及中间地址段在第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段,所述第三二叉树的节点中存储了路由表项的每个路由地址的中间地址段的地址前缀及中间地址段;第四获取模块,用于如果在所述第三二叉树中查找到与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则获取查找到的中间地址段对应的地址后缀,将获取到的地址后缀作为所述查询地址的尾地址段的地址前缀,并继续执行根据所述查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段。 可选地,所述第三查找模块,具体用于从所述第三二叉树的根节点开始,将所述查询地址的中间地址段的地址前缀及中间地址段与所述第三二叉树中存储的路由表项的每个路由地址的中间地址段的地址前缀及中间地址段进行逐层比较;如果所述查询地址的中间地址段的地址前缀及中间地址段大于等于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将所述查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段左侧的路由地址的中间地址段的地址前缀及中间地址段进行比较;如果所述查询地址的中间地址段的地址前缀及中间地址段小于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将所述查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段右侧的路由地址的中间地址段的地址前缀及中间地址段进行比较;依此类推,直至得出与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的路由地址的中间地址段的地址前缀及中间地址段;如果参与比较的路由地址的中间地址段的地址前缀及中间地址段中不存在与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则查找结束。可选地,所述第三查找模块,用于如果所述查询地址有多个中间地址段,则根据所述查询地址的每个中间地址段的地址前缀及中间地址段在对应的第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段。另一方面,还提供了一种路由表项的查找系统,所述系统包括路由表项的存储装置和路由表项的查找装置;其中,所述路由表项的存储装置如上所述的路由表项的存储装置;所述路由表项的查找装置如上所述的路由表项的查找装置。另一方面,还提供了一种路由表项的存储方法,所述方法包括将待存储的路由地址按照预设长度划分成首地址段和尾地址段;为所述首地址段分配地址后缀,为所述尾地址段分配地址前缀,所述地址前缀和地址后缀间符合预设的对应关系;将所述首地址段存储至第一二叉树的节点中,并记录所述首地址段在所述第一二叉树中的存储地址与所述地址前缀的对应关系;将所述地址前缀和所述尾地址段存储至第二二叉树中,并记录与所述地址前缀和所述尾地址段对应的索引结果。所述的路由表项的存储方法,还包括所述地址前缀和所述地址后缀相同。所述的路由表项的存储方法,所述将所述地址前缀和所述尾地址段存储至第二二叉树中包括将所述地址前缀和所述尾地址段存储至所述第二二叉树的同一个节点中。另一方面,还提供了一种路由地址的查找方法,所述方法包括·获得待查找的路由地址,并将所述路由地址按照预设长度划分成首地址段和尾地址段;在第一二叉树中查找所述首地址段,并获得与所述首地址段对应的地址后缀;根据预设的对应关系,根据所述地址后缀获得地址前缀;根据所述地址前缀和所述尾地址段查找第二二叉树,并根据查找结果获得路由信
肩、O本发明实施例提供的技术方案带来的有益效果是通过将路由地址划分为至少两个地址段,并将每个地址段存储至对应的二叉树中,相比现有技术用两个二叉树节点存储一个路由地址的两个边界值的方式而言,其占用的存储空间更少;且当存储的路由地址的位宽大于存储空间的位宽时,可将路由地址划分为至少两段进行存储,相比现有技术需改变硬件存储空间的方式而言,能够更灵活地适用于多种位宽的路由地址的存储;另外,通过分段查找的方式获得查找结果,可提高查找速率。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图I为本发明实施例一提供的一种路由表项的存储方法流程图;图2为本发明实施例一提供的一种路由表项的查找方法流程图;图3为本发明实施例二提供的一种路由表项的存储方法流程图;图4为本发明实施例二提供的一种路由表项的存储二叉树结构图;图5为本发明实施例二提供的另一种路由表项的存储二叉树结构图;图6为本发明实施例三提供的一种路由表项的查找方法流程图;图7为本发明实施例二提供的一种存储和查找路由表项的硬件不意图;图8为本发明实施例四提供的一种路由表项的存储装置的结构示意图;图9为本发明实施例四提供的另一种路由表项的存储装置的结构示意图;图10为本发明实施例四提供的另一种路由表项的存储装置的结构示意图11为本发明实施例五提供的一种路由表项的查找装置的结构示意图;图12为本发明实施例五提供的另一种路由表项的查找装置的结构示意图;图13为本发明实施例五提供的另一种路由表项的查找装置的结构示意图;图14为本发明实施例六提供的一种路由表项的查找系统的结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例一本实施例提供了一种路由表项的存储方法,该方法通过分段存储的方式,节省存·储路由地址的二叉树的存储空间,并实现路由表项的灵活存储。参见图1,本实施例提供的路由表项的存储方法流程具体如下101 :将路由表项的每个路由地址按照预设长度划分成至少两个地址段;102 :为每个路由地址的首地址段分配对应的地址后缀,并将每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀;103:将每个路由地址的首地址段存储至第一二叉树的节点中,并存储每个路由地址的首地址段对应的地址后缀;104 :如果下一地址段为尾地址段,则将每个路由地址的尾地址段对应的地址前缀及尾地址段一并存储至第二二叉树的节点中,并存储每个路由地址对应的查找结果的索弓丨,每个路由地址对应的查找结果的索引与每个路由地址的尾地址段的地址前缀及尾地址段相对应,且每个查找结果的索引对应一个查找结果。本实施例还提供了一种路由表项的查找方法,针对上述分段存储路由表项的方式,本实施例采取了分段查找的方法,从而提高路由表项的查找速率。参见图2,本实施例提供的路由表项的查找方法流程具体如下201 :将查询地址按照预设长度划分成至少两个地址段;202 :根据查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段,第一二叉树的节点中存储了路由表项的每个路由地址的首地址段;203 :如果在第一二叉树中查找到与查询地址的首地址段相匹配的首地址段,且查询地址的首地址段的下一地址段为查询地址的尾地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为查询地址的尾地址段的地址前缀;204:根据查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段,第二二叉树的节点中存储了路由表项的每个路由地址的尾地址段的地址前缀及尾地址段;205 :如果在第二二叉树中查找到与查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则获取查找到的尾地址段的地址前缀及尾地址段对应的查找结果的索引,并根据查找结果的索引得到查找结果。本实施例提供的方法,通过将路由地址划分为至少两个地址段,并将每个地址段存储至对应的二叉树中,相比现有技术用两个二叉树节点存储一个路由地址的两个边界值的方式而言,其占用的存储空间更少;且当存储的路由地址的位宽大于存储空间的位宽时,可将路由地址划分为至少两段进行存储,相比现有技术需改变硬件存储空间的方式而言,能够更灵活地适用于多种位宽的路由地址的存储;另外,通过分段查找的方式获得查找结果,可提高查找速率。实施例二本实施例提供了一种路由表项的存储方法,结合上述实施例一提供的路由表项的存储内容,为了便于说明,本实施例以存储路由表项中16比特的路由地址A至I为例,对本实施例提供的路由表项的存储方法进行举例说明。其中,路由地址A至I具体如下路由地址A :1001001001000011路由地址B :1001001010010111路由地址C :1001001110001010 路由地址D :1001001111011101路由地址E :1011011010101100路由地址F :1011011010101111路由地址G :1101011110001100路由地址H :1101101110011010路由地址I :1110010110111101参见图3,本实施例提供的路由表项的存储方法在存储上述路由地址A至I时,其方法流程具体如下301 :将路由表项的每个路由地址按照预设长度划分成至少两个地址段。针对该步骤,既可以将预设长度设置为路由地址的一半长度,即将每个路由地址划分成长度相等的地址段,也可以不同的地址段分别设置不同的预设长度,即将每个路由地址划分成长度不等的地址段,本实施例不对预设长度的具体大小进行限定。在将路由表项的每个路由地址按照预设长度划分成至少两个地址段时,本实施例不对划分的地址段的个数进行限定。为了便于说明,如果仅划分成两个地址段,本实施例将划分的地址段依次命名为首地址段和尾地址段,如果划分两个以上的地址段,则除了首地址段和尾地址段外,本实施例将首地址段与尾地址段之间的地址段均命名为中间地址段,其中,中间地址段的个数为一至多个。302 :为路由表项的每个路由地址中的每个类型的地址段分配对应的类型标识,以根据路由表项的每个路由地址中的每个地址段所对应的类型标识确定每个地址段的类型。其中,如果上述步骤301将每个路由地址划分成两个地址段,则路由表项的每个路由地址的地址段的类型包括首地址段及尾地址段,为每个类型的地址段分配对应的类型标识时,例如,可以为首地址段分配类型标识00,为尾地址段分配类型标识11,除此之外,还可以分配其他标识,本实施例不对具体的类型标识进行限定,通过该类型标识能够清楚每个地址段的类型即可。如果上述步骤301将每个路由地址划分成两个以上的地址段,则路由表项的每个路由地址的地址段的类型除了包括首地址段及尾地址段外,地址段的类型还包括中间地址段。本实施例同样不对为中间地址段分配的类型标识进行限定,保证根据该地址段的类型标识能够确定该地址段的类型即可。303 :为每个路由地址的首地址段分配对应的地址后缀,并将每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀。针对该步骤,之所以为每个路由地址的首地址段分配对应的地址后缀,并将每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀,是为了在后续查找路由表项的过程中,能够根据前一地址段的地址后缀查找到具有与该地址后缀相同的地址前缀的下一地址段,因而此处首地址段的地址后缀与下一地址段的地址前缀间符合预设的对应关系。对于分配的具体地址后缀,本实施例不作具体限定。为了节省存储空间,在为每个路由地址的首地址段分配对应的地址后缀时,如果至少两个路由地址的首地址段相同,则为至少两个路由地址的首地址段分配相同的地址后缀。如果上述步骤301将路由表项的每个路由地址划分成两个地址段,即首地址段和尾地址段,则该步骤303为每个路由地址的首地址段分配对应的地址后缀后,每个路由地址的首地址段的地址后缀即作为其尾地址段的地址前缀,以将上述16比特的路由地址A至I分别划分成10比特的首地址段high_A至high_I和6比特的尾地址段low_A至low_I,并为首地址段high_A至high_I分配4比特的地址后缀next_A至next_I为例,则每个路 由地址对应的信息具体如下所示high_A :1001001001 next_A :0010 Iow_A :000011high_B :1001001010 next_B :0100 low_B :010111high_C :1001001110 next_C :0110 low_C :001010high_D :1001001111 next_D :1000 low_D :011101high_E :1011011010 next_E :1010 low_E :101100high_F :1011011010 next_F :1010 low_F :101111high_G :1101011110 next_G :1100 low_G :001100high_H :1101101110 next_H :1101 low_H :011010high_I :1110010110 next_I :1110 low_I :111101具体存储结构如图4所示,基于上述信息可以看出,路由地址E和F的首地址段相同,因而为其分配了相同的地址后缀1010。在存储路由表项的各个路由地址时,上述next_A至next_I可作为路由地址A至I的尾地址段low_A至low_I对应的地址前缀,由于前一地址段的地址后缀与后一地址段的地址前缀相同,因此,地址前缀和地址后缀可看作是两个地址段之间的关联标识,使后续实施例能够以此查找到一个完整的路由地址。如果上述步骤301将路由表项的每个路由地址划分成两个以上的地址段,即包括首地址段和尾地址段外,还包括中间地址段,则该步骤303为每个路由地址的首地址段分配对应的地址后缀后,每个路由地址的首地址段的地址后缀即作为下一个中间地址段的地址前缀,且该步骤303还需为每个路由地址的中间地址段分配对应的地址后缀,并将其地址后缀作为该中间地址段的下一地址段的地址前缀。具体地,如果每个路由地址仅包括一个中间地址段,则该中间地址段的下一地址段即为尾地址段;如果每个路由地址包括两个及以上的中间地址段,则该中间地址段的下一地址段仍为中间地址段,最后一个中间地址段的下一地址段为尾地址段。且为了节省存储空间,在为每个路由地址的首地址段及中间地址段分配对应的地址后缀时,如果至少两个路由地址的首地址段相同,则为至少两个路由地址的首地址段分配相同的地址后缀;如果至少两个路由地址的首地址段与中间地址段均相同,则为至少两个路由地址的中间地址段分配相同的地址后缀。
以将上述16比特的路由地址A至I分别划分成8比特的首地址段
IA比特的中间地址段mid_A至mid_I和4比特的尾地址段Low_A至Low_I,并为首地址段High_A至High_I分配4比特的地址后缀Nextl_A至Nextl_I,为中间地址段mid_A至mid_I分配4比特的地址后缀Next2_A至Next2_I为例,则每个路由地址的信息具体如下High_A:10010010 Next1_A:0100 mid_A:0100 Next2_A:0010 Low_A:0011High_B:10010010 Nextl_B:0100 mid_B:1001 Next2_B:0100 Low_B:0111High_C:10010011 Nextl_C:1000 mid_C:1000 Next2_C:0110 Low_C:1010High_D:10010011 Next1_D:1000 mid_D:1101 Next2_D:1000 Low_D:1101High_E:10110110 Nextl_E:1010 mid_E:1010 Next2_E:1010 Low_E:1100 High_F:10110110 Nextl_F:1010 mid_F:1010 Next2_F:1010 Low_F:llllHigh_G:11010111 Next1_G:1100 mid_G:1000 Next2_G:1100 Low_G:1100High_H:11011011 Next1_H:1101 mid_H:1001 Next2_H:1101 Low_H:1010High_I:11100101 Nextl_I:1110 mid_I:1011 Next2_I:1110 Low_I:1101具体存储结构如图5所示,基于上述信息可以看出,路由地址A和B的首地址段相同,因而为其分配了相同的地址后缀0100 ;路由地址C和D的首地址段相同,因而为其分配了相同的地址后缀1000 ;路由地址E和F的首地址段相同,因而为其分配了相同的地址后缀1010。由于路由地址E和F的首地址段相同且中间地址段也相同,因而为路由地址E和F的中间地址段分配了相同的地址后缀1010。在存储路由表项的各个路由地址时,上述Nextl_A至Nextl_I可作为路由地址A至I的中间地址段mid_A至mid_I对应的地址前缀,中间地址段mid_A至mid_I对应的地址后缀可作为路由地址A至I的尾地址段Low_A至Low_I对应的地址前缀,由于前一地址段的地址后缀与后一地址段的地址前缀相同,因此,地址前缀和地址后缀同样可看作是两个地址段之间的关联标识,以此查找到一个完整的路由地址。304:将每个路由地址的首地址段存储至第一二叉树的节点中,并存储每个路由地址的首地址段对应的地址后缀。针对该步骤,存储每个路由地址的首地址段时,具体存储方式包括但不限于将所有路由地址的首地址段按照由大到小的顺序从左往右依次存储到第一二叉树的节点中。以存储每个路由地址的首地址段的第一二叉树的结构如图4所示为例,首地址段high_H比首地址段high_I小,在第一二叉树的节点中,位于high_I的节点的右边节点上;首地址段high_G比首地址段high_H小,在第一二叉树的节点中,位于high_H的节点的右边节点上;首地址段high_F比首地址段high_G*,在第一二叉树的节点中,位于high_G的节点的右边节点上;首地址段high_E与首地址段high_F相同,因此这两个首地址段位于相同的第一二叉树节点中;以此类推,直到把所有的路由地址都存储到第一二叉树节点中。存储每个路由地址的首地址段对应的地址后缀时,本实施例不对具体存储方式进行限定,具体实施时,可在第一二叉树的最后一层存储所有首地址段对应的地址后缀,其中首地址段high_E和首地址段high_F相同,存储在相同的第一二叉树节点中,对应相同的地址后缀。按照上述过程将路由地址的首地址段及其地址后缀进行存储之后,如果下一地址段为中间地址段,则执行步骤305,如果下一地址段为尾地址段,则直接执行步骤306。
305 :将每个路由地址的中间地址段对应的地址前缀及中间地址段一并存储至第三二叉树的节点中,并存储每个路由地址的中间地址段对应的地址后缀。针对该步骤,将每个路由地址的中间地址段的地址前缀及中间地址段一并存储至第三二叉树的节点中时,具体存储方式包括但不限于将每个路由地址的中间地址段对应的地址前缀及中间地址段按照由大到小的顺序从左往右依次存储至第三二叉树的节点中。以上述步骤303中每个路由地址被划分成两个以上的地址段后,为路由地址A至I的首地址段及中间地址段分配地址后缀,并将其作为下一地址段的地址前缀为例,将中间地址段的地址前缀及中间地址段存入第三二叉树的节点中的存储方法与存储首地址段到第一二叉树中的方法相同,此处不再一一举例。对于中间地址段对应的地址后缀的存储方式,本实施例同样不作具体限定,具体实施时,可将每个路由地址的中间地址段的地址前缀及中间地址段按照从大到小的顺序从左到右地存储入第三二叉树中之后,在第三二叉树的最后一层存储每个路由地址的中间地址段对应的地址后缀。 需要说明的是,如果每个路由地址有多个中间地址段,则将每个路由地址的每个中间地址段对应的地址前缀及中间地址段分别存储至不同的第三二叉树的节点中,也就是说,第三二叉树的个数与每个路由地址的中间地址段的个数相同。通过上述过程将每个路由地址的中间地址段的地址前缀及中间地址段及地址后缀存储至第三二叉树后,通过执行步骤306,实现每个路由地址的尾地址段的存储。306 :将每个路由地址的尾地址段对应的地址前缀及尾地址段一并存储至第二二叉树的节点中,并存储每个路由地址对应的查找结果的索引,每个路由地址对应的查找结果的索引与每个路由地址的尾地址段的地址前缀及尾地址段相对应,且每个查找结果的索引对应一个查找结果。针对该步骤,将每个路由地址的尾地址段对应的地址前缀及尾地址段一并存储至第二二叉树的节点中时,具体存储方式包括但不限于将所有路由地址的尾地址段对应的地址前缀及尾地址段按照由大到小的顺序从左往右依次存储到第二二叉树的节点中。以上述步骤303中每个路由地址被划分成两个地址段后,为路由地址A至I的首地址段分配地址后缀,并将其作为尾地址段的地址前缀为例,路由地址A的尾地址段low_A对应的地址前缀为首地址段high_A的地址后缀,即next_A,因此需要将[next_A, low_A]存储入第二二叉树的节点中,以此类推。将尾地址段的地址前缀及尾地址段一并存储至第二二叉树的存储方法与存储首地址段到第一二叉树中的方法相同,此处不再一一举例。关于尾地址段的地址后缀的存储方式,本实施例不作具体限定,具体实施时,可将每个路由地址的尾地址段的地址前缀及尾地址段按照从大到小的顺序从左到右地存储入第二二叉树中之后,在第二二叉树的最后一层存储每个路由地址对应的查找结果的索引,如图4所示,本实施例以查找结果的索引用编号I至15来代替为例,根据查找结果的索引即可获得路由地址对应的查找结果。无论路由表项的每个路由地址被划分成多少个地址段,均可按照上述方式将其进行存储。进一步地,本实施例提供的方法在按照上述方式存储路由表项的每个路由地址后,针对删除路由表项中的至少一个路由地址的情况,本实施例提供的方法还包括
从第二二叉树中删除被删除的路由地址的尾地址段的地址前缀及尾地址段;如果被删除的路由地址的首地址段与路由表项中的其他路由地址的首地址段相同,则在第一二叉树中保留被删除的路由地址的首地址段及其地址后缀;且如果被删除的路由地址的中间地址段与路由表项中的其他路由地址的中间地址段相同,则在第三二叉树中保留被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀,如果被删除的路由地址的中间地址段与路由表项中的其他路由地址的中间地址段不相同,从第三二叉树中删除被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀;如果被删除的路由地址的首地址段与路由表项中的其他路由地址的首地址段不同,从第一二叉树中删除被删除的路由地址的首地址段及其地址后缀,且如果被删除的路由地址具有中间地址段,且从第三二叉树中删除被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀。为了便于理解,以路由表项的每个路由地址被划分为两个地址段,按照上述方式删除已存储的路由表项中的路由地址A为例,则具体删除步骤包括在第二二叉树中删除 路由地址A的尾地址段low_A ;路由地址的首地址段high_A与路由表项中其他的路由地址B至I的首地址段都不相同,则在第一二叉树中删除路由地址A的首地址段high_A及其地址后缀next_A。以路由表项的每个路由地址被划分为三个地址段,按照上述方式删除已存储的路由表项中的路由地址A为例,则具体删除步骤包括在第二二叉树中删除路由地址A的尾地址段Low_A ;路由地址的首地址段High_A与路由表中的路由地址B的首地址段High_B相同,则在第一二叉树中保留路由地址A的首地址段High_A及其地址后缀Nextl_A ;路由地址的中间地址段mid_A与路由表项中其他的路由地址B至I的中间地址段mid_B至mid_I都不相同,则在第三二叉树中删除路由地址A的中间地址段mid_A及其地址后缀Next2_A。以路由表项的每个路由地址被划分为三个地址段,按照上述方式删除已存储的路由表项中的路由地址G为例,则具体删除步骤包括在第二二叉树中删除路由地址G的尾地址段Low_G ;路由地址的首地址段High_G与路由表中的其他路由地址的首地址段都不相同,则在第一二叉树中删除路由地址G的首地址段High_G及其地址后缀Nextl_G ;在第三二叉树中删除路由地址G的中间地址段mid_G及其地址后缀Next2_G。本实施例提供的方法,通过将路由地址划分为至少两个地址段,并将每个地址段存储至对应的二叉树中,相比现有技术用两个二叉树节点存储一个路由地址的两个边界值的方式而言,其占用的存储空间更少;且当存储的路由地址的位宽大于存储空间的位宽时,可将路由地址划分为至少两段进行存储,相比现有技术需改变硬件存储空间的方式而言,能够更灵活地适用于多种位宽的路由地址的存储。实施例三本实施例提供了一种路由表项的查找方法,结合上述实施例一提供的路由表项的查找方法,以在上述实施例二中存储的16比特的路由地址的路由表项中查找查询地址a,b,c,d对应的查找结果为例,对本实施例提供的路由表项的查找方法进行举例说明。其中,查询地址a, b, c, d具体如下查询地址a :1001001110001011查询地址b :1011011010101100
查询地址c :1011011010111100查询地址d :1100101110011010参见图6,本实施例提供的路由表项的查找方法在查找上述查询地址a至d对应的查找结果时,其方法流程具体如下601 :将查询地址按照预设长度划分成至少两个地址段。其中,为了使查询地址划分的地址段与存储的路由地址的地址段之间具有可比性,查询地址的长度应与上述实施例二中存储的路由地址的长度一致,该步骤在将查询地址划分成地址段时,其选取的预设长度的大小可依据上述实施例二中划分路由地址的地址段时选取的预设长度而定。针对上述实施例二中将路由地址划分成10比特的首地址段及6比特的尾地址段的情况,该步骤可将查询地址同样划分为10比特的首地址段high_a至high_d和6比特的·尾地址段10 _3至low_b,则该步骤划分后的查询地址的信息具体如下high_a :1001001110 low_a :001010high_b :1011011010 low_b :101100high_c :1011011010 low_c :111100high_d :1100101110 low_d :011010针对上述实施例二中将上述16比特的路由地址分别划分成8比特的首地址段,4比特的中间地址段和4比特的尾地址段的情况,则该步骤划分后的查询地址的信息具体如下High_a :10010011 mid_a :1000 Low_a :1010High_b :10110110 mid_b :1010 Low_b :1100High_c :10110110 mid_c :1011 Low_c :1100High_d :11001011 mid_d :1001 Low_d :1010无论将查询地址划分成两个地址段,还是两个以上的地址段,为了区分查询地址的不同地址段,本实施例提供的方法在将查询地址按照预设长度划分成至少两个地址段之后,还包括为查询地址中的每个类型的地址段分配对应的类型标识,以根据查询地址的每个地址段所对应的类型标识确定查询地址的每个地址段的类型;其中,如果上述过程将每个查询地址划分成两个地址段,则每个查询地址的地址段的类型包括首地址段及尾地址段;如果上述过程将每个查询地址划分成两个以上的地址段,则每个查询地址的地址段的类型除了包括首地址段及尾地址段外,地址段的类型还包括中间地址段。本实施例不对为每种类型的地址段分配的类型标识进行限定,保证根据该地址段的类型标识能够确定该查询地址的地址段的类型即可。602 :根据查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段,第一二叉树的节点中存储了路由表项的每个路由地址的首地址段,如果查找到匹配的首地址段,且查询地址的首地址段的下一地址段为查询地址的中间地址段,则执行步骤603,如果查找到匹配的首地址段,且查询地址的首地址段的下一地址段为查询地址的尾地址段,则执行步骤606,如果未查找到匹配的首地址段,则流程结束。针对该步骤,根据查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段时,具体查找方式包括但不限于从第一二叉树的根节点开始,将查询地址的首地址段与二叉树中存储的路由表项的每个路由地址的首地址段进行逐层比较;如果查询地址的首地址段大于等于当前比较的路由地址的首地址段,则将查询地址的首地址段与当前比较的路由地址的首地址段左侧的路由地址的首地址段进行比较;如果查询地址的首地址段小于当前比较的路由地址的首地址段,则将查询地址的首地址段与当前比较的路由地址的首地址段右侧的路由地址的首地址段进行比较;依此类推,直至得出与查询地址的首地址段相匹配的路由地址的首地址段;如果参与比较的路由地址的首地址段中不存在与查询地址的首地址段相匹配的首地址段,则查找流程结束。 以将上述查询地址a的首地址段high_a在图4所示的第一二叉树中查找匹配的首地址段为例,从根节点开始,将查询地址a的首地址段high_a与路由地址D的首地址段high_D比较,比较结果为high_a小于high_D,则将high_a与high_D右侧的路由地址B的首地址段high_B比较,比较结果为high_a大于high_B,则将1^811_&与111811_13左侧的路由地址C的首地址段high_C比较,比较结果为匹配,则将路由地址C的首地址段high_C作为与查询地址a的首地址段high_a相匹配的首地址段。以将上述查询地址b的首地址段high_b在图4所示的第一二叉树中查找匹配的首地址段为例,从根节点开始,将查询地址b的首地址段high_b与路由地址D的首地址段high_D比较,比较结果为high_b大于high_D,则将high_b与high_D左侧的路由地址G的首地址段high_G比较,比较结果为high_b小于high_G,则将high_b与high_G右侧的路由地址E的首地址段high_E比较,比较结果为匹配,则将路由地址E的首地址段high_E作为与查询地址b的首地址段high_b相匹配的首地址段。查询地址c的首地址段high_c与查询地址b的首地址段high_b相同,则查询结果也相同。由于上述查询地址a, b, c的首地址段high_a, high_b, high_c在图4所示的第一二叉树中查找到匹配的首地址段,而查询地址a,b,c的首地址段的下一地址段为查询地址a,b, c的尾地址段,因此,直接执行步骤606。以将上述查询地址d的首地址段high_d在图4所示的第一二叉树中查找匹配的首地址段为例,从根节点开始,将查询地址d的首地址段high_d与路由地址D的首地址段high_D比较,比较结果为high_d大于high_D,则将high_d与high_D左侧的路由地址G的首地址段high_G比较,比较结果为high_d小于high_G,则将1^811_(1与111811_6右侧的路由地址E的首地址段high_E比较,比较结果为high_d大于high_E,因此查找结果为不匹配,也就是说,查询地址d的首地址段high_d与图4所示的第一二叉树中参与比较的路由地址的首地址段都不匹配,因此说明在图4所示的二叉树存储的路由表项中不存在查询地址d对应的查找结果,因此,结束查找流程,输出结果为未命中。如果查询地址被划分为三个或三个以上的地址段时,以将上述查询地址a的首地址段High_a在图5所示的第一二叉树中查找匹配的首地址段为例,具体查找方式与上述相同,查找结果为与路由地址C的首地址段High_C匹配。由于上述查询地址a的首地址段High_a在图5所示的第一二叉树中查找到匹配的首地址段,而查询地址a的首地址段的下一地址段为查询地址a的中间地址段,因此,直接执行步骤603。
查询地址b至d的首地址段把811_13至把811_(1的查找方式也与上述查找方式相同,在此不再一一论述,查找结果分别为,查询地址b和查询地址c具有相同的首地址段High_b和High_c,与之相匹配的是路由地址E的首地址段High_E。由于上述查询地址b和查询地址c的首地址段High_b和High_c在图5所示的第一二叉树中查找到匹配的首地址段,而查询地址b和查询地址c的首地址段的下一地址段为查询地址b和查询地址c的中间地址段,因此,直接执行步骤603。查询地址d的首地址段High_d在图5所示的第一二叉树中没有与之相匹配的首地址段,因此说明在图5所示的二叉树存储的路由表项中不存在查询地址d对应的查找结果,因此,结束查找流程,输出结果为未命中。603 :获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为查询地址的中间地址段的地址前缀。针对该步骤,由于上述实施例二在存储路由地址的首地址段对应的地址后缀时,将其存储在了第一二叉树的最后一层,因此,上述步骤602在第一二叉树中查找到与查询地址的首地址段相匹配的首地址段后,通过该查找到的首地址段与其地址后缀的对应关系,即可从第一二叉树最后一层的对应位置获取到该查找到的首地址段对应的地址后缀,·并将获取到的地址后缀作为查询地址的中间地址段的地址前缀。也就是说,由于查找到的首地址段对应的地址后缀与中间地址段的地址前缀间符合预设的对应关系,因而在获取到首地址段对应的地址后缀后,基于预设的对应关系,可根据查找到的首地址段对应的地址后缀获取查询地址的中间地址段的地址前缀。以在图5所示的第一二叉树中获取查找到的与查询地址a的首地址段High_a相匹配的首地址段High_C的地址后缀为例,High_C对应的地址后缀为Nextl_C,因此Nextl_C可作为查询地址a的中间地址段mid_a的地址前缀.查询地址b的首地址段High_b和查询地址c的首地址段High_c匹配的首地址段是High_E,High_E对应的地址后缀为Nextl_E,因此Next 1_E可作为查询地址b的中间地址段mid_b的地址前缀以及查询地址c的中间地址段mid_c的地址前缀。604:根据查询地址的中间地址段的地址前缀及中间地址段在第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段,第三二叉树的节点中存储了路由表项的每个路由地址的中间地址段的地址前缀及中间地址段。根据查询地址的中间地址段的地址前缀及中间地址段在第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段,具体包括从第三二叉树的根节点开始,将查询地址的中间地址段的地址前缀及中间地址段与第三二叉树中存储的路由表项的每个路由地址的中间地址段的地址前缀及中间地址段进行逐层比较;如果查询地址的中间地址段的地址前缀及中间地址段大于等于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段左侧的路由地址的中间地址段的地址前缀及中间地址段进行比较; 如果查询地址的中间地址段的地址前缀及中间地址段小于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段右侧的路由地址的中间地址段的地址前缀及中间地址段进行比较;依此类推,直至得出与查询地址的中间地址段的地址前缀及中间地址段相匹配的路由地址的中间地址段的地址前缀及中间地址段;如果参与比较的路由地址的中间地址段的地址前缀及中间地址段中不存在与查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则查找结束。以在图5所示的第三二叉树中查找与查询地址a的中间地址段的地址前缀Next 1_C及中间地址段mid_a相匹配的中间地址段的地址前缀及中间地址段为例,从根节点开始,将查询地址a的中间地址段的地址前缀Nextl_C及中间地址段mid_a,[Nextl_C, mid_a],与路由地址D的[Nextl_D, mid_D]比较,比较结果为[Nextl_C, mid_a]小于[Nextl_D, mid_D];则将[Nextl_C, mid_a]与右侧节点[Nextl_B, mid_B]比较,比较结果为[Nextl_C, mid_a]大于[Nextl_B, mid_B];则将[Nextl_B, mid_B]与左侧节点[Nextl_C, mid_C]比较,比较结果为[Nextl_C, mid_a]与[Nextl_C, mid_C]匹配。 以在图5所示的第三二叉树中查找与查询地址b的中间地址段的地址前缀Nextl_E及中间地址段mid_b相匹配的中间地址段的地址前缀及中间地址段为例,具体查找方法与上述相同,不再赘述,查找结果为查询地址b的中间地址段的地址前缀Next 1_E及中间地址段mid_b与第三二叉树中的[Nextl_E, mid_E]相匹配。以在图5所示的第三二叉树中查找与查询地址c的中间地址段的地址前缀Next 1_E及中间地址段mid_c相匹配的中间地址段的地址前缀及中间地址段为例,具体查找方法与上述相同,不再赘述,查找结果为查询地址c的中间地址段的地址前缀Next 1_E及中间地址段mid_c在第三二叉树中没有与之相匹配的中间地址段的地址前缀及中间地址段,因此说明在图5所示的二叉树存储的路由表项中不存在查询地址c对应的查找结果,因此,结束查找流程,输出结果为未命中。需要说明的是,如果查询地址有多个中间地址段,则根据查询地址的每个中间地址段的地址前缀及中间地址段在每个第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段。605 :获取查找到的中间地址段对应的地址后缀,并将获取到的地址后缀作为查询地址的尾地址段的地址前缀。针对该步骤,由于上述实施例二在存储路由地址的中间地址段对应的地址后缀时,将其存储在了第三二叉树的最后一层,因此,上述步骤604在第三二叉树中查找到与查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段后,通过该查找到的中间地址段与其地址后缀的对应关系,即可从第三二叉树最后一层的对应位置获取到该查找到的中间地址段对应的地址后缀,并将获取到的地址后缀作为查询地址的尾地址段的地址前缀。也就是说,由于查找到的首地址段对应的地址后缀与尾地址段的地址前缀间符合预设的对应关系,因而在获取到首地址段对应的地址后缀后,基于预设的对应关系,可根据查找到的首地址段对应的地址后缀获取查询地址的尾地址段的地址前缀。特别的,如果查询地址具有多个中间地址段,当中间地址段的下一地址段为中间地址段时,继续执行步骤603和步骤604,其中步骤603中需要获取查找到的前一个中间地址段对应的地址后缀,并将获取到的地址后缀作为查询地址的后一个中间地址段的地址前三双。以在图5所示的第三二叉树中查找到的与查询地址a的中间地址段的地址前缀Nextl_C及中间地址段mid_C匹配的中间地址段对应的地址前缀及中间地址段为例,与查询地址a的[Nextl_C,mid_a]匹配的是中间地址段[Nextl_C,mid_C],对应的地址后缀为Next2_C,因此Next2_C可作为查询地址a的尾地址段Low_a的地址前缀。以在图5所示的第三二叉树中查找到的与查询地址b的中间地址段的地址前缀Nextl_E及中间地址段mid_E匹配的中间地址段对应的地址前缀及中间地址段为例,与查询地址b的[Nextl_E,mid_b]匹配的是中间地址段,[Nextl_E,mid_E],对应的地址后缀为Next2_E,因此Next2_E可作为查询地址b的尾地址段Low_b的地址前缀。606:根据查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段,第二二叉树的节点中存储了路由表项的每个路 由地址的尾地址段的地址前缀及尾地址段,如果查找到匹配的尾地址段的地址前缀及尾地址段,则执行步骤607,否则流程结束。针对该步骤,根据查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段时,具体查找方式包括但不限于从第二二叉树的根节点开始,将查询地址的尾地址段的地址前缀及尾地址段与第二二叉树中存储的路由表项的每个路由地址的尾地址段的地址前缀及尾地址段进行逐层比较;如果查询地址的尾地址段的地址前缀及尾地址段大于等于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段左侧的路由地址的尾地址段的地址前缀及尾地址段进行比较;如果查询地址的尾地址段的地址前缀及尾地址段小于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段右侧的路由地址的尾地址段的地址前缀及尾地址段进行比较;依此类推,直至得出与查询地址的尾地址段的地址前缀及尾地址段相匹配的路由地址的尾地址段的地址前缀及尾地址段;如果参与比较的路由地址的尾地址段的地址前缀及尾地址段中不存在与查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则查找流程结束。为了便于理解,以查询地址被分为两个地址段,根据查询地址a的尾地址段的地址前缀next_C及尾地址段low_a在图4所示的第二二叉树中查找与其匹配的尾地址段的地址前缀及尾地址段为例,从根节点开始,将查询地址a的[next_C, low_a]与路由地址E的[next_E, low_E],比较结果为[next_C, low_a]小于[next_E, low_E],则将[next_C, low_a]与右侧节点[next_C,low_C]比较,比较结果为匹配,则执行步骤607。将查询地址c的尾地址段的地址前缀next_E及尾地址段low_c在图4的第二二叉树中进行查找与其匹配的尾地址段的地址前缀及尾地址段为例,从根节点开始,将查询地址c的[next_E, low_c]与路由地址E [next_E, low_E]比较,比较结果为[next_E, low_c]大于[next_E, low_E],则将[next_E, low_c]与左侧节点[next_G, low_G]比较,比较结果为[next_E, low_c]小于[next_G, low_G],则将[next_E, low_c]与右侧节点[next_F, low_F]比较,比较结果为[next_E, low_c]大于[next_F, low_F],因此查找结果为不匹配,说明在存储的路由表项中不存在查询地址c,查找流程结束。如果查询地址被分为三个地址段,以根据查询地址a的尾地址段的地址前缀Next2_C及尾地址段Low_a在图5所示的第二二叉树中查找与其匹配的尾地址段的地址前缀及尾地址段为例,从根节点开始,将查询地址a的[Next2_C,Low_a]与路由地址E的[Next2_E, Low_E]比较,比较结果为[Next2_C, Low_a]C 小于[Next2_E, Low_E];则将[Next2_C, Low_a]与右侧节点[Next2_C,Low_C]比较,比较结果为匹配,则执行步骤607。607 :获取查找到的尾地址段的地址前缀及尾地址段对应的查找结果的索引,并根据查找结果的索引得到查找结果,流程结束。具体地,由于上述实施例二在存储路由地址的尾地址段时,除了将路由地址的尾 地址段的地址前缀及尾地址段一并存储在第二二叉树的节点中之外,还在第二二叉树的最后一层存储了该路由地址对应的查找结果的索引,因此,上述步骤606在第二二叉树中查找到与查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段后,通过该查找到的尾地址段的地址前缀及尾地址段与查找结果的索引之间的对应关系,即可从第二二叉树最后一层的对应位置获取到该查找到的尾地址段所在的路由地址对应的查找结果的索引,并以此获取到查找结果。以获取查询地址a的尾地址段的地址前缀next_C及尾地址段low_a对应的查找结果为例,与尾地址段的地址前缀next_C及尾地址段low_a匹配的是路由地址C的尾地址段地址前缀next_C及尾地址段Low_C,其对应的查找结果索引是索引编号4,根据查找结果的索引编号4即可得到查询地址a对应的查找结果。在如图7所示的硬件系统中,控制界面701,用于实现路由表项的存储和删除的界面操作,控制界面701通过CPU (Central Processing Unit,中央处理单元)接口 705与存储查找引擎704连接,所述存储查找引擎可以是FPGA (Field-Programmable Gate Array,现场可编程门阵列),还可以是ASIC(Application_Specific Integrated Circuit,专用集成电路),存储查找引擎704具体的存储操作方法和本发明实施例二的存储方法原理相同;外接存储器702,用于存储控制界面701输入的路由地址,通过CPU接口与存储查找引擎连接;查询界面703,用于查询地址的输入和返回结果的界面操作,查询界面703也通过CPU接口 705与存储查找引擎连接;二叉树运算模块706,在路由表项存储时用于将每个路由地址分别存入相应的二叉树中,在路由表项查找时用于查询地址和存储的路由地址的匹配,获取匹配结果,将结果返回到查询界面703。本实施例提供的方法,通过按路由表项的路由地址的地址段划分方式将查询地址划分成地址段,并根据查询地址的地址段在存储了各种类型的地址段的二叉树中分别查找匹配的地址段,进而根据匹配的地址段获得查找结果,与现有技术相比,可提高查找速率。实施例四本实施例提供了一种路由表项的存储装置,该装置用于执行上述实施例一或实施例二提供的路由表项的存储方法。参见图8,该装置包括
划分模块801,用于将路由表项的每个路由地址按照预设长度划分成至少两个地址段。分配模块802,用于为划分模块801划分得到的每个路由地址的首地址段分配对应的地址后缀,并将每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀。第一存储模块803,用于将划分模块801划分得到的每个路由地址的首地址段存储至第一二叉树的节点中,并存储分配模块802分配的每个路由地址的首地址段对应的地
址后缀。第二存储模块804,用于如果每个路由地址的首地址段的下一地址段为尾地址段,则将每个路由地址的尾地址段对应的地址前缀及尾地址段一并存储至第二二叉树的节点中,并存储每个路由地址对应的查找结果的索引,每个路由地址对应的查找结果的索引与每个路由地址的尾地址段的地址前缀及尾地址段相对应,且每个查找结果的索引对应一个
查找结果。·进一步地,分配模块802,还用于为路由表项的每个路由地址中的每个类型的地址段分配对应的类型标识,以根据路由表项的每个路由地址的每个地址段所对应的类型标识确定每个地址段的类型;其中,路由表项的每个路由地址的地址段的类型至少包括首地址段及尾地址段。其中,第一存储模块803,具体用于将每个路由地址的首地址段按照由大到小的顺序依次存储至第一二叉树的节点中。第二存储模块804,具体用于将每个路由地址的尾地址段对应的地址前缀及尾地址段按照由大到小的顺序依次存储至第二二叉树的节点中。进一步地,划分模块801划分的路由表项的每个路由地址的地址段的类型还包括中间地址段;分配模块802,还用于如果下一地址段为中间地址段,则为每个路由地址的中间地址段分配对应的地址后缀,并将地址后缀作为中间地址段的下一地址段的地址前缀。参见图9,该装置还包括第三存储模块805,用于将每个路由地址的中间地址段对应的地址前缀及中间地址段一并存储至第三二叉树的节点中,并存储每个路由地址的中间地址段对应的地址后具体地,第三存储模块805,具体用于将每个路由地址的中间地址段对应的地址前缀及中间地址段按照由大到小的顺序依次存储至第三二叉树的节点中。进一步地,第三存储模块805,用于如果每个路由地址有多个中间地址段,则将每个路由地址的每个中间地址段对应的地址前缀及中间地址段分别存储至不同的第三二叉树的节点中,中间段地址段存储子单元的个数与每个路由地址的中间地址段的个数相同。进一步地,分配模块802,用于如果至少两个路由地址的首地址段相同,则为至少两个路由地址的首地址段分配相同的地址后缀。进一步地,分配模块802,用于如果至少两个路由地址的首地址段与中间地址段均相同,则为至少两个路由地址的中间地址段分配相同的地址后缀。参见图10,装置还包括删除模块806,用于从第二二叉树中删除被删除的路由地址的尾地址段的地址前缀及尾地址段;如果被删除的路由地址的首地址段与路由表项中的其他路由地址的首地址段相同,则在第一二叉树中保留被删除的路由地址的首地址段及其地址后缀;且如果被删除的路由地址的中间地址段与路由表项中的其他路由地址的中间地址段相同,则在第三二叉树中保留被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀,如果被删除的路由地址的中间地址段与路由表项中的其他路由地址的中间地址段不相同,从第三二叉树中删除被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀;如果被删除的路由地址的首地址段与路由表项中的其他路由地址的首地址段不同,从第一二叉树中删除被删除的路由地址的首地址段及其地址后缀,且如果被删除的路由地址具有中间地址段,从第三二叉树中删除被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀。本实施例提供的存储装置,通过将路由地址划分为至少两个地址段,并将每个地址段存储至对应的二叉树中,相比现有技术用两个二叉树节点存储一个路由地址的两个边 界值的方式而言,其占用的存储空间更少;且当存储的路由地址的位宽大于存储空间的位宽时,可将路由地址划分为至少两段进行存储,相比现有技术需改变硬件存储空间的方式而言,能够更灵活地适用于多种位宽的路由地址的存储。实施例五本实施例提供了一种路由表项的查找装置,该装置用于执行上述实施例一或实施例三提供的路由表项的查找方法。参见图11,该装置包括划分模块1101,用于将查询地址按照预设长度划分成至少两个地址段。第一查找模块1102,用于根据划分模块1101划分得到的查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段,第一二叉树的节点中存储了路由表项的每个路由地址的首地址段。第一获取模块1103,用于如果第一查找模块1102在第一二叉树中查找到与查询地址的首地址段相匹配的首地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为查询地址的下一地址段的地址前缀。第二查找模块1104,用于如果查询地址的首地址段的下一地址段为尾地址段,则根据查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段,第二二叉树的节点中存储了路由表项的每个路由地址的尾地址段的地址前缀及尾地址段。第二获取模块1105,用于如果第二查找模块1104在第二二叉树中查找到与查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则获取查找到的尾地址段的地址前缀及尾地址段对应的查找结果的索引,并根据查找结果的索引得到查找结果。参见图12,该装置还包括分配模块1106,用于为划分模块1101划分得到的查询地址中的每个类型的地址段分配对应的类型标识,以根据查询地址的每个地址段所对应的类型标识确定查询地址的每个地址段的类型;其中,查询地址的地址段的类型至少包括首地址段及尾地址段。进一步地,第一查找模块1102,具体用于从第一二叉树的根节点开始,将查询地址的首地址段与第一二叉树中存储的路由表项的每个路由地址的首地址段进行逐层比较;如果查询地址的首地址段大于等于当前比较的路由地址的首地址段,则将查询地址的首地址段与当前比较的路由地址的首地址段左侧的路由地址的首地址段进行比较;如果查询地址的首地址段小于当前比较的路由地址的首地址段,则将查询地址的首地址段与当前比较的路由地址的首地址段右侧的路由地址的首地址段进行比较;依此类推,直至得出与查询地址的首地址段相匹配的路由地址的首地址段;如果参与比较的路由地址的首地址段中不存在与查询地址的首地址段相匹配的首地址段,则查找结束。进一步地,第二查找模块1104,具体用于从第二二叉树的根节点开始,将查询地址的尾地址段的地址前缀及尾地址段与第二二叉树中存储的路由表项的每个路由地址的尾 地址段的地址前缀及尾地址段进行逐层比较;如果查询地址的尾地址段的地址前缀及尾地址段大于等于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段左侧的路由地址的尾地址段的地址前缀及尾地址段进行比较;如果查询地址的尾地址段的地址前缀及尾地址段小于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段右侧的路由地址的尾地址段的地址前缀及尾地址段进行比较;依此类推,直至得出与查询地址的尾地址段的地址前缀及尾地址段相匹配的路由地址的尾地址段的地址前缀及尾地址段;如果参与比较的路由地址的尾地址段的地址前缀及尾地址段中不存在与查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则查找结束。进一步地,划分模块1101划分得到的查询地址的地址段的类型还包括中间地址段。参见图13,装置还包括第三获取模块1107,用于如果在第一二叉树中查找到与查询地址的首地址段相匹配的首地址段,且查询地址的首地址段的下一地址段为查询地址的中间地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为查询地址的中间地址段的地址前缀。第三查找模块1108,用于根据查询地址的中间地址段的地址前缀及中间地址段在第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段,第三二叉树的节点中存储了路由表项的每个路由地址的中间地址段的地址前缀及中间地址段。第四获取模块1109,用于如果在第三二叉树中查找到与查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则获取查找到的中间地址段对应的地址后缀,将获取到的地址后缀作为查询地址的尾地址段的地址前缀,并继续执行根据查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段。
进一步地,第三查找模块1107,具体用于从第三二叉树的根节点开始,将查询地址的中间地址段的地址前缀及中间地址段与第三二叉树中存储的路由表项的每个路由地址的中间地址段的地址前缀及中间地址段进行逐层比较;如果查询地址的中间地址段的地址前缀及中间地址段大于等于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段左侧的路由地址的中间地址段的地址前缀及中间地址段进行比较;如果查询地址的中间地址段的地址前缀及中间地址段小于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段右侧的路由地址的中间地址段的地址前缀及中间地址段进行比较;依此类推,直至得出与查询地址的中间地址段的地址前缀及中间地址段相匹配的路由地址的中间地址段的地址前缀及中间地址段; 如果参与比较的路由地址的中间地址段的地址前缀及中间地址段中不存在与查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则查找结束。进一步地,第三查找模块1108,用于如果查询地址有多个中间地址段,则根据查询地址的每个中间地址段的地址前缀及中间地址段在对应的第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段。本实施例提供的查找装置,通过按路由表项的路由地址的地址段划分方式将查询地址划分成地址段,并根据查询地址的地址段在存储了各种类型的地址段的二叉树中分别查找匹配的地址段,进而根据匹配的地址段获得查找结果,与现有技术相比,可提高查找速率。实施例六本实施例提供了一种路由表项的查找系统,该系统用于执行上述实施例一或实施例二提供的路由表项的存储方法,以及实施例一或实施例三提供的路由表项的查找方法。参见图14,该系统包括路由表项的存储装置1401和路由表项的查找装置1402 ;其中,路由表项的存储装置1401如上述实施例四提供的路由表项的存储装置;路由表项的查找装置1402如上述实施例五提供的路由表项的查找装置。本实施例提供的查找系统,通过路由表项的存储装置将路由地址划分为至少两个地址段,并将每个地址段存储至对应的二叉树中,相比现有技术用两个二叉树节点存储一个路由地址的两个边界值的方式而言,其占用的存储空间更少;且当存储的路由地址的位宽大于存储空间的位宽时,可将路由地址划分为至少两段进行存储,相比现有技术需改变硬件存储空间的方式而言,能够更灵活地适用于多种位宽的路由地址的存储;另外,通过路由表项的查找装置以分段查找的方式获得查找结果,可提高查找速率。实施例七本实施例提供了一种路由表项的存储设备,用于执行上述实施例一或实施例二所提供的路由表项的存储方法。该路由表项的存储设备包括处理器;
其中,处理器,用于将路由表项的每个路由地址按照预设长度划分成至少两个地址段;为每个路由地址的首地址段分配对应的地址后缀,并将每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀;将每个路由地址的首地址段存储至第一二叉树的节点中,并存储每个路由地址的首地址段对应的地址后缀;如果下一地址段为尾地址段,则将每个路由地址的尾地址段对应的地址前缀及尾地址段一并存储至第二二叉树的节点中,并存储每个路由地址对应的查找结果的索引,每个路由地址对应的查找结果的索引与每个路由地址的尾地址段的地址前缀及尾地址段相对应,且每个查找结果的索引对应一个查找结果O进一步地,该处理器,还用于在将路由表项的每个路由地址按照预设长度划分成至少两个地址段之后,为路由表项的每个路由地址中的每个类型的地址段分配对应的类型标识,以根据路由表项的每个路由地址的每个地址段所对应的类型标识确定每个地址段的类型;其中,路由表项的每个路由地址的地址段的类型至少包括首地址段及尾地址段。进一步地,该处理器,具体用于将每个路由地址的首地址段按照由大到小的顺序依次存储至第一二叉树的节点中。
进一步地,该处理器,具体用于将每个路由地址的尾地址段对应的地址前缀及尾地址段按照由大到小的顺序依次存储至第二二叉树的节点中。进一步地,路由表项的每个路由地址的地址段的类型还包括中间地址段,该处理,还用于在将每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀之后,如果下一地址段为中间地址段,则为每个路由地址的中间地址段分配对应的地址后缀,并将地址后缀作为中间地址段的下一地址段的地址前缀;将每个路由地址的中间地址段对应的地址前缀及中间地址段一并存储至第三二叉树的节点中,并存储每个路由地址的中间地址段对应的地址后缀。进一步地,该处理器,具体用于将每个路由地址的中间地址段对应的地址前缀及中间地址段按照由大到小的顺序依次存储至第三二叉树的节点中。进一步地,如果每个路由地址有多个中间地址段,则该处理器,还用于将每个路由地址的每个中间地址段对应的地址前缀及中间地址段分别存储至不同的第三二叉树的节点中,第三二叉树的个数与每个路由地址的中间地址段的个数相同。进一步地,该处理器,具体用于如果至少两个路由地址的首地址段相同,则为至少两个路由地址的首地址段分配相同的地址后缀。进一步地,该处理器,具体用于如果至少两个路由地址的首地址段与中间地址段均相同,则为至少两个路由地址的中间地址段分配相同的地址后缀。进一步地,该处理器,还用于删除路由表项中的至少一个路由地址时,从第二二叉树中删除被删除的路由地址的尾地址段的地址前缀及尾地址段;如果被删除的路由地址的首地址段与路由表项中的其他路由地址的首地址段相同,则在第一二叉树中保留被删除的路由地址的首地址段及其地址后缀;且如果被删除的路由地址具有中间地址段,被删除的路由地址的中间地址段与路由表项中的其他路由地址的中间地址段相同,则在第三二叉树中保留被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀,如果被删除的路由地址的中间地址段与路由表项中的其他路由地址的中间地址段不相同,从第三二叉树中删除被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀;如果被删除的路由地址的首地址段与路由表项中的其他路由地址的首地址段不同,从第一二叉树中删除被删除的路由地址的首地址段及其地址后缀,且如果被删除的路由地址具有中间地址段,从第三二叉树中删除被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀。本实施例提供的路由表项的存储设备,通过将路由地址划分为至少两个地址段,并将每个地址段存储至对应的二叉树中,相比现有技术用两个二叉树节点存储一个路由地址的两个边界值的方式而言,其占用的存储空间更少;且当存储的路由地址的位宽大于存储空间的位宽时,可将路由地址划分为至少两段进行存储,相比现有技术需改变硬件存储空间的方式而言,能够更灵活地适用于多种位宽的路由地址的存储。实施例八本实施例提供了一种路由表项的查找设备,用于执行上述实施例一或实施例三提·供的路由表项的查找方法。该设备包括处理器;该处理器,用于将查询地址按照预设长度划分成至少两个地址段;根据查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段,第一二叉树的节点中存储了路由表项的每个路由地址的首地址段;如果在第一二叉树中查找到与查询地址的首地址段相匹配的首地址段,且查询地址的首地址段的下一地址段为查询地址的尾地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为查询地址的尾地址段的地址前缀;根据查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段,第二二叉树的节点中存储了路由表项的每个路由地址的尾地址段的地址前缀及尾地址段;如果在第二二叉树中查找到与查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则获取查找到的尾地址段的地址前缀及尾地址段对应的查找结果的索引,并根据查找结果的索引得到查找结果。进一步地,该处理器,还用于将查询地址按照预设长度划分成至少两个地址段之后,为查询地址中的每个类型的地址段分配对应的类型标识,以根据查询地址的每个地址段所对应的类型标识确定查询地址的每个地址段的类型;其中,查询地址的地址段的类型至少包括首地址段及尾地址段。进一步地,该处理器,具体用于从第一二叉树的根节点开始,将查询地址的首地址段与第一二叉树中存储的路由表项的每个路由地址的首地址段进行逐层比较;如果查询地址的首地址段大于等于当前比较的路由地址的首地址段,则将查询地址的首地址段与当前比较的路由地址的首地址段左侧的路由地址的首地址段进行比较;如果查询地址的首地址段小于当前比较的路由地址的首地址段,则将查询地址的首地址段与当前比较的路由地址的首地址段右侧的路由地址的首地址段进行比较;依此类推,直至得出与查询地址的首地址段相匹配的路由地址的首地址段; 如果参与比较的路由地址的首地址段中不存在与查询地址的首地址段相匹配的首地址段,则查找结束。进一步地,该处理器,具体用于从第二二叉树的根节点开始,将查询地址的尾地址段的地址前缀及尾地址段与第二二叉树中存储的路由表项的每个路由地址的尾地址段的地址前缀及尾地址段进行逐层比较;如果查询地址的尾地址段的地址前缀及尾地址段大于等于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段左侧的路由地址的尾地址段的地址前缀及尾地址段进行比较;如果查询地址的尾地址段的地址前缀及尾地址段小于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段右侧的路由地址的尾地址段的地址前缀及尾地址段进行比较;依此类推,直至得出与查询地址的尾地址段的地址前缀及尾地址段相匹配的路由地址的尾地址段的地址前缀及尾地址段;如果参与比较的路由地址的尾地址段的地址前缀及尾地址段中不存在与查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则查找结束。进一步地,该处理器,还用于在查询地址的地址段的类型还包括中间地址段,根据查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段之后,如果在第一二叉树中查找到与查询地址的首地址段相匹配的首地址段,且查询地址的首地址段的下一地址段为查询地址的中间地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为查询地址的中间地址段的地址前缀;根据查询地址的中间地址段的地址前缀及中·间地址段在第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段,第三二叉树的节点中存储了路由表项的每个路由地址的中间地址段的地址前缀及中间地址段;如果在第三二叉树中查找到与查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则获取查找到的中间地址段对应的地址后缀,将获取到的地址后缀作为查询地址的尾地址段的地址前缀,并继续执行根据查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段。进一步地,该处理器,具体用于从第三二叉树的根节点开始,将查询地址的中间地址段的地址前缀及中间地址段与第三二叉树中存储的路由表项的每个路由地址的中间地址段的地址前缀及中间地址段进行逐层比较;如果查询地址的中间地址段的地址前缀及中间地址段大于等于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段左侧的路由地址的中间地址段的地址前缀及中间地址段进行比较;如果查询地址的中间地址段的地址前缀及中间地址段小于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段右侧的路由地址的中间地址段的地址前缀及中间地址段进行比较;依此类推,直至得出与查询地址的中间地址段的地址前缀及中间地址段相匹配的路由地址的中间地址段的地址前缀及中间地址段;如果参与比较的路由地址的中间地址段的地址前缀及中间地址段中不存在与查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则查找结束。
进一步地,如果查询地址有多个中间地址段,则该处理器,还用于根据查询地址的每个中间地址段的地址前缀及中间地址段在对应的第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段。本实施例提供的设备,通过按路由表项的路由地址的地址段划分方式将查询地址划分成地址段,并根据查询地址的地址段在存储了各种类型的地址段的二叉树中分别查找匹配的地址段,进而根据匹配的地址段获得查找结果,与现有技术相比,可提高查找速率。需要说明的是上述实施例提供的路由表项的存储装置在进行路由表项的存储时,以及路由表项的查找装置在进行路由表项的查找时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的路由表项的存储装置与路由表项的存储方法实施例属于同一构思,路由表项的查找装置与路由表项的查找方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。 本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种路由表项的存储方法,其特征在于,所述方法包括 将路由表项的每个路由地址按照预设长度划分成至少两个地址段; 为每个路由地址的首地址段分配对应的地址后缀,并将所述每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀; 将所述每个路由地址的首地址段存储至第一二叉树的节点中,并存储所述每个路由地址的首地址段对应的地址后缀; 如果所述下一地址段为尾地址段,则将所述每个路由地址的尾地址段对应的地址前缀及尾地址段一并存储至第二二叉树的节点中,并存储所述每个路由地址对应的查找结果的索引,所述每个路由地址对应的查找结果的索引与所述每个路由地址的尾地址段的地址前缀及尾地址段相对应,且每个查找结果的索引对应一个查找结果。
2.根据权利要求I所述的方法,其特征在于,所述将路由表项的每个路由地址按照预设长度划分成至少两个地址段之后,还包括 为路由表项的每个路由地址中的每个类型的地址段分配对应的类型标识,以根据路由表项的每个路由地址的每个地址段所对应的类型标识确定每个地址段的类型; 其中,所述路由表项的每个路由地址的地址段的类型至少包括首地址段及尾地址段。
3.根据权利要求I所述的方法,其特征在于,所述将所述每个路由地址的首地址段存储至第一二叉树的节点中,具体包括 将所述每个路由地址的首地址段按照由大到小的顺序依次存储至所述第一二叉树的节点中。
4.根据权利要求I所述的方法,其特征在于,所述将所述每个路由地址的尾地址段对应的地址前缀及尾地址段一并存储至第二二叉树的节点中,具体包括 将所述每个路由地址的尾地址段对应的地址前缀及尾地址段按照由大到小的顺序依次存储至所述第二二叉树的节点中。
5.根据权利要求I所述的方法,其特征在于,所述路由表项的每个路由地址的地址段的类型还包括中间地址段,所述将所述每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀之后,还包括 如果所述下一地址段为中间地址段,则为所述每个路由地址的中间地址段分配对应的地址后缀,并将所述地址后缀作为所述中间地址段的下一地址段的地址前缀; 将所述每个路由地址的中间地址段对应的地址前缀及中间地址段一并存储至第三二叉树的节点中,并存储所述每个路由地址的中间地址段对应的地址后缀。
6.根据权利要求5所述的方法,其特征在于,所述将所述每个路由地址的中间地址段对应的地址前缀及中间地址段一并存储至第三二叉树的节点中,具体包括 将所述每个路由地址的中间地址段对应的地址前缀及中间地址段按照由大到小的顺序依次存储至所述第三二叉树的节点中。
7.根据权利要求5所述的方法,其特征在于,如果所述每个路由地址有多个中间地址段,则将所述每个路由地址的每个中间地址段对应的地址前缀及中间地址段分别存储至不同的第三二叉树的节点中,所述第三二叉树的个数与所述每个路由地址的中间地址段的个数相同。
8.根据权利要求I所述的方法,其特征在于,所述为每个路由地址的首地址段分配对应的地址后缀,具体包括 如果至少两个路由地址的首地址段相同,则为所述至少两个路由地址的首地址段分配相同的地址后缀。
9.根据权利要求5所述的方法,其特征在于,所述为所述每个路由地址的中间地址段分配对应的地址后缀,具体包括 如果至少两个路由地址的首地址段与中间地址段均相同,则为所述至少两个路由地址的中间地址段分配相同的地址后缀。
10.根据权利要求I至9中任一权利要求所述的方法,其特征在于,删除所述路由表项中的至少一个路由地址时,所述方法还包括 从第二二叉树中删除被删除的路由地址的尾地址段的地址前缀及尾地址段; 如果被删除的路由地址的首地址段与所述路由表项中的其他路由地址的首地址段相同,则在所述第一二叉树中保留所述被删除的路由地址的首地址段及其地址后缀;且如果所述被删除的路由地址具有中间地址段,所述被删除的路由地址的中间地址段与所述路由表项中的其他路由地址的中间地址段相同,则在所述第三二叉树中保留所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀,如果所述被删除的路由地址的中间地址段与所述路由表项中的其他路由地址的中间地址段不相同,从所述第三二叉树中删除所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀; 如果被删除的路由地址的首地址段与所述路由表项中的其他路由地址的首地址段不同,从所述第一二叉树中删除所述被删除的路由地址的首地址段及其地址后缀,且如果所述被删除的路由地址具有中间地址段,从所述第三二叉树中删除所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀。
11.一种路由表项的查找方法,其特征在于,所述方法包括 将查询地址按照预设长度划分成至少两个地址段; 根据所述查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段,所述第一二叉树的节点中存储了路由表项的每个路由地址的首地址段; 如果在所述第一二叉树中查找到与所述查询地址的首地址段相匹配的首地址段,且所述查询地址的首地址段的下一地址段为所述查询地址的尾地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为所述查询地址的尾地址段的地址前缀;根据所述查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段,所述第二二叉树的节点中存储了路由表项的每个路由地址的尾地址段的地址前缀及尾地址段; 如果在所述第二二叉树中查找到与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则获取查找到的尾地址段的地址前缀及尾地址段对应的查找结果的索引,并根据所述查找结果的索引得到查找结果。
12.根据权利要求11所述的方法,其特征在于,所述将查询地址按照预设长度划分成至少两个地址段之后,还包括 为查询地址中的每个类型的地址段分配对应的类型标识,以根据查询地址的每个地址段所对应的类型标识确定所述查询地址的每个地址段的类型; 其中,所述查询地址的地址段的类型至少包括首地址段及尾地址段。
13.根据权利要求11所述的方法,其特征在于,所述根据所述查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段,具体包括 从所述第一二叉树的根节点开始,将所述查询地址的首地址段与所述第一二叉树中存储的路由表项的每个路由地址的首地址段进行逐层比较; 如果所述查询地址的首地址段大于等于当前比较的路由地址的首地址段,则将所述查询地址的首地址段与当前比较的路由地址的首地址段左侧的路由地址的首地址段进行比较; 如果所述查询地址的首地址段小于当前比较的路由地址的首地址段,则将所述查询地址的首地址段与当前比较的路由地址的首地址段右侧的路由地址的首地址段进行比较; 依此类推,直至得出与所述查询地址的首地址段相匹配的路由地址的首地址段; 如果参与比较的路由地址的首地址段中不存在与所述查询地址的首地址段相匹配的首地址段,则查找结束。
14.根据权利要求11所述的方法,其特征在于,所述根据所述查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段,具体包括 从所述第二二叉树的根节点开始,将所述查询地址的尾地址段的地址前缀及尾地址段与所述第二二叉树中存储的路由表项的每个路由地址的尾地址段的地址前缀及尾地址段进行逐层比较; 如果所述查询地址的尾地址段的地址前缀及尾地址段大于等于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将所述查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段左侧的路由地址的尾地址段的地址前缀及尾地址段进行比较; 如果所述查询地址的尾地址段的地址前缀及尾地址段小于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将所述查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段右侧的路由地址的尾地址段的地址前缀及尾地址段进行比较; 依此类推,直至得出与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的路由地址的尾地址段的地址前缀及尾地址段; 如果参与比较的路由地址的尾地址段的地址前缀及尾地址段中不存在与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则查找结束。
15.根据权利要求11所述的方法,其特征在于,所述查询地址的地址段的类型还包括中间地址段,所述根据所述查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段之后,还包括 如果在所述第一二叉树中查找到与所述查询地址的首地址段相匹配的首地址段,且所述查询地址的首地址段的下一地址段为所述查询地址的中间地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为所述查询地址的中间地址段的地址前三双; 根据所述查询地址的中间地址段的地址前缀及中间地址段在第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段,所述第三二叉树的节点中存储了路由表项的每个路由地址的中间地址段的地址前缀及中间地址段; 如果在所述第三二叉树中查找到与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则获取查找到的中间地址段对应的地址后缀,将获取到的地址后缀作为所述查询地址的尾地址段的地址前缀,并继续执行根据所述查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段。
16.根据权利要求15所述的方法,其特征在于,所述根据所述查询地址的中间地址段的地址前缀及中间地址段在第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段,具体包括 从所述第三二叉树的根节点开始,将所述查询地址的中间地址段的地址前缀及中间地址段与所述第三二叉树中存储的路由表项的每个路由地址的中间地址段的地址前缀及中间地址段进行逐层比较; 如果所述查询地址的中间地址段的地址前缀及中间地址段大于等于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将所述查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段左侧的路由地址的中间地址段的地址前缀及中间地址段进行比较; 如果所述查询地址的中间地址段的地址前缀及中间地址段小于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将所述查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段右侧的路由地址的中间地址段的地址前缀及中间地址段进行比较; 依此类推,直至得出与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的路由地址的中间地址段的地址前缀及中间地址段; 如果参与比较的路由地址的中间地址段的地址前缀及中间地址段中不存在与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则查找结束。
17.根据权利要求16所述的方法,其特征在于,如果所述查询地址有多个中间地址段,则根据所述查询地址的每个中间地址段的地址前缀及中间地址段在对应的第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段。
18.—种路由表项的存储装置,其特征在在于,所述装置包括 划分模块,用于将路由表项的每个路由地址按照预设长度划分成至少两个地址段; 分配模块,用于为所述划分模块划分得到的每个路由地址的首地址段分配对应的地址后缀,并将所述每个路由地址的首地址段的地址后缀作为下一地址段的地址前缀; 第一存储模块,用于将所述划分模块划分得到的每个路由地址的首地址段存储至第一二叉树的节点中,并存储所述分配模块分配的每个路由地址的首地址段对应的地址后三双; 第二存储模块,用于如果所述每个路由地址的首地址段的下一地址段为尾地址段,则将所述每个路由地址的尾地址段对应的地址前缀及尾地址段一并存储至第二二叉树的节点中,并存储所述每个路由地址对应的查找结果的索引,所述每个路由地址对应的查找结果的索引与所述每个路由地址的尾地址段的地址前缀及尾地址段相对应,且每个查找结果的索引对应一个查找结果。
19.根据权利要求18所述的装置,其特征在于,所述分配模块,还用于为路由表项的每个路由地址中的每个类型的地址段分配对应的类型标识,以根据路由表项的每个路由地址的每个地址段所对应的类型标识确定每个地址段的类型; 其中,所述路由表项的每个路由地址的地址段的类型至少包括首地址段及尾地址段。
20.根据权利要求18所述的装置,其特征在于,所述第一存储模块,具体用于将所述每个路由地址的首地址段按照由大到小的顺序依次存储至所述第一二叉树的节点中。
21.根据权利要求18所述的装置,其特征在于,所述第二存储模块,具体用于将所述每个路由地址的尾地址段对应的地址前缀及尾地址段按照由大到小的顺序依次存储至所述第二二叉树的节点中。
22.根据权利要求18所述的装置,其特征在于,所述划分模块划分的路由表项的每个路由地址的地址段的类型还包括中间地址段; 所述分配模块,还用于如果所述下一地址段为中间地址段,则为所述每个路由地址的中间地址段分配对应的地址后缀,并将所述地址后缀作为所述中间地址段的下一地址段的地址前缀; 所述装置还包括 第三存储模块,用于将所述每个路由地址的中间地址段对应的地址前缀及中间地址段一并存储至第三二叉树的节点中,并存储所述每个路由地址的中间地址段对应的地址后
23.根据权利要求22所述的装置,其特征在于,所述第三存储模块,具体用于将所述每个路由地址的中间地址段对应的地址前缀及中间地址段按照由大到小的顺序依次存储至所述第三二叉树的节点中。
24.根据权利要求22所述的装置,其特征在于,所述第三存储模块,用于如果所述每个路由地址有多个中间地址段,则将所述每个路由地址的每个中间地址段对应的地址前缀及中间地址段分别存储至不同的第三二叉树的节点中,所述中间段地址段存储子单元的个数与所述每个路由地址的中间地址段的个数相同。
25.根据权利要求18所述的装置,其特征在于,所述分配模块,用于如果至少两个路由地址的首地址段相同,则为所述至少两个路由地址的首地址段分配相同的地址后缀。
26.根据权利要求22所述的装置,其特征在于,所述分配模块,用于如果至少两个路由地址的首地址段与中间地址段均相同,则为所述至少两个路由地址的中间地址段分配相同的地址后缀。
27.根据权利要求19至22中任一权利要求所述的装置,其特征在于,所述装置还包括 删除模块,用于从所述第二二叉树中删除被删除的路由地址的尾地址段的地址前缀及尾地址段; 如果被删除的路由地址的首地址段与所述路由表项中的其他路由地址的首地址段相同,则在所述第一二叉树中保留所述被删除的路由地址的首地址段及其地址后缀;且如果所述被删除的路由地址具有中间地址段,所述被删除的路由地址的中间地址段与所述路由表项中的其他路由地址的中间地址段相同,则在所述第三二叉树中保留所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀,如果所述被删除的路由地址的中间地址段与所述路由表项中的其他路由地址的中间地址段不相同,从所述第三二叉树中删除所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀; 如果被删除的路由地址的首地址段与所述路由表项中的其他路由地址的首地址段不同,从所述第一二叉树中删除所述被删除的路由地址的首地址段及其地址后缀,且如果所述被删除的路由地址具有中间地址段,从所述第三二叉树中删除所述被删除的路由地址的中间地址段的地址前缀及中间地址段和地址后缀。
28.—种路由表项的查找装置,其特征在于,所述装置包括 划分模块,用于将查询地址按照预设长度划分成至少两个地址段; 第一查找模块,用于根据所述划分模块划分得到的查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段,所述第一二叉树的节点中存储了路由表项的每个路由地址的首地址段; 第一获取模块,用于如果所述第一查找模块在所述第一二叉树中查找到与所述查询地址的首地址段相匹配的首地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为所述查询地址的下一地址段的地址前缀; 第二查找模块,用于如果所述查询地址的首地址段的下一地址段为尾地址段,则根据所述查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段,所述第二二叉树的节点中存储了路由表项的每个路由地址的尾地址段的地址前缀及尾地址段; 第二获取模块,用于如果所述第二查找模块在所述第二二叉树中查找到与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则获取查找到的尾地址段的地址前缀及尾地址段对应的查找结果的索引,并根据所述查找结果的索引得到查找结果。
29.根据权利要求28所述的装置,其特征在于,所述装置还包括 分配模块,用于为所述划分模块划分得到的查询地址中的每个类型的地址段分配对应的类型标识,以根据查询地址的每个地址段所对应的类型标识确定所述查询地址的每个地址段的类型; 其中,所述查询地址的地址段的类型至少包括首地址段及尾地址段。
30.根据权利要求28所述的装置,其特征在于,所述第一查找模块,具体用于从所述第一二叉树的根节点开始,将所述查询地址的首地址段与所述第一二叉树中存储的路由表项的每个路由地址的首地址段进行逐层比较; 如果所述查询地址的首地址段大于等于当前比较的路由地址的首地址段,则将所述查询地址的首地址段与当前比较的路由地址的首地址段左侧的路由地址的首地址段进行比较; 如果所述查询地址的首地址段小于当前比较的路由地址的首地址段,则将所述查询地址的首地址段与当前比较的路由地址的首地址段右侧的路由地址的首地址段进行比较; 依此类推,直至得出与所述查询地址的首地址段相匹配的路由地址的首地址段; 如果参与比较的路由地址的首地址段中不存在与所述查询地址的首地址段相匹配的首地址段,则查找结束。
31.根据权利要求28所述的装置,其特征在于,所述第二查找模块,具体用于从所述第二二叉树的根节点开始,将所述查询地址的尾地址段的地址前缀及尾地址段与所述第二二叉树中存储的路由表项的每个路由地址的尾地址段的地址前缀及尾地址段进行逐层比较; 如果所述查询地址的尾地址段的地址前缀及尾地址段大于等于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将所述查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段左侧的路由地址的尾地址段的地址前缀及尾地址段进行比较; 如果所述查询地址的尾地址段的地址前缀及尾地址段小于当前比较的路由地址的尾地址段的地址前缀及尾地址段,则将所述查询地址的尾地址段的地址前缀及尾地址段与当前比较的路由地址的尾地址段的地址前缀及尾地址段右侧的路由地址的尾地址段的地址前缀及尾地址段进行比较; 依此类推,直至得出与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的路由地址的尾地址段的地址前缀及尾地址段; 如果参与比较的路由地址的尾地址段的地址前缀及尾地址段中不存在与所述查询地址的尾地址段的地址前缀及尾地址段相匹配的尾地址段的地址前缀及尾地址段,则查找结束。
32.根据权利要求28所述的装置,其特征在于,所述划分模块划分得到的查询地址的地址段的类型还包括中间地址段; 所述装置还包括 第三获取模块,用于如果在所述第一二叉树中查找到与所述查询地址的首地址段相匹配的首地址段,且所述查询地址的首地址段的下一地址段为所述查询地址的中间地址段,则获取查找到的首地址段对应的地址后缀,并将获取到的地址后缀作为所述查询地址的中间地址段的地址前缀; 第三查找模块,用于根据所述查询地址的中间地址段的地址前缀及中间地址段在第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段,所述第三二叉树的节点中存储了路由表项的每个路由地址的中间地址段的地址前缀及中间地址段; 第四获取模块,用于如果在所述第三二叉树中查找到与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则获取查找到的中间地址段对应的地址后缀,将获取到的地址后缀作为所述查询地址的尾地址段的地址前缀,并继续执行根据所述查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段。
33.根据权利要求32所述的装置,其特征在于,所述第三查找模块,具体用于从所述第三二叉树的根节点开始,将所述查询地址的中间地址段的地址前缀及中间地址段与所述第三二叉树中存储的路由表项的每个路由地址的中间地址段的地址前缀及中间地址段进行逐层比较; 如果所述查询地址的中间地址段的地址前缀及中间地址段大于等于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将所述查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段左侧的路由地址的中间地址段的地址前缀及中间地址段进行比较; 如果所述查询地址的中间地址段的地址前缀及中间地址段小于当前比较的路由地址的中间地址段的地址前缀及中间地址段,则将所述查询地址的中间地址段的地址前缀及中间地址段与当前比较的路由地址的中间地址段的地址前缀及中间地址段右侧的路由地址的中间地址段的地址前缀及中间地址段进行比较; 依此类推,直至得出与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的路由地址的中间地址段的地址前缀及中间地址段; 如果参与比较的路由地址的中间地址段的地址前缀及中间地址段中不存在与所述查询地址的中间地址段的地址前缀及中间地址段相匹配的中间地址段的地址前缀及中间地址段,则查找结束。
34.根据权利要求33所述的装置,其特征在于,所述第三查找模块,用于如果所述查询地址有多个中间地址段,则根据所述查询地址的每个中间地址段的地址前缀及中间地址段在对应的第三二叉树中查找与其相匹配的中间地址段的地址前缀及中间地址段。
35.一种路由表项的查找系统,其特征在于,所述系统包括路由表项的存储装置和路由表项的查找装置; 其中,所述路由表项的存储装置如所述权利要求18至27中任一权利要求所述的路由表项的存储装置; 所述路由表项的查找装置如所述权利要求28至34中任一权利要求所述的路由表项的查找装置。
36.一种路由表项的存储方法,其特征在于,所述方法包括 将待存储的路由地址按照预设长度划分成首地址段和尾地址段; 为所述首地址段分配地址后缀,为所述尾地址段分配地址前缀,所述地址前缀和地址后缀间符合预设的对应关系; 将所述首地址段存储至第一二叉树的节点中,并记录所述首地址段在所述第一二叉树中的存储地址与所述地址前缀的对应关系; 将所述地址前缀和所述尾地址段存储至第二二叉树中,并记录与所述地址前缀和所述尾地址段对应的索引结果。
37.如权利要求36所述的路由表项的存储方法,其特征在于,还包括所述地址前缀和所述地址后缀相同。
38.如权利要求36所述的路由表项的存储方法,其特征在于,所述将所述地址前缀和所述尾地址段存储至第二二叉树中包括 将所述地址前缀和所述尾地址段存储至所述第二二叉树的同一个节点中。
39.一种路由地址的查找方法,其特征在于,所述方法包括 获得待查找的路由地址,并将所述路由地址按照预设长度划分成首地址段和尾地址段; 在第一二叉树中查找所述首地址段,并获得与所述首地址段对应的地址后缀; 根据预设的对应关系,根据所述地址后缀获得地址前缀; 根据所述地址前缀和所述尾地址段查找第二二叉树,并根据查找结果获得路由信息。
全文摘要
本发明公开了一种路由表项的存储方法、查找方法、装置及系统,属于计算机领域。所述查找方法包括将查询地址划分成至少两个地址段;根据查询地址的首地址段在第一二叉树中查找与其相匹配的首地址段;将查找到的首地址段的地址后缀作为查询地址的尾地址段的地址前缀;根据查询地址的尾地址段的地址前缀及尾地址段在第二二叉树中查找与其相匹配的尾地址段的地址前缀及尾地址段;根据查找到的尾地址段的地址前缀及尾地址段得到查找结果。本发明通过将路由地址分段存储和查找,相对于现有技术来说,节约了存储空间,可以更灵活地适用于多种位宽的路由地址的存储和查找,且提高了查找速率。
文档编号H04L12/741GK102904812SQ20121037164
公开日2013年1月30日 申请日期2012年9月29日 优先权日2012年9月29日
发明者洪荣峰, 易毅, 郭玲波 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1