一种表项构建、查找方法、装置、网络设备及存储介质转让专利

申请号 : CN202311483639.5

文献号 : CN117221224B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨逸

申请人 : 格创通信(浙江)有限公司

摘要 :

本申请实施例提供了一种表项构建、查找方法、装置、网络设备及存储介质,涉及通信技术领域,该方法包括:获取第一IP地址和第一IP地址对应的查找结果,第一IP地址包括第一前缀值和第一标识值;将第一前缀值和第一前缀值对应的第一映射值存储至第一级查找表中的第一表项,第一映射值的长度小于第一前缀值的长度,第一前缀值与第一映射值一一对应;将第一映射值和第一标识值、查找结果存储至第二级查找表中的第二表项。应用本申请实施例提供的技术方案,减少了查找表所需的存储空间,降低了硬件成本。

权利要求 :

1.一种表项构建方法,其特征在于,所述方法包括:

获取第一IP地址和第一IP地址对应的查找结果,所述第一IP地址包括第一前缀值和第一标识值,当存在前缀值为所述第一前缀值的第二IP地址时,所述第二IP地址的标识值与所述第一标识值不同;

将所述第一前缀值和所述第一前缀值对应的第一映射值存储至第一级查找表中的第一表项,所述第一表项的关键值字段存储所述第一前缀值,所述第一表项的结果字段存储所述第一映射值,所述第一映射值的长度小于所述第一前缀值的长度,所述第一前缀值与所述第一映射值一一对应,所述第一映射值为Cookie值;

将所述第一映射值和所述第一标识值、所述查找结果存储至第二级查找表中的第二表项,所述第二表项的关键值字段存储所述第一映射值和所述第一标识值,所述第二表项的结果字段存储所述查找结果,所述第一级查找表和所述第二级查找表存储在静态随机存取存储器SRAM中。

2.根据权利要求1所述的方法,其特征在于,所述将所述第一前缀值和所述第一前缀值对应的第一映射值存储至第一级查找表中的第一表项的步骤,包括:计算所述第一前缀值的第一哈希值;

根据第一级查找表中所述第一哈希值所指示第一目标位置,将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一级查找表中的第一表项。

3.根据权利要求2所述的方法,其特征在于,所述根据第一级查找表中所述第一哈希值所指示第一目标位置,将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一级查找表中的第一表项的步骤,包括:若第一级查找表中所述第一哈希值所指示第一目标位置处的表项未被占用,则将所述第一目标位置处的表项作为第一表项;

将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一表项。

4.根据权利要求2所述的方法,其特征在于,所述根据第一级查找表中所述第一哈希值所指示第一目标位置,将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一级查找表中的第一表项的步骤,包括:若第一级查找表中所述第一哈希值所指示第一目标位置处的表项被占用,则将所述第一前缀值与所述第一目标位置处的表项中存储的第二前缀值匹配;

若匹配失败,则在所述第一级查找表中分配未被占用的表项,作为第一表项;

将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一表项。

5.根据权利要求4所述的方法,其特征在于,所述方法还包括:

若匹配成功,则将所述第一目标位置处的表项中存储的第二映射值作为所述第一映射值,执行所述将所述第一映射值和所述第一标识值、所述查找结果存储至第二级查找表中的第二表项的步骤。

6.根据权利要求1所述的方法,其特征在于,所述将所述第一映射值和所述第一标识值、所述查找结果存储至第二级查找表中的第二表项的步骤,包括:计算所述第一映射值与所述第一标识值的第二哈希值;

根据第二级查找表中所述第二哈希值所指示第二目标位置,将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二级查找表中的第二表项。

7.根据权利要求6所述的方法,其特征在于,所述根据第二级查找表中所述第二哈希值所指示第二目标位置,将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二级查找表中的第二表项的步骤,包括:若第二级查找表中所述第二哈希值所指示第二目标位置处的表项未被占用,则将所述第二目标位置处的表项作为第二表项;

将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二表项。

8.根据权利要求6所述的方法,其特征在于,所述根据第二级查找表中所述第二哈希值所指示第二目标位置,将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二级查找表中的第二表项的步骤,包括:若第二级查找表中所述第二哈希值所指示第二目标位置处的表项被占用,则在所述第二级查找表中分配未被占用的第二表项;

将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二表项。

9.根据权利要求1‑8任一项所述的方法,其特征在于,2的所述第一映射值的长度次幂大于等于本地设备支持的前缀值的总数量。

10.根据权利要求1‑8任一项所述的方法,其特征在于,所述第一前缀值为网络前缀的值,所述第一标识值为接口标识的值。

11.一种表项查找方法,其特征在于,所述方法包括:

获取目标IP地址,所述目标IP地址包括目标前缀值和目标标识值;

从第一级查找表的各个表项中,查找与所述目标前缀值对应的目标映射值,所述第一级查找表根据权利要求1‑10任一项所述的方法构建;

从第二级查找表的各个表项中,查找与所述目标映射值和所述目标标识值对应的目标查找结果,所述第二级查找表根据权利要求1‑10任一项所述的方法构建。

12.一种表项构建装置,其特征在于,所述装置包括:

第一获取模块,用于获取第一IP地址和第一IP地址对应的查找结果,所述第一IP地址包括第一前缀值和第一标识值,当存在前缀值为所述第一前缀值的第二IP地址时,所述第二IP地址的标识值与所述第一标识值不同;

第一存储模块,用于将所述第一前缀值和所述第一前缀值对应的第一映射值存储至第一级查找表中的第一表项,所述第一表项的关键值字段存储所述第一前缀值,所述第一表项的结果字段存储所述第一映射值,所述第一映射值的长度小于所述第一前缀值的长度,所述第一前缀值与所述第一映射值一一对应,所述第一映射值为Cookie值;

第二存储模块,用于将所述第一映射值和所述第一标识值、所述查找结果存储至第二级查找表中的第二表项,所述第二表项的关键值字段存储所述第一映射值和所述第一标识值,所述第二表项的结果字段存储所述查找结果,所述第一级查找表和所述第二级查找表存储在静态随机存取存储器SRAM中。

13.一种表项查找装置,其特征在于,所述装置包括:

第二获取模块,用于获取目标IP地址,所述目标IP地址包括目标前缀值和目标标识值;

第一查找模块,用于从第一级查找表的各个表项中,查找与所述目标前缀值对应的目标映射值,所述第一级查找表根据权利要求12所述的装置构建;

第二查找模块,用于从第二级查找表的各个表项中,查找与所述目标映射值和所述目标标识值对应的目标查找结果,所述第二级查找表根据权利要求12所述的装置构建。

14.一种网络设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现权利要求1‑10或权利要求11任一项所述的方法步骤。

15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1‑10或权利要求11任一项所述的方法步骤。

说明书 :

一种表项构建、查找方法、装置、网络设备及存储介质

技术领域

[0001] 本申请涉及通信技术领域,特别是涉及一种表项构建、查找方法、装置、网络设备及存储介质。

背景技术

[0002] 网络设备采用表项查找方式,获取IP(Internet Protocol,互联网协议)地址的相关信息。目前,为实现精准查找,将完整的IP地址作为表项查找的key(关键值),存储在表项中。然而,IP地址的长度比较大,如IPv6(Internet Protocol Version 6,互联网协议第6版)地址的长度为128bits(位),这使得表项中key所占空间比较大。结合查找表中包括大量的表项,使得key所占空间比较大的问题更为突出,这就需要存储空间较大的存储器来存储查找表,硬件成本较高。

发明内容

[0003] 本申请实施例的目的在于提供一种表项构建、查找方法、装置、网络设备及存储介质,以减少查找表所需的存储空间,降低硬件成本。具体技术方案如下:
[0004] 在本申请实施例的第一方面,提供了一种表项构建方法,所述方法包括:
[0005] 获取第一IP地址和第一IP地址对应的查找结果,所述第一IP地址包括第一前缀值和第一标识值,当存在前缀值为所述第一前缀值的第二IP地址时,所述第二IP地址的标识值与所述第一标识值不同;
[0006] 将所述第一前缀值和所述第一前缀值对应的第一映射值存储至第一级查找表中的第一表项,所述第一表项的关键值字段存储所述第一前缀值,所述第一表项的结果字段存储所述第一映射值,所述第一映射值的长度小于所述第一前缀值的长度,所述第一前缀值与所述第一映射值一一对应;
[0007] 将所述第一映射值和所述第一标识值、所述查找结果存储至第二级查找表中的第二表项,所述第二表项的关键值字段存储所述第一映射值和所述第一标识值,所述第二表项的结果字段存储所述查找结果。
[0008] 在一些实施例中,所述将所述第一前缀值和所述第一前缀值对应的第一映射值存储至第一级查找表中的第一表项的步骤,包括:
[0009] 计算所述第一前缀值的第一哈希值;
[0010] 根据第一级查找表中所述第一哈希值所指示第一目标位置,将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一级查找表中的第一表项。
[0011] 在一些实施例中,所述根据第一级查找表中所述第一哈希值所指示第一目标位置,将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一级查找表中的第一表项的步骤,包括:
[0012] 若第一级查找表中所述第一哈希值所指示第一目标位置处的表项未被占用,则将所述第一目标位置处的表项作为第一表项;
[0013] 将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一表项。
[0014] 在一些实施例中,所述根据第一级查找表中所述第一哈希值所指示第一目标位置,将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一级查找表中的第一表项的步骤,包括:
[0015] 若第一级查找表中所述第一哈希值所指示第一目标位置处的表项被占用,则将所述第一前缀值与所述第一目标位置处的表项中存储的第二前缀值匹配;
[0016] 若匹配失败,则在所述第一级查找表中分配未被占用的表项,作为第一表项;
[0017] 将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一表项。
[0018] 在一些实施例中,所述方法还包括:
[0019] 若匹配成功,则将所述第一目标位置处的表项中存储的第二映射值作为所述第一映射值,执行所述将所述第一映射值和所述第一标识值、所述查找结果存储至第二级查找表中的第二表项的步骤。
[0020] 在一些实施例中,所述将所述第一映射值和所述第一标识值、所述查找结果存储至第二级查找表中的第二表项的步骤,包括:
[0021] 计算所述第一映射值与所述第一标识值的第二哈希值;
[0022] 根据第二级查找表中所述第二哈希值所指示第二目标位置,将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二级查找表中的第二表项。
[0023] 在一些实施例中,所述根据第二级查找表中所述第二哈希值所指示第二目标位置,将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二级查找表中的第二表项的步骤,包括:
[0024] 若第二级查找表中所述第二哈希值所指示第二目标位置处的表项未被占用,则将所述第二目标位置处的表项作为第二表项;
[0025] 将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二表项。
[0026] 在一些实施例中,所述根据第二级查找表中所述第二哈希值所指示第二目标位置,将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二级查找表中的第二表项的步骤,包括:
[0027] 若第二级查找表中所述第二哈希值所指示第二目标位置处的表项被占用,则在所述第二级查找表中分配未被占用的第二表项;
[0028] 将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二表项。
[0029] 在一些实施例中,2的所述第一映射值的长度次幂大于等于本地设备支持的前缀值的总数量。
[0030] 在一些实施例中,所述第一前缀值为网络前缀的值,所述第一标识值为接口标识的值。
[0031] 在本申请实施例的第二方面,提供了一种表项查找方法,所述方法包括:
[0032] 获取目标IP地址,所述目标IP地址包括目标前缀值和目标标识值;
[0033] 从第一级查找表的各个表项中,查找与所述目标前缀值对应的目标映射值,所述第一级查找表根据上述第一方面所述的表项构建方法构建;
[0034] 从第二级查找表的各个表项中,查找与所述目标映射值和所述目标标识值对应的目标查找结果,所述第二级查找表根据上述第一方面所述的表项构建方法构建。
[0035] 在本申请实施例的第三方面,提供了一种表项构建装置,所述装置包括:
[0036] 第一获取模块,用于获取第一IP地址和第一IP地址对应的查找结果,所述第一IP地址包括第一前缀值和第一标识值,当存在前缀值为所述第一前缀值的第二IP地址时,所述第二IP地址的标识值与所述第一标识值不同;
[0037] 第一存储模块,用于将所述第一前缀值和所述第一前缀值对应的第一映射值存储至第一级查找表中的第一表项,所述第一表项的关键值字段存储所述第一前缀值,所述第一表项的结果字段存储所述第一映射值,所述第一映射值的长度小于所述第一前缀值的长度,所述第一前缀值与所述第一映射值一一对应;
[0038] 第二存储模块,用于将所述第一映射值和所述第一标识值、所述查找结果存储至第二级查找表中的第二表项,所述第二表项的关键值字段存储所述第一映射值和所述第一标识值,所述第二表项的结果字段存储所述查找结果。
[0039] 在一些实施例中,所述第一存储子模块,包括:
[0040] 第一计算子模块,用于计算所述第一前缀值的第一哈希值;
[0041] 第一存储子模块,用于根据第一级查找表中所述第一哈希值所指示第一目标位置,将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一级查找表中的第一表项。
[0042] 在一些实施例中,所述第一存储子模块,具体用于:
[0043] 若第一级查找表中所述第一哈希值所指示第一目标位置处的表项未被占用,则将所述第一目标位置处的表项作为第一表项;
[0044] 将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一表项。
[0045] 在一些实施例中,所述第一存储子模块,具体用于:
[0046] 若第一级查找表中所述第一哈希值所指示第一目标位置处的表项被占用,则将所述第一前缀值与所述第一目标位置处的表项中存储的第二前缀值匹配;
[0047] 若匹配失败,则在所述第一级查找表中分配未被占用的表项,作为第一表项;
[0048] 将所述第一前缀值和所述第一前缀值对应的第一映射值存储至所述第一表项。
[0049] 在一些实施例中,所述第一存储子模块,还用于:
[0050] 若匹配成功,则将所述第一目标位置处的表项中存储的第二映射值作为所述第一映射值,执行所述将所述第一映射值和所述第一标识值、所述查找结果存储至第二级查找表中的第二表项的步骤。
[0051] 在一些实施例中,所述第二存储模块,包括:
[0052] 第二计算子模块,用于计算所述第一映射值与所述第一标识值的第二哈希值;
[0053] 第二存储子模块,用于根据第二级查找表中所述第二哈希值所指示第二目标位置,将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二级查找表中的第二表项。
[0054] 在一些实施例中,所述第二存储子模块,具体用于:
[0055] 若第二级查找表中所述第二哈希值所指示第二目标位置处的表项未被占用,则将所述第二目标位置处的表项作为第二表项;
[0056] 将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二表项。
[0057] 在一些实施例中,所述所述第二存储子模块,具体用于:
[0058] 若第二级查找表中所述第二哈希值所指示第二目标位置处的表项被占用,则在所述第二级查找表中分配未被占用的第二表项;
[0059] 将所述第一映射值和所述第一标识值、所述查找结果存储至所述第二表项。
[0060] 在一些实施例中,2的所述第一映射值的长度次幂大于等于本地设备支持的前缀值的总数量。
[0061] 在一些实施例中,所述第一前缀值为网络前缀的值,所述第一标识值为接口标识的值。
[0062] 在本申请实施例的第四方面,提供了一种表项查找装置,所述装置包括:
[0063] 第二获取模块,用于获取目标IP地址,所述目标IP地址包括目标前缀值和目标标识值;
[0064] 第一查找模块,用于从第一级查找表的各个表项中,查找与所述目标前缀值对应的目标映射值,所述第一级查找表根据上述第三方面所述的表项构建装置构建;
[0065] 第二查找模块,用于从第二级查找表的各个表项中,查找与所述目标映射值和所述目标标识值对应的目标查找结果,所述第二级查找表根据上述第三方面所述的表项构建装置构建。
[0066] 在本申请实施例的第五方面,提供了一种网络设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
[0067] 存储器,用于存放计算机程序;
[0068] 处理器,用于执行存储器上所存放的程序时,实现上述第一方面或第二方面任一所述的方法步骤。
[0069] 在本申请实施例的第六方面,提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面或第二方面任一所述的方法步骤。
[0070] 本申请实施例有益效果:
[0071] 本申请实施例提供的技术方案中,将IP地址分为前缀值和标识值两部分,并将重复性较高的前缀值与长度较小的映射值建立一一对应关系,存储到第一级查找表中;进而再将映射值和标识值、查找结果的对应关系存储到第二级查找表中。一方面,多个IP地址可能前缀值相同,即多个IP地址可以复用一个第一级查找表中的表项,无需重复存储相同的前缀值;二方面,映射值长度较小,用短的映射值来代替长的前缀值,大大减少了第二级查找表中关键值字段所需占用的存储空间,因此,减少了查找表所需的存储空间,进而可以采用存储空间较小的存储器来存储查找表,降低了硬件成本。
[0072] 当然,实施本申请的任一产品或方法并不一定需要同时达到以上所述的所有优点。

附图说明

[0073] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
[0074] 图1为本申请实施例提供的表项构建方法的第一种流程示意图;
[0075] 图2为本申请实施例提供的表项构建方法的第二种流程示意图;
[0076] 图3为本申请实施例提供的表项构建方法的第三种流程示意图;
[0077] 图4为本申请实施例提供的表项构建方法的第四种流程示意图;
[0078] 图5为本申请实施例提供的表项构建方法的第五种流程示意图;
[0079] 图6为本申请实施例提供的表项构建方法的第六种流程示意图;
[0080] 图7为本申请实施例提供的表项查找方法的一种流程示意图;
[0081] 图8为本申请实施例提供的表项构建装置的一种结构示意图;
[0082] 图9为本申请实施例提供的表项查找装置的一种结构示意图;
[0083] 图10为本申请实施例提供的网络设备的一种结构示意图。

具体实施方式

[0084] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本申请保护的范围。
[0085] 网络设备采用表项查找方式,获取IP地址的相关信息,即查找结果,查找结果可以根据实际需求进行设定,例如,查找结果可以为报文的出接口标识、目的IP地址、传输协议等。
[0086] 比较常见的表项查找方式为通过hash(哈希)算法查表。以IPv4(Internet Protocol Version 4,互联网协议第4版) FIB(Forwarding Information Base,转发信息表),网络设备支持1M(兆)规格的FIB为例,IPv4地址的数量达到4G(千兆)个,通过hash算法将4G的可能取值空间压缩到1M的可能取值空间内,每个取值对应FIB中的一个表项。这可以实现将网络设备支持的有限数量个IPv4地址存储在FIB中,但却带来了hash冲突,即多个IPv4地址对应hash算法的同一取值(hash值),这就会造成无法准确查找到所需的查找结果,即假阳性问题。
[0087] 为消除hash冲突可能带来的假阳性问题,FIB中每个表项分为key字段和value(结果)字段,的key字段存储完整的IPv4地址,value字段存储查找结果。这样,在通过hash值命中一个表项时,通过key字段的值进行一次精确匹配,可以准确获得查找结果,消除hash冲突。
[0088] 然而,IP地址的长度比较大,如IPv4地址的长度为32bits,IPv6地址的长度为128bits。以IPv6地址为例,当FIB以IPv6地址为key字段的值时,在网络设备支持1M规格的FIB的情况下,仅仅key字段存储一个IPv6地址所占用的存储空间就达到了128bits*1M=16M Bytes(字节)。更进一步的,某些情况下,查找表的key字段需要存储多个IPv6地址,如流表中需存储源IPv6地址和目的IPv6地址,此时,在网络设备支持1M规格的FIB的情况下,仅仅key字段存储两个IPv6地址所占用的存储空间就达到了2*128bits*1M=32M Bytes。
[0089] 查找表的key字段所占空间比较大,这就需要存储空间较大的存储器来存储查找表,硬件成本较高。当芯片实现查表的加速时,表项内容存储在SRAM(Static Random Access Memory,静态随机存取存储器)中,而16 32M Bytes的SRAM过于昂贵,硬件成本更~高。
[0090] 为减少查找表所需的存储空间,降低硬件成本,本申请实施例提供了一种表项构建方法,该表项构建方法可以应用于移动终端、服务器、交换机、路由器等网络设备,为便于描述,下面以网络设备为执行主体进行说明,并不起限定作用。
[0091] 如图1所示,图1为本申请实施例提供的表项构建方法的第一种流程示意图,该方法包括如下步骤。
[0092] 步骤S11,获取第一IP地址和第一IP地址对应的查找结果,第一IP地址包括第一前缀值和第一标识值,当存在前缀值为第一前缀值的第二IP地址时,第二IP地址的标识值与第一标识值不同。
[0093] 步骤S12,将第一前缀值和第一前缀值对应的第一映射值存储至第一级查找表中的第一表项,第一表项的关键值字段存储第一前缀值,第一表项的结果字段存储第一映射值,第一映射值的长度小于第一前缀值的长度,第一前缀值与第一映射值一一对应。
[0094] 步骤S13,将第一映射值和第一标识值、查找结果存储至第二级查找表中的第二表项,第二表项的关键值字段存储第一映射值和第一标识值,第二表项的结果字段存储查找结果。
[0095] 本申请实施例提供的技术方案中,将IP地址分为前缀值和标识值两部分,并将重复性较高的前缀值与长度较小的映射值建立一一对应关系,存储到第一级查找表中;进而再将映射值和标识值、查找结果的对应关系存储到第二级查找表中。一方面,多个IP地址可能前缀值相同,即多个IP地址可以复用一个第一级查找表中的表项,无需重复存储相同的前缀值;二方面,映射值长度较小,用短的映射值来代替长的前缀值,大大减少了第二级查找表中关键值字段所需占用的存储空间,因此,减少了查找表所需的存储空间,进而可以采用存储空间较小的存储器来存储查找表,降低了硬件成本。
[0096] 在上述步骤S11中,第一IP地址可以是任一IPv6地址,也可以是任一IPv4地址。第一IP地址包括前缀值(即第一前缀值)和标识值(即第一标识值),其中,第一前缀值可以为第一IP地址的前第一预设数量位的值,第一标识值可以为第一IP地址的后第二预设数量位的值,第一预设数量位的第一前缀值和第二预设数量位的第一标识值构成第一IP地址。
[0097] 本申请实施例中,前缀值可以为网络前缀的值,标识值可以为接口标识的值。当存在第二IP地址与第一IP地址的前缀值相同时,则第二IP地址与第一IP地址的标识值不同,若前缀值和标识值相同,即为同一个IP地址。网络前缀即为网段。查找结果可以包括接口标识、转发路径标识、处理器标识等等。第一IP地址和查找结果之间的对应关系需要用表项进行存储,以便进行查找。网络设备可以从其他设备或者自身的存储器中,获取到需要利用表项进行存储的第一IP地址和查找结果。
[0098] 在上述步骤S12中,第一级查找表可以为链表,也可以为表格或者其他形式的表。当第一级查找表为链表时,第一级查找表中的一个表项可以为链表中的一个节点;当第一级查找表为表格时,第一级查找表中的一个表项可以为表格中的一行或一列。第一级查找表中的表项包括关键值字段和结果字段,其中,关键值字段可以存储前缀值,结果字段可以存储映射值,如cookie值。映射值可以为一个二进制数,映射值的长度小于前缀值的长度,如,前缀值为96bits,映射值为20bits。
[0099] 本申请实施例中,2的映射值的长度次幂大于等于本地设备支持的前缀值的总数量即可,这里的本地设备为存储第一IP地址的设备,即上述网络设备。例如,网络设备支持x 15 16的前缀值的总数量为64K(千)个,映射值的长度为x,则2应当大于64K,2 =32768<64K,2 =
65536>64K,则x可以为任一大于等于16的自然数。
[0100] 本申请实施例中,前缀值和映射值一一对应,对于前缀值相同的两个IP地址,这两个IP地址对应着同一个映射值。
[0101] 本申请实施例中,网络设备可以获取第一前缀值对应的第一映射值,确定第一级查找表中第一IP地址对应的表项,即第一表项,将第一前缀值存储到第一表项的关键值字段,并将第一映射值存储到第一表项的结果字段。
[0102] 本申请实施例中,针对前缀值相同的两个IP地址,这两个IP地址对应的映射值相同,这两个IP地址可以复用同一个表项,这样,对于所有待存储的IP地址,存储到第一级查找表中的表项个数远远小于所有待存储的IP地址的个数。例如。网络设备需要存储1M个不同的IP地址,这1M个不同的IP地址有64K个不同的前缀值,则第一级查找表中仅需要有64K个表项即可,这使得第一级查找表所占用的存储空间较小。
[0103] 在上述步骤S13中,第二级查找表可以为链表,也可以为表格或者其他形式的表。当第二级查找表为链表时,第二级查找表中的一个表项可以为链表中的一个节点;当第二级查找表为表格时,第二级查找表中的一个表项可以为表格中的一行或一列。第二级查找表中的一个表项包括关键值字段和结果字段,其中,关键值字段可以存储映射值和标识值,结果字段可以存储查找结果。本申请实施例中,待存储的IP地址互不相同,并且每个IP地址对应着一个查找结果。
[0104] 本申请实施例中,网络设备可以确定第二级查找表中第一IP地址对应的表项,即第二表项,将第一表项中存储的第一映射值和第一标识值组合存储到第二表项的关键值字段,并将查找结果存储到第二表项的结果字段。本申请实施例中,前缀值相同的两个IP地址的标识值一定不同,否则即为同一个IP地址,也就是说,不同的IP地址对应着不同的第二表项。例如,网络设备需要存储1M个不同的IP地址以及这1M个不同的IP地址对应的查找结果,则第二级查找表中存在1M个表项。
[0105] 在一些实施例中,如图2所示,图2为本申请实施例提供的表项构建方法的第二种流程示意图,该方法可以包括如下步骤。
[0106] 步骤S21,获取第一IP地址和第一IP地址对应的查找结果,第一IP地址包括第一前缀值和第一标识值,当存在前缀值为第一前缀值的第二IP地址时,第二IP地址的标识值与第一标识值不同,与上述步骤S11相同。
[0107] 步骤S22,计算第一前缀值的第一哈希值。
[0108] 步骤S23,根据第一级查找表中第一哈希值所指示第一目标位置,将第一前缀值和第一前缀值对应的第一映射值存储至第一级查找表中的第一表项。
[0109] 步骤S24,将第一映射值和第一标识值、查找结果存储至第二级查找表中的第二表项,第二表项的关键值字段存储第一映射值和第一标识值,第二表项的结果字段存储查找结果,与上述步骤S13相同。
[0110] 本申请实施例提供的技术方案中,网络设备可以通过计算第一前缀值的第一哈希值,从而根据第一哈希值找到第一目标位置对应的表项,再根据第一目标位置对应的表项,将第一前缀值和第一前缀值对应的第一映射值存储至第一级查找表中。利用哈希值可以将较大的取值空间压缩至较小的可查找的取值空间内,便于将第一前缀值和第一映射值存储到第一级查找表中,也便于之后根据哈希值查找第一级查找表,获得查找结果。
[0111] 在上述步骤S22中,网络设备可以根据第一哈希函数计算第一前缀值的哈希值,即第一哈希值。第一哈希函数的形式可以根据实际情况进行配置。当第一级查找表为表格时,哈希值可以为自然数,如,1、2、3、……,哈希值可以为表项的行号或者列号,如哈希值为1,则哈希值可以指示第一级查找表中的第1行的表项或者第1列的表项;当第一级查找表为链表时,哈希值也可以是链表的指针,指向一个链表节点。
[0112] 在上述步骤S23中,第一哈希值指示第一目标位置,第一目标位置为第一级查找表中一个表项的位置。如上述第一哈希值为1,则对应的第一目标位置可以是第一级查找表中的第1行或者第1列。第一哈希值也可以是链表的指针,指向一个链表节点,该链表节点所在位置为第一目标位置,该链表节点为一个表项。网络设备可以根据第一目标位置确定第一级查找表中的第一表项,进而将第一前缀值和第一前缀值对应的第一映射值存储至第一表项,第一表项可以是第一目标位置处的表项。
[0113] 在一些实施例中,上述步骤S23可以为:判断第一级查找表中第一哈希值所指示第一目标位置处的表项是否被占用。若判断结果为否,即第一级查找表中第一哈希值所指示第一目标位置处的表项未被占用,则说明该第一前缀值未被存储,将第一目标位置处的表项作为第一表项;将第一前缀值和第一前缀值对应的第一映射值存储至第一表项。
[0114] 若判断结果为是,即第一级查找表中第一哈希值所指示第一目标位置处的表项被占用,则可以分为两种情况:
[0115] 情况1,在不同前缀值的哈希值不同的情况下,认为该第一前缀值已被存储,可以将第一目标位置处的表项中存储的第二映射值作为第一映射值,基于第一映射值和第一标识值,执行上述步骤S24。
[0116] 情况2,在不同前缀值的哈希值可能相同的情况下,认为该第一前缀值是否被存储无法确定,为消除哈希冲突,将第一前缀值与第一目标位置处的表项中存储的第二前缀值匹配;若匹配失败,即第一前缀值与第二前缀值不同,则说明第一前缀值未被存储,在第一级查找表中分配未被占用的表项,作为第一表项,进而将第一前缀值和第一前缀值对应的第一映射值存储至第一表项。本申请实施例中,对分配第一表项的方式不做具体限定。
[0117] 在一些实施例中,若第一前缀值与第二前缀值匹配成功,则说明第一前缀值已被存储,可以分为两种情况:
[0118] 情况1,在不同IP地址,前缀值的哈希值不同的情况下,结束第一IP地址的存储流程。
[0119] 情况2,在不同IP地址,前缀值的哈希值可能相同的情况下,可以将第一目标位置处的表项中存储的第二映射值作为第一映射值,基于第一映射值和第一标识值,执行上述步骤S24。
[0120] 下面结合图3所示的表项构建方法的第三种流程示意图,对上述表项构建方法进行说明。该方法可以包括如下步骤。
[0121] 步骤S31,获取第一IP地址和第一IP地址对应的查找结果,第一IP地址包括第一前缀值和第一标识值,当存在前缀值为第一前缀值的第二IP地址时,第二IP地址的标识值与第一标识值不同,与上述步骤S11、步骤S21相同。
[0122] 步骤S32,计算第一前缀值的第一哈希值,与上述步骤S22相同。
[0123] 步骤S33,判断第一级查找表中第一哈希值所指示第一目标位置处的表项是否被占用,若未被占用,则执行步骤S34,若被占用,则执行步骤S35。
[0124] 步骤S34,将第一目标位置处的表项作为第一表项,执行步骤S38。
[0125] 步骤S35,将第一前缀值与第一目标位置处的表项中存储的第二前缀值匹配,若匹配失败,则执行步骤S36;若匹配成功,则执行步骤S37。
[0126] 步骤S36,在第一级查找表中分配未被占用的表项,作为第一表项,执行步骤S38。
[0127] 步骤S37,将第一目标位置处的表项中存储的第二映射值作为第一映射值,并执行步骤S39。
[0128] 步骤S38,将第一前缀值和第一前缀值对应的第一映射值存储至第一表项,执行步骤S39。
[0129] 步骤S39,将第一映射值和第一标识值、查找结果存储至第二级查找表中的第二表项,第二表项的关键值字段存储第一映射值和第一标识值,第二表项的结果字段存储查找结果,与上述步骤S13相同。
[0130] 本申请实施例提供的技术方案中,由于网络设备计算出的不同前缀值的哈希值可能相同,为避免哈希冲突,当第一哈希值所指示第一目标位置处的表项被占用时,网络设备要判断是其他IP地址的相同前缀值导致的,还是其他IP地址的不同前缀值导致的,以进行对应处理,保证第一级查找表能够准确存储第一前缀值和第一映射值的对应关系,避免IP地址的重复存储造成的资源浪费,以及保证第一级查找表的完整性。
[0131] 在上述步骤S33中,网络设备先判断第一目标位置处的表项是否被占用,若未被占用,则可以执行步骤S34,将第一目标位置处的表项作为第一表项,以便后续将第一前缀值和第一前缀值对应的第一映射值存储至第一表项中;若第一目标位置处的表项被占用,则网络设备执行步骤S35,获取与第一目标位置处的表项的关键值字段中存储的前缀值,即第二前缀值,将第一前缀值与第二前缀值进行匹配,判断是其他IP地址的相同前缀值导致的表项占用,还是其他IP地址的不同前缀值导致的表项占用。
[0132] 在上述步骤S35中,网络设备将第一前缀值与第二前缀值匹配,若匹配失败,则表示是其他IP地址的不同前缀值占用了第一目标位置处的表项,则网络设备执行步骤S36,重新分配一个未被占用的表项,作为第一表项,以便后续将第一前缀值和第一前缀值对应的第一映射值存储至第一表项中;若匹配成功,则表示是其他IP地址的相同前缀值占用了第一目标位置处的表项,则第一IP地址的前缀值可以复用该表项,执行步骤S37,将第一目标位置处的表项中结果字段中存储的第二映射值作为第一映射值,并执行步骤S39。
[0133] 在上述步骤S36中,网络设备可以根据cuckoohash(布谷鸟算法)、开放定址法和链地址法等算法,为第一前缀值重新分配未被占用的表项。
[0134] 以开放定址法为例,以第一级查找表为一个表格举例,网络设备计算出第一前缀值对应的第一哈希值为1,第一哈希值对应的第一级查找表中的第1行已被与第一前缀值不同的前缀值占用,则网络设备按照顺序,查找下一行,直至查找到空行如第3行,将这个空行作为第一表项,分配给第一前缀值。
[0135] 以链地址法为例,以第一级查找表为一个链表举例,每个链表节点为一个表项,每个表项都存在多个“next”指针,多个表项可以根据“next”指针构成一个单向链表,当网络设备IP地址计算出第一前缀值对应的第一哈希值指向的表项已被与第一前缀值不同的前缀值占用,则网络设备根据第一哈希值指向的表项中存储的“next”指针查找单向链表,查找下一个存储内容为空的表项,再将这个存储内容为空的表项作为第一表项,分配给第一前缀值。
[0136] 在上述步骤S38中,网络设备将第一前缀值存储至第一表项的关键值字段,将第一前缀值对应的第一映射值存储至第一表项的结果字段。
[0137] 在一些实施例中,如图4所示,图4为本申请实施例提供的表项构建方法的第四种流程示意图,该方法可以包括如下步骤。
[0138] 步骤S41,获取第一IP地址和第一IP地址对应的查找结果,第一IP地址包括第一前缀值和第一标识值,当存在前缀值为第一前缀值的第二IP地址时,第二IP地址的标识值与第一标识值不同,与上述步骤S11相同。
[0139] 步骤S42,将第一前缀值和第一前缀值对应的第一映射值存储至第一级查找表中的第一表项,第一表项的关键值字段存储第一前缀值,第一表项的结果字段存储第一映射值,第一映射值的长度小于第一前缀值的长度,第一前缀值与第一映射值一一对应,与上述步骤S12相同。
[0140] 步骤S43,计算第一映射值与第一标识值的第二哈希值。
[0141] 步骤S44,根据第二级查找表中第二哈希值所指示第二目标位置,将第一映射值和第一标识值、查找结果存储至第二级查找表中的第二表项。
[0142] 本申请实施例提供的技术方案中,网络设备可以通过计算第一映射值与第一标识值的第二哈希值,从而根据第二哈希值找到第二目标位置对应的表项,再根据第二目标位置对应的表项,将第一映射值和第一标识值、查找结果存储至第二级查找表中。利用哈希值可以将较大的取值空间压缩至较小的可查找的取值空间内,便于将第一映射值与第一标识值以及查找结果存储到第二级查找表中,也便于之后根据哈希值查找第二级查找表,获得查找结果。
[0143] 在上述步骤S43中,网络设备可以根据第二哈希函数计算第一映射值与第一标识值的哈希值,即第二哈希值。第二哈希函数的形式可以根据实际情况进行配置。当第二级查找表为表格时,哈希值可以为自然数,如,1、2、3、……,哈希值可以为表项的行号或者列号,如哈希值为1,则哈希值可以指示第二级查找表中的第1行的表项或者第1列的表项;当第二级查找表为链表时,哈希值也可以是链表的指针,指向一个链表节点。
[0144] 在上述步骤S44中,第二哈希值指示第二目标位置,第二目标位置为第二级查找表中一个表项的位置。如上述第二哈希值为1,则对应的第二目标位置可以是第二级查找表中的第1行或者第1列。第二哈希值也可以是链表的指针,指向一个链表节点,该链表节点所在位置为第二目标位置,该链表节点为一个表项。网络设备可以根据第二目标位置确定第二级查找表中的第二表项,进而将第一映射值和第一标识值、查找结果存储至第二表项,第二表项可以是第二目标位置处的表项。
[0145] 在一些实施例中,上述步骤S44可以为:判断第二级查找表中第二哈希值所指示第二目标位置处的表项是否被占用。若判断结果为否,即第二级查找表中第二哈希值所指示第二目标位置处的表项未被占用,则说明该第一映射值和第一标识值未被存储,将第二目标位置处的表项作为第二表项;将第一映射值和第一标识值、查找结果存储至第二表项。
[0146] 若判断结果为是,即第二级查找表中第二哈希值所指示第二目标位置处的表项被占用,则可以分为两种情况:
[0147] 情况1,在不同第一映射值和第一标识值对应的哈希值不同的情况下,结束第一IP地址的存储流程。
[0148] 情况2,在不同第一映射值和第一标识值对应的哈希值可能相同的情况下,可以在第二级查找表中分配未被占用的第二表项;将第一映射值和第一标识值、查找结果存储至第二表项。
[0149] 下面结合图5所示的表项构建方法的第五种流程示意图,对上述表项构建方法进行说明。该方法可以包括如下步骤。
[0150] 步骤S51,获取第一IP地址和第一IP地址对应的查找结果,第一IP地址包括第一前缀值和第一标识值,当存在前缀值为第一前缀值的第二IP地址时,第二IP地址的标识值与第一标识值不同,与上述步骤S11相同。
[0151] 步骤S52,将第一前缀值和第一前缀值对应的第一映射值存储至第一级查找表中的第一表项,第一表项的关键值字段存储第一前缀值,第一表项的结果字段存储第一映射值,第一映射值的长度小于第一前缀值的长度,第一前缀值与第一映射值一一对应,与上述步骤S12相同。
[0152] 步骤S53,计算第一映射值与第一标识值的第二哈希值,与上述步骤S43相同。
[0153] 步骤S54,判断第二级查找表中第二哈希值所指示第二目标位置处的表项是否被占用,若未被占用,则执行步骤S55;若被占用,则执行步骤S56。
[0154] 步骤S55,将第二目标位置处的表项作为第二表项,执行步骤S57。
[0155] 步骤S56,在第二级查找表中分配未被占用的第二表项,执行步骤S57。
[0156] 步骤S57,将第一映射值和第一标识值、查找结果存储至第二表项。
[0157] 本申请实施例提供的技术方案中,由于网络设备计算出的不同第一映射值与第一标识值的哈希值可能相同,为避免哈希冲突,网络设备需要判断第二哈希值所指示第二目标位置处的表项是否被占用,以进行对应处理,保证第二级查找表能够准确存储第一映射值和第一标识值、查找结果的对应关系,避免IP地址的重复存储造成的资源浪费,以及保证第二级查找表的完整性。
[0158] 在上述步骤S54中,网络设备判断第二目标位置处的表项是否被占用,若未被占用,则可以执行步骤S55,将第二目标位置处的表项作为第二表项,以便后续将第一映射值和第一标识值、查找结果存储至第二表项;若第二目标位置处的表项被占用,则网络设备执行步骤S56,重新分配一个第二级查找表中未被占用的第二表项。
[0159] 在上述步骤S56中,网络设备可以根据cuckoohash(布谷鸟算法)、开放定址法和链地址法等算法,重新分配第二级查找表中未被占用的第二表项。具体地,可以参照上述步骤S36中网络设备为第一前缀值重新分配未被占用的表项的描述,此处不再赘述。
[0160] 为详细说明上述表项构建方法,本申请实施例还提供了一种表项构建方法的流程示意图,如图6所示,该方法包括如下步骤。
[0161] 步骤S61,获取第一IP地址和第一IP地址对应的查找结果,第一IP地址包括第一前缀值和第一标识值,当存在前缀值为第一前缀值的第二IP地址时,第二IP地址的标识值与第一标识值不同,与上述步骤S11、步骤S21、步骤S31相同。
[0162] 步骤S62,计算第一前缀值的第一哈希值,与上述步骤S22、步骤32相同。
[0163] 步骤S63,判断第一级查找表中第一哈希值所指示第一目标位置处的表项是否被占用,若未被占用,则执行步骤S64,若被占用,则执行步骤S65,与上述步骤S33相同。
[0164] 步骤S64,将第一目标位置处的表项作为第一表项,执行步骤S68,与上述步骤S34相同。
[0165] 步骤S65,将第一前缀值与第一表项中存储的第二前缀值匹配,若匹配失败,则执行步骤S66;若匹配成功,则执行步骤S67,与上述步骤S35相同。
[0166] 步骤S66,在第一级查找表中分配未被占用的表项,作为第一表项,执行步骤S68,与上述步骤S36相同。
[0167] 步骤S67,将第一目标位置处的表项中存储的第二映射值作为第一映射值,并执行步骤S69,与上述步骤S37相同。
[0168] 步骤S68,将第一前缀值和第一前缀值对应的第一映射值存储至第一表项,并执行步骤S69,与上述步骤S38相同。
[0169] 步骤S69,计算第一映射值与第一标识值的第二哈希值,与上述步骤S53相同。
[0170] 步骤S610,判断第二级查找表中第二哈希值所指示第二目标位置处的表项是否被占用,若未被占用,则执行步骤S611;若被占用,则执行步骤S612,与上述步骤S54相同。
[0171] 步骤S611,将第二目标位置处的表项作为第二表项,执行步骤S613,与上述步骤S55相同。
[0172] 步骤S612,在第二级查找表中分配未被占用的第二表项,执行步骤S613,与上述步骤S56相同。
[0173] 步骤S613,将第一映射值和第一标识值、查找结果存储至第二表项,与上述步骤S57相同。
[0174] 下面结合一个举例,对本申请实施例提供的表项构建方法进行说明。
[0175] 网络设备获取到一个IP地址,为S1+H1,其中,S1为96bits的前缀值(网段),H1为32bits的标识值(接口标识),计算得到S1的哈希值a为1,对应第一级查找表中的第1行,网络设备检测到第一级查找表中第1行为空,则将S1以及为S1分配的Cookie(映射值)=11存储到第一级查找表中的第1行,如下表1所示。
[0176] 表1
[0177]S1 Cookie=11

[0178] 将Cookie=11与H1组合,计算哈希值b,即计算11+H1的哈希值b为1,对应第二级查找表中的第1行,网络设备检测到第二级查找表中第1行为空,则将11+H1存储到第二级查找表中,如下表2所示。
[0179] 表2
[0180]11+H1 S1+H1对应的查找结果

[0181] 网络设备再获取到一个IP地址,为S2+H2,S2与S1的值不同,其中,S2为96bits的前缀值,H2为32bits的标识值,计算得到S2对应的哈希值c也为1,对应第一级查找表中的第1行,网络设备检测到第一级查找表中第1行被占用,则匹配S1和S2,匹配失败,则为S2重新分配表项为空的位置进行存储,如第一级查找表中的第2行,将S2以及其对应的Cookie(映射值)=22存储到第一级查找表中的第2行,如下表3所示。
[0182] 表3
[0183]S1 Cookie=11
S2 Cookie=22
[0184] 将Cookie=22与H2组合,计算哈希值d,即计算22+H2的哈希值d为2,对应第二级查找表中的第2行,网络设备检测到第二级查找表中第2行为空,则将22+H2存储到第二级查找表中,如下表4所示。
[0185] 表4
[0186]
[0187] 以此类推,将所有的IP地址存储到第一级查找表和第二级查找表中,完成第一级查找表和第二级查找表的构建即可。
[0188] 本申请实施例提供的技术方案中,通过构建第一级查找表和第二级查找表,大大减少了查找表所需的存储空间。通过如下一个举例进行说明。
[0189] 网络设备支持1M规格的IPv6 FIB,以及64K个网段,IPv6地址的网络前缀长度为96bits,接口标识长度为32bits,则:
[0190] 1、建立第一级查找表需包括64K个表项,每个表项key字段长度为96bits,以第一级查找表的结果字段长度为20bits为例,则第一级查找表占用空间为64K×(96+20)=7.424M bits;
[0191] 2、建立第二级查找表需包括1M个表项,每个表项key字段长度为20+32=52 bits,以第而级查找表的结果字段长度为32bits为例,则第一级查找表占用空间为1M×(52+32)=84M bits。
[0192] 采用本申请实施例提供的技术方案,第一级查找表和第二级查找表共占空间为7.424+84=91.424M bits。而采用现有技术构建表项所需空间为1M×(128+32)=160Mbits。
与现有技术相比,本申请实施例所提供的表项构建方法所占用的空间压缩到原来的
91.424/160=58%。
[0193] 采用本申请实施例提供的技术方案,可以实现hash表的存储空间的压缩。当芯片实现查表的加速,采用SRAM存储表项内容时,而SRAM的存储空间可以控制在16M Bytes以下,大大降低了硬件成本。
[0194] 基于上述表项构建方法,本申请实施例还提供了一种表项查找方法,如图7所示,该方法包括如下步骤。
[0195] 步骤S71,获取目标IP地址,目标IP地址包括目标前缀值和目标标识值。
[0196] 步骤S72,从第一级查找表的各个表项中,查找与目标前缀值对应的目标映射值,第一级查找表根据上述图1‑图6任一种表项构建方法构建。
[0197] 步骤S73,从第二级查找表的各个表项中,查找与目标映射值和目标标识值对应的目标查找结果,第二级查找表根据上述图1‑图6任一种表项构建方法构建。
[0198] 本申请实施例提供的技术方案中,将IP地址分为前缀值和标识值两部分,并将重复性较高的前缀值与长度较小的映射值建立一一对应关系,存储到第一级查找表中;进而再将映射值和标识值、查找结果的对应关系存储到第二级查找表中。一方面,多个IP地址可能前缀值相同,即多个IP地址可以复用一个第一级查找表中的表项,无需重复存储相同的前缀值;二方面,映射值长度较小,用短的映射值来代替长的前缀值,大大减少了第二级查找表中关键值字段所需占用的存储空间,因此,减少了查找表所需的存储空间,进而可以采用存储空间较小的存储器来存储查找表,降低了硬件成本。
[0199] 以下通过一个举例对上述表项查找方法进行说明。
[0200] 网络设备获取到一个目标IP地址为S2+H2,计算得到S2的哈希值为1,对应上述表3中的第1行,网络设备将S2与S1匹配,匹配失败,则查找下一行,查找到第2行与S2匹配成功,则获取到与S2对应的目标映射值22;再计算22+H2的哈希值为2,对应上述表4中的第2行,网络设备将22+H2与表中的22+H2匹配,匹配成功,则获取到对应的查找结果。
[0201] 与上述表项构建方法相对应,本申请实施例还提供了一种表项构建装置,如图8所示,该装置包括:
[0202] 第一获取模块81,用于获取第一IP地址和第一IP地址对应的查找结果,第一IP地址包括第一前缀值和第一标识值,当存在前缀值为第一前缀值的第二IP地址时,第二IP地址的标识值与第一标识值不同;
[0203] 第一存储模块82,用于将第一前缀值和第一前缀值对应的第一映射值存储至第一级查找表中的第一表项,第一表项的关键值字段存储第一前缀值,第一表项的结果字段存储第一映射值,第一映射值的长度小于第一前缀值的长度,第一前缀值与第一映射值一一对应;
[0204] 第二存储模块83,用于将第一映射值和第一标识值、查找结果存储至第二级查找表中的第二表项,第二表项的关键值字段存储第一映射值和第一标识值,第二表项的结果字段存储查找结果。
[0205] 本申请实施例提供的技术方案中,将IP地址分为前缀值和标识值两部分,并将重复性较高的前缀值与长度较小的映射值建立一一对应关系,存储到第一级查找表中;进而再将映射值和标识值、查找结果的对应关系存储到第二级查找表中。一方面,多个IP地址可能前缀值相同,即多个IP地址可以复用一个第一级查找表中的表项,无需重复存储相同的前缀值;二方面,映射值长度较小,用短的映射值来代替长的前缀值,大大减少了第二级查找表中关键值字段所需占用的存储空间,因此,减少了查找表所需的存储空间,进而可以采用存储空间较小的存储器来存储查找表,降低了硬件成本。
[0206] 在一些实施例中,第一存储模块82,可以包括:
[0207] 第一计算子模块,用于计算第一前缀值的第一哈希值;
[0208] 第一存储子模块,用于根据第一级查找表中第一哈希值所指示第一目标位置,将第一前缀值和第一前缀值对应的第一映射值存储至第一级查找表中的第一表项。
[0209] 在一些实施例中,第一存储子模块,具体可以用于:
[0210] 若第一级查找表中第一哈希值所指示第一目标位置处的表项未被占用,则将第一目标位置处的表项作为第一表项;
[0211] 将第一前缀值和第一前缀值对应的第一映射值存储至第一表项。
[0212] 在一些实施例中,第一存储子模块,具体可以用于:
[0213] 若第一级查找表中第一哈希值所指示第一目标位置处的表项被占用,则将第一前缀值与第一表项中存储的第二前缀值匹配;
[0214] 若匹配失败,则在第一级查找表中分配未被占用的表项,作为第一表项;
[0215] 将第一前缀值和第一前缀值对应的第一映射值存储至第一表项。
[0216] 在一些实施例中,第一存储子模块,还可以用于:
[0217] 若匹配成功,则将第一目标位置处的表项中存储的第二映射值作为第一映射值。
[0218] 在一些实施例中,第二存储模块83,可以包括:
[0219] 第二计算子模块,用于计算第一映射值与第一标识值的第二哈希值;
[0220] 第二存储子模块,用于根据第二级查找表中第二哈希值所指示第二目标位置,将第一映射值和第一标识值、查找结果存储至第二级查找表中的第二表项。
[0221] 在一些实施例中,第二存储子模块,具体可以用于:
[0222] 若第二级查找表中第二哈希值所指示第二目标位置处的表项未被占用,则将第二目标位置处的表项作为第二表项;
[0223] 将第一映射值和第一标识值、查找结果存储至第二表项。
[0224] 在一些实施例中,第二存储子模块,具体可以用于:
[0225] 若第二级查找表中第二哈希值所指示第二目标位置处的表项被占用,则在第二级查找表中分配未被占用的第二表项;
[0226] 将第一映射值和第一标识值、查找结果存储至第二表项。
[0227] 在一些实施例中,2的第一映射值的长度次幂大于等于本地设备支持的前缀值的总数量。
[0228] 在一些实施例中,第一前缀值为网络前缀的值,第一标识值为接口标识的值。
[0229] 与上述表项查找方法相对应,本申请实施例还提供了一种表项查找装置,如图9所示,该装置包括:
[0230] 第二获取模块91,用于获取目标IP地址,目标IP地址包括目标前缀值和目标标识值;
[0231] 第一查找模块92,用于从第一级查找表的各个表项中,查找与目标前缀值对应的目标映射值,第一级查找表根据上述任一表项构建方法构建;
[0232] 第二查找模块93,用于从第二级查找表的各个表项中,查找与目标映射值和目标标识值对应的目标查找结果,第二级查找表根据上述任一表项构建方法构建。
[0233] 本申请实施例提供的技术方案中,将IP地址分为前缀值和标识值两部分,并将重复性较高的前缀值与长度较小的映射值建立一一对应关系,存储到第一级查找表中;进而再将映射值和标识值、查找结果的对应关系存储到第二级查找表中。一方面,多个IP地址可能前缀值相同,即多个IP地址可以复用一个第一级查找表中的表项,无需重复存储相同的前缀值;二方面,映射值长度较小,用短的映射值来代替长的前缀值,大大减少了第二级查找表中关键值字段所需占用的存储空间,因此,减少了查找表所需的存储空间,进而可以采用存储空间较小的存储器来存储查找表,降低了硬件成本。
[0234] 本申请实施例还提供了一种网络设备,如图10所示,包括处理器101、通信接口102、存储器103和通信总线104,其中,处理器101,通信接口102,存储器103通过通信总线
104完成相互间的通信,
[0235] 存储器103,用于存放计算机程序;
[0236] 处理器101,用于执行存储器103上所存放的程序时,实现上述任一表项构建方法或者表项查找方法。
[0237] 上述网络设备提到的通信总线可以是外设部件互连标准(Peripheral Component Interconnect,PCI)总线或扩展工业标准结构(Extended Industry  Standard Architecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0238] 通信接口用于上述网络设备与其他设备之间的通信。
[0239] 存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non‑Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
[0240] 上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field‑Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
[0241] 在本申请提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现上述任一表项构建方法或者表项查找方法。
[0242] 在本申请提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一表项构建方法或者表项查找方法。
[0243] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk (SSD))等。
[0244] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0245] 本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、网络设备、存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0246] 以上所述仅为本申请的较佳实施例,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。