网段查找方法及装置与流程

文档序号:18040365发布日期:2019-06-28 23:56阅读:248来源:国知局
网段查找方法及装置与流程

本申请涉及信息处理技术领域,特别是涉及一种网段查找方法及装置。



背景技术:

安全策略是根据报文的属性信息对报文进行转发控制和深度报文检测的防控策略,其实质是根据安全策略中规定的网段规则的具体内容来对报文进行过滤。

具体的,网段规则中会对需要过滤的ip(internetprotocol,网络之间互连的协议)地址进行限定,基于此,在基于网段规则进行报文过滤时,一般需要判断网段规则中限定的ip地址是否与已知报文中包括的ip地址匹配,若匹配,过滤上述已知报文,若不匹配,则放行上述已知报文。

又由于各安全策略一般是按照一定顺序排列的,所以基于网段规则进行报文过滤时,需要按照安全策略的排列顺序,从前到后逐个判断每一安全策略中规定的网段规则所限定ip地址中是否与已知报文中包括的ip地址匹配,也就是,查找与已知报文中包括的ip地址相匹配的网段规则,查找效率较低。

尤其是在实际应用中安全策略多达几万条的情况,应用上述方式查找与已知报文包括的ip地址相匹配的网段规则时,查找效率极低。



技术实现要素:

有鉴于此,本申请提供了一种网段查找方法及装置,以提高网段的查找效率。具体技术方案如下:

第一方面,本申请提供了一种网段查找方法,通过多个已知地址网段预先创建树形结构,所述树形结构中除根节点外的任一子节点表示至少一个比特位,且每个子节点对应一个地址网段,所述地址网段的网段前缀为:从根节点到子节点所经分支上的所有节点各自表示的比特位的值按经过顺序排列的二进制数;

所述方法包括:

获取待匹配地址网段;

从所述树形结构中,与所述根节点连接的第一层子节点开始,通过比较子节点所表示的比特位与所述待匹配地址网段中对应位置的比特位是否一致,查找出所述树形结构中是否存在与所述待匹配地址网段对应的目标节点;

如果查找到所述目标节点,获取与所述目标节点预先关联的网段规则。

结合第一方面,在第一种可能的实现方式中,所述树形结构为二叉树结构;

所述树形结构中包括具有以下特征的子节点:

所对应的地址网段不属于多个所述已知地址网段之一;或者;

不具有兄弟节点;或者;

具有两个孩子节点,且其中至少一个孩子节点所对应的地址网段属于多个所述已知地址网段之一。

结合第一方面或第一种可能的实现方式,在第二种可能的实现方式中,所述获取待匹配地址网段之前,所述方法还包括:

获取多个所述已知地址网段,其中,所述已知地址网段预先关联网段规则;

以地址网段的ip地址为第一优先级、网段前缀长度为第二优先级,对多个所述已知地址网段进行排序,获得排序结果;

构建第一二进制数为所述排序结果中首位地址网段的网段前缀的二叉树结构,所述第一二进制数为:从根节点到叶子节点所经分支上的所有子节点各自表示的比特位的值按经过顺序排列的二进制数,每一子节点表示一个比特位;

针对所述排序结果中每一非首位地址网段,从所述二叉树结构中与根节点连接的第一层子节点开始,查找所表示比特位与非首位地址网段中对应位置的比特位一致、且不存在孩子节点或孩子节点所表示比特位与非首位地址网段中对应位置的比特位不一致的子节点,作为生长节点;

将由非首位地址网段的网段前缀中所述生长节点所对应位置后的各比特位构造的二叉树结构作为所述生长节点的子树,其中,所构造二叉树结构中每一节点表示一个比特位、且表示高比特位的节点是表示低比特位的节点的父节点;

按照从根节点到子节点的顺序,从所述第一层子节点且不属于合并节点的子节点中,确定起始合并节点;

从具有左右孩子节点的子节点且所对应地址网段预先关联有网段规则的子节点中,确定结束合并节点;

将所述起始合并节点和结束合并节点之间的节点合并为一个节点。

结合第二种可能的实现方式,在第三种可能的实现方式中,在所述将由非首位地址网段的网段前缀中所述生长节点所对应位置后的各比特位构造的二叉树结构作为所述所述生长节点的子树之后,还包括:

判断所述生长节点的子树是否为第一方向的子树;

若为是,从所述生长节点在所述第一方向相反的第二方向的子树中,查找第一个合并节点;

将从所述生长节点到所确定合并节点所经分支上的节点合并为一个节点;

所述从具有左右孩子节点的子节点、所对应地址网段预先关联有网段规则的子节点中,确定结束合并节点,包括:

从具有左右孩子节点的子节点、所对应地址网段预先关联有网段规则的子节点、合并节点所在层的上一层包含的子节点中,确定结束合并节点。

结合第三种可能的实现方式,在第四种可能的实现方式中,所述以地址网段的ip地址为第一优先级、网段前缀长度为第二优先级,对多个所述已知地址网段进行排序,获得排序结果,包括:

以地址网段的ip地址为第一优先级,按照升序方式对多个所述已知地址网段进行排序;

当存在多个所述已知地址网段具有相同的第一优先级时,以网段前缀长度为第二优先级,按照升序方式,对具有相同的第一优先级的多个所述已知地址网段进行排序,获得排序结果。

第二方面,本申请提供了一种网段查找装置,通过多个已知地址网段预先创建树形结构,所述树形结构中除根节点外的任一子节点表示至少一个比特位,且每个子节点对应一个地址网段,所述地址网段的网段前缀为:从根节点到子节点所经分支上的所有节点各自表示的比特位的值按经过顺序排列的二进制数;

所述装置包括:

网段获取模块,用于获取待匹配地址网段;

节点查找模块,用于从所述树形结构中,与所述根节点连接的第一层子节点开始,通过比较子节点所表示的比特位与所述待匹配地址网段中对应位置的比特位是否一致,查找出所述树形结构中是否存在与所述待匹配地址网段对应的目标节点;

规则获取模块,用于如果所述节点查找模块查找到所述目标节点,获取与所述目标节点预先关联的网段规则。

结合第二方面,在第五种可能的实现方式中,所述树形结构为二叉树结构;

所述树形结构中包括具有以下特征的子节点:

所对应的地址网段不属于多个所述已知地址网段之一;或者;

不具有兄弟节点;或者;

具有两个孩子节点,且其中至少一个孩子节点所对应的地址网段属于多个所述已知地址网段之一。

结合第二方面或第五种可能的实现方式,在第六种可能的实现方式中,所述装置还包括:树构建模块;所述树构建模块,包括:

网段获取单元,用于获取多个所述已知地址网段,其中,所述已知地址网段预先关联网段规则;

网段排序单元,用于以地址网段的ip地址为第一优先级、网段前缀长度为第二优先级,对多个所述已知地址网段进行排序,获得排序结果;

树构建单元,用于构建第一二进制数为所述排序结果中首位地址网段的网段前缀的二叉树结构,所述第一二进制数为:从根节点到叶子节点所经分支上的所有子节点各自表示的比特位的值按经过顺序排列的二进制数,每一子节点表示一个比特位;

生长节点查找单元,用于针对所述排序结果中每一非首位地址网段,从所述二叉树结构中与根节点连接的第一层子节点开始,查找所表示比特位与非首位地址网段中对应位置的比特位一致、且不存在孩子节点或孩子节点所表示比特位与非首位地址网段中对应位置的比特位不一致的子节点,作为生长节点;

子树确定单元,用于将由非首位地址网段的网段前缀中所述生长节点所对应位置后的各比特位构造的二叉树结构作为所述生长节点的子树,其中,所构造二叉树结构中每一节点表示一个比特位、且表示高比特位的节点是表示低比特位的节点的父节点;

起始节点确定单元,用于按照从根节点到子节点的顺序,从所述第一层子节点且不属于合并节点的子节点中,确定起始合并节点;

结束节点确定单元,用于从具有左右孩子节点的子节点且所对应地址网段预先关联有网段规则的子节点中,确定结束合并节点;

第一节点合并单元,用于将所述起始合并节点和结束合并节点之间的节点合并为一个节点。

结合第六种可能的实现方式,在第七种可能的实现方式中,所述树构建模块还包括:

方向判断单元,用于所述子树确定单元确定所述所述生长节点的子树之后,判断所述生长节点的子树是否为第一方向的子树;

合并节点查找单元,用于在所述方向判断单元的判断结果为是时,从所述生长节点在所述第一方向相反的第二方向的子树中,查找第一个合并节点;

第二节点合并单元,用于将从所述生长节点到所确定合并节点所经分支上的节点合并为一个节点;

所述结束节点确定单元,具体用于从具有左右孩子节点的子节点、所对应地址网段预先关联有网段规则的子节点、合并节点所在层的上一层包含的子节点中,确定结束合并节点。

结合第七种可能的实现方式,在第八种可能的实现方式中,所述网段排序单元,具体用于以地址网段的ip地址为第一优先级,按照升序方式对多个所述已知地址网段进行排序;

当存在多个所述已知地址网段具有相同的第一优先级时,以网段前缀长度为第二优先级,按照升序方式,对具有相同的第一优先级的多个所述已知地址网段进行排序,获得排序结果。

第三方面,本申请提供了一种电子设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器被所述机器可执行指令促使:实现本申请实施例所述的方法步骤。

第四方面,本申请提供了一种机器可读存储介质,存储有机器可执行指令,在被处理器调用和执行时,所述机器可执行指令促使所述处理器:实现本申请实施例所述的方法步骤。

由以上可见,本申请提供的方案中,由于预先创建的树形结构中每一子节点所对应地址网段的网段前缀为:从根节点到子节点所经分支上的所有节点各自表示的比特位的值按经过顺序排列的二进制数,所以在查找与待匹配地址网段相匹配的网段规则时,可以直接通过比较上述树形结构中子节点所表示的比特位与待匹配地址网段中对应位置的比特位是否一致的方式,找到目标节点,而目标节点预先关联的网段规则即为与上述待匹配地址网段相匹配的网段规则,这样也就找到了所有与待匹配地址网段匹配的全部网段规则。与现有技术相比,无需再针对网段规则进行逐一匹配,因而能够提高查找效率。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种网段查找方法的流程示意图;

图2为本申请实施例提供的一种树创建方法的流程示意图;

图3a为本申请实施例提供的第一种节点合并过程的展示示意图;

图3b为本申请实施例提供的第二种节点合并过程的展示示意图;

图3c为本申请实施例提供的第三种节点合并过程的展示示意图;

图4为本申请实施例提供的一种网段查找装置的结构示意图;

图5为本申请实施例提供的一种树创建装置的结构示意图;

图6为本申请实施例提供的一种电子设备的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在实现本申请各个实施例提供的网段查找方案时,是基于预先创建的树形结构实现的。为便于理解,下面先对上述预先创建的树形结构进行介绍。

本申请的一个实施例中,上述预先创建的树形结构为通过多个已知地址网段创建的树形结构。具体的,上述所创建的树形结构可以为二叉树结构。

另外,所创建的上述树形结构中除根节点外的任一子节点表示至少一个比特位,且每个子节点对应一个地址网段,每一子节点所对应地址网段的网段前缀为:从根节点到该子节点所经分支上的所有节点各自表示的比特位的值按经过顺序排列的二进制数。

本申请实施例中所涉及的地址网段可以为ipv4地址网段,也可以为ipv6地址网段。

以ipv6地址网段为例,ipv6地址网段中ip地址部分包含128个比特位,则上述树形结构中的每一子节点可以表示上述128个比特位中的至少一个比特位。例如,一个子节点可以表示第1个比特位,还可以表示第1-100个比特位等等。

又由于每一个比特位的取值可能为0,也可能为1,因此,每一个子节点中可以存储有其所表示的比特位的取值。例如,若一个子节点表示第2个比特位,这一比特位的取值为1,则上述子节点中存储的内容为1。若一个子节点表示的是第1-5个比特位,这5个比特位的取值分别为:0、0、0、0、0,则上述子节点中存储的内容为00000。

由于上述预先创建的树形结构为通过各个已知地址网段创建的树形结构,所以上述预先创建的树形结构中包含每一已知地址网段对应的节点。

本申请的另一个实施例中,在上述树形结构为二叉树结构的情况下,上述树形结构中包括具有以下特征的子节点:

所对应的地址网段不属于多个已知地址网段之一;或者;

不具有兄弟节点;或者;

具有两个孩子节点,且其中至少一个孩子节点所对应的地址网段属于多个已知地址网段之一。

下面在上述预先创建的树形结构的基础上,对本申请实施例提供的网段查找方法进行详细说明。

图1为本申请实施例提供的一种网段查找方法的流程示意图,上述网段查找方法包括:

s101:获取待匹配地址网段。

s102:从上述树形结构中,与根节点连接的第一层子节点开始,通过比较子节点所表示的比特位与待匹配地址网段中对应位置的比特位是否一致,查找出树形结构中是否存在与待匹配地址网段对应的目标节点,如果查找到目标节点,执行s103。

假设,一个子节点所表示的比特位为第1个比特位,则待匹配地址网段中对应位置为待匹配网段的第1个比特位。若上述两个第1个比特位的取值相等,则说明子节点所表示的比特位与待匹配地址网段中对应位置的比特位一致。

查找树形结构中是否存在与待匹配网段对应的目标节点,也就是,查找树形结构中是否存在所对应地址网段为上述待匹配地址网段的子节点,所对应地址网段为上述待匹配地址网段的子节点即为上述目标节点。

具体的,比较子节点所表示的比特位与待匹配地址网段中对应位置的比特位是否一致的过程中,一种情况下,若比较结果表征一致,且从上述第一层子节点开始到该子节点所表示的比特位为待匹配地址网段的全部网段前缀位,则这一子节点为上述目标节点。另一种情况下,若比较结果表征一致,但是从上述第一层子节点开始到该子节点所表示的比特位还未达到待匹配地址网段的全部网段前缀位,则继续沿着上述树形结构进行比特位比较。再一种情况下,若比较结果表征不一致,则沿该子节点向下的子节点中不存在上述目标节点。

s103:获取与目标节点预先关联的网段规则。

本申请的一个实施例中,上述树形结构中预先关联有网段规则的子节点可以挂载有规则列表。上述规则列表用于存储子节点预先关联的网段规则。

上述网段规则可以是对地址网段对应的报文进行过滤的规则、进行检测的规则等等

由以上可见,本施例提供的方案中,由于预先创建的树形结构中每一子节点所对应地址网段的网段前缀为:从根节点到子节点所经分支上的所有节点各自表示的比特位的值按经过顺序排列的二进制数,所以在查找与待匹配地址网段相匹配的网段规则时,可以直接通过比较上述树形结构中子节点所表示的比特位与待匹配地址网段中对应位置的比特位是否一致的方式,找到目标节点,而目标节点预先关联的网段规则即为与上述待匹配地址网段相匹配的网段规则,这样也就找到了所有与待匹配地址网段匹配的全部网段规则。与现有技术相比,无需再针对网段规则进行逐一匹配,因而能够提高查找效率。

下面再通过具体实施例对创建上述树形结构的过程进行介绍。

图2为本申请实施例提供的一种树创建方法的流程示意图,该方法包括:

s201:获取多个已知地址网段。

其中,上述已知地址网段预先关联网段规则。

本申请的一个实施例中,上述多个已知地址网段可以是通过对ip地址的范围段进行分解得到的地址网段。

对ip地址的范围段进行分解得到的地址网段可能仅仅包含一个ip地址,也可能是一个ip地址段。

例如,对ip地址的范围段进行分解得到的地址网段包括:

1ff0::0/116、1ff0::200/128等。

对ip地址的范围段进行分解得到地址网段的过程可以采用现有技术中提供的各种方式实现,这里不再详述。

s202:以地址网段的ip地址为第一优先级、网段前缀长度为第二优先级,对多个已知地址网段进行排序,获得排序结果。

由于地址网段是通过ip地址部分和网段前缀长度描述的,所以对各个已知地址网段进行排序时,可以是基于ip地址和网段前缀长度进行排序的。

本申请实施例中,对已知地址网段进行排序时,ip地址为第一优先级,而网段前缀长度为第二优先级,也就是,ip地址的优先级高于网段前缀长度的优先级。这样在对已知地址网段进行排序时,优先按照ip地址进行排序,在地址网段的ip地址相同的情况下,再按照地址网段的网段前缀长度进行排序。

本申请的一个实施例中,对各个已知地址网段进行排序时,可以以地址网段的ip地址为第一优先级,按照升序方式对多个已知地址网段进行排序;

当存在多个已知地址网段具有相同的第一优先级时,以网段前缀长度为第二优先级,按照升序方式,对具有相同的第一优先级的多个已知地址网段进行排序,获得排序结果。

假设,对ip地址的范围段进行分解得到的地址网段包括:

iff0::0/116、iff0::0/117、iff0::210/124、iff0::280/121、iff0::200/128。

则在ip地址的优先级高于网段前缀长度的优先级的情况下,按照升序对上述网段进行排序的结果为:

iff0::0/116、iff0::0/117、iff0::200/128、iff0::210/124、iff0::280/121。

当然,对各个已知地址网段进行排序时,也可以以地址网段的ip地址为第一优先级、网段前缀长度为第二优先级的同时,针对ip地址和网段前缀长度均按照降序对各个已知地址网段进行排序,得到排序结果。

这种情况下,对上述各个地址网段进行排序的结果为:

iff0::280/121、iff0::210/124、iff0::200/128、iff0::0/117、iff0::0/116。

s203:构建第一二进制数为排序结果中首位地址网段的网段前缀的二叉树结构。

其中,第一二进制数为:从根节点到叶子节点所经分支上的所有子节点各自表示的比特位的值按经过顺序排列的二进制数。

例如,在前述按照升序进行排序的结果中,首位地址网段为:iff0::0/116。在前述按照降序进行排序的结果中,首位地址网段为:iff0::280/121。

另外,本步骤中所构建的二叉树结构中每一子节点表示一个比特位。又由于上述第一二进制数与首位地址网段的网段前缀相等,所以,所构建出二叉树结构的层数与首位地址网段的网端前缀长度相等,所构建出二叉树结构的第一层子节点表示首位地址网段的网段前缀中第1个比特位,第二层子节点表示首位地址网段的网段前缀中第2个比特位,后续各层子节点依次类推,最后一层子节点,也就是所构建出二叉树结构的叶子节点表示首位地址网段的网段前缀中最后一个比特位。

由于二进制中仅仅包含0、1两个数值,所以地址网段的网段前缀中各比特位的取值为1或者0。又由于0小于1,所以在二叉树结构具有左孩子节点对应取值恒比右孩子节点对应取值小这一特点的前提下,构建上述二叉树结构时,一般将所表示比特位取值为“0”的子节点作为上一层子节点的左孩子节点,将所表示比特位取值“1”的子节点作为上一层子节点的右孩子节点。

s204:针对排序结果中每一非首位地址网段,从上述二叉树结构中与根节点连接的第一层子节点开始,查找所表示比特位与非首位地址网段中对应位置的比特位一致、且不存在孩子节点或孩子节点所表示比特位与非首位地址网段中对应位置的比特位不一致的子节点,作为生长节点。

s205:将由非首位地址网段的网段前缀中生长节点所对应位置后的各比特位构造的二叉树结构作为生长节点的子树。

其中,所构造二叉树结构中每一节点表示一个比特位、且表示高比特位的节点是表示低比特位的节点的父节点。

具体的,上述所构造二叉树结构中根节点表示的是:非首位地址网段的网段前缀中生长节点所对应位置后第一个比特位。

s206:按照从根节点到子节点的顺序,从第一层子节点且不属于合并节点的子节点中,确定起始合并节点。

考虑到ipv6地址网段包含128个比特位,若树形结构中一个子节点表示一个比特位,树形结构的深度最大为128,也就是树形结构最多会具有128层,树形结构的层数较多,为减少树形结构的层数,本申请实施例中,对一些节点进行了合并。鉴于此,上述合并节点为:进行节点合并而得到的节点。

具体的,对节点进行合并得到合并节点后,可以为合并节点增加标记,以标识该节点为合并节点。这种情况下,在识别一个节点是否为合并节点时,通过上述标识即可快速判断出是否为合并节点。

s207:从具有左右孩子节点的子节点且所对应地址网段预先关联有网段规则的子节点中,确定结束合并节点。

由于进行节点合并时,是从根节点开始自上而下的进行节点合并,所以上述结束合并节点所在层在上述起始合并节点所在层之后。例如,上述起始合并节点为树形结构的第一层中的节点,则上述结束合并节点可能为上述树形结构的第十层中的节点。

s208:将起始合并节点和结束合并节点之间的节点合并为一个节点。

将起始合并节点至结束合并节点之间的节点合并为一个节点,也就是说,以一个节点表示这些节点原本表示的比特位。这种情况下,合并后的节点中存储的内容为被合并节点原本表示的比特位的取值。

假设,起始合并节点a至结束合并节点d所表示的比特位分别为第1、2、3、4个比特位,这些比特位的取值分别为:0、0、0、0,则合并后的节点表示第1-4个比特位,合并后的节点中存储的内容为:0000。

也就是说,上述s204-s208实现的是:根据排序结果中每一非首位地址网段对已创建二叉树结构的更新。

由以上可见,本实施例提供的方案中,获得多个已知地址网段后,对多个已知地址网段进行排序,获得排序结果,基于排序结果中首位地址网段的网段前缀构建二叉树结构后,采用排序结果中每一非首位地址网段依次更新上述构建的二叉树结构,最终得到前述预先创建的树形结构。由于上述树形结构是基于排序后的地址网段构建的,这样所构建的树形结构抽取出了各个网段的共同部分,针对共同部分存储一次即可,无需重复存储。另外,生成二叉树后,还对二叉树中的一些节点进行合并,也就是一个节点中可能会表示地址网段的多个比特位,进而压缩了二叉树的高度,从而减少了cpu资源的占用率。

本申请的一个实施例中,在上述s205将由非首位地址网段的网段前缀中生长节点所对应位置后的各比特位构造的二叉树结构作为生长节点的子树之后,还可以判断生长节点的子树是否为第一方向的子树,若为是,从生长节点在第一方向相反的第二方向的子树中,查找第一个合并节点,将从生长节点到所确定合并节点所经分支上的节点合并为一个节点。

具体的,在按照升序对多个已知地址网段进行排序得到排序结果的情况下,进行节点合并之前,由于二叉树中每一子节点的左孩子节点存储的内容为0,右孩子节点存储的内容为1,所以一个子节点的左孩子节点对应的地址网段要小于该子节点的右孩子节点对应的地址网段,又由于排序是按照升序进行排列的,所以排序结果中地址网段的ip地址是越来越大的,因此,基于排序结果中的各个已知地址网段创建二叉树的过程中,一旦所创建二叉树结构中一个子节点存在右孩子节点时,这一子节点的左孩子节点不会再有孩子节点,所以,上述第一方向为:右方向。这种情况下,上述第二方向为左方向。

在上述情况的基础上,本申请的一个实施例中,由于排序结果中地址网段的ip地址是越来越大的,也就是,基于每一非首位地址网段更新已创建的二叉树结构时,当前被操作的非首位地址网段总是最小的地址网段,所以当上述生长节点的子树是生长节点在右方向的子树时,意味着生长节点的左子树上必定不会再新增节点,因此可以对生长节点的左子树进行节点合并。

具体的,在按照降序对多个已知地址网段进行排序得到排序结果的情况下,进行节点合并之前,由于二叉树中每一子节点的左孩子节点存储的内容为0,右孩子节点存储的内容为1,所以一个节点的左孩子节点对应的地址网段要小于该子接待你的右孩子节点对应的地址网段,又由于排序是按照降序进行排列,所以排序结果中地址网段的ip地址是越来越小的,因此,基于排序结果中的各个已知地址网段创建二叉树的过程中,一旦所创建二叉树结构中一个子节点存在左孩子节点时,这一子节点的右孩子节点不会再有孩子节点,所以,上述第一方向为:左方向。这种情况下,上述第二方向为右方向。

在上述情况的基础上,本申请的一个实施例中,由于排序结果中地址网段的ip地址是越来越小的,也就是,基于每一非首位地址网段更新已创建的二叉树结构时,当前被操作的非首位地址网段总是最大的地址网段,所以当上述生长节点的子树是生长节点在左方向的子树时,意味着生长节点的右子树上必定不会再新增节点,因此可以对生长节点的右子树进行节点合并。

基于上述情况,前述s206从具有左右孩子节点的子节点、所对应地址网段预先关联有网段规则的子节点中,确定结束合并节点时,可以从具有左右孩子节点的子节点、所对应地址网段预先关联有网段规则的子节点、合并节点所在层的上一层包含的子节点中,确定结束合并节点。

由以上可见,本实施例提供的方案中,在针对每一非首位地址网段更新二叉树的过程中,边更新边合并二叉树中的节点,从而可以减少二叉树所占用的存储空间,从而降低所创建树结构对存储资源的需求。

下面再结合图3a、图3b和图3c对本申请实施例中所提及的节点合并过程进行介绍。

假设,对已知地址网段进行排序时,是以地址网段的ip地址为第一优先级、网段前缀长度为第二优先级,针对ip地址和网段前缀长度均按照升序对多个已知地址网段进行排序。

根据排序结果中地址网段iff0::210/124更新后的二叉树结构如图3a左侧所示。在表示第123个比特位的子节点新增的子树为右子树,所以该表示第123个比特位的子节点的左子树可以进行节点合并,合并结果如图3a右侧所示。也就是,对表示第124-128个比特位的子节点进行合并,合并后的节点表示的是第124-128个比特位,合并后的节点中存储的内容为:00000。

在图3a右侧所示二叉树的基础上,根据排序结果中地址网段iff0::280/121更新二叉树后,所得二叉树如图3b左侧所示。在表示第120个比特位的子节点新增的子树为右子树,所以该表示第120个比特位的子节点的左子树可以进行节点合并。由于表示第120个比特位的子节点的左子树中包括进行节点合并而生成的合并节点,所以本次进行节点合并的节点包括表示第121-123个比特位的子节点,合并结果如图3b右侧所示。也就是,对表示第121-123个比特位的子节点进行合并,合并后的节点表示的是第121-123个比特位,合并后的节点中存储的内容为:000。

从根节点开始对图3b右侧图所示的二叉树进行节点合并的过程如下:

从图3b右侧图所示的二叉树可见,表示第1个比特位的子节点为第一层子节点,可以作为起始合并节点,该二叉树结构中表示第116个比特位的子节点挂载有规则列表,为预先关联有网段规则的子节点,可以作为结束合并节点,因此,可以与表示第1个比特位的子节点形成一对起始合并节点和结束合并节点,所以对表示第1至第116个比特位的节点进行合并。

由于表示第117个比特位的子节点挂载有规则列表,为预先关联有网段规则的子节点,可以作为结束合并节点,但是无法找到与其配对的起始合并节点,也就是无法形成一对起始合并节点和结束合并节点,该子节点不进行节点合并。

表示第118个比特位的子节点为非合并节点,可以作为起始合并节点,表示第120个比特位的子节点具有左右两个孩子节点,可以作为结束合并节点,表示第118个比特位的子节点和表示第120个比特位的子节点可以形成一对起始合并节点和结束合并节点,所以对表示第118至120个比特位的子节点进行合并,合并后的节点表示的是第118-120个比特位,合并后的节点中存储的内容为:010。

由于后续表示第121-123、124-128个比特位的子节点为合并节点,不能作为起始合并节点和结束合并节点,因此,不进行节点合并,至此合并过程结束。合并结果如图3c所示。

上述举例中,各个进行节点合并得到的节点均可以添加合并完成标记,以标识这些节点是经过节点合并得到的节点。

与上述网段查找方法相对应,本申请实施例还提供了一种网段查找装置。

图4为本申请实施例提供的一种网段查找装置的结构示意图,所述装置通过多个已知地址网段预先创建树形结构,所述树形结构中除根节点外的任一子节点表示至少一个比特位,且每个子节点对应一个地址网段,所述地址网段的网段前缀为:从根节点到子节点所经分支上的所有节点各自表示的比特位的值按经过顺序排列的二进制数;

所述网段查找装置包括:

网段获取模块401,用于获取待匹配地址网段;

节点查找模块402,用于从所述树形结构中,与所述根节点连接的第一层子节点开始,通过比较子节点所表示的比特位与所述待匹配地址网段中对应位置的比特位是否一致,查找出所述树形结构中是否存在与所述待匹配地址网段对应的目标节点;

规则获取模块403,用于如果所述节点查找模块查找到所述目标节点,获取与所述目标节点预先关联的网段规则。

本申请的一个实施例中,所述树形结构为二叉树结构;

所述树形结构中包括具有以下特征的子节点:

所对应的地址网段不属于多个所述已知地址网段之一;或者;

不具有兄弟节点;或者;

具有两个孩子节点,且其中至少一个孩子节点所对应的地址网段属于多个所述已知地址网段之一。

由以上可见,本施例提供的方案中,由于预先创建的树形结构中每一子节点所对应地址网段的网段前缀为:从根节点到子节点所经分支上的所有节点各自表示的比特位的值按经过顺序排列的二进制数,所以在查找与待匹配地址网段相匹配的网段规则时,可以直接通过比较上述树形结构中子节点所表示的比特位与待匹配地址网段中对应位置的比特位是否一致的方式,找到目标节点,而目标节点预先关联的网段规则即为与上述待匹配地址网段相匹配的网段规则,这样也就找到了所有与待匹配地址网段匹配的全部网段规则。与现有技术相比,无需再针对网段规则进行逐一匹配,因而能够提高查找效率。

本申请的一个实施例,上述地址网段查找装置还可以包括树构建模块。

参见图5,提供了一种构建树结构的装置的结构示意图。该装置中上述树构建模块,包括:

网段获取单元501,用于获取多个所述已知地址网段,其中,所述已知地址网段预先关联网段规则;

网段排序单元502,用于以地址网段的ip地址为第一优先级、网段前缀长度为第二优先级,对多个所述已知地址网段进行排序,获得排序结果;

树构建单元503,用于构建第一二进制数为所述排序结果中首位地址网段的网段前缀的二叉树结构,所述第一二进制数为:从根节点到叶子节点所经分支上的所有子节点各自表示的比特位的值按经过顺序排列的二进制数,每一子节点表示一个比特位;

生长节点查找单元504,用于针对所述排序结果中每一非首位地址网段,从所述二叉树结构中与根节点连接的第一层子节点开始,查找所表示比特位与非首位地址网段中对应位置的比特位一致、且不存在孩子节点或孩子节点所表示比特位与非首位地址网段中对应位置的比特位不一致的子节点,作为生长节点;

子树确定单元505,用于将由非首位地址网段的网段前缀中所述生长节点所对应位置后的各比特位构造的二叉树结构作为所述生长节点的子树,其中,所构造二叉树结构中每一节点表示一个比特位、且表示高比特位的节点是表示低比特位的节点的父节点;

起始节点确定单元506,用于按照从根节点到子节点的顺序,从所述第一层子节点且不属于合并节点的子节点中,确定起始合并节点;

结束节点确定单元507,用于从具有左右孩子节点的子节点且所对应地址网段预先关联有网段规则的子节点中,确定结束合并节点;

第一节点合并单元508,用于将所述起始合并节点和结束合并节点之间的节点合并为一个节点。

本申请的一个实施例中,上述树构建模块还包括:

方向判断单元,用于所述子树确定单元确定所述所述生长节点的子树之后,判断所述生长节点的子树是否为第一方向的子树;

合并节点查找单元,用于在所述方向判断单元的判断结果为是时,从所述生长节点在所述第一方向相反的第二方向的子树中,查找第一个合并节点;

第二节点合并单元,用于将从所述生长节点到所确定合并节点所经分支上的节点合并为一个节点;

所述结束节点确定单元,具体用于从具有左右孩子节点的子节点、所对应地址网段预先关联有网段规则的子节点、合并节点所在层的上一层包含的子节点中,确定结束合并节点。

本申请的一个实施例中,所述网段排序单元,具体用于以地址网段的ip地址为第一优先级,按照升序方式对多个所述已知地址网段进行排序;

当存在多个所述已知地址网段具有相同的第一优先级时,以网段前缀长度为第二优先级,按照升序方式,对具有相同的第一优先级的多个所述已知地址网段进行排序,获得排序结果。

由以上可见,上述各个实施例提供的方案中,获得多个已知地址网段后,对多个已知地址网段进行排序,获得排序结果,基于排序结果中首位地址网段的网段前缀构建二叉树结构后,采用排序结果中每一非首位地址网段依次更新上述构建的二叉树结构,最终得到前述预先创建的树形结构。由于上述树形结构是基于排序后的地址网段构建的,这样所构建的树形结构抽取出了各个网段的共同部分,针对共同部分存储一次即可,无需重复存储。另外,生成二叉树后,还对二叉树中的一些节点进行合并,也就是一个节点中可能会表示地址网段的多个比特位,进而压缩了二叉树的高度,从而减少了cpu资源的占用率。

与前述网段查找方法相对应,本申请实施例还提供了一种电子设备。

图6为本申请实施例提供的一种电子设备的结构示意图,该电子设备包括:处理器601和机器可读存储介质602,所述机器可读存储介质602存储有能够被所述处理器601执行的机器可执行指令,所述处理器601被所述机器可执行指令促使:实现本申请实施例所述的网段查找方法。

本申请的一个实施例中,提供了一种网段查找方法,通过多个已知地址网段预先创建树形结构,所述树形结构中除根节点外的任一子节点表示至少一个比特位,且每个子节点对应一个地址网段,所述地址网段的网段前缀为:从根节点到子节点所经分支上的所有节点各自表示的比特位的值按经过顺序排列的二进制数;

所述方法包括:

获取待匹配地址网段;

从所述树形结构中,与所述根节点连接的第一层子节点开始,通过比较子节点所表示的比特位与所述待匹配地址网段中对应位置的比特位是否一致,查找出所述树形结构中是否存在与所述待匹配地址网段对应的目标节点;

如果查找到所述目标节点,获取与所述目标节点预先关联的网段规则。

需要说明的是,上述处理器601被机器可执行指令促使实现的网段查找方法的其他实现方式,与前述方法实施例部分所提及的实施例相同,这里不再赘述。

上述机器可读存储介质可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non-volatilememory,nvm),例如至少一个磁盘存储器。可选的,上述机器可读存储介质还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

由以上可见,由于应用本实施例提供的电子设备查找网段规则时,预先创建的树形结构中每一子节点所对应地址网段的网段前缀为:从根节点到子节点所经分支上的所有节点各自表示的比特位的值按经过顺序排列的二进制数,所以在查找与待匹配地址网段相匹配的网段规则时,可以直接通过比较上述树形结构中子节点所表示的比特位与待匹配地址网段中对应位置的比特位是否一致的方式,找到目标节点,而目标节点预先关联的网段规则即为与上述待匹配地址网段相匹配的网段规则,这样也就找到了所有与待匹配地址网段匹配的全部网段规则。与现有技术相比,无需再针对网段规则进行逐一匹配,因而能够提高查找效率。

与前述网段查找方法相对应,本申请实施例还提供了一种机器可读存储介质,存储有机器可执行指令,在被处理器调用和执行时,所述机器可执行指令促使所述处理器:实现本申请实施例所述的网段查找方法。

本申请的一个实施例中,提供了一种网段查找方法,通过多个已知地址网段预先创建树形结构,所述树形结构中除根节点外的任一子节点表示至少一个比特位,且每个子节点对应一个地址网段,所述地址网段的网段前缀为:从根节点到子节点所经分支上的所有节点各自表示的比特位的值按经过顺序排列的二进制数;

所述方法包括:

获取待匹配地址网段;

从所述树形结构中,与所述根节点连接的第一层子节点开始,通过比较子节点所表示的比特位与所述待匹配地址网段中对应位置的比特位是否一致,查找出所述树形结构中是否存在与所述待匹配地址网段对应的目标节点;

如果查找到所述目标节点,获取与所述目标节点预先关联的网段规则。

需要说明的是,上述机器可执行指令促使处理器实现的信息存储方法的其他实现方式,与前述方法实施例部分所提及的实施例相同,这里不再赘述。

由以上可见,由于执行本实施例提供的机器可读存储介质中存储的机器可执行指令查找网段规则时,预先创建的树形结构中每一子节点所对应地址网段的网段前缀为:从根节点到子节点所经分支上的所有节点各自表示的比特位的值按经过顺序排列的二进制数,所以在查找与待匹配地址网段相匹配的网段规则时,可以直接通过比较上述树形结构中子节点所表示的比特位与待匹配地址网段中对应位置的比特位是否一致的方式,找到目标节点,而目标节点预先关联的网段规则即为与上述待匹配地址网段相匹配的网段规则,这样也就找到了所有与待匹配地址网段匹配的全部网段规则。与现有技术相比,无需再针对网段规则进行逐一匹配,因而能够提高查找效率。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备和机器可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1