专利名称:路由维护方法和装置以及路由查询方法和装置的制作方法
技术领域:
本发明涉及报文转发技术,特别涉及
路由查询方法、以及一种路由查询装置。
种路由维护方法、 一种路由维护装置、 一种
背景技术:
各类交换机、路由器等交换设备中通常都存有路由表,路由表中存放有若干条路 由表项,每条路由表项都能够表明从交换设备的哪个端口转发对应报文即可将该报文转发 至下一跳。具体说,每条路由表项中通常都包括目的地址、IP掩码、出端口、下一跳IP地
址等信息。 交换设备在学习到某路由表项后,会先存放至供CPU进行软转发的软件层路由表 中、然后再下发至转发芯片中用于实现硬件层转发的硬件层路由表。当需要更新或删除某 条路由表项时,需要CPU先从软件层路由表中查询到该路由表项、然后再予以更新或删除, 最后才会更新或删除转发芯片中的硬件层路由表。 因此,软件层路由表项的查询效率将直接影响到路由表项下发至硬件层的进度、 从而影响报文硬件层转发的进度。而软件层路由表项的查询效率通常取决于路由表项的存 储方式。 现有IP路由存储方式大多基于树形,公网和每个虚拟个人网络(VirtualPrivate Network, VPN)分别占用一颗树,并利用IP地址前缀(Prefix)作为树节点。对于最大长度 为32位的IP地址前缀来说,树的深度即为32层,那么利用IP地址从树的根节点依次遍历 每一层来查找路由表项时,最多需要32次查找才能够找到待查找路由表项所对应的目标 节点,因而查询效率较低。 为了提高查询效率,现有技术基于多级哈希(Hash)表来实现对公网路由表项的 查询,然而,现有基于多级哈希表的维护和查询方式中,当同一哈希元素索引由于存在多个 匹配的公网路由表项而发生哈希冲突时,需要进行多级哈希表的链表遍历,因而仍然存在 查询效率不高的问题。而且,现有技术多级哈希表的查询方式,第一级哈希表对应IP地址 前缀中的高20比特,而最高8比特所构成的最高字节不可能为O,从而浪费了 212、即4096 比特所占用的计算资源,还占用内存中的较大存储资源。 此外,由于组播路由既包括组播地址又包括源地址,因而现有多级哈希表的查询 方式也不支持组播路由。 可见,现有基于多级哈希表的路由查询方式效率不高、且通用性也不高。
发明内容
有鉴于此,本发明提供了一种路由维护方法、一种路由维护装置、一种路由查询方 法、以及一种路由查询装置,能够提高路由查询效率。 本发明提供的一种路由维护方法,分别为公网和每个VPN设置对应的虚拟路由VR 表,每张VR表中包含有2M个用于与IP地址前缀最高字节匹配的M比特数组元素、每个数组
10元素下可衍生出第1级哈希表和/或第1级路由集合、第i级哈希表中每个哈希元素下可 衍生出第i + l级哈希表和/或第i + l级路由集合、i大于等于1且小于等于哈希表的预设 最大级数P、P为大于等于1且小于等于32-M的正整数,且对于需要存储的公网或任意VPN 的路由表项,该路由维护方法包括 利用该路由表项的IP地址前缀的最高字节在对应VR表中查找匹配的数组元素;
当该路由表项IP地址前缀的掩码长度小于等于M时,将该路由表项存放至匹配的 数组元素下的第1级路由集合中; 当该路由表项IP地址前缀的掩码长度大于M时,从匹配的数组元素下的第1级哈 希表开始,依次查找第i级哈希表中与IP地址前缀第M+l + I^Nx M+liNx比特匹配的
0 0
Ni比特哈希元素、并针对第i级哈希表判断该路由表项IP地址前缀第M+l+I^Nx 32比
特的掩码长度是否小于等于Ni,如果是,将该路由表项存放至第i级哈希表中匹配的Ni比 特哈希元素下的第i+l级路由集合中,否则,继续针对第i级哈希表中匹配的Ni比特哈希 元素下的第i+l级哈希表进行判断; 其中,N0取0,且Ni为满足N1 NP之和等于32-M这一条件下任意设定的正整 数。 当该路由表项IP地址前缀的掩码长度小于等于M时,以匹配的数组元素内容为索 引在内存中查找到第1级路由集合; 当该路由表项IP地址前缀的掩码长度大于M时,以匹配的数组元素内容为索引在 内存中查找到第1级哈希表,然后针对第i级哈希表如果路由表项lP地址前缀lP地址前缀第M+l + xfiNx 32比特的掩码长度小于
0
等于Ni,则以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的第i+l 级路由集合;如果路由表项IP地址前缀第M+l + liNx 32比特的掩码长度大于Ni,则以匹
0
配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的第i+l级哈希表。
当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容为 空,则进一步创建该数据元素下的第1级路由集合、并将该数组元素内容设置为创建的第1 级路由集合在内存中的地址; 当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容为空, 则进一步创建该数据元素下的第1级哈希表、并将该数组元素内容设置为创建的第1级哈 希表在内存中的地址,然后针对第i级哈希表如果路由表项iP地址前缀第M+l + fiNx 32比特的掩码长度小于等于Ni,则
0
进一步创建匹配的Ni比特哈希元素下的第i+l级路由集合、并将该Ni比特哈希元素内容 设置为创建的第i+l级路由集合在内存中的地址;
11
如果路由表项IP地址前缀第M+l + 2'Nx 32比特的掩码长度大于Ni、且匹配
0
的Ni比特哈希元素内容为空,则进一步创建匹配的Ni比特哈希元素下的第i+l级哈希表、
并将该Ni比特哈希元素内容设置为创建的第i+l级哈希表在内存中的地址。 当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容已
记录有该数据元素下的第1级哈希表在内存中的地址,则进一步创建该数据元素下的第1
级路由集合、并设置该数组元素下的第1级哈希表内的同级路由集合指针指向该数据元素
下的第l级路由集合; 当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容已记录 有该数据元素下的第1级路由集合在内存中的地址,则进一步创建该数据元素下的第1级 哈希表、并设置该数组元素下的第1级哈希表内的同级路由集合指针指向该数据元素下的 第1级路由集合,然后针对第i级哈希表 如果路由表项IP地址前缀第M+l + liNx 32比特的掩码长度小于等于Ni、且
0
匹配的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+l级哈希表在内存中的地址, 则进一步创建匹配的Ni比特哈希元素下的第i+l级路由集合、并设置该Ni比特哈希元素 下的第i+l级哈希表内的同级路由集合指针指向该Ni比特哈希元素下的第i+l级路由集合. 如果路由表项IP地址前缀第M+l + li'Nx 32比特的掩码长度大于Ni、且匹配
o
的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+l级路由集合在内存中的地址,则
进一步创建匹配的Ni比特哈希元素下的第i+l级哈希表、将该Ni比特哈希元素内容设置
为创建的第i+l级哈希表在内存中的地址、并设置该Ni比特哈希元素下的第i+l级哈希表
内的同级路由集合指针指向该Ni比特哈希元素下的第i+l级路由集合。 每级中的每个哈希表内的同级路由集合指针设置在该哈希表的第1字段。 每级中的每个路由集合内进一步设置有表示该路由集合中存放的所有路由表项
IP地址前缀对应比特的最大掩码长度和最小掩码长度。 公网和每个VPN设置两张对应的VR表,第一 VR表用于存放组播路由表项、第二 VR 表用于存放单播路由表项; 且,第一VR表的路由集合中进一步具有路由指针,所述路由指针指向匹配其所属 路由集合上一级数组元素或哈希元素的组播路由表项所对应的第二VR表中,与对应单播 路由表项IP地址前缀首字节匹配的数组元素。 利用VR-ID来区分公网和不同VPN所分别对应的VR表,且连续的VPN顺序对应取
值连续的VR-ID。 较佳地,所述M取8。 本发明提供的一种路由维护装置,该装置包括CPU和内存, 所述内存中存储有分别为公网和每个VPN设置的对应虚拟路由VR表,每张VR表 中包含有2M个用于与IP地址前缀最高字节匹配的M比特数组元素、每个数组元素下可衍 生出第1级哈希表和/或第1级路由集合、第i级哈希表中每个哈希元素下可衍生出第i+l级哈希表和/或第i + 1级路由集合、i大于等于1且小于等于哈希表的预设最大级数P、 P 为大于等于1且小于等于32-M的正整数; 对于需要存储的公网或任意VPN的路由表项,所述CPU利用该路由表项的IP地址 前缀的最高字节在对应VR表中查找匹配的数组元素; 当该路由表项IP地址前缀的掩码长度小于等于M时,所述CPU将该路由表项存放 至匹配的数组元素在所述内存中的第1级路由集合中; 当该路由表项IP地址前缀的掩码长度大于M时,所述CPU从匹配的数组元 素在所述内存中的第1级哈希表开始,依次查找第i级哈希表中与IP地址前缀第
M+l + li'Nx M+f;Nx比特匹配的Ni比特哈希元素、并针对第i级哈希表判断该路由表
0 0
项IP地址前缀第M+l+^'Nx 32比特的掩码长度是否小于等于Ni,如果是,将该路由表
0
项存放至第i级哈希表中匹配的Ni比特哈希元素下的第i+1级路由集合中,否则,继续针
对第i级哈希表中匹配的Ni比特哈希元素下的第i+1级哈希表进行判断; 其中,N0取0,且Ni为满足N1 NP之和等于32-M这一条件下任意设定的正整数。 当该路由表项IP地址前缀的掩码长度小于等于M时,所述CPU进一步以匹配的数 组元素内容为索引在内存中查找到第1级路由集合; 当该路由表项IP地址前缀的掩码长度大于M时,以匹配的数组元素内容为索引在 内存中查找到第1级哈希表,然后依次针对第i级哈希表执行所述判断,且针对第i级哈希 表如果路由表项lP地址前缀lP地址前缀第M+l + liNx 32比特的掩码长度小于
0
等于Ni,则所述CPU进一步以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希 元素下的第i+1级路由集合; 如果路由表项IP地址前缀第M+l + liNx 32比特的掩码长度大于Ni,则所述
0
CPU进一步以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的第i+1 级哈希表。 当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容为 空,则所述CPU进一步在所述内存中创建该数据元素下的第1级路由集合、并将该数组元素 内容设置为创建的第1级路由集合在内存中的地址; 当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容为空, 则进一步创建该数据元素下的第1级哈希表、并将该数组元素内容设置为创建的第1级哈 希表在内存中的地址,然后针对第i级哈希表 如果路由表项IP地址前缀第M+l + 'gNx 32比特的掩码长度小于等于Ni、且
0
匹配的Ni比特哈希元素内容为空,则所述CPU进一步在所述内存中创建匹配的Ni比特哈 希元素下的第i+1级路由集合、并将该Ni比特哈希元素内容设置为创建的第i+1级路由集合在内存中的地址; 如果路由表项IP地址前缀第M+l + xfiNx 32比特的掩码长度大于Ni、且匹配
0
的Ni比特哈希元素内容为空,则所述CPU进一步在所述内存中创建匹配的Ni比特哈希元 素下的第i+l级哈希表、并将该Ni比特哈希元素内容设置为创建的第i+l级哈希表在内存 中的地址。 当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容已 记录有该数据元素下的第1级哈希表在内存中的地址,则所述CPU进一步在所述内存中创 建该数据元素下的第1级路由集合、并设置该数组元素下的第1级哈希表内的同级路由集 合指针指向该数据元素下的第1级路由集合; 当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容已记录 有该数据元素下的第1级路由集合在内存中的地址,则进一步创建该数据元素下的第1级 哈希表、并设置该数组元素下的第1级哈希表内的同级路由集合指针指向该数据元素下的 第1级路由集合,然后针对第i级哈希表 如果路由表项IP地址前缀第M+l + liNx 32比特的掩码长度小于等于Ni、且
0
匹配的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+l级哈希表在内存中的地址, 则所述CPU进一步在所述内存中创建匹配的Ni比特哈希元素下的第i+l级路由集合、并设 置该Ni比特哈希元素下的第i+l级哈希表内的同级路由集合指针指向该Ni比特哈希元素 下的第i+l级路由集合;如果路由表项iP地址前缀第M+l + liNx 32比特的掩码长度大于Ni、且匹配
0
的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+l级路由集合在内存中的地址,则 所述CPU进一步在所述内存中创建匹配的Ni比特哈希元素下的第i+l级哈希表、将该Ni 比特哈希元素内容设置为创建的第i+l级哈希表在内存中的地址、并设置该Ni比特哈希元 素下的第i+l级哈希表内的同级路由集合指针指向该Ni比特哈希元素下的第i+l级路由
隹A 朱n o 公网和每个VPN设置两张对应的VR表,第一 VR表用于存放组播路由表项、第二 VR 表用于存放单播路由表项; 且,第一VR表的路由集合中进一步具有路由指针,所述路由指针指向匹配其所属 路由集合上一级数组元素或哈希元素的组播路由表项所对应的第二 VR表中,与对应单播 路由表项IP地址前缀首字节匹配的数组元素。 公网和不同VPN所分别对应的VR表以VR-ID区分,且连续的VPN顺序对应取值连 续的VR-ID。 较佳地,所述M取8。 本发明提供的一种路由查询方法,分别为公网和每个VPN设置对应的虚拟路由VR 表,每张VR表中包含有2M个用于与IP地址前缀最高字节匹配的M比特数组元素、每个数组 元素下可衍生出第1级哈希表和/或第1级路由集合、第i级哈希表中每个哈希元素下可 衍生出第i+l级哈希表和/或第i+l级路由集合、i大于等于1且小于等于哈希表的预设
14最大级数P、P为大于等于1且小于等于32-M的正整数,且对于需要查询的公网或任意VPN 的路由表项,该路由查询方法包括 利用该路由表项的IP地址前缀的最高字节在对应VR表中查找匹配的数组元素;
当该路由表项IP地址前缀的掩码长度小于等于M时,在匹配的数组元素下的第1 级路由集合中查找该路由表项; 当该路由表项IP地址前缀的掩码长度大于M时,从匹配的数组元素下的第1级哈 希表开始,依次查找第i级哈希表中与IP地址前缀第<formula>formula see original document page 15</formula>比特匹配的
Ni比特哈希元素、并针对第i级哈希表判断该路由表项iP地址前缀第<formula>formula see original document page 15</formula>比
特的掩码长度是否小于等于Ni,如果是,在第i级哈希表中匹配的Ni比特哈希元素下的第 i+l级路由集合中查找该路由表项,否则,继续针对第i级哈希表中匹配的Ni比特哈希元素 下的第i+1级哈希表进行判断; 其中,N0取0,且Ni为满足N1 NP之和等于32-M这一条件下任意设定的正整 数。 当该路由表项IP地址前缀的掩码长度小于等于M时,以匹配的数组元素内容为索 引在内存中查找到第1级路由集合; 当该路由表项IP地址前缀的掩码长度大于M时,以匹配的数组元素内容为索引在 内存中查找到第1级哈希表,然后针对第i级哈希表如果路由表项IP地址前缀IP地址前缀第<formula>formula see original document page 15</formula>比特的掩码长度小于
等于Ni,则以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的第i+1 级路由集合; 如果路由表项IP地址前缀第<formula>formula see original document page 15</formula>比特的掩码长度大于Ni,则以匹
配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的第i+1级哈希表。
当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容为 空,则结束当前查询; 当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容为空, 则结束当前查询。 当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容已 记录有该数据元素下的第1级哈希表在内存中的地址,则进一步查询该数组元素下的第1 级哈希表内的同级路由集合指针,如果该同级路由集合指针指向该数据元素下的第1级路 由集合,则在该第1级路由集合中查询路由表项,否则结束当前查询; 当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容已记录
有该数据元素下的第1级路由集合在内存中的地址,则进一步结束当前查询; 当该路由表项IP地址前缀的掩码长度大于M时,且匹配的数组元素内容为第1级
哈希表,则针对第i级哈希表
如果路由表项IP地址前缀第M+l + 5;'Nx 32比特的掩码长度小于等于Ni、且
0
匹配的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+1级哈希表在内存中的地址, 则进一步在该Ni比特哈希元素下的第i+l级哈希表内的同级路由集合指针,如果该同级路 由集合指针指向该Ni比特哈希元素下的第i+1级路由集合,则在该第i+1级路由集合中查 询路由表项,否则结束当前查询;如果路由表项IP地址前缀第M+l + liNx 32比特的掩码长度大于Ni、且匹配
0
的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+1级路由集合在内存中的地址,则 结束当前查询。 通过直接读取哈希表的第1字段来查询同级路由集合指针。 每级中的每个路由集合内进一步设置有表示该路由集合中存放的所有路由表项 IP地址前缀对应比特的最大掩码长度和最小掩码长度; 如果待查询路由表项IP地址前缀对应比特的掩码长度大于查找到的路由集合所 记录的最大掩码长度、或小于查找到的路由集合所记录的最小掩码长度,则直接结束当前 查询。 公网和每个VPN设置两张对应的VR表,第一 VR表用于存放组播路由表项、第二 VR 表用于存放单播路由表项; 在第一 VR表中以待查找组播路由表项的IP地址前缀的各比特为索引,查找到对 应级别的路由集合、并在该路由集合中查找到待查找组播路由表项,然后依据该路由集合 中的路由集合指针查找到对应第二VR表中,与待查找单播表项的IP地址前缀的首字节匹 配的数组元素,并在该第二 VR表中以待查找单播路由表项的IP地址前缀的后续各比特为 索引,逐级查找到对应级别的路由集合、并在该路由集合中查找到待查找单播路由表项。
利用VR-ID来区分公网和不同VPN所分别对应的VR表,且连续的VPN顺序对应取 值连续的VR-ID。
较佳地,所述M取8。 本发明提供的一种路由查询装置,该装置包括CPU和内存, 所述内存中存储有分别为公网和每个VPN设置的对应虚拟路由VR表,每张VR表 中包含有2M个用于与IP地址前缀最高字节匹配的M比特数组元素、以及任意数组元素下 衍生出的第1级哈希表和/或第1级路由集合、第i级哈希表中任意个哈希元素下衍生出 的第i+1级哈希表和/或第i+1级路由集合、i大于等于1且小于等于哈希表的预设最大 级数P、 P为大于等于1且小于等于32-M的正整数; 对于需要查询的公网或任意VPN的路由表项,所述CPU利用该路由表项的IP地址 前缀的最高字节在对应VR表中查找匹配的数组元素; 当该路由表项IP地址前缀的掩码长度小于等于M时,所述CPU在匹配的数组元素 的第1级路由集合中查找该路由表项; 当该路由表项IP地址前缀的掩码长度大于M时,所述CPU从匹配的数组元素下的 第1级哈希表开始,依次查找第i级哈希表中与IP地址前缀第M+l+^'Nx M+gNx比特匹配的Ni比特哈希元素、并针对第i级哈希表判断该路由表项IP地址前缀第 M+l + f^Nx 32比特的掩码长度是否小于等于Ni,如果是,所述CPU在第i级哈希表中匹
0
配的Ni比特哈希元素下的第i+l级路由集合中查找该路由表项,否则,所述CPU继续针对
第i级哈希表中匹配的Ni比特哈希元素下的第i+l级哈希表进行判断; 其中,N0取0、且Ni为满足N1 NP之和等于32-M这一条件下任意设定的正整数。 当该路由表项IP地址前缀的掩码长度小于等于M时,所述CPU以匹配的数组元素 内容为索引在内存中查找到第1级路由集合; 当该路由表项IP地址前缀的掩码长度大于M时,所述CPU以匹配的数组元素内容 为索引在内存中查找到第1级哈希表,然后针对第i级哈希表如果路由表项IP地址前缀IP地址前缀第M+l + xfiNx 32比特的掩码长度小于
0
等于Ni,则所述CPU在所述内存中以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比 特哈希元素下的第i+l级路由集合; 如果路由表项IP地址前缀第M+l + liNx 32比特的掩码长度大于Ni,则所述
0
CPU在所述内存中以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的 第i+l级哈希表。 当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容为 空,则所述CPU结束当前查询; 当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容为空, 则所述CPU结束当前查询。 当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容已 记录有该数据元素下的第1级哈希表在内存中的地址,则所述CPU进一步查询该数组元素 下的第1级哈希表内的同级路由集合指针,如果该同级路由集合指针指向该数据元素下的 第1级路由集合,则所述CPU在该第1级路由集合中查询路由表项,否则结束当前查询;
当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容已记录 有该数据元素下的第1级路由集合在内存中的地址,则所述CPU进一步结束当前查询;
当该路由表项IP地址前缀的掩码长度大于M时,且匹配的数组元素内容为第1级 哈希表,则针对第i级哈希表 如果路由表项IP地址前缀第M+l + xf;Nx 32比特的掩码长度小于等于Ni、且
0
匹配的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+l级哈希表在内存中的地址, 则所述CPU进一步在该Ni比特哈希元素下的第i+l级哈希表内的同级路由集合指针,如果 该同级路由集合指针指向该Ni比特哈希元素下的第i+l级路由集合,则所述CPU在该第 i+l级路由集合中查询路由表项,否则结束当前查询; 如果路由表项IP地址前缀第M+l + liNx 32比特的掩码长度大于Ni、且匹配
0的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+1级路由集合在内存中的地址,则 所述CPU结束当前查询。 公网和每个VPN设置两张对应的VR表,第一 VR表用于存放组播路由表项、第二 VR 表用于存放单播路由表项; 所述CPU在第一 VR表中以待查找组播路由表项的IP地址前缀的各比特为索引, 查找到对应级别的路由集合、并在该路由集合中查找到待查找组播路由表项,然后依据该 路由集合中的路由集合指针查找到对应第二VR表中,与待查找单播表项的IP地址前缀的 首字节匹配的数组元素,并在该第二 VR表中以待查找单播路由表项的IP地址前缀的后续 各比特为索引,逐级查找到对应级别的路由集合、并在该路由集合中查找到待查找单播路 由表项。 所述CPU利用VR-ID来区分公网和不同VPN所分别对应的VR表,且连续的VPN顺
序对应取值连续的VR-ID。 较佳地,所述M取8。 由上述技术方案可见,本发明分别为公网和每个VPN设置对应的虚拟路由VR表, 每张VR表中包含有2M个用于与IP地址前缀最高字节匹配的M比特数组元素,如果路由表 项IP地址前缀的掩码长度小于等于M,则以该IP地址前缀的最高字节即可区分出该路由表 项,从而可直接在与IP地址前缀最高字节匹配的M比特数组元素下衍生出路由集合来存放 该路由表项、并可直接在该路由集合中查找到该路由表项;如果路由表项IP地址前缀的掩 码长度大于M,则以该IP地址前缀的最高字节不足以区分出该路由表项,从而需要衍生出 对应IP地址前缀后续相应比特的若干级哈希表,直至该IP地址前缀的掩码长度小于等于 数组元素对应的最高M比特与后续若干级哈希表所对应的相应比特之和,然后在衍生出的 最后一级哈希表中与IP地址前缀对应该级哈希表的相应比特所匹配的哈希元素下,衍生 出路由集合来存放该路由表项,并可按照相同方式查找到该路由集合、在该路由集合中查 找到该路由表项。这样,本发明中的最多查询次数明显少于现有技术中树形结构的最多32 次查询,因此,本发明能够提高路由查询效率。 进一步地,针对IP地址前缀取值相同、但掩码长度不同的路由冲突,本发明可在
匹配的同一个元素下针对短掩码路由表项建立路由集合、针对长掩码路由表项建立同级的
哈希表,再利用同级哈希表级联同级的路由集合,从而解决了哈希冲突的问题。 再进一步地,本发明可记录每个路由集合中存放的路由表项的最大掩码长度和最
小掩码长度,从而在待查询的路由表项大于记录的最大掩码长度、或小于记录的最小掩码
长度时,无需在路由集合中查询即可获知不存在匹配的路由表项,从而进一步提高路由查
询效率。 此外,本发明可以为公网和每个VPN分别设置两张对应的VR表,一张用于存放表 示组播组地址的路由表项、另一张用于存放表示组播源地址的路由表项,从而也能够适用 于组播路由,进一步提高路由查询的通用性。
图1为本发明实施例中虚拟路由表的结构示意图;
图2为本发明实施例中哈希表的结构示意18
图3为本发明实施例中路由集合的结构示意图; 图4为本发明实施例中针对组播路由的一种虚拟路由表的结构示意图; 图5a 图5e为本发明实施例中实例一的路由表项存储过程示意图; 图6为本发明实施例中实例二的路由表项存储过程示意图; 图7a 图7b为本发明实施例中实例三的路由表项删除过程示意图。
具体实施例方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对
本发明进一步详细说明。 本发明实施例采用一级虚拟路由(Virtual Rout, VR)表、以及若干级哈希表来实 现路由表项的维护和查询,具体参见图1 : 分别为公网和每个VPN设置一对应的VR表,每张VR表中包含有2M个用于与IP地 址前缀最高字节匹配的M比特数组元素,M为大于等于1小于32的正整数;其中,公网和不 同VPN所分别对应的VR表可利用VR-ID来予以区分;较佳地,令连续的VPN顺序对应取值 连续的VR-ID,这样,当进行任意VPN的私网路由时,可按照VPN排列顺序对VR-ID的取值作 偏移,即可直接得到对应VR-ID、并一次查找到对应的VR表; 每张VR表中的每个数组元素下,可衍生出第l级哈希表、和/或衍生出第l级最 多可存放M个路由表项的路由集合(RoutSet),那么该数组元素的内容就为衍生出的第1级 哈希表或第1级RoutSet在内存中的地址,以使该数组元素能够作为衍生出的第1级哈希 表或第1级RoutSet的索引;需要说明的是,每张VR表中取值为0x00的M比特数组元素, 如果没有特殊设置,其通常只能够匹配IP地址前缀0. 0. 0. 0,因而该数组元素下通常只会 衍生出第1级RoutSet ; 第i级的每张哈希表中,包含有2Ni个用于与IP地址前缀第 M+l + li'Nx M+f;Nx比特匹配的Ni比特哈希元素、i大于等于1且小于等于哈希表的
0 0
预设最大级数P、P为大于等于1且小于等于32-M的正整数、N0取0,且Ni为满足Nl NP 之和等于32-M这一条件下任意设定的正整数;且,在i取1 P-l时,第i级哈希表中的 每个哈希元素下可衍生出第i+l级哈希表、和/或衍生出第i+l级最多存放Ni个路由表项 的RoutSet,而当i取P时,第i级、即第P级哈希表中的每个哈希元素下只可衍生出第i+l 级、也即第P+l级可存放1个路由表项的RoutSet。 这样,在存储路由表项时,如果路由表项IP地址前缀的掩码长度小于等于M,则以 该IP地址前缀的最高字节即可区分出该路由表项,从而可直接在与IP地址前缀最高字节 匹配的M比特数组元素下衍生出RoutSet来存放该路由表项;如果路由表项IP地址前缀的 掩码长度大于M,则以该IP地址前缀的最高字节不足以区分出该路由表项,从而需要衍生 出对应IP地址前缀后续相应比特的若干级哈希表,直至该IP地址前缀的掩码长度小于等 于数组元素对应的最高M比特与后续若干级哈希表所对应的相应比特之和、即以该IP地址 前缀的最高字节与后续若干哈希表所对应的字节之和足以区分出该路由表项,然后在衍生 出的最后一级哈希表中与IP地址前缀对应该级哈希表的相应比特所匹配的哈希元素下, 衍生出RoutSet来存放该路由表项。
19
也就是说,对于每张V R表来说,即便其中未存有路由表项,该V R表中仍然包含 固定的2M个M比特数组元素;而随着不同路由表项的存入,匹配数组元素下会相应衍生出 RoutSet、或哈希表和RoutSet。 同理,在查找路由表项时,如果路由表项IP地址前缀的掩码长度小于等于M,则以 该IP地址前缀的最高字节即可区分出该路由表项,从而可直接在与IP地址前缀最高字节 匹配的M比特数组元素下衍生出的RoutSet中查找到该路由表项;如果路由表项IP地址前 缀的掩码长度大于M,则以该IP地址前缀的最高字节不足以区分出该路由表项,从而需要 逐级查找衍生出的对应IP地址前缀后续相应比特的若干级哈希表,直至该IP地址前缀的 掩码长度小于等于数组元素对应的最高M比特与后续若干级哈希表所对应的相应比特之 和、即以该IP地址前缀的最高字节与后续若干哈希表所对应的字节之和足以区分出该路 由表项,然后在最后一级哈希表中与IP地址前缀对应该级哈希表的相应比特所匹配的哈 希元素下的RoutSet中,即可查找到该路由表项。 下面,结合存储、查找、删除的三种处理过程,对本发明实施例中的路由维护和查 找方法进行详细说明。 1)、有公网或任意VPN的路由表项需要存储 1. 1)首先利用该路由表项的IP地址前缀的最高字节在对应VR表中查找匹配的数 组元素,即以该路由表项的IP地址前缀的最高字节为索引在对应VR表中查找匹配的数组 元素。 此后,存在两种情况,一种是路由表项IP地址前缀的掩码长度小于等于M、另一种 则是路由表项IP地址前缀的掩码长度大于M。 1. 2a)、当该路由表项IP地址前缀的掩码长度小于等于M时,可直接将该路由表项 存放至匹配的数组元素下的第1级RoutSet中。具体说,匹配的数组元素内容已记录有该 数据元素的第1级RoutSet在内存中的地址,即已有匹配该数组元素、且IP地址前缀总掩 码长度小于等于M的其它路由表项存储,则以匹配的数组元素内容为索引在内存中查找到 第1级RoutSet 。 此外,实际应用中,还可能存在如下两种特殊情况 al、匹配的数组元素内容为空(NULL),即还未有匹配该数组元素的路由表项存储, 则在内存中创建该数据元素下的第1级RoutSet、并将该数组元素内容设置为创建的第1级 RoutSet在内存中的地址; a2、一种涉及冲突的特殊情况,由于之前已有IP地址前缀取值与当前待存储的路 由表项相同、但掩码长度大于M的其它路由表项存储,匹配的数组元素下已建立有第1级哈 希表,从而产生了哈希冲突,那么此时,匹配的数组元素内容已记录有该数据元素下的第1 级哈希表在内存中的地址,即理应为当前待存储路由表项建立第1级RoutSet的数组元素 下已建立有第1级哈希表,则仍在内存中创建该数据元素下的第1级RoutSet但保留内存 中已有的第1级哈希表、并设置该数组元素下的第1级哈希表内预设的同级RoutSet指针 指向该数据元素下的第1级RoutSet,即通过第1级哈希表内的同级RoutSet指针将第1级 RoutSet与VR表中匹配的数组元素级联,从而对于同一个M比特数组元素来说,其下级可同 时包含针对长掩码的第1级哈希表、以及针对短掩码的第1级RoutSet,参见图1中VR-ID Q中的第1级哈希表及第1级RoutSet ;CN 101695054 A 然后,对于al、 a2中的任意一种,在建立第1级RoutSet之后,再将该路由表项存 放至匹配的数组元素下的第1级RoutSet中。 1.2b)当该路由表项IP地址前缀的掩码长度大于M时,由于IP地址前缀的掩 码长度最大会达到32,因而匹配数组元素下衍生出的哈希表级数最大可达到P级,但无 论IP地址前缀的掩码长度取值如何,均可从匹配的数组元素下的第1级哈希表开始,依
次查找第i级哈希表中与IP地址前缀第M+l + liNx M+liNx比特匹配的Ni比特哈
0 0
希元素、并针对第i级哈希表判断该路由表项IP地址前缀第M+l + 2'Nx 32比特的掩
0
码长度是否小于等于Ni ;如果是,将该路由表项存放至第i级哈希表中与IP地址前缀第
M+l + I^Nx M+f;Nx比特匹配的Ni比特哈希元素下的第i+1级RoutSet中,否则,继
0 0
续针对第i级哈希表中与IP地址前缀第M+l + 2'Nx M+f;Nx比特匹配的Ni比特哈希
0 0
元素下的第i+1级哈希表进行判断,直至该路由表项IP地址前缀第M+l+I^N(x+l) 32
0
比特的掩码长度小于等于N(i+l)为止。 具体说,在以匹配的数组元素内容为索引在内存中查找到第1级哈希表之后, 如果路由表项IP地址前缀第M+l + 2Nx 32比特的掩码长度小于等于Ni、且匹配
0
的Ni比特哈希元素内容已记录有第i+l级RoutSet在内存中的地址,即已有IP地址 前缀第M+l + li'Nx M+f;Nx比特匹配该哈希元素、且IP地址前缀总掩码长度位于
0 0
M+l + li'Nx M+f;Nx之间的其它路由表项存储,则以匹配的Ni比特哈希元素内容为
0 0
索引查找匹配的Ni比特哈希元素下的第i+l级RoutSet ; 如果路由表项IP地址前缀第M+l +》Nx 32比特的掩码长度大于第i级哈希
0
表所对应的Ni、且匹配的Ni比特哈希元素内容已记录有第i+l级哈希表在内存中的地址, 即已有IP地址前缀第M+l + x2'Nx M+I^Nx比特匹配该哈希元素、且IP地址前缀总掩
0 o
码长度大于M+ljNx的路由表项存储,则以匹配的Ni比特哈希元素内容为索引查找匹配
的Ni比特哈希元素下的第i + l级哈希表; 此外,实际应用中,针对数组元素还具体存在如下几种特殊情况
bl、匹配的数组元素内容为空,则进一步创建该数据元素下的第1级哈希表、并将 该数组元素内容设置为创建的第1级哈希表在内存中的地址,然后针对第i级哈希表进行 相应处理; b2、对于一种存在哈希冲突的特殊情况,由于之前已有IP地址前缀取值与当前待 存储的路由表项相同、且总掩码长度小于等于M的其它路由表项存储,因而匹配的哈希元素下已建立有第1级RoutSet,从而产生了哈希冲突,那么此时,匹配的数组元素内容已记录有该数据元素下的第1级RoutSet在内存中的地址,则进一步在内存中创建该数据元素下的第1级哈希表、并设置该数组元素下的第1级哈希表内的同级RoutSet指针指向该数据元素下的第1级RoutSet,然后再从创建的第1级哈希表开始,针对第i级哈希表进行相应处理。 相应地,针对第i级哈希表也存在相关的几种特殊情况 cl、路由表项IP地址前缀第M+l + liNx 32比特的掩码长度小于等于Ni、且匹
0
配的Ni比特哈希元素内容为空,即还未有IP地址前缀第M+l + ^Nx M+f]Nx比特匹
0 o
配该哈希元素、且IP地址前缀总掩码长度大于M+l + li'Nx的其它路由表项存储,则在内
0
存中创建匹配的Ni比特哈希元素下的第i+l级RoutSet、并将该Ni比特哈希元素内容设置为创建的第i+l级RoutSet在内存中的地址; c2、对于类似于a2的一种存在哈希冲突的特殊情况,由于之前已有IP地址前缀取值与当前待存储的路由表项相同、且总掩码长度大于M+f;Nx的其它路由表项存储,因而
0
匹配的哈希元素下已建立有第i+l级哈希表,从而产生了哈希冲突,那么此时,路由表项IP
地址前缀第M+l + ^Nx 32比特的掩码长度小于等于Ni、且匹配的Ni比特哈希元素内
0
容为该Ni比特哈希元素下的第i+l级哈希表在内存中的地址,即理应为当前待存储路由表项建立第i+l级RoutSet的哈希元素下已建立有第i+l级哈希表,则在内存中创建匹配的Ni比特哈希元素下的第i+l级RoutSet但保留第i+l级哈希表、并设置该Ni比特哈希元素下的第i+l级哈希表内预设的同级RoutSet指针指向该Ni比特哈希元素下的第i+l级RoutSet,即通过第i+l级哈希表内的同级RoutSet指针将第i+l级RoutSet与第i级哈希表中匹配的哈希元素级联,从而对于同一个Ni比特哈希元素来说,其下级可同时包含针对长掩码的第i+l级哈希表、以及针对短掩码的第i+l级RoutSet,参见图1中VR-ID 1中的第i级哈希表及第i级RoutSet、 VR-ID Q中的第i级哈希表及第i级RoutSet ;
对于cl、c2这两种情况中的任意一种,在建立第i+l级RoutSet之后,即可将该路
由表项存放至第i级哈希表中与IP地址前缀第M+l + I^Nx M+f;Nx比特匹配的Ni比
0 0
特哈希元素下的第i+l级RoutSet中。 c3、路由表项IP地址前缀第M+l + li'Nx 32比特的掩码长度大于第i级
0
哈希表所对应的Ni、且匹配的Ni比特哈希元素内容为空,即还未有IP地址前缀第M+l + 5iNx M+f;Nx比特匹配该哈希元素、且IP地址前缀总掩码长度大于
0 0
M+l + li'Nx的路由表项存储,则在内存中创建匹配的Ni比特哈希元素下的第i+l级哈希
0
表、并将该Ni比特哈希元素内容设置为创建的第i + l级哈希表在内存中的地址;
c4、对于类似于b2的另一种存在哈希冲突的特殊情况,由于之前已有IP地址前缀取值与当前待存储的路由表项相同、且IP地址前缀总掩码长度位于
M+l + li'Nx M+f;Nx之间的其它路由表项存储,因而匹配的哈希元素下已建
0 0
立有第i+l级RoutSet,从而产生了哈希冲突,那么此时,路由表项IP地址前缀第M+i + I]Nx 32比特的掩码长度大于第i级哈希表所对应的Ni、且匹配的Ni比特哈希元
0
素内容为该Ni比特哈希元素下的第i+l级RoutSet在内存中的地址,则在内存中创建匹配的Ni比特哈希元素下的第i+l级哈希表并保留第i+l级RoutSet、再将该Ni比特哈希元素内容更改设置为创建的第i+l级哈希表在内存中的地址、并设置该Ni比特哈希元素下的第i+l级哈希表内的预设同级RoutSet指针指向该Ni比特哈希元素下的第i+l级RoutSet,即通过第i+l级哈希表内的同级RoutSet指针将第i+l级RoutSet与第i级哈希表中匹配的哈希元素级联,从而对于同一个Ni比特哈希元素来说,其下级可同时包含针对长掩码的第i+l级哈希表、以及针对短掩码的第i+l级RoutSet,参见图1中VR-ID 1中的第i级哈希表及第i级RoutSet、VR-ID Q中的第i级哈希表及第i级RoutSet ;
对于c3、c4这两种情况中的任意一种,在建立第i+l级哈希表之后,继续针对第i
级哈希表中与IP地址前缀第M+l + ^Nx M+f;Nx比特匹配的Ni比特哈希元素下的第
0 0
i+l级哈希表进行判断,直至该IP地址前缀的掩码长度小于等于数组元素对应的最高M比
特与后续若干级哈希表所对应的相应比特之和、即以该IP地址前缀的最高字节与后续若干哈希表所对应的字节之和足以区分出该路由表项。 2)、有公网或任意VPN的路由表项需要查询 2. 1)首先利用待查询路由表项的IP地址前缀的最高字节在对应VR表中查找匹配的数组元素,即以待查询路由表项的IP地址前缀的最高字节为索引在对应VR表中查找匹配的数组元素。 此后,存在两种情况,一种是待查询路由表项IP地址前缀的掩码长度小于等于M、另一种则是待查询路由表项IP地址前缀的掩码长度大于M。 2. 2a)、当待查询路由表项IP地址前缀的掩码长度小于等于M时,可直接在匹配的数组元素下的第1级RoutSet中进行最长前缀匹配(LongestPrefix Match, LPM),即可查找到待查询路由表项。具体说,匹配的数组元素内容已记录有该数据元素的第1级RoutSet在内存中的地址,即已有匹配该数组元素、且IP地址前缀总掩码长度小于等于M的其它路
由表项存储,则以匹配的数组元素内容为索引在内存中查找到第1级RoutSet。
此外,实际应用中,还可能存在如下两种特殊情况 dl、匹配的数组元素内容为空,即还未有匹配该数组元素的路由表项存储,则直接确定不存在待查询路由表项,并结束当前查询流程; d2、一种涉及冲突的特殊情况,S卩,以匹配的数组元素内容为索引在内存中查找到第1级哈希表、而不是第1级RoutSet,此情况有可能是由于匹配的该数组元素下级同时包含针对长掩码的第1级哈希表、以及针对短掩码的第1级RoutSet,参见图1中VR-ID Q中的第1级哈希表及第1级RoutSet,且第1级哈希表内具有预设同级RoutSet指针将第1级
23RoutSet与VR表中匹配的数组元素级联,那么针对这种情况,在以匹配的数组元素内容为索引在内存中查找到第1级哈希表之后,读取第1级哈希表内的同级RoutSet指针,如果读取的同级RoutSet指针指向第1级RoutSet、则依据读取的同级RoutSet指针即可查找到第1级RoutSet,如果读取的同级RoutSet指针为空,则表示不存在该数组元素下的第1级RoutSet,因而直接确定不存在待查询路由表项,并结束当前查询流程。
2. 2b)当该路由表项IP地址前缀的掩码长度大于M时,由于IP地址前缀的掩码长度最大会达到32,因而匹配数组元素下衍生出的哈希表级数最大可达到P级,但无论IP地址前缀的掩码长度取值如何,均可从匹配的数组元素下的第1级哈希表开始,依次查找第i
级哈希表中与IP地址前缀第M+l + liNx M+f;Nx比特匹配的Ni比特哈希元素、并针
0 0
对第i级哈希表判断该路由表项IP地址前缀第M+l + I^Nx 32比特的掩码长度是否小
0
于等于Ni ;如果是,则在第i级哈希表中与IP地址前缀第M+l + liNx M+f;Nx比特匹
0 0
配的Ni比特哈希元素下的第i+1级RoutSet中进行LPM,否则,继续针对第i级哈希表中与IP地址前缀第M+l + fiNx M+f;Nx比特匹配的Ni比特哈希元素下的第i+1级哈希表
0 0
进行判断,直至该路由表项IP地址前缀第M+l + l^'N(x+l) 32比特的掩码长度小于等于
0
N(i+1)为止。 具体说,在以匹配的数组元素内容为索引在内存中查找到第1级哈希表之后,
如果路由表项IP地址前缀第M+l+xf;Nx 32比特的掩码长度小于等于Ni、且匹配
0
的Ni比特哈希元素内容已记录有第i+1级RoutSet在内存中的地址,即已有IP地址
前缀第M+l + I^Nx M+f;Nx比特匹配该哈希元素、且IP地址前缀总掩码长度位于o o
M+l + I^Nx M+f;Nx之间的其它路由表项存储,则以匹配的Ni比特哈希元素内容为
0 0
索引查找匹配的Ni比特哈希元素下的第i+1级RoutSet ;如果路由表项IP地址前缀第M+l + liNx 32比特的掩码长度大于第i级哈希
0
表所对应的Ni、且匹配的Ni比特哈希元素内容已记录有第i+1级哈希表在内存中的地址,即已有IP地址前缀第M+l + li'Nx M+f;Nx比特匹配该哈希元素、且IP地址前缀总掩
0 0
码长度大于M+f]Nx的路由表项存储,则以匹配的Ni比特哈希元素内容为索引查找匹配
0
的Ni比特哈希元素下的第i + 1级哈希表; 此外,实际应用中,针对数组元素还具体存在如下几种特殊情况 el、匹配的数组元素内容为空,则直接确定不存在待查询路由表项,并结束当前查
询流程;
e2、以匹配的数组元素内容为索引在内存中查找到第1级RoutSet、而不是第1级哈希表,即未存有与该数组元素匹配且IP地址前缀总掩码长度大于M的路由表项,则直接确定不存在待查询路由表项,并结束当前查询流程。
相应地,针对第i级哈希表也存在相关的几种特殊情况 fl、路由表项IP地址前缀第M+l + liNx 32比特的掩码长度小于等于Ni、且匹
0
配的Ni比特哈希元素内容为空,即还未有IP地址前缀第M+l + I^Nx M+f;Nx比特匹
0 0
配该哈希元素、且IP地址前缀总掩码长度大于M+l + li'Nx的其它路由表项存储,则直接
0
结束当前查询流程; f2、对于一种存在哈希冲突的特殊情况,S卩,以匹配的哈希元素内容为索引在内存中查找到第i+l级哈希表、而不是第i+l级RoutSet,此情况有可能是由于匹配的该数组元素下级同时包含针对长掩码的第i+l级哈希表、以及针对短掩码的第i+l级RoutSet,参见图1中VR-ID 1中的第i级哈希表及第i级RoutSet、 VR-ID Q中的第i级哈希表及第i级RoutSet,且第i+l级哈希表内具有预设同级RoutSet指针将第i+l级RoutSet与VR表中匹配的数组元素级联,那么针对这种情况,在以匹配的哈希元素内容为索引在内存中查找到第i+l级哈希表之后,读取第i+l级哈希表内的同级RoutSet指针,如果读取的同级RoutSet指针指向第i+l级RoutSet、则依据读取的同级RoutSet指针即可查找到第i+l级RoutSet,并在查找到的第i+l级RoutSet中进行LPM ;如果读取的同级RoutSet指针为空,则表示不存在该数组元素下的第i+l级RoutSet,因而直接确定不存在待查询路由表项,并结束当前查询流程。 f3、路由表项IP地址前缀第M+l + ^Nx 32比特的掩码长度大于第i级
0
哈希表所对应的Ni、且匹配的Ni比特哈希元素内容为空,即还未有IP地址前缀
第M+i+5;'Nx M+f;Nx比特匹配该哈希元素、且ip地址前缀总掩码长度大于
0 0
M+1 + ^NX的路由表项存储,则直接确定不存在待查询路由表项,并结束当前查询流程;
0 f4、以匹配的哈希元素内容为索引在内存中查找到第i+l级RoutSet、而不是第i+l级哈希表,即未存有与该数组元素匹配且IP地址前缀总掩码长度大于M+fiNx的路
0
由表项,则直接确定不存在待查询路由表项,并结束当前查询流程。 3)、有公网或任意VPN的路由表项需要删除 在删除公网或任意VPN的路由表项之前,首先需要按照上述方式查找到待删除路由表项,在查找到待删除路由表项之后,直接将该路由表项从其所在的RoutSet中删除即可。而且,如果删除了该路由表项的RoutSet中不再存有其他任何路由表项,则可以进一步将该RoutSet删除;如果有同级的哈希表内的预设同级RoutSet指针指向删除的RoutSet,则还需要将同级的哈希表内的预设同级RoutSet指针设置为空。
25
此外,对于第i级哈希表来说,如果其所有哈希元素都不具有下一级的第i + 1级哈希表、所有哈希元素下的第i+1级RoutSet均被删除、且该第i级哈希表的同级RoutSet指针为空,则可以再进一步地将该第i级哈希表删除、并将该第i级哈希表的上一级哈希元素或数组元素的内容设置为空。 以上,是结合存储、查找、删除的三种处理过程,对本发明实施例中路由维护和查找方法的详细说明。 较佳地,参见图2,在本发明实施例的路由维护和查找方法中,每级中的每个哈希表内的预设同级RoutSet指针设置在该哈希表的第l字段,哈希表的后续字段则可以依次包括改哈希表的父哈希表指针(第1级哈希表的父哈希表指针为空)、作为该哈希表索引的上一级数组元素内容或哈希元素内容、以及该哈希表内的所有2Ni个哈希元素。这样,当发生哈希冲突时,直接读取哈希表的第1字段即可依据预设同级RoutSet指针查找到同级的RoutSet,相比于预设同级RoutSet指针设置在该哈希表后续字段的其他方式,省去了该哈希表所有字段内查询同级RoutSet指针的处理过程,从而能够进一步提高路由存储和查询效率。 较佳地,参见图3,在本发明实施例的路由维护和查找方法中,每级中的每个RoutSet内进一步设置有表示该RoutSet存放的所有路由表项IP地址前缀对应比特(对于第1级RoutSet, IP地址前缀对应比特为1 32比特,对于第i+1级RoutSet, IP地址
前缀对应比特为M+l + I^Nx 32)的最大掩码长度和最小掩码长度,如果当前存入至该
0
RoutSet的路由表项的IP地址前缀对应比特的掩码长度,大于该RoutSet记录的最大掩码长度,则将当前存入至该RoutSet的路由表项的IP地址前缀的掩码长度更新为该RoutSet记录的最大掩码长度;如果当前存入至该RoutSet的路由表项的IP地址前缀对应比特的掩码长度,小于该RoutSet记录的最小掩码长度,则将当前存入至该RoutSet的路由表项的IP地址前缀的掩码长度更新为该RoutSet记录的最小掩码长度。这样,在路由查询时,如果查询到某个RoutSet,且已知的待查询路由表项IP地址前缀对应比特的掩码长度大于该RoutSet记录的最大掩码长度,则可直接确定该RoutSet内没有待查询路由表项,从而省去了在该RoutSet内进行LPM匹配的过程;同理,如果已知的待查询路由表项IP地址前缀对应比特的掩码长度小于该RoutSet记录的最小掩码长度,则可直接确定该RoutSet内没有待查询路由表项,从而也省去了在该RoutSet内进行LPM匹配的过程。进而,由于省去了不必要的LPM匹配过程,因而进一步提高了路由查询的效率。 除此之外,在本发明实施例的路由维护和查询方法中,公网和每个VPN可以设置两张对应的VR表,第一VR表用于存放IP地址前缀表示组播组(Group,G)地址的组播路由表项、第二VR表用于存放IP地址前缀表示单播源(Source, S)地址的单播路由表项。而且,参见图4,在存放组播路由表项的第一 VR表的每一级RoutSet中,可进一步具有路由指针(RoutePointer),该RoutePointer可指向匹配其所属RoutSet上一级数组元素或哈希元素的组播路由表项所对应的第二 VR表中,匹配对应表示源地址的IP地址前缀首字节的数组元素。 这样,路由存储时,在第一VR表中以组播路由表项的IP地址前缀的各比特为索引,查找到或建立对应级别的RoutSet,在该RoutSet中存储组播路由表项,同时,还按照单
26播路由表项表示源地址的IP地址前缀的首字节,设置该RoutSet的RoutePointer、使之指 向对应单播路由表项所对应的第二 VR表中,与对应单播路由表项表示源地址的IP地址前 缀的首字节匹配的数组元素,尔后,在该第二VR表中,以单播路由表项的IP地址前缀的后 续各比特为索引,逐级查找到对应级别的RoutSet、并在该RoutSet中存储单播路由表项。
同理,路由查询时,在第一VR表中以待查找组播路由表项的IP地址前缀的各比 特为索引,查找到或建立对应级别的RoutSet,并在该RoutSet中LPM得到待查找组播路由 表项,然后依据该RoutSet中的RoutePointer查找到对应第二 VR表中与待查找单播表项 表示源地址的IP地址前缀的首字节匹配的数组元素,尔后,在该第二 VR表中,以待查找单 播路由表项的IP地址前缀的后续各比特为索引,逐级查找到对应级别的RoutSet、并在该 RoutSet中LPM得到待查找单播路由表项。 在本发明实施例的路由维护装置和路由查询装置中,均包括CPU和内存,其中,路 由维护装置和路由查询装置中的内存,均用于存储分别为公网和每个VPN设置的对应VR 表、以及后续衍生出来的若干级哈希表和RoutSet ;而路由维护装置中的CPU则是按照本实 施例中前述路由维护方法执行相应的处理,路由查询装置中的CPU则是按照本实施例中前 述路由查询方法。 而且,与本发明实施例的路由维护和查找方法同理,对于本发明实施例的路由维 护装置和路由查询装置来说,每级中的每个哈希表内的预设同级RoutSet指针设置在该哈 希表的第1字段,哈希表的后续字段则可以依次包括改哈希表的父哈希表指针(第1级哈 希表的父哈希表指针为空)、作为该哈希表索引的上一级数组元素内容或哈希元素内容、以 及该哈希表内的所有2M个哈希元素。这样,当发生哈希冲突时,CPU直接读取哈希表的第 1字段即可依据预设同级RoutSet指针查找到同级的RoutSet,相比于预设同级RoutSet指 针设置在该哈希表后续字段的其他方式,省去了该哈希表所有字段内查询同级RoutSet指 针的处理过程,从而能够进一步提高路由存储和查询效率。 此外,对于本发明实施例的路由维护装置和路由查询装置来说,每级中的每个 RoutSet内进一步设置有表示该RoutSet存放的所有路由表项IP地址前缀对应比特(对 于第1级RoutSet, IP地址前缀对应比特为1 32比特,对于第i+1级RoutSet, IP地址
前缀对应比特为M+l + I^Nx 32 )的最大掩码长度和最小掩码长度,如果当前存入至该
0
RoutSet的路由表项的IP地址前缀对应比特的掩码长度,大于该RoutSet记录的最大掩 码长度,则CPU将当前存入至该RoutSet的路由表项的IP地址前缀的掩码长度更新为该 RoutSet记录的最大掩码长度;如果当前存入至该RoutSet的路由表项的IP地址前缀对应 比特的掩码长度,小于该RoutSet记录的最小掩码长度,则CPU将当前存入至该RoutSet的 路由表项的IP地址前缀的掩码长度更新为该RoutSet记录的最小掩码长度。这样,在路由 查询时,如果CPU查询到某个RoutSet,且已知的待查询路由表项IP地址前缀对应比特的掩 码长度大于该RoutSet记录的最大掩码长度,则CPU可直接确定该RoutSet内没有待查询 路由表项,从而省去了在该RoutSet内进行LPM匹配的过程;同理,如果已知的待查询路由 表项IP地址前缀对应比特的掩码长度小于该RoutSet记录的最小掩码长度,则CPU可直接 确定该RoutSet内没有待查询路由表项,从而也省去了在该RoutSet内进行LPM匹配的过 程。进而,由于省去了 CPU不必要的LPM匹配过程,因而进一步提高了路由查询的效率。
与路由维护和查询方法同理,在本发明实施例的路由维护和查询装置中,公网和 每个VPN可以设置两张对应的VR表,第一 VR表用于存放IP地址前缀表示组播组地址的 组播路由表项、第二VR表用于存放IP地址前缀表示单播源地址的单播路由表项。而且, 在存放组播路由表项的第一 VR表的每一级RoutSet中,可进一步具有RoutePointer,该 RoutePointer可指向匹配其所属RoutSet上一级数组元素或哈希元素的组播路由表项所 对应的第二 VR表中,匹配对应表示源地址的IP地址前缀首字节的数组元素。
这样,路由存储时,CPU在第一VR表中以组播路由表项的IP地址前缀的各比特为 索引,查找到或建立对应级别的RoutSet,在该RoutSet中存储组播路由表项,同时,CPU还 按照单播路由表项表示源地址的IP地址前缀的首字节,设置该RoutSet的RoutePointer、 使之指向对应单播路由表项所对应的第二 VR表中,与对应单播路由表项表示源地址的IP 地址前缀的首字节匹配的数组元素,尔后,在该第二 VR表中,以单播路由表项的IP地址前 缀的后续各比特为索引,逐级查找到对应级别的RoutSet、并在该RoutSet中存储单播路由 表项。 同理,路由查询时,CPU在第一VR表中以待查找组播路由表项的IP地址前缀的各 比特为索引,查找到或建立对应级别的RoutSet,并在该RoutSet中LPM得到待查找组播路 由表项,然后CPU依据该RoutSet中的RoutePointer查找到对应第二VR表中与待查找单播 表项表示源地址的IP地址前缀的首字节匹配的数组元素,尔后,在该第二VR表中,CPU以待 查找单播路由表项的IP地址前缀的后续各比特为索引,逐级查找到对应级别的RoutSet、 并在该RoutSet中LPM得到待查找单播路由表项。 由此可见,本发明实施例中的路由维护和查询方法、以及路由维护和查询装置,分 别为公网和每个VPN设置对应的虚拟路由VR表,每张VR表中包含有2M个用于与IP地址 前缀最高字节匹配的M比特数组元素,如果路由表项IP地址前缀的掩码长度小于等于M,则 以该IP地址前缀的最高字节即可区分出该路由表项,从而可直接在与IP地址前缀最高字 节匹配的M比特数组元素下衍生出路由集合来存放该路由表项、并可直接在该路由集合中 查找到该路由表项;如果路由表项IP地址前缀的掩码长度大于M,则以该IP地址前缀的最 高字节不足以区分出该路由表项,从而需要衍生出对应IP地址前缀后续相应比特的若干 级哈希表,直至该IP地址前缀的掩码长度小于等于数组元素对应的最高M比特与后续若干 级哈希表所对应的相应比特之和,然后在衍生出的最后一级哈希表中与IP地址前缀对应 该级哈希表的相应比特所匹配的哈希元素下,衍生出路由集合来存放该路由表项,并可按 照相同方式查找到该路由集合、在该路由集合中查找到该路由表项。 这样,最多需要2(1级哈希表的情况)次 33-M次(32-M级哈希表的情况)直接 地址查询,明显少于(M大于1时)或不多于(M等于1时)现有技术中树形结构的最多32 次查询,且M取值越大,查询次数越是明显少于现有技术中树形结构的最多32次查询,从而 能够提高路由查询效率。 进一步地,针对IP地址前缀取值相同、但掩码长度不同的路由冲突,本发明实施 例可在匹配的同一个元素下针对短掩码路由表项建立路由集合、针对长掩码路由表项建立 同级的哈希表,再利用同级哈希表级联同级的路由集合,从而解决了哈希冲突的问题。
再进一步地,本发明实施例可记录每个路由集合中存放的路由表项的最大掩码长 度和最小掩码长度,从而在待查询的路由表项大于记录的最大掩码长度、或小于记录的最
28小掩码长度时,无需在路由集合中查询即可获知不存在匹配的路由表项,从而进一步提高 路由查询效率。 此外,本发明实施例可以为公网和每个VPN分别设置两张对应的VR表, 一张用于 存放表示组播组地址的路由表项、另一张用于存放表示组播源地址的路由表项,从而也能 够适用于组播路由,进一步提高路由查询的通用性。 下面,再举若干实例,对本发明实施例中的路由维护和查询方法、以及路由维护和 查询装置进行进一步说明。 在下述若干实例中,数组元素的比特数M取8,哈希表级数最大为4级,且第1级 哈希表对应IP地址前缀的第9 20比特、第2级哈希表对应IP地址前缀的第21 24比 特、第3级哈希表对应IP地址前缀的第25 28比特、第4级哈希表对应IP地址前缀的第 29 32比特,也就是说,VR表中的数组元素对应IP地址的最高字节,第1 4级哈希表则 顺序对应IP地址前缀的后续12、4、4、4比特。
实例一 对于需要存储的IP地址前缀为1. 2. 3. 4/31的VPN1的私网路由表项,依据VR-ID1 定位至VPN1对应VR表。 在VPNl对应VR表中,利用该路由表项的IP地址前缀l. 2. 3. 4/31的最高字节0x01 查找匹配的第2数组元素、即数组元素0x01。由于1. 2. 3. 4/31的掩码长度大于8,因而查 找数组元素0x01下的第l级哈希表。但由于数组元素0x01的内容为空,因而参见图5a,创 建该数据元素0x01下的第1级哈希表、并将该数组元素0x01的内容设置为创建的第1级 哈希表在内存中的地址。 在第1级哈希表中,利用该路由表项的IP地址前缀1. 2. 3. 4/31的第9 20比特 0x020为索引查找到匹配的哈希元素0x020,由于从第9 32比特的掩码长度(31-8) = 23 大于12,因而查找哈希元素0x020下的第2级哈希表。但由于哈希元素0x020的内容为空, 因而参见图5b,创建该哈希元素0x020下的第2级哈希表、并将该哈希元素0x020的内容设 置为创建的第2级哈希表在内存中的地址。 在第2级哈希表中,利用该路由表项的IP地址前缀1. 2. 3. 4/31的第21 24比 特0x3为索引查找到匹配的哈希元素0x3,由于第21 32比特的掩码长度(31-8-12)= 11大于4,因而查找哈希元素0x3下的第3级哈希表。但由于哈希元素0x3的内容为空,因 而参见图5c,创建该哈希元素0x3下的第3级哈希表、并将该哈希元素0x3的内容设置为创 建的第3级哈希表在内存中的地址。 在第3级哈希表中,利用该路由表项的IP地址前缀1. 2. 3. 4/31的第25 28比 特0x0为索引查找到匹配的哈希元素0x0,由于第25 32比特的掩码长度(31_8_12_4)= 7大于4,因而查找哈希元素0x0下的第4级哈希表。但由于哈希元素OxO的内容为空,因 而参见图5d,创建该哈希元素0x0下的第4级哈希表、并将该哈希元素0x0的内容设置为创 建的第4级哈希表在内存中的地址。 在第4级哈希表中,利用该路由表项的IP地址前缀1. 2. 3. 4/31的第28 32比 特0x4为索引查找到匹配的哈希元素0x4,由于第28 32比特的掩码长度(31-8-12-4-4) =3小于4,因而查找哈希元素0x4下的第5级RoutSet。但由于哈希元素0x4的内容为 空,因而参见图5e,创建该哈希元素0x4下的第5级RoutSet、并将该哈希元素0x0的内容设置为创建的第4级哈希表在内存中的地址,然后在第5级RoutSet中存放IP地址前缀为 1. 2. 3. 4/31的VPN1的私网路由表项,并将该RoutSet的最大掩码长度和最小掩码长度均设 置为3。 此后,当需要查找IP地址前缀为1. 2. 3. 4/31的VPN1的私网路由表项时,首先依 据VR-ID1定位至VPN1对应的VR表,然后依次以0x01、0x020、0x3、0x0、0x4为索引,通过数 组元素Ox01、数组元素0x01下第1级哈希表中的哈希元素0x020、该哈希元素0x020下第2 级哈希表中的哈希元素0x3、该哈希元素下0x3第3级哈希表中的哈希元素OxO、该哈希元 素0x0下第4级哈希表中的哈希元素0x4,查找到该哈希元素0x4下的RoutSet。此后,由于 IP地址前缀为1. 2. 3. 4/31的最后4位掩码长度为3,未大于该哈希元素0x4下的RoutSet 中的最大掩码长度、也未小于该RoutSet中的最小掩码长度,因而在RoutSet中即可LPM得 到IP地址前缀为1. 2. 3. 4/31的VPN1的私网路由表项。
实例二 基于实例一如图5e的存储结果,又有IP地址前缀为1. 2. 0. 0/16的VPN1的私网 路由表项需要存储,依据VR-ID1定位至VPN1对应VR表。 在VPN1对应VR表中,利用该路由表项的IP地址前缀1. 2. 0. 0/16的最高字节OxOl 查找匹配的第2数组元素、即数组元素0x01。由于1. 2. 0. 0/16的掩码长度大于8,且该数 组元素0x01的内容为创建的第1级哈希表在内存中的地址,因而以数组元素0x01的内容 为索引,在内存中查找数组元素0x01下的第1级哈希表。 在第1级哈希表中,利用该路由表项的IP地址前缀1. 2. 0. 0/16的第9 20比特 0x020为索引查找到匹配的哈希元素0x020,由于从第9 32比特的掩码长度(16_8) = 8 小于12,因而查找哈希元素0x020下的第2级RoutSet。但由于哈希元素0x020的内容为 第2级哈希表,因而参见图6,创建该哈希元素0x020下的第2级RoutSet但保留该哈希元 素0x020下的第2级哈希表、并设置该哈希元素0x020下的第2级哈希表内的同级RoutSet 指针指向创建的第2级RoutSet,然后在第2级RoutSet中存放IP地址前缀为1. 2. 0. 0/16 的VPN1的私网路由表项,并将该RoutSet的最大掩码长度和最小掩码长度均设置为8。
此后,当需要查找IP地址前缀为1. 2. 0. 0/16的VPN1的私网路由表项时,首先依 据VR-ID1定位至VPN1对应的VR表,然后依次以0x01、0x020为索引,通过数组元素0x01、 数组元素0x01下第1级哈希表中的哈希元素0x020、该哈希元素0x020下第2级哈希表 的同级RoutSet指针查找到该哈希元素0x020下的RoutSet。此后,由于IP地址前缀为 1. 2. 0. 0/16的第9 32位掩码长度为8,未大于该哈希元素0x020下的RoutSet中的最大 掩码长度、也未小于该RoutSet中的最小掩码长度,因而在RoutSet中即可LPM得到IP地 址前缀为1. 2. 0. 0/16的VPN1的私网路由表项。
实例三 基于实例二如图6的存储结果,有IP地址前缀为1. 2. 3. 4/31的VPN1的私网路由 表项需要查询并删除,依据VR-ID1定位至VPN1对应VR表。 在VPN1对应VR表中,利用该路由表项的IP地址前缀的最高字节OxOl查找匹配 的第2数组元素、即数组元素0x01。由于1. 2. 3. 4/31的掩码长度大于8,因而以数组元素 0x01的内容为索引查找数组元素0x01下的第1级哈希表。 在第1级哈希表中,利用该路由表项的IP地址前缀1. 2. 3. 4/31的第9 20比特0x020为索引查找到匹配的哈希元素0x020,由于从第9 32比特的掩码长度(31_8) = 23 大于12,因而以哈希元素0x020的内容为索引查找哈希元素0x020下的第2级哈希表。
在第2级哈希表中,利用该路由表项的IP地址前缀1. 2. 3. 4/31的第21 24比 特0x3为索引查找到匹配的哈希元素0x3,由于第21 32比特的掩码长度(31-8-12)= 11大于4,因而以哈希元素0x3的内容为索引查找哈希元素0x3下的第3级哈希表。
在第3级哈希表中,利用该路由表项的IP地址前缀1. 2. 3. 4/31的第25 28比 特0x0为索引查找到匹配的哈希元素0x0,由于第25 32比特的掩码长度(31_8_12_4)= 7大于4,因而以哈希元素0x0的内容为索引查找哈希元素0x0下的第4级哈希表。
在第4级哈希表中,利用该路由表项的IP地址前缀1. 2. 3. 4/31的第28 32比 特0x4为索引查找到匹配的哈希元素0x4,由于第28 32比特的掩码长度(31-8-12-4-4) =3小于4,因而以哈希元素0x4的内容为索引查找哈希元素0x4下的第5级RoutSet。
在第5级RoutSet中,参见图7a,将IP地址前缀为1. 2. 3. 4/31的VPN1的私网路 由表项删除,且由于该RoutSet为空,因而还将该RoutSet删除,并将第4级哈希表中哈希 元素0x4的内容设置为空。参见图7b,由于第4级哈希表中所有哈希元素的内容均为空, 因而删除第4级哈希表,并将第3级哈希表中哈希元素0x0的内容设置为空,依此类推,第 3级哈希表和第2级哈希表也被删除,但由于第1级哈希表的哈希元素0x020下还具有第2 级RoutSet,因而将第l级哈希表的哈希元素0x020内容改为第2级RoutSet在内存中的地 址,即将哈希元素0x020的内容改为第2级RoutSet的索引。 以上三个实例均是以VPN的私网路由为例,公网路由的存储、查询、删除过程与之 相同,组播路由的存储、查询、删除过程也与之同理、但需要通过RoutPointer执行对两个 VR表的处理。 以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在 本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保 护范围之内。
3权利要求
一种路由维护方法,其特征在于,分别为公网和每个VPN设置对应的虚拟路由VR表,每张VR表中包含有2M个用于与IP地址前缀最高字节匹配的M比特数组元素、每个数组元素下可衍生出第1级哈希表和/或第1级路由集合、第i级哈希表中每个哈希元素下可衍生出第i+1级哈希表和/或第i+1级路由集合、i大于等于1且小于等于哈希表的预设最大级数P、P为大于等于1且小于等于32-M的正整数,且对于需要存储的公网或任意VPN的路由表项,该路由维护方法包括利用该路由表项的IP地址前缀的最高字节在对应VR表中查找匹配的数组元素;当该路由表项IP地址前缀的掩码长度小于等于M时,将该路由表项存放至匹配的数组元素下的第1级路由集合中;当该路由表项IP地址前缀的掩码长度大于M时,从匹配的数组元素下的第1级哈希表开始,依次查找第i级哈希表中与IP地址前缀第比特匹配的Ni比特哈希元素、并针对第i级哈希表判断该路由表项IP地址前缀第比特的掩码长度是否小于等于Ni,如果是,将该路由表项存放至第i级哈希表中匹配的Ni比特哈希元素下的第i+1级路由集合中,否则,继续针对第i级哈希表中匹配的Ni比特哈希元素下的第i+1级哈希表进行判断;其中,N0取0,且Ni为满足N1~NP之和等于32-M这一条件下任意设定的正整数。
2. 如权利要求l所述的路由维护方法,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,以匹配的数组元素内容为索引在 内存中查找到第1级路由集合;当该路由表项IP地址前缀的掩码长度大于M时,以匹配的数组元素内容为索引在内存 中查找到第1级哈希表,然后针对第i级哈希表如果路由表项IP地址前缀IP地址前缀第<formula>formula see original document page 2</formula>比特的掩码长度小于等于0Ni,则以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的第i+l级路 由集合;如果路由表项IP地址前缀第<formula>formula see original document page 2</formula>比特的掩码长度大于Ni,则以匹配的 Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的第i+l级哈希表。
3. 如权利要求2所述的路由维护方法,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容为空, 则进一步创建该数据元素下的第1级路由集合、并将该数组元素内容设置为创建的第1级 路由集合在内存中的地址;当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容为空,则进 一步创建该数据元素下的第1级哈希表、并将该数组元素内容设置为创建的第1级哈希表 在内存中的地址,然后针对第i级哈希表如果路由表项iP地址前缀第<formula>formula see original document page 2</formula>比特的掩码长度小于等于Ni,则进一步创建匹配的Ni比特哈希元素下的第i+l级路由集合、并将该Ni比特哈希元素内容设置 为创建的第i+l级路由集合在内存中的地址;如果路由表项IP地址前缀第M+l + 2Nx 32比特的掩码长度大于Ni、且匹配的Ni0比特哈希元素内容为空,则进一步创建匹配的Ni比特哈希元素下的第i+l级哈希表、并将 该Ni比特哈希元素内容设置为创建的第i+l级哈希表在内存中的地址。
4. 如权利要求3所述的路由维护方法,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容已记录 有该数据元素下的第1级哈希表在内存中的地址,则进一步创建该数据元素下的第1级路 由集合、并设置该数组元素下的第1级哈希表内的同级路由集合指针指向该数据元素下的 第l级路由集合;当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容已记录有该 数据元素下的第1级路由集合在内存中的地址,则进一步创建该数据元素下的第1级哈希 表、并设置该数组元素下的第1级哈希表内的同级路由集合指针指向该数据元素下的第1 级路由集合,然后针对第i级哈希表如果路由表项iP地址前缀第M+l + liNx 32比特的掩码长度小于等于Ni、且匹配0的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+l级哈希表在内存中的地址,则进 一步创建匹配的Ni比特哈希元素下的第i+l级路由集合、并设置该Ni比特哈希元素下的 第i+l级哈希表内的同级路由集合指针指向该Ni比特哈希元素下的第i+l级路由集合;如果路由表项iP地址前缀第M+l + liNx 32比特的掩码长度大于Ni、且匹配的Ni0比特哈希元素内容为该Ni比特哈希元素下的第i+l级路由集合在内存中的地址,则进一步 创建匹配的Ni比特哈希元素下的第i+l级哈希表、将该Ni比特哈希元素内容设置为创建 的第i+l级哈希表在内存中的地址、并设置该Ni比特哈希元素下的第i+l级哈希表内的同 级路由集合指针指向该Ni比特哈希元素下的第i+l级路由集合。
5. 如权利要求4所述的路由维护方法,其特征在于,每级中的每个哈希表内的同级路 由集合指针设置在该哈希表的第1字段。
6. 如权利要求1至5中任一项所述的路由维护方法,其特征在于,每级中的每个路由集 合内进一步设置有表示该路由集合中存放的所有路由表项IP地址前缀对应比特的最大掩 码长度和最小掩码长度。
7. 如权利要求1至5中任一项所述的路由维护方法,其特征在于,公网和每个VPN设置 两张对应的VR表,第一 VR表用于存放组播路由表项、第二 VR表用于存放单播路由表项;且,第一VR表的路由集合中进一步具有路由指针,所述路由指针指向匹配其所属路由 集合上一级数组元素或哈希元素的组播路由表项所对应的第二VR表中,与对应单播路由 表项IP地址前缀首字节匹配的数组元素。
8. 如权利要求1至5中任一项所述的路由维护方法,其特征在于,利用VR-ID来区分公 网和不同VPN所分别对应的VR表,且连续的VPN顺序对应取值连续的VR-ID。
9. 如权利要求1至5中任一项所述的路由维护方法,其特征在于,所述M取8。
10. —种路由维护装置,该装置包括CPU和内存,其特征在于,所述内存中存储有分别为公网和每个VPN设置的对应虚拟路由VR表,每张VR表中包 含有2M个用于与IP地址前缀最高字节匹配的M比特数组元素、每个数组元素下可衍生出 第1级哈希表和/或第1级路由集合、第i级哈希表中每个哈希元素下可衍生出第i+1级 哈希表和/或第i+1级路由集合、i大于等于1且小于等于哈希表的预设最大级数P、 P为 大于等于1且小于等于32-M的正整数;对于需要存储的公网或任意VPN的路由表项,所述CPU利用该路由表项的IP地址前缀 的最高字节在对应VR表中查找匹配的数组元素;当该路由表项IP地址前缀的掩码长度小于等于M时,所述CPU将该路由表项存放至匹 配的数组元素在所述内存中的第1级路由集合中;当该路由表项IP地址前缀的掩码长度大于M时,所述CPU从匹配的数组元 素在所述内存中的第1级哈希表开始,依次查找第i级哈希表中与IP地址前缀第<formula>formula see original document page 4</formula>比特匹配的Ni比特哈希元素、并针对第i级哈希表判断该路由表 项lP地址前缀第<formula>formula see original document page 4</formula>比特的掩码长度是否小于等于Ni,如果是,将该路由表 项存放至第i级哈希表中匹配的Ni比特哈希元素下的第i+1级路由集合中,否则,继续针 对第i级哈希表中匹配的Ni比特哈希元素下的第i+1级哈希表进行判断;其中,N0取0,且Ni为满足N1 NP之和等于32-M这一条件下任意设定的正整数。
11. 如权利要求10所述的路由维护装置,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,所述CPU进一步以匹配的数组元 素内容为索引在内存中查找到第1级路由集合;当该路由表项IP地址前缀的掩码长度大于M时,以匹配的数组元素内容为索引在内存 中查找到第1级哈希表,然后依次针对第i级哈希表执行所述判断,且针对第i级哈希表如果路由表项IP地址前缀IP地址前缀第<formula>formula see original document page 4</formula>比特的掩码长度小于等于 Ni,则所述CPU进一步以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素 下的第i+1级路由集合;如果路由表项IP地址前缀第<formula>formula see original document page 4</formula>比特的掩码长度大于Ni,则所述CPU进 一步以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的第i+l级哈希表。
12. 如权利要求11所述的路由存储装置,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容为空, 则所述CPU进一步在所述内存中创建该数据元素下的第1级路由集合、并将该数组元素内 容设置为创建的第1级路由集合在内存中的地址;当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容为空,则进 一步创建该数据元素下的第1级哈希表、并将该数组元素内容设置为创建的第1级哈希表 在内存中的地址,然后针对第i级哈希表如果路由表项IP地址前缀第M+l + li'Nx 32比特的掩码长度小于等于Ni、且匹配0的Ni比特哈希元素内容为空,则所述CPU进一步在所述内存中创建匹配的Ni比特哈希元 素下的第i+l级路由集合、并将该Ni比特哈希元素内容设置为创建的第i+l级路由集合在 内存中的地址;如果路由表项IP地址前缀第M+l + 2Nx 32比特的掩码长度大于Ni、且匹配的Ni0比特哈希元素内容为空,则所述CPU进一步在所述内存中创建匹配的Ni比特哈希元素下的 第i+l级哈希表、并将该Ni比特哈希元素内容设置为创建的第i+l级哈希表在内存中的地 址。
13. 如权利要求12所述的路由维护装置,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容已记录 有该数据元素下的第1级哈希表在内存中的地址,则所述CPU进一步在所述内存中创建该 数据元素下的第1级路由集合、并设置该数组元素下的第1级哈希表内的同级路由集合指 针指向该数据元素下的第1级路由集合;当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容已记录有该 数据元素下的第1级路由集合在内存中的地址,则进一步创建该数据元素下的第1级哈希 表、并设置该数组元素下的第1级哈希表内的同级路由集合指针指向该数据元素下的第1 级路由集合,然后针对第i级哈希表如果路由表项IP地址前缀第M+l + 5Nx 32比特的掩码长度小于等于Ni、且匹配0的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+l级哈希表在内存中的地址,则所 述CPU进一步在所述内存中创建匹配的Ni比特哈希元素下的第i+l级路由集合、并设置该 Ni比特哈希元素下的第i+l级哈希表内的同级路由集合指针指向该Ni比特哈希元素下的 第i+l级路由集合;如果路由表项IP地址前缀第M+l + 2Nx 32比特的掩码长度大于Ni、且匹配的Ni0比特哈希元素内容为该Ni比特哈希元素下的第i+l级路由集合在内存中的地址,则所述 CPU进一步在所述内存中创建匹配的Ni比特哈希元素下的第i+l级哈希表、将该Ni比特哈 希元素内容设置为创建的第i+l级哈希表在内存中的地址、并设置该Ni比特哈希元素下的 第i+l级哈希表内的同级路由集合指针指向该Ni比特哈希元素下的第i+l级路由集合。
14. 如权利要求10至13中任一项所述的路由维护装置,其特征在于,公网和每个VPN 设置两张对应的VR表,第一 VR表用于存放组播路由表项、第二 VR表用于存放单播路由表 项;且,第一VR表的路由集合中进一步具有路由指针,所述路由指针指向匹配其所属路由 集合上一级数组元素或哈希元素的组播路由表项所对应的第二VR表中,与对应单播路由 表项IP地址前缀首字节匹配的数组元素。
15. 如权利要求10至13中任一项所述的路由维护装置,其特征在于,公网和不同VPN 所分别对应的VR表以VR-ID区分,且连续的VPN顺序对应取值连续的VR-ID。
16. 如权利要求10至13中任一项所述的路由维护装置,其特征在于,所述M取8。
17. —种路由查询方法,其特征在于,分别为公网和每个VPN设置对应的虚拟路由VR 表,每张VR表中包含有2M个用于与IP地址前缀最高字节匹配的M比特数组元素、每个数组 元素下可衍生出第1级哈希表和/或第1级路由集合、第i级哈希表中每个哈希元素下可 衍生出第i+l级哈希表和/或第i+l级路由集合、i大于等于1且小于等于哈希表的预设 最大级数P、P为大于等于1且小于等于32-M的正整数,且对于需要查询的公网或任意VPN 的路由表项,该路由查询方法包括利用该路由表项的IP地址前缀的最高字节在对应VR表中查找匹配的数组元素; 当该路由表项IP地址前缀的掩码长度小于等于M时,在匹配的数组元素下的第1级路 由集合中查找该路由表项;当该路由表项IP地址前缀的掩码长度大于M时,从匹配的数组元素下的第1级哈希表开始,依次查找第i级哈希表中与IP地址前缀第M+l + liNx M+f;Nx比特匹配的Ni0 0比特哈希元素、并针对第i级哈希表判断该路由表项iP地址前缀第M+l + li'Nx 32比0特的掩码长度是否小于等于Ni,如果是,在第i级哈希表中匹配的Ni比特哈希元素下的第 i+l级路由集合中查找该路由表项,否则,继续针对第i级哈希表中匹配的Ni比特哈希元素 下的第i+l级哈希表进行判断;其中,N0取0,且Ni为满足N1 NP之和等于32-M这一条件下任意设定的正整数。
18. 如权利要求17所述的路由查询方法,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,以匹配的数组元素内容为索引在 内存中查找到第1级路由集合;当该路由表项IP地址前缀的掩码长度大于M时,以匹配的数组元素内容为索引在内存 中查找到第1级哈希表,然后针对第i级哈希表如果路由表项IP地址前缀IP地址前缀第M+l + liNx 32比特的掩码长度小于等于0Ni,则以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的第i+l级路 由集合;如果路由表项IP地址前缀第M+l + liNx 32比特的掩码长度大于Ni,则以匹配的0Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的第i+l级哈希表。
19. 如权利要求18所述的路由查询方法,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容为空, 则结束当前查询;当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容为空,则结 束当前查询。
20. 如权利要求19所述的路由查询方法,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容已记录 有该数据元素下的第1级哈希表在内存中的地址,则进一步查询该数组元素下的第1级哈希表内的同级路由集合指针,如果该同级路由集合指针指向该数据元素下的第1级路由集 合,则在该第1级路由集合中查询路由表项,否则结束当前查询;当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容已记录有该 数据元素下的第1级路由集合在内存中的地址,则进一步结束当前查询;当该路由表项IP地址前缀的掩码长度大于M时,且匹配的数组元素内容为第1级哈希 表,则针对第i级哈希表如果路由表项iP地址前缀第M+l + I^Nx 32比特的掩码长度小于等于Ni、且匹配0的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+l级哈希表在内存中的地址,则进 一步在该Ni比特哈希元素下的第i+l级哈希表内的同级路由集合指针,如果该同级路由集 合指针指向该Ni比特哈希元素下的第i+l级路由集合,则在该第i+l级路由集合中查询路 由表项,否则结束当前查询;如果路由表项IP地址前缀第M+l + li Nx 32比特的掩码长度大于Ni、且匹配的Ni0比特哈希元素内容为该Ni比特哈希元素下的第i+l级路由集合在内存中的地址,则结束当 前查询。
21. 如权利要求20所述的路由查询方法,其特征在于,通过直接读取哈希表的第1字段 来查询同级路由集合指针。
22. 如权利要求17至21中任一项所述的路由查询方法,其特征在于,每级中的每个路 由集合内进一步设置有表示该路由集合中存放的所有路由表项IP地址前缀对应比特的最 大掩码长度和最小掩码长度;如果待查询路由表项IP地址前缀对应比特的掩码长度大于查找到的路由集合所记录 的最大掩码长度、或小于查找到的路由集合所记录的最小掩码长度,则直接结束当前查询。
23. 如权利要求17至21中任一项所述的路由查询方法,其特征在于,公网和每个VPN 设置两张对应的VR表,第一VR表用于存放组播路由表项、第二VR表用于存放单播路由表 项;在第一VR表中以待查找组播路由表项的IP地址前缀的各比特为索引,查找到对应级 别的路由集合、并在该路由集合中查找到待查找组播路由表项,然后依据该路由集合中的 路由集合指针查找到对应第二 VR表中,与待查找单播表项的IP地址前缀的首字节匹配的 数组元素,并在该第二VR表中以待查找单播路由表项的IP地址前缀的后续各比特为索引, 逐级查找到对应级别的路由集合、并在该路由集合中查找到待查找单播路由表项。
24. 如权利要求17至21中任一项所述的路由查询方法,其特征在于,利用VR-ID来区 分公网和不同VPN所分别对应的VR表,且连续的VPN顺序对应取值连续的VR-ID。
25. 如权利要求17至21中任一项所述的路由查询方法,其特征在于,所述M取8。
26. —种路由查询装置,该装置包括CPU和内存,其特征在于,所述内存中存储有分别为公网和每个VPN设置的对应虚拟路由VR表,每张VR表中包 含有2M个用于与IP地址前缀最高字节匹配的M比特数组元素、以及任意数组元素下衍生 出的第1级哈希表和/或第1级路由集合、第i级哈希表中任意个哈希元素下衍生出的第 i+l级哈希表和/或第i+l级路由集合、i大于等于1且小于等于哈希表的预设最大级数P、P为大于等于1且小于等于32-M的正整数;对于需要查询的公网或任意VPN的路由表项,所述CPU利用该路由表项的IP地址前缀 的最高字节在对应VR表中查找匹配的数组元素;当该路由表项IP地址前缀的掩码长度小于等于M时,所述CPU在匹配的数组元素的第 1级路由集合中查找该路由表项;当该路由表项IP地址前缀的掩码长度大于M时,所述CPU从匹配的数组元素下的第1级哈希表开始,依次查找第i级哈希表中与IP地址前缀第<formula>formula see original document page 8</formula>比特匹配的Ni比特哈希元素、并针对第i级哈希表判断该路由表项IP地址前缀第 <formula>formula see original document page 8</formula>比特的掩码长度是否小于等于Ni,如果是,所述CPU在第i级哈希表中匹 配的Ni比特哈希元素下的第i+1级路由集合中查找该路由表项,否则,所述CPU继续针对 第i级哈希表中匹配的Ni比特哈希元素下的第i+1级哈希表进行判断;其中,N0取0,且Ni为满足N1 NP之和等于32-M这一条件下任意设定的正整数。
27. 如权利要求26所述的路由查询装置,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,所述CPU以匹配的数组元素内容 为索引在内存中查找到第1级路由集合;当该路由表项IP地址前缀的掩码长度大于M时,所述CPU以匹配的数组元素内容为索 引在内存中查找到第1级哈希表,然后针对第i级哈希表如果路由表项IP地址前缀IP地址前缀第<formula>formula see original document page 8</formula>比特的掩码长度小于等于 Ni,则所述CPU在所述内存中以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈 希元素下的第i+1级路由集合;如果路由表项IP地址前缀第<formula>formula see original document page 8</formula>比特的掩码长度大于Ni,则所述CPU在 所述内存中以匹配的Ni比特哈希元素内容为索引查找匹配的Ni比特哈希元素下的第i+1 级哈希表。
28. 如权利要求27述的路由查询装置,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容为空, 则所述CPU结束当前查询;当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容为空,则所 述CPU结束当前查询。
29. 如权利要求28所述的路由查询装置,其特征在于,当该路由表项IP地址前缀的掩码长度小于等于M时,如果匹配的数组元素内容已记录 有该数据元素下的第1级哈希表在内存中的地址,则所述CPU进一步查询该数组元素下的 第1级哈希表内的同级路由集合指针,如果该同级路由集合指针指向该数据元素下的第1 级路由集合,则所述CPU在该第1级路由集合中查询路由表项,否则结束当前查询;当该路由表项IP地址前缀的掩码长度大于M时,如果匹配的数组元素内容已记录有该 数据元素下的第1级路由集合在内存中的地址,则所述CPU进一步结束当前查询;当该路由表项IP地址前缀的掩码长度大于M时,且匹配的数组元素内容为第1级哈希 表,则针对第i级哈希表如果路由表项IP地址前缀第M+l + 2Nx 32比特的掩码长度小于等于Ni、且匹配0的Ni比特哈希元素内容为该Ni比特哈希元素下的第i+1级哈希表在内存中的地址,则所 述CPU进一步在该Ni比特哈希元素下的第i+l级哈希表内的同级路由集合指针,如果该同 级路由集合指针指向该Ni比特哈希元素下的第i+1级路由集合,则所述CPU在该第i+1级 路由集合中查询路由表项,否则结束当前查询;如果路由表项IP地址前缀第M+l + liNx 32比特的掩码长度大于Ni、且匹配的Ni0比特哈希元素内容为该Ni比特哈希元素下的第i+1级路由集合在内存中的地址,则所述 CPU结束当前查询。
30. 如权利要求26至29中任一项所述的路由查询装置,其特征在于,公网和每个VPN 设置两张对应的VR表,第一 VR表用于存放组播路由表项、第二 VR表用于存放单播路由表 项;所述CPU在第一 VR表中以待查找组播路由表项的IP地址前缀的各比特为索引,查找 到对应级别的路由集合、并在该路由集合中查找到待查找组播路由表项,然后依据该路由 集合中的路由集合指针查找到对应第二 VR表中,与待查找单播表项的IP地址前缀的首字 节匹配的数组元素,并在该第二 VR表中以待查找单播路由表项的IP地址前缀的后续各比 特为索引,逐级查找到对应级别的路由集合、并在该路由集合中查找到待查找单播路由表 项。
31. 如权利要求26至29中任一项所述的路由查询装置,其特征在于,所述CPU利 用VR-ID来区分公网和不同VPN所分别对应的VR表,且连续的VPN顺序对应取值连续的 VR-ID。
32. 如权利要求26至29中任一项所述的路由查询装置,其特征在于,所述M取8。
全文摘要
本发明公开了一种路由维护方法和装置以及路由查询方法和装置。本发明分别为公网和每个VPN设置对应的虚拟路由(VR)表,如果路由表项IP地址前缀的掩码长度小于等于M,则直接在VR表中与IP地址前缀最高字节匹配的M比特数组元素下的路由集合中存放、查询该路由表项;如果路由表项IP地址前缀的掩码长度大于M,则逐级查询对应IP地址前缀后续相应比特的若干级哈希表,直至该IP地址前缀的掩码长度小于等于数组元素对应的最高M比特与后续若干级哈希表所对应的相应比特之和,然后匹配的哈希元素下的路由集合中存放、查询该路由表项。因此,本发明能够提高路由查询效率、且同时适用于组播路由。
文档编号H04L12/56GK101695054SQ200910235609
公开日2010年4月14日 申请日期2009年9月30日 优先权日2009年9月30日
发明者宋小恒 申请人:杭州华三通信技术有限公司;