一种访问控制列表ACL的实现方法及装置与流程

文档序号:12182768
一种访问控制列表ACL的实现方法及装置与流程

本发明涉及分组传输领域,尤其涉及一种访问控制列表ACL的实现方法及装置。



背景技术:

随着网络技术的发展,越来越多的网络设备需要支持快速准确的报文分类,如安全网关、边缘路由器、核心路由器等。未来网络的发展趋势需要为用户提供更好的服务质量,而诸如防火墙、区分服务、虚拟专网VPN、基于策略的路由等提高服务质量的机制都是基于高效访问控制列表(ACL,Access Control List)技术之上的。此外,随着光纤通信技术的发展,链路带宽和传输速率已不再成为问题,路由转发设备正在成为网络瓶颈,而ACL更是关键之关键。因此高效快速的实现ACL对于未来互联网的发展具有极其重要的意义。

现行分组传输设备采用三态内容寻址存储器(TCAM,Ternary Content Addressable Memory)实现ACL。采用TCAM实现ACL的优点在于实现简单,但是TCAM也有许多不足的地方。首先,TCAM在同一时钟周期内将待查找的关键字和TCAM的每一个条目进行比较,导致功耗比较大;第二是TCAM器件成本比较高,价格昂贵。因此,现有技术中并不存在一种较为合适的ACL的实现方法。



技术实现要素:

有鉴于此,本发明实施例期望提供一种访问控制列表ACL的实现方法及装置,以提供一种新的实现ACL的方法,避免TCAM所导致的功耗大、成本高的问题。

为达到上述目的,本发明的技术方案是这样实现的:

第一方面,本发明实施例提供一种访问控制列表ACL的实现方法,包括:步骤A、将从同一数据包中提取出的每一个待查找关键字划分为M个关键字段,其中,M为大于等于1的整数;步骤B、至少以所述M个关键字段中的第i个关键字段作为地址访问预设的M个规则表中的第i个规则表,获得所述第i个关键字段对应的规则节点类型,其中,i=1、2、3、4、…、M,所述M个规则表对应于同一维度的规则;步骤C、当所述第i个关键字段对应的规则节点类型是叶子节点时,将所述第i个关键字段对应的规则编号确定为所述M个关键字段对应的待查找关键字的规则编号,转到执行步骤E;步骤D、当所述第i个关键字段对应的规则节点类型为中间节点或混合节点时,将i取值加1,转到执行步骤B;步骤E、在确定所述待查找关键字的规则编号后,根据所述待查找关键字的规则编号,获得所述待查找关键字的规则编号对应的动作。

在上述方案中,当i=2、3、…、M时,在所述步骤B之后,所述方法还包括:当所述第i个关键字段对应的规则节点类型为无效节点,且所述第i-1个关键字段对应的规则节点类型为混合节点类型时,将所述第i-1个关键字段对应的规则编号确定为所述M个关键字段对应的待查找关键字的规则编号,转到执行步骤E。

在上述方案中,当i=1时,所述步骤B,包括:以第1个关键字段作为地址访问预设的M个规则表中的第1个规则表。

在上述方案中,当i=2、3、…、M时,所述步骤B,包括:以所述第i-1个关键字段的下一级索引和所述第i个关键字段为地址访问所述第i个规则表。

在上述方案中,所述步骤D,包括:当所述第i个关键字段对应的规则节点类型为中间节点时,将i取值加1,转到执行所述步骤B;当所述第i个关键字段对应的规则节点类型为混合节点时,记录所述第i个关键字段对应的规则编号,并将i取值加1,转到执行所述步骤B。

在上述方案中,所述方法还包括:将同一维度的规则对应的关键字分成M段;当所述关键字的长度等于第1个关键字段的长度时,将所述第1个关键字段作为地址读取第1个规则表,获取并管理对应的节点信息;当所述关键字的 长度小于所述第1个关键字段的长度时,将本次的剩余字段进行扩充,得到关键字剩余字段,以所述关键字剩余字段为地址分别读取所述第1个规则表,获取并管理对应的节点信息,其中,所述本次的剩余字段为所述关键字中需要关心的关键字段;当所述关键字的长度大于所述第1个关键字段的长度时,将所述第1个关键字段作为地址读取所述第1个规则表,获取并管理对应的节点信息。

在上述方案中,所述方法还包括:针对所述M个关键字段中的第i个关键字段,其中,i=2、3、…、M,依次执行以下步骤:计算前一次的差值与所述第i个关键字段长度的差值,其中,所述前一次的差值所述关键字中需要关心的关键字段长度与所述第i个关键字段长度的差值;当所述差值等于所述第i个关键字段的长度时,将所述第i-1个关键字段的下一级索引和所述第i个关键字段作为地址读取第i个规则表,获取并管理对应的节点信息;当所述差值小于所述第i个关键字段的长度时,将本次的剩余字段进行扩充,得到关键字剩余字段,以所述关键字剩余字段为地址分别读取所述第i个规则表,获取并管理对应的节点信息,其中,所述本次的剩余字段为所述关键字中需要关心的关键字段除去前i个关键字段之后剩余的字段;当所述差值大于所述第i个关键字段的长度时,将所述第i-1个关键字段的下一级索引和所述第i个关键字段作为地址读取所述第i个规则表,获取并管理对应的节点信息。

在上述方案中,所述方法还包括:当配置规则完成更新之后,基于新的配置规则,更新M个备份规则表,其中,所述M个备份规则表与所述M个规则表一一对应;在所述M个备份规则表完成更新之后,切换至访问更新后的M个备份规则表,并更新所述M个规则表;在所述M个规则表完成更新之后,回切至访问更新后的M个备份规则表。

在上述方案中,在所述步骤E之后,所述方法还包括:将所述每一个待查找关键字的规则编号对应的动作进行归并,获得所述数据包的ACL结果。

第二方面,本发明实施例提供一种访问控制列表ACL的实现装置,包括:规则表模块、调度模块、访问模块、确定模块、循环模块、获得模块;其中, 所述规则表模块,用于存储同一维度的规则所对应的M个规则表,M为大于等于1的整数;所述调度模块,用于将从同一数据包中提取出的每一个待查找关键字划分为M个关键字段;所述访问模块,用于至少以所述M个关键字段中的第i个关键字段作为地址访问预设的M个规则表中的第i个规则表,获得所述第i个关键字段对应的规则节点类型,其中,i=1、2、3、4、…、M;所述确定模块,用于当所述第i个关键字段对应的规则节点类型是叶子节点时,将所述第i个关键字段对应的规则编号确定为所述M个关键字段对应的待查找关键字的规则编号,触发所述获得模块;所述循环模块,用于当所述第i个关键字段对应的规则节点类型为中间节点或混合节点时,将i取值加1,触发所述访问模块;所述获得模块,用于在确定所述待查找关键字的规则编号后,根据所述待查找关键字的规则编号,获得所述待查找关键字的规则编号对应的动作。

在上述方案中,当i=2、3、…、M时,所述确定模块,还用于当所述第i个关键字段对应的规则节点类型为无效节点,且第i-1个关键字段对应的规则节点类型为混合节点时,将所述第i-1个关键字段对应的规则编号确定为所述M个关键字段对应的待查找关键字的规则编号,触发所述获得模块。

在上述方案中,当i=1时,所述访问模块,用于以第1个关键字段作为地址访问预设的M个规则表中的第1个规则表。

在上述方案中,当i=2、3、…、M时,所述访问模块,用于以所述第i-1个关键字段的下一级索引和所述第i个关键字段为地址访问所述第i个规则表。

在上述方案中,所述循环模块,用于当所述第i个关键字段对应的规则节点类型为中间节点时,将i取值加1,触发所述访问模块;还用于当所述第i个关键字段对应的规则节点类型为混合节点时,记录所述第i个关键字段对应的规则编号,并将i取值加1,触发所述访问模块。

在上述方案中,所述装置还包括:规则表生成模块,用于将同一维度的规则对应的关键字分成M段;当所述关键字的长度等于第1个关键字段的长度时,将所述第1个关键字段作为地址读取第1个规则表,获取并管理对应的节点信息;当所述关键字的长度小于所述第1个关键字段的长度时,将本次的剩余字 段进行扩充,得到关键字剩余字段,以所述关键字剩余字段为地址分别读取所述第1个规则表,获取并管理对应的节点信息,其中,所述本次的剩余字段为所述关键字中需要关心的关键字段;当所述关键字的长度大于所述第1个关键字段的长度时,将所述第1个关键字段作为地址读取所述第1个规则表,获取并管理对应的节点信息。

在上述方案中,所述规则表生成模块,用于针对所述M个关键字段中的第i个关键字段,计算前一次的差值与所述第i个关键字段长度的差值,其中,所述前一次的差值所述关键字中需要关心的关键字段长度与所述第i个关键字段长度的差值,i=2、3、…、M;当所述差值等于所述第i个关键字段的长度时,将所述第i-1个关键字段的下一级索引和所述第i个关键字段作为地址读取第i个规则表,获取并管理对应的节点信息;当所述差值小于所述第i个关键字段的长度时,将本次的剩余字段进行扩充,得到关键字剩余字段,以所述关键字剩余字段为地址分别读取所述第i个规则表,获取并管理对应的节点信息,其中,所述本次的剩余字段为所述关键字中需要关心的关键字段除去前i个关键字段之后剩余的字段;当所述差值大于所述第i个关键字段的长度时,将所述第i-1个关键字段的下一级索引和所述第i个关键字段作为地址读取所述第i个规则表,获取并管理对应的节点信息。

在上述方案中,所述规则表模块,还用于当配置规则完成更新之后,基于新的配置规则,更新M个备份规则表,其中,所述M个备份规则表与所述M个规则表一一对应;相应地,所述访问模块,还用于在所述M个备份规则表完成更新之后,切换至访问更新后的M个备份规则表,并更新所述M个规则表;在所述M个规则表完成更新之后,回切至访问更新后的M个备份规则表。

在上述方案中,所述装置还包括:归并模块,用于在多个所述获得模块获得所述每一个待查找关键字的规则编号对应的动作之后,将所述动作进行归并,获得所述数据包的ACL结果。

本发明实施例提供了一种访问控制列表ACL的实现方法及装置,首先,将从同一数据包中提取的每一个待查找关键字划分为M个关键字段,然后,以M 个关键字段中第i个关键字段作为地址访问预设的M个规则表中的第i个规则表,至少获得第i个关键字段对应的规则类型,这里,M个规则表对应一个规则,接着,根据第i个关键字段对应的规则类型,确定待查找关键字的规则编号,最后,根据确定出来的规则编号,获得待查找关键字对应的动作,即确定了该规则对应的动作,实现了ACL。如此,就避免了TCAM所导致的功耗大、成本高的问题;

进一步地,由于将一个待查找关键字划分为M个关键字段,当第i个关键字段对应的规则节点类型为叶子节点时,就将该关键字段对应的规则编号确定为该待查找关键字的规则编号,如此,就不必对整个待查找关键字进行查找,大大减少了数据处理量,进而提高了查找效率;

进一步地,由于对同一数据包中的每一个关键字都进行划分M个关键字段,并进行后续的处理,这里的关键字可以为一个维度的关键字,也可以为多个维度的关键字,也就是说可以实现多维度的ACL。

附图说明

图1为本发明实施例中的ACL的实现装置的第一种结构示意图;

图2为本发明实施例中的ACL的实现装置的第二种结构示意图;

图3为本发明实施例中的ACL的实现装置的第三种结构示意图;

图4为本发明实施例中的ACL的实现方法的流程示意图;

图5为本发明实施例中的生成规则表的一种方法的流程示意图;

图6为本发明实施例中的生成规则表的另一种方法的流程示意图;

图7为本发明实施例中的规则表的示意图;

图8为本发明实施例中的动作表的示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

首先,需要说明的是,在分组数据传输时,根据数据包特定关键字段将数据包分成不同的流。分成流后,可以针对该流进行各种处理,例如丢弃或转发,限速,重新分配优先级等,这种处理称之为动作。通常一个规则加上对应动作称之为一个ACL。

举例来说,一般业界标准组成规则的关键字段有5个,通常也称5元组,这5个关键字是:IP报文的源地址、IP报文的目的地址、IP报文的承载协议类型、TCP或UDP源端口号、TCP或UDP的目的端口号。在具体实现中,使用的关键字还可以有其他扩展,如COS、TOS、DSCP、虚拟局域网索引VLANID、源和目的MAC地址等,本发明不做具体限定。上述各个关键字可以任意组合,并且可以设置范围限制,例如,一个规则可以是:TCP端口1000~2000+IP地址255.122.122.*(*为不需要关心的字段)。

下面对本发明实施例提供的ACL的实现方法进行说明。

本发明实施例提供一种ACL的实现装置中,参见图1所示,该装置包括:规则表模块1、调度模块2、访问模块31、确定模块32、循环模块33、获得模块34;

在实际应用中,上述规则表模块1,可以为一个模块,可以为多个模块,每一个模块与一个维度的规则对应,每一个模块中存储有M个规则表,M为大于等于1的整数;

上述访问模块31、确定模块32、循环模块33以及获得模块34设置在搜索引擎中,参见图2所示,一个搜索引擎3与一个规则表模块1连接,也就是说,针对同一个数据包,一个搜索引擎3能够针对一个维度的规则进行搜索。那么,当上述装置中包含多个搜索引擎3时,就表示该装置能够针对同一数据包的多个维度的规则进行的并行搜索,大大提高了ACL实现的效率。

此时,当ACL的实现装置进行多个维度搜索时,该装置还就可以包括:归并模块4,用于将针对同一个数据包的多个维度的规则所对应的动作进行归并,以获得该数据包的ACL结果。

进一步地,参见图3所示,该装置还可以同时针对多个数据包并行进行一 维度或者多维度的搜索,如此,大大提高了并行数据处理能力,使得处理速度大提升,能够很好的保证ACL的实时性。

当ACL的实现装置对多个数据包进行处理时,该装置还可以包括:轮询调度模块,用于对多个数据包的ACL结果进行调度,输出给下一级处理模块。

结合本发明实施例,上述规则表模块,用于存储同一维度的规则所对应的M个规则表;

上述调度模块,用于将从同一数据包中提取出的每一个待查找关键字划分为M个关键字段,并分发给对应的搜索引擎;

上述访问模块,用于至少以M个关键字段中的第i个关键字段作为地址访问预设的M个规则表中的第i个规则表,获得第i个关键字段对应的规则节点类型,其中,i=1、2、3、4、…、M,M个规则表与一个规则对应;

上述确定模块,用于当第i个关键字段对应的规则节点类型是叶子节点时,将第i个关键字段对应的规则编号确定为M个关键字段对应的待查找关键字的规则编号,触发上述获得模块;

上述循环模块,用于当第i个关键字段对应的规则节点类型为中间节点或混合节点时,将i取值加1,触发上述访问模块;

上述获得模块,用于在确定待查找关键字的规则编号后,根据待查找关键字的规则编号,获得待查找关键字的规则编号对应的动作。

下面结合上述系统,对本发明实施例提供的ACL的实现方法进行说明。

参见图4所示,该方法包括:

S401:将从同一数据包中提取出的每一个待查找关键字划分为M个关键字段;

具体来说,调度模块对于同一个数据包,按照预先设定的配置信息,从该数据包中解析出一个维度规则下的待查找关键字,例如,提取数据包中的输入端口,目的IP地址和IP优先级TOS组合成{输入端口,目的IP地址,IP优先级TOS}记为待查找关键字A。然后,将待查找关键字划分M个关键字段,这里,对于关键字段的划分可以根据预先人为设定的划分策略进行,以实际应用 为准,本发明不做具体限定。

S402:至少以M个关键字段中的第i个关键字段作为地址访问预设的M个规则表中的第i个规则表,获得第i个关键字段对应的规则节点类型;

具体来说,当调度模块划分好关键字段后,将这些字段发送给上述维度的规则所对应的搜索引擎,那么,搜索引擎中的访问模块以M个关键字段中的第i个关键字段作为地址访问规则表模块中预先存储的M个规则表中的第i个规则表,获得第i个关键字段对应的规则节点类型,其中,i=1、2、3、4、…、M;可见,关键字段与规则表是一一对应的,规则、待查找关键、搜索引擎以及规则表模块是一一对应的。

在实际应用中,通过访问规则表,除了可以获得第i个关键字段对应的规则节点类型,还可以获得第i个关键字段对应的下一级索引以及规则编号。当然,还可以有其它属性参数,如当前分段长度,本发明不做具体限定。

另外,由于第1个关键字段为初始字段,所以,访问模块可以以第1个关键字段作为地址访问第1个规则表,获得第1个关键字段对应的规则节点类型;而对于其它关键字段,即第2、3、…、M个关键字段,访问模块可以以该关键字段的上一级索引以及该关键字段作为地址访问对应的规则表。

进一步地,上述每一个规则表模块中的M个规则表都对应于同一维度的规则在规则表模块中存储的规则表是预置好的,那么,在S401之前,还需要针对同一维度的规则,生成对应的M个规则表。

那么,参见图5所示,生成规则表的方法步骤包括:

S501:将同一维度规则对应的关键字分成M段;

这里,上述关键字记为B,其比特位宽为N,M段关键字段记为Bi,B={B1,B2,…,BM},i=1、2、…、M,Bi的长度记为Ni,N1+N2+…+NM=N。在实际应用中,Ni的长度可以根据具体实现进行调整,每关键字段的长度Ni可以相等也可以不等。

进一步地,将上述关键字B中需要关心的关键字段记为C,长度为P,不需要关心的关键字段记为D,长度为Q,那么,B={C,D},P+Q=N。

例如,关键字B为IP地址为168.152.128.*,长度为32比特,将其平均分成四段,每段长度为8比特。关键字B中需要关心的关键字段C为168.152.128,长度为24比特,不需要关心的关键字段D为*,长度为8比特。

S502:当关键字的长度等于第1个关键字段的长度时,将第1个关键字段作为地址读取第1个规则表,获取并管理对应的节点信息;

这里,上述节点信息包括:节点类型、规则编号、下一级索引以及当前分段长度。当然,还可以包含其它内容,本发明不做具体限定。在规则表中,一个关键字段对应的节点信息为一个条目。

那么,上述管理节点信息的步骤可以包括:当第1个关键字段在第1个规则表中所对应的节点类型为无效节点时,将节点类型更改为叶子节点,并写入关键字对应的规则编号以及将当前分段长度设置为该关键字中需要关心的关键字段长度;

当第1个关键字段在第1个规则表中所对应的节点类型为中间节点时,将节点类型更改为混合节点,并写入关键字对应的规则编号,将当前分段长度设置为该关键字中需要关心的关键字段长度;

当第1个关键字段在第1个规则表中所对应的节点类型为混合节点或叶子节点时,保持节点类型不变,并写入关键字对应的规则编号,将当前分段长度设置为该关键字中需要关心的关键字段长度。

S503:当关键字的长度小于第1个关键字段的长度时,将本次的剩余字段进行扩充,得到关键字剩余字段,以关键字剩余字段为地址分别读取第1个规则表,获取并管理对应的节点信息;

那么,上述管理节点信息的步骤可以包括:当第1个关键字段在第1个规则表中所对应的节点类型为无效节点时,将节点类型更改为叶子节点,并写入关键字对应的规则编号以及将当前分段长度设置为该关键字中需要关心的关键字段长度;

这里,上述本次剩余字段是指关键字中需要关心的关键字段。

当第1个关键字段在第1个规则表中所对应的节点类型为中间节点时,将 节点类型更改为混合节点,并写入关键字对应的规则编号,将当前分段长度设置为该关键字中需要关心的关键字段长度;

当第1个关键字段在第1个规则表中所对应的节点类型为混合节点或叶子节点时,保持节点类型不变,同时,比较关键字中需要关心的关键字段长度和当前分段长度的大小,如果需要关心的关键字段长度小于当前分段长度,则保持原来的规则编号和当前分段长度不变,否则,写入关键字对应的规则编号以及将当前分段长度设置为该关键字中需要关心的关键字段长度。

需要说明的是,上述将本次剩余字段进行扩充,得到关键字剩余字段,具体为:用第1个关键字段长度N1减去关键字中需要关心的关键字段长度P,获得差值x,将本次剩余字段进行扩充,得到2x个关键字剩余字段C11={C1,0},C12={C1,1},……,C12x={C,(2x-1)}。

S504:当关键字的长度大于第1个关键字段的长度时,将第1个关键字段作为地址读取第1个规则表,获取并管理对应的节点信息。

这里,上述管理节点信息的步骤可以包括:当第1个关键字段在第1个规则表中所对应的节点类型为无效节点时,将节点类型更改为中间节点,并写入第1个关键字段对应的下一级索引;当第1个关键字段在第1个规则表中所对应的节点类型为中间节点或混合节点时,保持节点信息不变;当第1个关键字段在第1个规则表中所对应的节点类型为叶子节点时,则将节点类型更改为混合节点,并写入第1个关键字段对应的下一级索引。

接下来,针对第i个关键字段,i=2、3、…、M,在S504之后,参见图6所示,该方法还包括:

S601:计算前一次的差值与第i个关键字段长度之差值;

这里,前一次的差值是指:当i=1时,前一次的差值为关键字中需要关心的关键字段长度;当i=2时,前一次的差值为关键字中需要关心的关键字段长度与第i个关键字段长度的差值,依次迭代,以此类推。

S602:当差值等于第i个关键字段的长度时,将第i-1个关键字段的下一级 索引和第i个关键字段作为地址读取第i个规则表,获取并管理对应的节点信息;

那么,上述管理节点信息的步骤可以包括:当第i个关键字段在第i个规则表中所对应的节点类型为无效节点时,将节点类型更改为叶子节点,并写入关键字对应的规则编号以及将当前分段长度设置为上述差值;

当第i个关键字段在第i个规则表中所对应的节点类型为中间节点时,将节点类型更改为混合节点,并写入关键字对应的规则编号,将当前分段长度设置为上述差值;

当第i个关键字段在第i个规则表中所对应的节点类型为混合节点或叶子节点时,保持节点类型不变,并写入关键字对应的规则编号,将当前分段长度设置为上述差值。

S603:当差值小于第i个关键字段的长度时,将本次剩余字段进行扩充,得到关键字剩余字段,以关键字剩余字段为地址分别读取第i个规则表,获取并管理对应节点的信息;

那么,上述管理节点信息的步骤可以包括:当第i个关键字段在第i个规则表中所对应的节点类型为无效节点时,将节点类型更改为叶子节点,并写入关键字对应的规则编号以及将当前分段长度设置为上述差值;

这里,上述本次剩余字段是指关键字中需要关心的关键字段除去前i个关键字段之后剩余的字段。

当第i个关键字段在第i个规则表中所对应的节点类型为中间节点时,将节点类型更改为混合节点,并写入关键字对应的规则编号以及将当前分段长度设置为上述差值;

当第i个关键字段在第i个规则表中所对应的节点类型为混合节点或叶子节点时,保持节点类型不变,同时,比较上述差值和当前分段长度的大小,如果上述差值小于当前分段长度,则保持原来的规则编号和当前分段长度不变,否则,写入关键字对应的规则编号以及将当前分段长度设置为上述差值。

S604:当差值大于第i个关键字段的长度时,将第i-1个关键字段的下一级索引和第i个关键字段作为地址读取第i个规则表,获取并管理对应的节点信息。

这里,上述管理节点信息的步骤可以包括:当第i个关键字段在第i个规则表中所对应的节点类型为无效节点时,将节点类型更改为中间节点,并写入第i个关键字段对应的下一级索引;当第i个关键字段在第i个规则表中所对应的节点类型为中间节点或混合节点时,保持节点信息不变;当第i个关键字段在第i个规则表中所对应的节点类型为叶子节点时,则将节点类型更改为混合节点,并写入第i个关键字段对应的下一级索引。

按照S601~S604的方法一致循环,直至生成第M个规则表。此时,第i个规则表如图7所示,每个条目包括节点类型、当前分段长度、下一级索引以及规则编号。

进一步地,在规则表生成之后,将规则编号对应的动作写入到动作表中。参见图8所示,每个条目包括在该维度上的优先级,丢弃/转发指示,QoS映射,限速标识等。

S403a:当第i个关键字段对应的规则节点类型是叶子节点时,将第i个关键字段对应的规则编号确定为M个关键字段对应的待查找关键字的规则编号,转到执行S404;

具体来说,关键字段对应的规则节点类型可以为分了三种,即叶子节点、中间节点和混合节点,当通过S402获得节点类型表示第i个关键字段为叶子节点时,确定模块就将该关键字段的规则编号确定为待查找关键字的规则编号,此时,i=1、2、3、…、M。

S403b:当第i个关键字段对应的规则节点类型为中间节点或混合节点时,将i取值加1,转到执行S402;

具体来说,在S402之后,当第i个关键字段对应的规则节点类型为中间节点或混合节点时,循环模块将i取值加1,再次触发访问模块,这样,访问模块以第i+1个关键字段作为地址访问预设的第i+1个规则表,获得第i+1个关键字段对应的规则节点类型,以此类推,循环执行S402~S403b,直至获得待查找关键字的规则编号。

在具体实施过程中,当第i个关键字段对应的规则节点类型为中间节点时, 将i取值加1,转到执行S402;当第i个关键字段对应的规则节点类型为混合节点时,记录第i个关键字段对应的规则编号,并将i取值加1,转到执行S402。

在实际应用中,关键字段对应的规则节点类型还可以为无效节点,那么,当i=2、3、…、M时,当通过S402获得节点类型表示第i个关键字段为无效节点,且第i-1个关键字段为混合节点时,确定模块就将第i-1个关键字段的规则编号确定为待查找关键字的规则编号。

举例来说,取A1作为M个规则表中的规则表1的地址访问规则表1,得到了A1对应的规则节点类型,A1下一级索引和A1对应的规则编号。

当A1对应的规则节点类型是叶子节点时,则将A1对应的规则编号作为该关键字A对应的规则编号并结束本次查找;

当A1对应的节点为中间节点,用A1的下一级索引和A2作为地址访问规则表2,获取A2对应的规则节点类型,A2的下一级索引和A2规则编号,然后,执行A1相同判断和处理。

当A1对应的节点为混合节点则记录A1对应的规则编号,然后,用A1的下一级索引和A2作为地址访问规则表2,如果A2对应的节点为无效节点,则关键字A对应的规则编号为A1对应的规则编号并结束本次查找;如果A2对应的节点是叶子节点,则关键字A的规则编号为A2对应的编号并结束本次查找;如果A2对应的节点是中间节点或是混合节点则重复A1的查找方法继续用A2的下一级索引和A3作为地址访问规则表3,其处理方法和A1类似。如此重复直到获取关键字的规则编号或整个关键字查找完成为止。

S404:在确定待查找关键字的规则编号后,根据待查找关键字的规则编号,获得待查找关键字的规则编号对应的动作。

具体来说,在ACL的实现装置中还预设有如图8所示的动作表,获得单元以待查找关键字的规则编号作为地址访问动作表,获得待查找关键字对应的动作,也就是说,该维度的规则所对应的动作。

可选地,通过访问动作表还可以获得报文属性,如优先级、该维度的规则对应的QoS和QoS优先级、限速标识和限速标识优先级、报文的颜色以及丢弃 还是转发等。当然,还可以有其它报文属性,本发明不做具体限定。

至此,就实现了针对单个维度的规则的ACL的整个过程。那么,对于多个维度的规则时,归并模块将每一个维度的规则对应的待查找关键字的规则编号对应的动作进行归并,获得数据包的ACL结果。

在上述过程中,规则表模块中的规则表还可能根据用户的配置进行调整,由于规则表无法一次性更新完,所以,为了降低出错率,规则表模块中存储有M个规则表以及一一对应的M个备份规则表。那么,上述方法还包括:当配置规则完成更新之后,基于新的配置规则,更新M个备份规则表,其中,M个备份规则表与M个规则表一一对应;在M个备份规则表完成更新之后,切换至访问更新后的M个备份规则表,并更新M个规则表;在M个规则表完成更新之后,回切至访问更新后的M个备份规则表。

具体来说,在进行规则表更新的过程中,首先,更新备份规则表,在备份规则表更新完成之后,访问模块切换至访问备份规则表,同时再更新规则表,在规则表更新完毕之后,访问模块再切换至更新后的规则表,如此,就不会出现应该更新的规则没有更新而导致的出错,保证了ACL实现的正确率。

由上述可知,首先,将从同一数据包中提取的每一个待查找关键字划分为M个关键字段,然后,以M个关键字段中第i个关键字段作为地址访问预设的M个规则表中的第i个规则表,至少获得第i个关键字段对应的规则类型,这里,M个规则表对应一个规则,接着,根据第i个关键字段对应的规则类型,确定待查找关键字的规则编号,最后,根据确定出来的规则编号,获得待查找关键字对应的动作,即确定了该规则对应的动作,实现了ACL。如此,就避免了TCAM所导致的功耗大、成本高的问题;进一步地,由于将一个待查找关键字划分为M个关键字段,当第i个关键字段对应的规则节点类型为无效节点或叶子节点时,就将该关键字段对应的规则编号确定为该待查找关键字的规则编号,如此,就不必对整个待查找关键字进行查找,大大减少了数据处理量,进而提高了查找效率;进一步地,由于对同一数据包中的每一个关键字都进行划分M个关键字段,并进行后续的处理,这里的关键字可以为一个维度的关键字, 也可以为多个维度的关键字,也就是说可以实现多维度的ACL。

基于同一发明构思,本发明实施例还提供一种ACL的实现装置,与上述一个或者多个实施例中所述的ACL的实现装置一致。

参见图1所示,该装置包括:规则表模块1、调度模块2、访问模块31、确定模块32、循环模块33、获得模块34;其中,规则表模块1,用于存储同一维度的规则所对应的M个规则表,M为大于等于1的整数;调度模块2,用于将从同一数据包中提取出的每一个待查找关键字划分为M个关键字段;访问模块31,用于至少以M个关键字段中的第i个关键字段作为地址访问预设的M个规则表中的第i个规则表,获得第i个关键字段对应的规则节点类型,其中,i=1、2、3、4、…、M;确定模块32,用于当第i个关键字段对应的规则节点类型是叶子节点时,将第i个关键字段对应的规则编号确定为M个关键字段对应的待查找关键字的规则编号,触发获得模块34;循环模块33,用于当第i个关键字段对应的规则节点类型为中间节点或混合节点时,将i取值加1,触发访问模块31;获得模块34,用于在确定待查找关键字的规则编号后,根据待查找关键字的规则编号,获得待查找关键字的规则编号对应的动作。

在上述方案中,当i=2、3、…、M时,确定模块32,还用于当第i个关键字段对应的规则节点类型为无效节点,且第i-1个关键字段对应的规则节点类型为混合节点时,将所述第i-1个关键字段对应的规则编号确定为M个关键字段对应的待查找关键字的规则编号,触发获得模块34。

在上述方案中,当i=1时,访问模块31,用于以第1个关键字段作为地址访问预设的M个规则表中的第1个规则表。

在上述方案中,当i=2、3、…、M时,访问模块31,用于以第i-1个关键字段的下一级索引和第i个关键字段为地址访问第i个规则表。

在上述方案中,循环模块33,用于当第i个关键字段对应的规则节点类型为中间节点时,将i取值加1,触发访问模块31;还用于当第i个关键字段对应的规则节点类型为混合节点时,记录第i个关键字段对应的规则编号,并将i取值加1,触发访问模块31。

在上述方案中,装置还包括:规则表生成模块,用于将同一维度的规则对应的关键字分成M段;当关键字的长度等于第1个关键字段的长度时,将第1个关键字段作为地址读取第1个规则表,获取并管理对应的节点信息;当关键字的长度小于第1个关键字段的长度时,将本次的剩余字段进行扩充,得到关键字剩余字段,以关键字剩余字段为地址分别读取第1个规则表,获取并管理对应的节点信息,其中,本次的剩余字段为关键字中需要关心的关键字段;当关键字的长度大于第1个关键字段的长度时,将第1个关键字段作为地址读取第1个规则表,获取并管理对应的节点信息。

在上述方案中,规则表生成模块,用于针对M个关键字段中的第i个关键字段,计算前一次的差值与第i个关键字段长度的差值,其中,前一次的差值关键字中需要关心的关键字段长度与第i个关键字段长度的差值,i=2、3、…、M;当差值等于第i个关键字段的长度时,将第i-1个关键字段的下一级索引和第i个关键字段作为地址读取第i个规则表,获取并管理对应的节点信息;当差值小于第i个关键字段的长度时,将本次的剩余字段进行扩充,得到关键字剩余字段,以关键字剩余字段为地址分别读取第i个规则表,获取并管理对应的节点信息,其中,本次的剩余字段为关键字中需要关心的关键字段除去前i个关键字段之后剩余的字段;当差值大于第i个关键字段的长度时,将第i-1个关键字段的下一级索引和第i个关键字段作为地址读取第i个规则表,获取并管理对应的节点信息。

在上述方案中,规则表模块1,还用于当配置规则完成更新之后,基于新的配置规则,更新M个备份规则表,其中,M个备份规则表与M个规则表一一对应;相应地,访问模块31,还用于在M个备份规则表完成更新之后,切换至访问更新后的M个备份规则表,并更新M个规则表;在M个规则表完成更新之后,回切至访问更新后的M个备份规则表。

在实际应用中,上述访问模块31、确定模块32、循环模块33以及获得模块34设置在搜索引擎3中,一个搜索引擎3与一个规则表模块1连接,也就是说,针对同一个数据包,一个搜索引擎3能够针对一个维度的规则进行搜索。 那么,参见图2所示,当上述装置中包含多个搜索引擎3时,就表示该装置能够针对同一数据包的多个维度的规则进行的并行搜索,大大提高了ACL实现的效率。进一步地,参见图3所示,该装置还可以同时针对多个数据包并行进行一维度或者多维度的搜索,如此,大大提高了并行数据处理能力,使得处理速度大提升,能够很好的保证ACL的实时性。

在上述方案中,当ACL装置进行多个维度搜索时,装置还包括:归并模块,用于在多个获得模块获得每一个待查找关键字的规则编号对应的动作之后,将动作进行归并,获得数据包的ACL结果。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个 流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

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