发明内容
本发明要解决的技术问题是针对现有技术中存在的上述缺陷,提出一种成本和功耗较低的访问控制列表实现方法和装置。
本发明采用的技术方案包括:
一种访问控制列表实现装置,包括访问控制列表生成模块、存储器和访问控制列表查找模块:
其中,所述访问控制列表生成模块用于,将同一维的各规则区间映射到一个数轴上,分别得到各规则区间在该数轴上的端点,并以所述以各个规则对应的区间的端点为叶子节点,建立起树形数据结构,所述端点指左端点和右端点之一;
所述存储器用于存储所述树形数据结构;
所述访问控制列表查找模块用于,提取待查找数据包的关键字,以之查找所述树形数据结构,获取所述待查找数据包对应的规则。
进一步地,所述树形数据结构指2-3树结构。
进一步地,所述树形数据结构指二叉树结构。
进一步地,所述访问控制列表生成模块还用于,为所述树形数据结构建立备份,并将其保存于所述存储器中。
进一步地,所述以各个规则对应的区间的端点为叶子节点,建立起树形数据结构,是指分别对各个叶子节点的高M比特部分进行哈希运算,将运算结果相同的叶子节点组成一个树形数据结构,从而得到一个以上的树形数据结构;
所述提取待查找数据包的关键字,以之查找所述树形数据结构,是指对所述关键字的高M比特部分进行哈希运算,根据运算结果找到对应的树形数据结构进行查找;
0<M<N,N为规则的宽度。优选地,0<M<N/3。
进一步地,本发明所述访问控制列表实现装置还包括多维规则处理模块,该模块用于,如果所述待查找数据包的规则为多维,则首先将其规则分解为多个一维规则,对于其中任一个一维规则,交由所述访问控制列表生成模块和访问控制列表查找模块执行,然后将得到的所述待查找数据包对应的该一维规则,最后将所述待查找数据包对应的多个一维规则进行合并得到所述待查找数据包对应的多维规则;多维指二维及二维以上。
一种访问控制列表实现方法,包括如下步骤:
A、将同一维的各规则区间映射到一个数轴上,分别得到各规则区间在该数轴上的端点,并以各个规则对应的区间的端点为叶子节点,建立树形数据结构,并保存所述树形数据结构;
B、提取待查找数据包的关键字,以之查找所述树形数据结构,获取所述待查找数据包对应的规则;
所述端点指左端点和右端点之一。
进一步地,为了提高查找的效率,在步骤A中,分别对各个叶子节点的高M比特部分进行哈希运算,将运算结果相同的叶子节点组成一个树形数据结构,从而得到一个以上的树形数据结构;步骤B中,对所述关键字的高M比特部分 进行哈希运算,根据运算结果找到对应的树形数据结构进行查找;0<M<N,N为规则的宽度,也即所述关键字的宽度。优选地,0<M<N/3。
进一步地,如果所述待查找数据包的规则为多维,则首先将其规则分解为多个一维规则,对于其中任一个一维规则,执行所述步骤A和步骤B,得到所述待查找数据包对应的该一维规则,然后进行规则合并,得到所述待查找数据包对应的多维规则;多维指二维及二维以上。
本发明的有益效果为:
本发明通过建立树形数据结构对规则进行存储,当查找规则的时候,通过模糊匹配的方式即能够查找对对应的规则,不再需要采用如TCAM的查找方式,在同一时钟周期内将待查找的关键字和TCAM的每一个条目进行比较,因此能够显著节省功耗。并且,对于多维规则,本发明首先将其分解为多个一维规则,并分别采用树形数据结构进行规则存储和查找,然后将查找得到的多个一维规则进行合并,得到待查找数据包对应的多维规则,因此本发明能够扩展到任意维数的ACL规则表。本发明提供的访问控制列表实现方法和装置还具有成本低,技术方案简便易于实现的优点。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细说明。
图1为本发明访问控制列表实现装置结构示意图,如图所示,本发明访问 控制列表实现装置包括访问控制列表生成模块、存储器、访问控制列表查找模块和多维规则处理模块。
其中,访问控制列表生成模块用于,以各个规则对应的区间的左端点为叶子节点(也可以右端点为叶子节点,但必须统一为左端点,或统一为右端点),建立树形数据结构,并对该树形数据结构建立备份,该树形数据结构可以为任意树形数据结构,例如2-3树结构,又例如二叉树或多叉树结构。为了提高查找的效率,分别对各个叶子节点的高M比特部分进行哈希运算,将运算结果相同的叶子节点组成一个树形数据结构,从而得到一个以上的树形数据结构。其中0<M<N,优选0<M<N/3,N为规则的宽度,也即关键字的宽度。
存储器用于对生成的树形数据结构以及备份树形数据结构进行保存。
访问控制列表查找模块用于,提取待查找数据包的关键字,以之查找树形数据结构,获取待查找数据包对应的规则。为了提高效率,对应于上面访问控制列表生产模块采用的优化方案,对关键字的高M比特部分进行哈希运算,根据运算结果找到对应的树形数据结构进行查找。
多维规则处理模块用于,如果待查找数据包的规则为多维,则首先将其规则分解为多个一维规则,对于其中任一个一维规则,交由访问控制列表生成模块和访问控制列表查找模块执行,然后将得到的待查找数据包对应的该一维规则进行规则合并,得到待查找数据包对应的多维规则。
由于信息爆炸性的增长,所以网络流量也迅速增大,为了使交换设备能够适应网络流量的需要,交换设备应该达到线速交换处理能力,因此设备ACL分类器也需要能够达到线速处理能力。如果单个引擎无法满足设备线速处理能力,在实现的时候可以复制多个查找引擎,在某个时间内同时处理多个数据包使分类器达到线速处理能力。需要复制的份数取决于交换设备需要达到的交换能力和存储器的带宽,其结构如图2所示。
图2为一个具体实施例的本发明访问控制列表实现装置的电路结构示意图,如图所示,本发明访问控制列表实现装置的电路结构包括:
规则表模块:为存储块,用于存储软件配置数据,其数据结构如3所示。备份规则表和规则表是完全一样的。
数据包分发器:用于将总线上的数据包根据各个通路上搜索引擎工作状态分发数据包。首先公平轮询1......L个通道,如果轮询到的通道空闲则将数据包的描述信息发送到对应的通道上,如果轮询到的通道忙,则轮询下一个通道,周而复始。
搜索引擎:接收数据包分发器发送过来的包描述信息,根据寄存器的配置提出相应的关键字。用关键字根据专利描述的ACL查找步骤到规则表中搜索对应的条目。将查找到条目对应的规则结果发送给规则合并器。
规则合并器:将1到K个搜索引擎查找结果进行合并,得出数据包最后结果,即QoS,丢弃标识,限速标识等信息。
RR(round robin,公平轮询)轮询:从1到L挨个轮询每个通道的搜索引擎的工作状态,如果该通道上1到K个搜索引擎都完成了查表,RR轮询模块取出最后合并结果发送到总线上。如果该通道还没有完成查找和处于等待数据包状态则轮询下一个通道。
本发明所设计的电路结构简单且可扩展性好,可以扩展到任意维ACL规则表;可重用性高,电路中的搜索引擎的电路结构都是一致的,设计只需要例化搜索引擎模块即可;实现成本低,本发明实现不需要使用TCAM,大大降低了设备的成本;可配置性强,设备的K个规则表可支持1到K维ACL规则,极限情况下将K个规则表配置成同一种规则,此时只支持一维ACL规则,但是能够支持的规则数是原来的K倍。
下面以一个具体实例的方式对2-3树的生成和查找做进一步说明:
ACL规则生成:
例如我们需要配置的规则为VLAN ID。
R1(规则1):VLAN ID为1~4;
R2:VLAN ID为5~6;
R3:VLAN ID为7~8;
...
Rn-1:VLAN ID为60~62;
Rn:VLAN ID为63~无穷大。
第一步、提取各个规则的区间的左端点,分别是:1,5,7,9,......,63;
第二步、将各个区间的左端点按照从小到大排序,排序后的结果是:1,5,7,9,...,63;
第三步、取各个端点高M比特做hash计算,例如hash函数为取端点的高4比特作为hash结果,那么1,5,7,9,......,63的hash结果都是0(假设1,5,7,9,......,63都是32位的整数);
第四步、将数组1,5,7,9,......,63组织成一棵2-3树,如图3所示:数组a的索引从0开始,即a[0]=1,a[1]=5,a[2]=7;
2-3树的最底层为第一层,从底向上依次为第二层,第三层。
那么第二层第一个节点左边数据为a[2+6*n],右边数据为a[4+6*n],(n=0......(N-4)/6取整数);
那么第三层第一个节点左边数据为a[6+18*n],右边的数据为a[12+18*n],(n=0......(N-12)/18取整数);
其他的层次依次类推。
第五步、将生成的树表写到规则表中。其数据在规则表存储内的格式如图4所示,因为hash结果为0,所以树根节点写在表的0地址上。
第六步、软件将规则表对应的动作写入到规则动作表中,每个条目包括但不限于ACL规则(例如指示接收还是丢弃数据包)、ACL规则在该维上的优先级、该维对应的QoS和QoS优先级、限速标识和限速标识优先级。
查找过程:
例如芯片接收到一个数据,其VLAN ID为12。
第一步、根据寄存器的配置从数据包提取关键字,例如寄存器配置为提取 数据包的VLAN ID。那么硬件直接将数据包中的VLAN ID取出来作为待查找关键字12。
第二步、将待查找关键字取高4比特作为hash结果,即得到hash_idx=0。搜索引擎根据hash_idx=0读取规则表第0地址的条目。
第三步、将12和规则表1第0地址的条目(17,41)进行比较,该条目为树根节点(中间节点),12比17小,所以根据左指针读取条目(7,11)节点。
第四步、判断条目(7,11)为中间节点,比较12大于11,所以根据该节点的右指针读取下一个条目。
第五步、判断条目(11,14)为叶子节点,比较12大于11但是小于14,所以根据节点(11,14)rule5_idx为地址读取规则动作表,最后得到了本次查找的结果。
图5为本发明访问控制列表实现方法流程示意图,如图所示,本发明访问控制列表实现方法具体包括如下步骤:
1、以网管设置的各个规则对应的区间的左端点为叶子节点(也可以右端点为叶子节点,但必须统一为左端点,或统一为右端点),建立树形数据结构,并对该树形数据结构建立备份,该树形数据结构可以为任意树形数据结构,例如2-3树结构,又例如二叉树或多叉树结构。
2、提取待查找数据包的关键字,以之查找树形数据结构,获取该待查找数据包对应的规则。
3、当对规则进行变更时,首先对备份树形数据结构进行修改,然后再对树形数据结构进行修改。
为了提高查找的效率,在步骤1中,分别对各个叶子节点的高M比特部分进行哈希运算,将运算结果相同的叶子节点组成一个树形数据结构,从而得到一个以上的树形数据结构;相应地,步骤2中,对关键字的高M比特部分进行哈希运算,根据运算结果找到对应的树形数据结构进行查找;其中0<M<N,优选0<M<N/3,N为规则的宽度,也即关键字的宽度。
如果待查找数据包的规则为多维,则首先将其规则分解为多个一维规则,对于其中任一个一维规则,执行步骤1和步骤2,得到该数据包对应的该一维规则,然后进行规则合并,得到该数据包对应的多维规则。即:将多维规则分解成多个一维规则,然后将其投影到数轴上并将各个区间的左端点组织成2-3树结构,然后通过一个搜索引擎阵列将数据包对应关键字和规则表进行匹配,最后查找的结果根据配置的规则优先级进行合并。
下面以一个具体实施例对本发明方法做进一步详细说明,该实施例中,网管配置的规则为多维,建立的树形数据结构为2-3树结构。下面分三部分进行说明:
第一部分:ACL规则表生成
步骤1、根据几何投影将多维规则分解成多个一维规则,其中每个规则除了ACL规则外,还有ACL规则在该维上的优先级,除此之外还有该维对应的QoS(Quality of Service,服务质量)和QoS优先级、限速标识和限速标识优先级等。
步骤2、将同一维规则区间映射到对应的数轴上,即将同一维的各规则对应的区间均映射到一个数轴上,获取各个区间的左端点及其对应的规则。
步骤3、将同一维规则的各个区间左端点按照大小排序。
步骤4、取每个端点的高M比特(假设每个端点为N比特的数据,那么0<M<N,优选取0<M<N/3)做hash(哈希)运算,得到hash结果hash_idx,将所有hash_idx相同的端点组成一棵2-3树,得到一个以上(即一个或多于一个)的2-3树,本发明不限于2-3树,还可以为二叉树和多叉树等其它任意的树形数据结构,并且该树和普通数据结构上的树不一样,关键字除了用于确定匹配的规则外还用于确定搜索路径,如图2所示,每个树节点上包括一比特用于指示是中间节点还是叶子节点,规则关键字1和规则关键字2;如果是中间节点(包括根节点)则包含左指针、中间指针和右指针;如果是叶子节点则包含规则关键字1对应的规则索引1,关键字2对应的规则索引2。
2-3树的生成方法如下:
1、将hash_idx相同的规则区间的左端点按照从小到大排序,然后放在一个数组中,记为a[n],其中n为起始端点个数减1。
2、2-3树的最底层为叶子层,记为第一层;叶子层的上一层为第二层,依次递增。那么第二层每个节点的左右端点数据从数组a[n]中提取,从左到右第i个节点的左端点为a[2+6×i],右端点为a[4+6×i],其中
如果4+6×i>n,那么取最后一个端点a[n],如图3所示。
3、第三层每个节点的左右端点的数据从数组a[n]中提取,从左到右第j个节点的左端点为a[6+18×j],右端点为a[12+18×j],其中
m为第二层总节点数。
4、第p层的每个节点的左右端点的数据从数组a[n]中提取,从左到右第k个节点的左端点为a[2×3(p-2)+2×3(p-1)×k],右端点为a[4×3(p-2)+2×3(p-1)×k],其中
t为第p-1层总节点数。依次类推,直到只有一个节点为止。
二叉树和多叉树的生成方法和2-3树类似,都是从数组a[n]提取出相应的数据组成树形结构。
步骤5、软件将生成的树表写入到硬件对应的规则表存储区中,同时写入到对应的备份规则表存储区中,规则表在存储区中的数据结构如图4所示。
步骤6、软件将规则表对应的动作写入到规则动作表中,每个条目包括但不限于ACL规则(例如指示接收还是丢弃数据包)、ACL规则在该维上的优先级、该维对应的QoS和QoS优先级、限速标识和限速标识优先级。
第二部分:ACL规则的查找
步骤1、硬件根据寄存器的配置提取数据包的关键字段组合成待查找关键字,例如提取数据包中的输入端口、目的IP地址和IP优先级TOS组合成{输入端口,目的IP地址,IP优先级TOS},如果合成的待查找关键字位宽小于N位, 可以在关键字的前面补零使其达到规则表规定的位宽。
步骤2、取待查找关键字的高M比特进行hash运算,得到一个索引hash_idx,用该索引找到对应的2-3树,并用该索引作为规则表的地址读取对应的条目。
步骤3、判断该条目是否是叶子节点,如果不是则执行步骤4,如果是叶子节点则执行步骤5。
步骤4、将待查找关键字和条目中关键字1进行比较,如果小于关键字1,则取出该条目的左指针,读取左指针对应的条目,执行步骤3的操作。如果大于或等于关键字1但是小于关键字2,则取出该条目的中间指针,读取该指针对应的条目,执行步骤3的操作。如果待查找关键字大于或等于关键字2,则取出该条目的右指针读取对应条目并执行步骤3的操作。
步骤5、如果待查找关键字和叶子节点的关键字1相等,则数据包待查找的关键字和关键字1对应的规则精确匹配上,否则比较叶子节点的关键字2是否相等,如果相等则和关键字2对应的规则精确匹配上,这两种情况都是完全匹配;如果不相等则查看待查找的关键字是否落在关键字1和关键字2之间,如果是则取该区间(即关键字1和关键字2之间)对应的规则作为数据包待查找关键字的最长前缀匹配的结果,如果不是则取大于关键字2的对应规则作为最长前缀匹配的结果。
步骤6、根据匹配结果得到规则动作表的索引,用该索引作为地址读取规则动作表条目得到对应的规则。
上述描述了数据包的一维规则的匹配过程,对于多维的匹配(例如输入端口,目的IP地址和IP优先级TOS组成待查找关键字;输入端口,源IP地址和IP优先级TOS组成带查找关键字;输入端口,VLAN ID和VLAN优先级COS组成待查找关键字;输入端口,隧道标识ID和隧道优先级EXP组成待查找关键字;输入端口,伪线标识ID和伪线优先级EXP组成待查找关键字),可以分解为多个一维规则的匹配,其匹配的过程和上述描述的匹配方法一致。最后将多个一维匹配结果进行归并能够得到数据包对应的多维匹配ACL结果。多个(例如K 个)ACL规则表可以配置成同一种规则,此时设备支持的规则数是原来的多倍(例如K倍)。
第三部分:ACL规则的更新,包括修改、增加和删除
电信级交换设备需要能够连续不间断工作并且达到一个较小的丢包率,即使在更新ACL规则表的时候也不允许丢包,所以本发明方法引入了规则备份表。为每一种规则表提供一个数据结构完全相同的备份表。当需要进行规则更新,删除或增加的时候,先修改规则备份表,然后请求硬件查找逻辑切换到备份规则表中进行查找,硬件电路完成切换后通过中断上报CPU切换完成,这个时候CPU可以更新规则表。更新完成后将逻辑电路切换回原来的规则表。其具体方法包括:
步骤1、根据新的配置规则调整树表的数据结构。
步骤2、CPU开始根据新的树表配置备份规则表。
步骤3、完成备份规则表更新后CPU请求硬件切换到备份规则表上查找。
步骤4、硬件完成切换后上报中断给CPU,CPU接收到中断后开始更新规则表。
步骤5、CPU更新完规则表后请求硬件切切换到规则表上查找。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应注意的是,以上所述仅为本发明的具体实施例而已,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求记载的技术方案及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。