查找方法及装置转让专利

申请号 : CN201210175652.X

文献号 : CN102739520B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 商红章袁大岭张兴华宋振超

申请人 : 华为技术有限公司

摘要 :

本发明实施例提供了查找方法及装置,属于通信领域。查找方法包括:根据第一网络地址在存储了多个网段的LOW节点的二叉树中查找第一二叉树节点,该第一二叉树节点是将第一网络地址与二叉树中存储的网段的LOW节点进行逐层比较所涉及的至少两个二叉树节点中最后一个存储了小于或者等于第一网络地址的网段的LOW节点的二叉树节点;根据第一二叉树节点得到第一网络地址对应的查找结果。上述技术方案中,通过在二叉树中存储多个网段的LOW节点,实现使用一个二叉树节点存储一条网段的方式完成查找的过程,相对于使用两个二叉树节点存储一条网段实现查找的现有技术,节省了存储空间。

权利要求 :

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

根据第一网络地址在存储了多个网段的LOW节点的二叉树中查找第一二叉树节点,所述二叉树包括多个用于存储所述多个网段的LOW节点的二叉树节点,所述多个二叉树节点与所述多个网段的LOW节点一一对应,所述多个网段的LOW节点中的每个网段的LOW节点的长度等于所述第一网络地址的长度;所述第一二叉树节点是将所述第一网络地址与所述二叉树中存储的网段的LOW节点进行逐层比较所涉及的至少两个二叉树节点中最后一个存储了小于或者等于所述第一网络地址的网段的LOW节点的二叉树节点,所述网段的LOW节点是指一条网段包含的多个网络地址中的最小的网络地址;

根据所述第一二叉树节点得到所述第一网络地址对应的查找结果;

所述根据所述第一二叉树节点得到所述第一网络地址对应的查找结果包括:所述第一二叉树节点中存储的小于或等于所述第一网络地址的网段的LOW节点为第一网段的LOW节点,且所述第一网段不是所述多个网段中的任意一个网段的子网段,根据所述第一网段的LOW节点判断所述第一网段是否包含所述第一网络地址;当所述第一网段包含所述第一网络地址时,根据所述第一二叉树节点获取所述第一网段对应的查找结果的索引,根据所述第一网段对应的查找结果的索引得到所述第一网络地址对应的查找结果,所述第一网段对应的查找结果为所述第一网络地址对应的查找结果;

或,所述第一二叉树节点中存储的小于或等于所述第一网络地址的网段的LOW节点为第一网段的LOW节点,且所述第一网段是所述多个网段中的一个或者多个网段的子网段,根据所述第一网段的LOW节点判断所述第一网段是否包含所述第一网络地址;当所述第一网段不包含所述第一网络地址时,根据所述第一二叉树节点获取第二网段对应的查找结果的索引,根据所述第二网段对应的查找结果的索引得到所述第一网络地址对应的查找结果,所述第二网段对应的查找结果为所述第一网络地址对应的查找结果,所述第二网段为所述一个或者多个网段中包含所述第一网络地址并且网络规模最小的网段。

2.根据权利要求1所述方法,其特征在于,根据所述第一二叉树节点获取到的所述第二网段对应的查找结果的索引与根据所述二叉树中存储了所述第二网段的LOW节点的二叉树节点得到的所述第二网段对应的查找结果的索引相等。

3.根据权利要求1所述方法,其特征在于,所述根据所述第一网段的LOW节点判断所述第一网段是否包含所述第一网络地址包括:判断所述第一网段的LOW节点的高X比特是否等于所述第一网络地址的高X比特,如果所述第一网段的LOW节点的高X比特等于所述第一网络地址的高X比特,则确定所述第一网段包含所述第一网络地址;如果所述第一网段的LOW节点的高X比特不等于所述第一网络地址的高X比特,则确定所述第一网段不包含所述第一网络地址,所述第一网段的掩码长度为X比特。

4.根据权利要求1所述方法,其特征在于,所述根据所述第一二叉树节点获取第二网段对应的查找结果的索引包括:根据所述第一二叉树节点获取所述一个或者多个网段分别对应的掩码长度;

判断所述第一网段的LOW节点的高Y比特与所述第一网络地址的高Y比特是否相同,所述Y比特为获取到的所述一个或者多个网段中任意一个网段对应的掩码长度;

如果所述第一网段的LOW节点的高Y比特等于所述第一网络地址的高Y比特,则判断掩码长度为Y比特的网段包含所述第一网络地址,如果所述第一网段的LOW节点的高Y比特不等于所述第一网络地址的高Y比特,则判断掩码长度为Y比特的网段为不包含所述第一网络地址;

在包含所述第一网络地址的各个网段中选择掩码长度最大的网段,并将其作为第二网段;

获取所述第二网段对应的查找结果的索引。

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

查找单元,用于根据第一网络地址在存储了多个网段的LOW节点的二叉树中查找第一二叉树节点,所述二叉树包括多个用于存储所述多个网段的LOW节点的二叉树节点,所述多个二叉树节点与所述多个网段的LOW节点一一对应,所述多个网段的LOW节点中的每个网段的LOW节点的长度等于所述第一网络地址的长度;所述第一二叉树节点是将所述第一网络地址与所述二叉树中存储的网段的LOW节点进行逐层比较所涉及的至少两个二叉树节点中最后一个存储了小于或者等于所述第一网络地址的网段的LOW节点的二叉树节点,所述网段的LOW节点是指一条网段包含的多个网络地址中的最小的网络地址;

获取单元,用于根据所述查找单元查找到的所述第一二叉树节点得到所述第一网络地址对应的查找结果;

当所述第一二叉树节点中存储的小于或等于所述第一网络地址的网段的LOW节点为第一网段的LOW节点,且所述第一网段不是所述多个网段中的任意一个网段的子网段时,所述获取单元包括:判断单元,用于根据所述第一网段的LOW节点判断所述第一网段是否包含所述第一网络地址;

第一获取单元,用于当所述判断单元判断所述第一网段包含所述第一网络地址时,根据所述第一二叉树节点获取所述第一网段对应的查找结果的索引;

第二获取单元,用于根据所述第一获取单元获取到的所述第一网段对应的查找结果的索引得到所述第一网络地址对应的查找结果,所述第一网段对应的查找结果为所述第一网络地址对应的查找结果;或当所述第一二叉树节点中存储的小于或等于所述第一网络地址的网段的LOW节点为第一网段的LOW节点,且所述第一网段是所述多个网段中的一个或者多个网段的子网段时,所述获取单元包括:判断单元,用于根据所述第一网段的LOW节点判断所述第一网段是否包含所述第一网络地址;

第三获取单元,用于当所述判断单元判断所述第一网段不包含所述第一网络地址时,根据所述第一二叉树节点获取第二网段对应的查找结果的索引;

第四获取单元,用于根据所述第三获取单元获取到的所述第二网段对应的查找结果的索引得到所述第一网络地址对应的查找结果,所述第二网段对应的查找结果为所述第一网络地址对应的查找结果,所述第二网段为所述一个或者多个网段中包含所述第一网络地址并且网络规模最小的网段。

6.根据权利要求5所述装置,其特征在于,所述第三获取单元根据所述第一二叉树节点获取到的所述第二网段对应的查找结果的索引与根据所述二叉树中存储了所述第二网段的LOW节点的二叉树节点得到的所述第二网段对应的查找结果的索引相等。

7.根据权利要求5或6所述装置,其特征在于,所述判断单元,用于判断所述第一网段的LOW节点的高X比特是否等于所述第一网络地址的高X比特,如果所述第一网段的LOW节点的高X比特等于所述第一网络地址的高X比特,则确定所述第一网段包含所述第一网络地址;如果所述第一网段的LOW节点的高X比特不等于所述第一网络地址的高X比特,则确定所述第一网段不包含所述第一网络地址,所述第一网段的掩码长度为X比特。

8.根据权利要求5所述装置,其特征在于,所述第三获取单元,具体包括:

第一获取子单元,用于根据所述第一二叉树节点获取所述一个或者多个网段分别对应的掩码长度;

判断子单元,用于判断所述第一网段的LOW节点的高Y比特与所述第一网络地址的高Y比特是否相同,所述Y比特为所述第一获取子单元获取到的所述一个或者多个网段中任意一个网段对应的掩码长度;如果所述第一网段的LOW节点的高Y比特等于所述第一网络地址的高Y比特,则判断掩码长度为Y比特的网段包含所述第一网络地址,如果所述第一网段的LOW节点的高Y比特不等于所述第一网络地址的高Y比特,则判断掩码长度为Y比特的网段为不包含所述第一网络地址;

选择子单元,用于在所述判断子单元判断出的包含所述第一网络地址的各个网段中选择掩码长度最大的网段,并将其作为第二网段;

第二获取子单元,用于获取所述选择子单元选择的所述第二网段对应的查找结果的索引。

说明书 :

查找方法及装置

技术领域

[0001] 本发明涉及通信领域,特别涉及查找方法及装置。

背景技术

[0002] 随着通信技术的发展,将网段信息存储在二叉树中,以便于后续进行查找。举例来说,路由器接收到报文后,路由器可以根据报文的目的网际协议(Internet Protocol,IP)地址在二叉树中查找目的IP地址对应的网段。路由器查找到目的IP地址对应的网段后,路由器可以根据该网段得到报文的转发路径,并将该报文转发出去。如何准确的在二叉树中查找到与网络地址对应的网段是如今面临的问题。
[0003] 现有技术中,通常用网段的TOP节点和网段的LOW节点来表征一个网段。其中,网段的TOP节点是指一条网段包含的多个网络地址中的最大的网络地址。网段的LOW节点是指一条网段包含的多个网络地址中的最小的网络地址。举例来说,网络地址可以是IP地址。本领域的技术人员可以理解,实践中经常用“0”、“1”以及“*”表示一个网段,将该网段中所包含的所有的“*”替换为“1”得到的网络地址为该网段的TOP节点,将该网段中所包含的所有的“*”替换为“0”得到的网络地址为该网段的LOW节点。将网段TOP节点和网段的LOW节点同时存储在二叉树中,在二叉树中查找网络地址对应的网段时,将网络地址与网段TOP节点和网段的LOW节点分别进行匹配,以确保查找结果的准确性。
[0004] 现有的二叉树查找算法需要占用两个二叉树节点存储一条网段,占用了较多的存储空间。

发明内容

[0005] 为了节省存储网段所需的存储空间,本发明实施例提供了查找方法及装置。
[0006] 一方面,本发明实施例提供了一种查找方法,所述方法包括:
[0007] 根据第一网络地址在存储了多个网段的LOW节点的二叉树中查找第一二叉树节点,所述二叉树包括多个用于存储所述多个网段的LOW节点的二叉树节点,所述多个二叉树节点与所述多个网段的LOW节点一一对应,所述多个网段的LOW节点中的每个网段的LOW节点的长度等于所述第一网络地址的长度;所述第一二叉树节点是将所述第一网络地址与所述二叉树中存储的网段的LOW节点进行逐层比较所涉及的至少两个二叉树节点中最后一个存储了小于或者等于所述第一网络地址的网段的LOW节点的二叉树节点;
[0008] 根据所述第一二叉树节点得到所述第一网络地址对应的查找结果。
[0009] 另一方面,本发明实施例提供了一种查找装置,所述装置包括:
[0010] 查找单元,用于根据第一网络地址在存储了多个网段的LOW节点的二叉树中查找第一二叉树节点,所述二叉树包括多个用于存储所述多个网段的LOW节点的二叉树节点,所述多个二叉树节点与所述多个网段的LOW节点一一对应,所述多个网段的LOW节点中的每个网段的LOW节点的长度等于所述第一网络地址的长度;所述第一二叉树节点是将所述第一网络地址与所述二叉树中存储的网段的LOW节点进行逐层比较所涉及的至少两个二叉树节点中最后一个存储了小于或者等于所述第一网络地址的网段的LOW节点的二叉树节点;
[0011] 获取单元,用于根据所述查找单元查找到的所述第一二叉树节点得到所述第一网络地址对应的查找结果。
[0012] 本发明实施例提供的技术方案的有益效果是:
[0013] 上述技术方案中,用于查找的二叉树中,一个二叉树节点存储一条网段。因此,相对于现有技术中使用两个二叉树节点存储一条网段,本发明实施例提供的技术方案节省了存储空间。

附图说明

[0014] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0015] 图1是本发明实施例提供的一种查找方法流程图;
[0016] 图2是本发明实施例提供的一种查找方法流程图;
[0017] 图3是本发明实施例提供的一种路由网段的拓扑结构示意图;
[0018] 图4是本发明实施例提供的一种二叉树节点存储结构示意图;
[0019] 图5是本发明实施例提供的另一种二叉树存储结构示意图;
[0020] 图6是本发明实施例提供的一种查找装置的结构示意图;
[0021] 图7是本发明实施例提供的一种获取单元的结构示意图;
[0022] 图8是本发明实施例提供的另一种获取单元的结构示意图;
[0023] 图9是本发明实施例提供的一种第三获取单元的结构示意图。

具体实施方式

[0024] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0025] 图1为本发明实施例提供的一种查找方法的流程图。所述方法包括:
[0026] 101:根据第一网络地址在存储了多个网段的LOW节点的二叉树中查找第一二叉树节点,该第一二叉树节点是将第一网络地址与二叉树中存储的网段的LOW节点进行逐层比较所涉及的至少两个二叉树节点中最后一个存储了小于或者等于第一网络地址的网段的LOW节点的二叉树节点;
[0027] 其中,二叉树包括多个用于存储多个网段的LOW节点的二叉树节点,多个二叉树节点与多个网段的LOW节点一一对应,多个网段的LOW节点中的每个网段的LOW节点的长度等于第一网络地址的长度。
[0028] 102:根据第一二叉树节点得到第一网络地址对应的查找结果。
[0029] 举例来说,步骤101的执行主体可以是网络设备中的查找引擎。所述查找引擎可以是FPGA(Field-Programmable Gate Array,现场可编程门阵列),也可以是ASIC(Application-Specific Integrated Circuit,专用集成电路)。ASIC可以是单独的芯片,也可以集成在NP(Network Processor,网络处理器)中。步骤101的执行主体也可以是网络设备中的CPU(Central Processing Unit,中央处理单元)。
[0030] 举例来说,步骤102的执行主体可以是网络设备中的查找引擎。所述查找引擎可以是FPGA,也可以是ASIC。ASIC可以是单独的芯片,也可以集成在NP中。步骤102的执行主体也可以是网络设备中的CPU。
[0031] 可选地,根据第一二叉树节点得到第一网络地址对应的查找结果包括:
[0032] 第一二叉树节点中存储的小于或等于第一网络地址的网段的LOW节点为第一网段的LOW节点,且第一网段不是多个网段中的任意一个网段的子网段,根据第一网段的LOW节点判断第一网段是否包含第一网络地址;
[0033] 当第一网段包含第一网络地址时,根据第一二叉树节点获取第一网段对应的查找结果的索引,根据第一网段对应的查找结果的索引得到第一网络地址对应的查找结果,第一网段对应的查找结果为第一网络地址对应的查找结果,该第一网段对应的查找结果为第一网络地址对应的查找结果。
[0034] 可选地,本实施例提供的方法中,根据第一二叉树节点得到第一网络地址对应的查找结果包括:
[0035] 第一二叉树节点中存储的小于或等于第一网络地址的网段的LOW节点为第一网段的LOW节点,且第一网段是多个网段中的一个或者多个网段的子网段,根据第一网段的LOW节点判断第一网段是否包含第一网络地址;
[0036] 当第一网段不包含第一网络地址时,根据第一二叉树节点获取第二网段对应的查找结果的索引,根据第二网段对应的查找结果的索引得到第一网络地址对应的查找结果,第二网段对应的查找结果为第一网络地址对应的查找结果,第二网段为一个或者多个网段中包含第一网络地址并且网络规模最小的网段。
[0037] 其中,根据第一二叉树节点获取到的第二网段对应的查找结果的索引与根据二叉树中存储了第二网段的LOW节点的二叉树节点得到的第二网段对应的查找结果的索引相等。
[0038] 可选地,本实施例提供的方法中,根据第一网段的LOW节点判断第一网段是否包含第一网络地址包括:
[0039] 判断第一网段的LOW节点的高X比特是否等于第一网络地址的高X比特,如果第一网段的LOW节点的高X比特等于第一网络地址的高X比特,则确定第一网段包含第一网络地址;如果第一网段的LOW节点的高X比特不等于第一网络地址的高X比特,则确定第一网段不包含第一网络地址,第一网段的掩码长度为X比特。
[0040] 可选地,本实施例提供的方法中,根据第一二叉树节点获取第二网段对应的查找结果的索引包括:
[0041] 根据第一二叉树节点获取一个或者多个网段分别对应的掩码长度;
[0042] 判断第一网段的LOW节点的高Y比特与第一网络地址的高Y比特是否相同,Y比特为获取到的一个或多个网段中任意一个网段对应的掩码长度;
[0043] 如果第一网段的LOW节点的高Y比特等于第一网络地址的高Y比特,则判断掩码长度为Y比特的网段包含第一网络地址,如果第一网段的LOW节点的高Y比特不等于第一网络地址的高Y比特,则判断掩码长度为Y比特的网段为不包含第一网络地址;
[0044] 在包含第一网络地址的各个网段中选择掩码长度最大的网段,并将其作为第二网段;
[0045] 获取第二网段对应的查找结果的索引。
[0046] 本实施例提供的方法,用于查找的二叉树中,一个二叉树节点存储一条网段。因此,相对于现有技术中使用两个二叉树节点存储一条网段,本发明实施例提供的技术方案节省了存储空间。
[0047] 为了更加详细的阐述图1所示实施例提供的方法,下面通过图2所述的实施例对图1所述实施例提供的方法进行具体描述:
[0048] 图2为本发明实施例提供的一种查找方法的流程图。为了便于说明,本实施例以二叉树存储网段A至I的LOW节点,分别将网络地址a、网络地址b以及网络地址c作为第一网络地址为例,对在存储了多个网段的LOW节点的二叉树中查找第一网络地址对应的查找结果的方法进行举例说明。其中,网段A至I、网络地址a、b、c具体如下:
[0049] 网段A:10011101************************
[0050] 网段B:1001110110**********************
[0051] 网段C:10011101101100101100************
[0052] 网段D:10011101101111100010************
[0053] 网段E:11010100************************
[0054] 网段F:1101010011001111****************
[0055] 网段G:11010100110011110010************
[0056] 网段H:110101001100111100100000001100**
[0057] 网段I:110110111100101000101110010000**
[0058] 网络地址a:11010100110011110110111000101101
[0059] 网络地址b:10011101100010101010101010101100
[0060] 网络地址c:11011011110010100010111001011011
[0061] 参见图2,本实施例提供的方法包括:
[0062] 201:将多个网段的LOW节点存储在二叉树中。
[0063] 举例来说,对于网段A-I的LOW节点,其网段的拓扑结构如图3所示。图3中包括9个线段,9个线段分别对应网段A至I,不仅如此,图3还针对每个网段标出了其掩码长度,如图3中的“A/8”标识网段A的掩码长度为8,“B/10”标识网段B的掩码长度为10,“C/20”标识网段C的掩码长度为20,“D/20”标识网段D的掩码长度为20,“E/8”标识网段E的掩码长度为8,“F/16”标识网段F的掩码长度为16,“G/20”标识网段G的掩码长度为20,“H/30”标识网段H的掩码长度为30,“I/30”标识网段I的掩码长度为30。每个网段包括多个网络地址,每个网络地址可以看做是网段所对应的线段上的点。位于左侧的点所对应网络地址大于位于右侧的点所对应的网络地址。每个网段最右端的圆圈对应该网段的LOW节点。另外,能够包含其他网段的网段是父网段,被包含的网段是子网段。例如,网段H是网段G的子网段。网段G是网段F的子网段。本领域的技术人员可以理解,子网段的LOW节点大于父网段的LOW节点。在将多个网段的LOW节点存储在二叉树节点中时,可采用图4所示的存储结构存储网段的LOW节点。如图4所示的存储结构,每个二叉树节点的存储结构包括数据(data域)、左子节点(lchild域)、父亲节点(parent域)和右子节点(rchild域)。其中,数据域用来存储网段的LOW节点,左子节点域和右子节点域分别用来存储指向左子节点和右子节点的指针,而父亲节点域用来存储指向网段的LOW节点的父网段的指针。当然,除了采用图4所示的存储结构存储网段的LOW节点外,还可以选择其他存储方式,本实施例对此不作具体限定。无论采用哪种方式存储,二叉树包括多个用于存储多个网段的LOW节点的二叉树节点,且多个二叉树节点与多个网段的LOW节点一一对应。
[0064] 可选地,本实施例提供的二叉树中,可以按照图5所示的存储结构对信息进行存储。以方便对二叉树存储的数据进行查找。如图5所示的二叉树存储结构示意图,按照左大右小的原则将网段的LOW节点存储在二叉树节点中,如果网段的LOW节点的父亲节点域为空,或者,在该网段的LOW节点的父亲节点域为非空的情况下,该网段的LOW节点有子网段,即该网段的LOW节点无父网段,或者有父网段且本身为父网段,则在二叉树中存储网段的LOW节点之后,还包括在与该二叉树节点相对应的第一存储区域(例如图5中的L1层)中存储该网段的掩码长度信息和查找结果的INDEX(索引)信息;如果网段的LOW节点的父亲节点域为非空,且该网段的LOW节点没有子节点,即该网段的LOW节点有父网段且没有子网段,则在二叉树中存储网段的LOW节点之后,还包括将父网段信息存储在第二存储区域(例如图5中的L2层),并在与二叉树节点相对应的第一存储区域(例如图5中的L1层)中存储指向第二存储区域(例如图5中的L2层)的地址,第二存储区域中存储掩码长度信息和查找结果的INDEX信息,该掩码长度信息包括该网段及其父网段的掩码长度信息,查找结果的INDEX信息包括该网段对应的查找结果的INDEX信息以及该网段的父网段对应的查找结果的INDEX信息。根据该网段对应的查找结果的INDEX信息,可以找到该网段对应的查找结果。根据该网段的父网段对应的查找结果的INDEX信息,可以找到该网段的父网段对应的查找结果。
[0065] 结合图3所示的拓扑结构可知,由于网段A、网段E和网段I均无父网段,网段B、网段F和网段G均有父网段且本身也为父网段,因此,在图5所示的二叉树中存储网段A、网段E、网段I、网段B、网段F和网段G的LOW节点后,对应的L1层存储了这些网段的掩码长度信息和查找结果的INDEX(索引)信息;而网段C、网段D和网段H均有父网段且本身无子网段,因此,在图5所示的二叉树中存储网段C、网段D和网段H的LOW节点后,对应的L1层存储L2层的地址,L2层存储这些网段的掩码长度信息和查找结果的INDEX信息。
[0066] 可选地,本实施例提供的方法中,在将网段的掩码长度信息和查找结果的索引信息存储在存储区域前,还可以包括建立二叉树节点与二叉树节点对应的第一存储区域的地址以及第二存储区域的地址的映射关系。根据上述映射关系,可以获取网段对应的查找结果的索引,或该网段的父网段对应的查找结果的索引。
[0067] 其中,标识掩码长度信息时,可以bitmap(位图)的方式标识。以网段的LOW节点的数据为32位,掩码长度位为16位为例进行说明,则在32位的掩码长度信息中,将其第16位的数值设置为1,用来标识该掩码长度为16位。当然,除了以bitmap的方式标识掩码长度信息,还有其他掩码长度信息的标识方式,本实施例在此不作具体限定。
[0068] 当然,除了采用上述分别在不同的存储区域存储网段及其父网段的掩码长度信息及对应的查找结果的索引方式外,还可以采用在同一存储区域存储的方式存储网段及其父网段的掩码长度信息及对应的查找结果的索引,本实施例不对存储网段及其父网段的掩码长度信息及对应的查找结果的索引的方式作具体限定,本实施例仅以采用图4及图5所示的存储方式为例进行说明。
[0069] 202:根据第一网络地址在存储了多个网段的LOW节点的二叉树中查找第一二叉树节点,该第一二叉树节点是将第一网络地址与二叉树中存储的网段的LOW节点进行逐层比较所涉及的至少两个二叉树节点中最后一个存储了小于或者等于第一网络地址的网段的LOW节点的二叉树节点。
[0070] 多个网段的LOW节点存储在多个二叉树节点中,网段的LOW节点遵循左大右小的原则进行存储。即将多个网段的LOW节点按照由大到小的顺序从左往右依次存储在多个二叉树节点中。举例来说,图5为二叉树存储结构的示意图。
[0071] 在二叉树中查找第一二叉树节点时,包括但不限于如下方式:
[0072] 从二叉树的根节点开始,将第一网络地址与二叉树中存储的网段的LOW节点进行逐层比较,直至比较至二叉树的最后一层的二叉树节点。如果参与上述比较过程的二叉树节点的子节点中没有存储网段的LOW节点,则可以停止比较操作。
[0073] 具体来说,如果当前的网段的LOW节点小于或等于第一网络地址,则将第一网络地址与当前的网段的LOW节点所在的二叉树节点的左子节点中存储的网段的LOW节点进行比较;如果当前的网段的LOW节点大于第一网络地址,则将第一网络地址与当前的网段的LOW节点所在的二叉树节点的右子节点中存储的网段的LOW节点进行比较。
[0074] 依此类推,直至比较至二叉树的最后一层的二叉树节点。本领域的技术人员可以理解,二叉树中的每一层都有一个二叉树节点涉及到上述比较过程。举例来说,如果二叉树包括10层,则一共有10个二叉树节点涉及到上述比较过程。
[0075] 举例来说,二叉树至少包括二层二叉树节点。逐层比较涉及到至少2个二叉树节点。逐层比较涉及到的至少2个二叉树节点中最后一个小于或等于第一网络地址的网段的LOW节点为第一二叉树节点。本领域的技术人员可以理解,逐层比较涉及到的至少2个二叉树节点中每个二叉树节点都有可能是第一二叉树节点。举例来说,如果二叉树包括10层,则10个涉及到上述比较过程二叉树节点都有可能是第一二叉树节点。
[0076] 也就是说,本实施例提供的方法中,将第一网络地址与至少两个二叉树节点中存储的网段的LOW节点分别进行比较之后,从上述比较过程涉及的至少两个二叉树节点中确定第一二叉树节点。第一二叉树节点是将第一网络地址与二叉树中存储的网段的LOW节点进行逐层比较所涉及的至少两个二叉树节点中最后一个存储了小于或等于第一网络地址的网段的LOW节点的二叉树节点。本领域的技术人员可以理解,二叉树中至少存在一个小于或等于第一网络地址的网段的LOW节点的二叉树节点。当二叉树中只有一个小于或等于第一网络地址的网段的LOW节点的二叉树节点时,该二叉树节点为第一二叉树节点。
[0077] 为了便于说明,结合图5所示的二叉树结构,以二叉树中的二叉树节点存储了上述网段A-I的具体数据,二叉树节点与存储的网段的LOW节点采用相同的命名规则为例,例如,存储网段A的LOW节点的二叉树节点为二叉树节点A,存储网段B的LOW节点的二叉树节点为二叉树节点B,依此类推。分别以网络地址a、b和c为第一网络地址,在图5所示的二叉树中查找对应的第一二叉树节点的方式详见如下内容:
[0078] 本段以第一网络地址为网络地址a为例进行说明。对于网络地址a:11010100110011110110111000101101,将其与二叉树节点中存储的网段的LOW节点进行比较时,图5所示的二叉树中的根节点为存储了网段E的LOW节点的二叉树节点E,因而首先将网络地址a与网段E的LOW节点进行比较。比较结果为网段E的LOW节点小于网络地址a,则需要将网络地址a与二叉树节点E的左子节点中存储的网段的LOW节点进行比较。二叉树节点E的左子节点为二叉树节点H,则将网络地址a与网段H的LOW节点进行比较。比较结果为网段H的LOW节点小于网络地址a,则需要将网络地址a与二叉树节点H的左子节点中存储的网段的LOW节点进行比较。二叉树节点H的左子节点为二叉树节点I,则将网络地址a与网段I的LOW节点进行比较。比较结果为网段I的LOW节点大于网络地址a。二叉树节点I的子节点中没有存储网段LOW节点,因此不再进行比较。比较到此时可以得出,二叉树节点H存储的网段H的LOW节点是最后一个小于网络地址a的网段LOW节点,因此将存储网段H的LOW节点的二叉树节点H作为根据网络地址a在图5所示的二叉树中查找得到的第一二叉树节点。
[0079] 本段以第一网络地址为网络地址b为例进行说明。对于网络地址b:10011101100010101010101010101100,将其与二叉树节点中存储的网段的LOW节点进行比较时,图5所示的二叉树中的根节点为存储了网段E的LOW节点的二叉树节点E,因而首先将网络地址b与网段E的LOW节点进行比较。比较结果为网段E的LOW节点大于网络地址b,则需要将网络地址b与二叉树节点E的右子节点中存储的网段的LOW节点进行比较。二叉树节点E的右子节点为二叉树节点A,则将网络地址b与网段A的LOW节点进行比较。比较结果为网段A的LOW节点小于网络地址b,则需要将网络地址b与二叉树节点A的左子节点中存储的网段的LOW节点进行比较。二叉树节点A的左子节点为二叉树节点C,则将网络地址b与网段C的LOW节点进行比较。比较结果为网段C的LOW节点大于网络地址b,则将网络地址b与二叉树节点C的右子节点中存储的网段的LOW节点进行比较。二叉树节点C的右子节点为二叉树节点B,则将网络地址b与网段B的LOW节点进行比较。比较结果为网段B的LOW节点小于网络地址b。二叉树节点B位于二叉树的最后一层,因此不再进行比较。比较到此时可以得出,二叉树节点B中存储的网段B的LOW节点是最后一个小于网络地址b的网段LOW节点,因此将存储网段B的LOW节点的二叉树节点B作为根据网络地址b在图5所示的二叉树中查找得到的第一二叉树节点。
[0080] 本段以第一网络地址为网络地址c为例进行说明。对于网络地址c:11011011110010100010111001011011,将其与二叉树节点中存储的网段的LOW节点进行比较时,图5所示的二叉树中的根节点为存储了网段E的LOW节点的二叉树节点E,因而首先将网络地址c与网段E的LOW节点进行比较。比较结果为网段E的LOW节点小于网络地址c,则将网络地址c与二叉树节点E的左子节点中存储的网段的LOW节点进行比较。二叉树节点E的左子节点为二叉树节点H,则将网络地址c与网段H的LOW节点进行比较。比较结果为网段H的LOW节点小于网络地址c,则将网络地址c与二叉树节点H的左子节点中存储的网段的LOW节点进行比较。二叉树节点H的左子节点为二叉树节点I,则将网络地址c与网段I的LOW节点进行比较。比较结果为网段I的LOW节点小于网络地址c。二叉树节点I的左子节点中没有存储网段LOW节点,因此不再进行比较。比较到此时可以得出,二叉树节点I中存储的网段I的LOW节点是最后一个小于网络地址c的网段LOW节点,因此将存储网段I的LOW节点的二叉树节点I作为根据网络地址c在图5所示的二叉树中查找得到的第一二叉树节点。
[0081] 203:第一二叉树节点中存储的小于或等于第一网络地址的网段的LOW节点为第一网段的LOW节点,根据第一网段的LOW节点判断第一网段是否包含第一网络地址。
[0082] 如果判断结果为第一网段包含第一网络地址,则执行步骤204,如果判断结果为第一网段不包含第一网络地址,则执行步骤205。
[0083] 针对该步骤,根据第一网段的LOW节点判断第一网段是否包含第一网络地址时,本实施例不对具体判断方式进行限定。具体实现时,可采用如下判断方式:
[0084] 判断第一网段的LOW节点的高X比特是否等于第一网络地址的高X比特,如果第一网段的LOW节点的高X比特等于第一网络地址的高X比特,则确定第一网段包含第一网络地址;如果第一网段的LOW节点的高X比特不等于第一网络地址的高X比特,则确定第一网段不包含第一网络地址,第一网段的掩码长度为X比特。
[0085] 其中,本实施例不对获取第一网段的掩码长度的方式进行限定。对于上述步骤201中的存储方式,如果存储该第一网段的LOW节点的第一二叉树节点对应的L1层中存储的是该第一网段的掩码长度信息,且建立了第一二叉树节点与L1层的地址之间的对应关系,则可根据第一二叉树节点从对应的L1层中直接读取该第一网段的掩码长度信息,如果存储该第一网段的LOW节点的第一二叉树节点对应的L1层中存储的是指向L2层的地址,且建立了第一二叉树节点与L1层的地址之间的对应关系,则可以根据第一二叉树节点从对应的L1层中读取L1层存储的指向L2层的地址,以实现根据L2层的地址从L2层中查询第一网段的掩码长度信息。无论以何种方式获取到第一网段的掩码长度信息,将第一网络地址与第一网段的LOW节点从最高位开始进行比较,比较位数为读取的第一网段的掩码长度,如果相同,则判断第一网段包含第一网络地址,如果不同,则判断第一网段不包含第一网络地址。
[0086] 具体地,仍以上述所例举的数据为例,本步骤结合网络地址a、b、c的数据进行解释说明。
[0087] 以网络地址a为第一网络地址为例进行说明。由于根据网络地址a在图5所示的二叉树中查找得到的第一二叉树节点为网段H的LOW节点所在的二叉树节点H,即第一网段为网段H,而与存储了网段H的LOW节点的第一二叉树节点对应的L1层中存储的是指向L2层的地址,则可以通过读取L1层中的地址来实现从L2层查询网段H的掩码长度信息为30,之后仅需将网络地址a的前30位与网段H的LOW节点的前30位进行比较。由于两者前30位不同,则可以得出网段H不包含网络地址a,执行步骤205。
[0088] 以网络地址b为第一网络地址为例进行说明。由于根据网络地址b在图5所示的二叉树中查找得到的第一二叉树节点为网段B的LOW节点所在的二叉树节点B,即第一网段为网段B,而与存储了网段B的LOW节点的第一二叉树节点对应的L1层存储的即是网段B的LOW节点的掩码长度信息和指向网段B的LOW节点的索引INDEX B,因此可直接读取网段B的LOW节点的掩码长度为10,之后仅需将网络地址b的前10位与网段B的LOW节点的前10位进行比较。由于两者前10位数据相同,则可以得出网段B包含网络地址b,执行步骤204。
[0089] 以网络地址c为第一网络地址为例进行说明。由于根据网络地址c在图5所示的二叉树中查找得到的第一二叉树节点为网段I的LOW节点所在的二叉树节点I,即第一网段为网段I,而与存储了网段I的LOW节点的第一二叉树节点对应的L1层存储的即是网段I的LOW节点的掩码长度信息和指向网段I的LOW节点的索引INDEX I,因此可直接读取网段I的LOW节点的掩码长度为32,之后仅需将关键值c的前32位与网段I的LOW节点的前32位进行比较。由于两者前32位数据不同,则可以得出网段I不包含网络地址c,执行步骤205。
[0090] 204:根据第一二叉树节点获取第一网段对应的查找结果的索引,根据第一网段对应的查找结果的索引得到第一网络地址对应的查找结果。
[0091] 针对该步骤,由于上述步骤203根据第一二叉树节点判断第一网段包含第一网络地址,即意味着第一网络地址落在第一网段范围内,因而第一网段对应的查找结果即为第一网络地址对应的查找结果,则根据第一网段对应的查找结果的索引得到第一网络地址对应的查找结果,其中,第一网络地址对应的查找结果可以是标识,例如出接口的标识或者下一跳的标识。第一网络地址对应的查找结果也可以是具体操作,例如转发或者丢弃。本实施例不对第一网络地址对应的具体查找结果进行限定。
[0092] 例如,针对第一网络地址b,由于通过上述步骤201至步骤203的操作得出网段B包含第一网络地址b,而存储了网段B的LOW节点的二叉树节点B对应的L1层存储了网段B对应的查找结果的索引,因此,在根据二叉树节点B获取到网段B对应的查找结果的索引后,根据网段B对应的查找结果的索引得到第一网络地址b对应的查找结果。
[0093] 205:根据第一二叉树节点获取第二网段对应的查找结果的索引,根据第二网段对应的查找结果的索引得到第一网络地址对应的查找结果,该第二网段为一个或多个网段中包含第一网络地址并且规模最小的网段。
[0094] 具体地,由于该步骤是在上述步骤203中判断出第一网段不包含第一网络地址的情况下执行的,对此,为了获取查找结果,本实施例提供的方法将查找范围由第一网段扩大到第一网段的父网段,因此,如果第一网段为一个或多个网段的子网段,则在第一网段不包含第一网络地址的情况下,从第一网段的父网段中确定包含第一网络地址并且规模最小的第二网段,根据第二网段对应的查找结果的索引得到第一网络地址对应的查找结果。具体实施时,本实施例不对根据第一二叉树节点获取第二网段对应的查找结果的索引的方式进行限定,可采用如下具体获取方式:
[0095] 根据第一二叉树节点获取一个或者多个网段分别对应的掩码长度;
[0096] 判断第一网段的LOW节点的高Y比特与第一网络地址的高Y比特是否相同,Y比特为获取到的一个或多个网段中任意一个网段对应的掩码长度;
[0097] 如果第一网段的LOW节点的高Y比特等于第一网络地址的高Y比特,则判断掩码长度为Y比特的网段包含第一网络地址,如果第一网段的LOW节点的高Y比特不等于第一网络地址的高Y比特,则判断掩码长度为Y比特的网段为不包含第一网络地址;
[0098] 在包含第一网络地址的各个网段中选择掩码长度最大的网段,并将其作为第二网段;
[0099] 获取第二网段对应的查找结果的索引。
[0100] 接下来详细说明上述根据第一二叉树节点获取第二网段对应的查找结果的索引的方式,由上述步骤201中的描述可知,二叉树节点与存储网段的掩码长度信息及对应的查找结果的索引的存储区域的地址之间建立了映射关系,则根据第一二叉树节点可获取到与其对应的存储区域中存储的一个或多个网段的掩码长度信息,如果第一网段为一个或多个网段的子网段,即该第一网段具有父网段,则根据第一二叉树节点获取到的掩码长度信息中包括第一网段的父网段的掩码长度信息,在得到第一网段的一个或多个父网段的掩码长度信息之后,即可判断得出第一网络地址落在哪个规模最小的父网段范围内,进而得出第一网络地址对应的查找结果。
[0101] 具体地,仍以上述所例举的数据为例,针对第一网络地址a,由于上述步骤203中判断网段H不包含第一网络地址a,而网段H为网段G、网段F和网段E的子网段,在存储了网段H的LOW节点的二叉树节点H对应的L1层中存储的是指向L2层的地址,则可以通过读取L1层中的地址来实现从L2层查询网段H的掩码长度信息,以及其父网段的掩码长度信息。如图5中网段H的掩码长度信息位所示,其中的第30位、第20位、第16位和第8位的数据为1,则该网段H的掩码长度信息为30,其父网段的掩码长度信息分别为20、16和8,对应的网段分别为网段G、网段F和网段E。接下来,先比较网段H的LOW节点的高20比特是否等于第一网络地址a的高20比特,比较结果为不等,则意味着掩码长度为20的网段G仍然不包含第一网络地址a,继续比较网段H的LOW节点的高16比特是否等于第一网络地址a的高16比特,比较结果为相等,则意味着掩码长度为16的网段F包含第一网络地址a,由于网段E同样为网段F的父网段,在网段F包含第一网络地址a的情况下,网段E也显然包含第一网络地址a,但由于掩码长度越大,其网络规模越小,则网段F即为包含第一网络地址a且网络规模最小的网段,因此,将网段F作为第二网段,获取网段F对应的查找结果的索引后,可根据网段F对应的查找结果的索引得到第一网络地址a对应的查找结果。
[0102] 针对第一网络地址c,由于上述步骤203中判断网段I不包含第一网络地址c,而网段I已经是当前网络规模最大的网段,其没有父网段,则在网段I不包含第一网络地址c的情况下,不存在包含第一网络地址c的网段,因此,查找结果为没有命中(miss)。
[0103] 本实施例提供的方法,用于查找的二叉树中,一个二叉树节点存储一条网段。因此,相对于现有技术中使用两个二叉树节点存储一条网段,本发明实施例提供的技术方案节省了存储空间。
[0104] 图6为本发明实施例提供了一种查找装置的结构示意图。所述装置能够用于执行图1或者图2所示的查找方法。所述装置可以是网络设备。所述网络设备可以是路由器、交换机、防火墙或者负载均衡器。图6所示的装置包括:
[0105] 查找单元601,用于根据第一网络地址在存储了多个网段的LOW节点的二叉树中查找第一二叉树节点,二叉树包括多个用于存储多个网段的LOW节点的二叉树节点,多个二叉树节点与多个网段的LOW节点一一对应,多个网段的LOW节点中的每个网段的LOW节点的长度等于第一网络地址的长度;第一二叉树节点是将第一网络地址与二叉树中存储的网段的LOW节点进行逐层比较所涉及的至少两个二叉树节点中最后一个存储了小于或者等于第一网络地址的网段的LOW节点的二叉树节点;
[0106] 举例来说,查找单元601可以是网络设备中的查找引擎。所述查找引擎可以是FPGA,也可以是ASIC。ASIC可以是单独的芯片,也可以集成在NP中。查找单元也可以是网络设备中的CPU。
[0107] 获取单元602,用于根据查找单元601查找到的第一二叉树节点得到第一网络地址对应的查找结果。
[0108] 举例来说,获取单元602可以是网络设备中的NP,也可以是网络设备中的CPU。
[0109] 举例来说,查找单元601查找第一二叉树节点的方式可以参见图2所示的查找方法中关于步骤202的描述,此处不再赘述。获取单元602获取第一网络地址对应的查找结果的过程可以参见图2所示的查找方法中关于步骤203至步骤206的描述,此处不再赘述。
[0110] 可选地,本实施例提供的装置中,第一二叉树节点中存储的小于或等于第一网络地址的网段的LOW节点为第一网段的LOW节点,且第一网段不是多个网段中的任意一个网段的子网段。结合图2所示的查找方法中步骤203至步骤206的描述,参见图7,该获取单元602可以包括:
[0111] 判断单元6021,用于根据第一网段的LOW节点判断第一网段是否包含第一网络地址;
[0112] 第一获取单元6022,用于当判断单元6021判断第一网段包含第一网络地址时,根据第一二叉树节点获取第一网段对应的查找结果的索引;
[0113] 第二获取单元6023,用于根据第一获取单元6022获取到的第一网段对应的查找结果的索引得到第一网络地址对应的查找结果,第一网段对应的查找结果为第一网络地址对应的查找结果。
[0114] 可选地,本实施例提供的装置中,第一二叉树节点中存储的小于或等于第一网络地址的网段的LOW节点为第一网段的LOW节点,且第一网段是多个网段中的一个或者多个网段的子网段。参见图8,该获取单元602可以包括:
[0115] 判断单元6021,用于根据第一网段的LOW节点判断第一网段是否包含第一网络地址;
[0116] 第三获取单元6024,用于当判断单元6021判断第一网段不包含第一网络地址时,根据第一二叉树节点获取第二网段对应的查找结果的索引;
[0117] 第四获取单元6025,用于根据第三获取单元6024获取到的第二网段对应的查找结果的索引得到第一网络地址对应的查找结果,第二网段对应的查找结果为第一网络地址对应的查找结果,第二网段为一个或者多个网段中包含第一网络地址并且网络规模最小的网段。
[0118] 其中,第三获取单元6024根据第一二叉树节点获取到的第二网段对应的查找结果的索引与根据二叉树中存储了第二网段的LOW节点的二叉树节点得到的第二网段对应的查找结果的索引相等。
[0119] 可选地,本实施例提供的装置中,判断单元6021可以用于判断第一网段的LOW节点的高X比特是否等于第一网络地址的高X比特,如果第一网段的LOW节点的高X比特等于第一网络地址的高X比特,则确定第一网段包含第一网络地址;如果第一网段的LOW节点的高X比特不等于第一网络地址的高X比特,则确定第一网段不包含第一网络地址,第一网段的掩码长度为X比特。
[0120] 参见图9,可选的地,本实施例提供的装置中,第三获取单元6024可以包括:
[0121] 第一获取子单元6024a,用于根据第一二叉树节点获取一个或者多个网段分别对应的掩码长度;
[0122] 判断子单元6024b,用于判断第一网段的LOW节点的高Y比特与第一网络地址的高Y比特是否相同,Y比特为第一获取子单元6024a获取到的一个或多个网段中任意一个网段对应的掩码长度;如果第一网段的LOW节点的高Y比特等于第一网络地址的高Y比特,则判断掩码长度为Y比特的网段包含第一网络地址,如果第一网段的LOW节点的高Y比特不等于第一网络地址的高Y比特,则判断掩码长度为Y比特的网段为不包含第一网络地址;
[0123] 选择子单元6024c,用于在判断子单元6024b判断出的包含第一网络地址的各个网段中选择掩码长度最大的网段,并将其作为第二网段;
[0124] 第二获取子单元6024d,用于获取选择子单元6024c选择的第二网段对应的查找结果的索引。
[0125] 本实施例提供的装置,用于查找的二叉树中,一个二叉树节点存储一条网段。因此,相对于现有技术中使用两个二叉树节点存储一条网段,本发明实施例提供的技术方案节省了存储空间。
[0126] 需要说明的是:上述实施例提供的查找装置在查找第一网络地址对应的查找结果时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将查找装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的查找装置与查找方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0127] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0128] 本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0129] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。