流分类中快速进行等价类划分的方法

文档序号:7970928阅读:274来源:国知局
专利名称:流分类中快速进行等价类划分的方法
技术领域
本发明涉及路由器对报文进行流分类的划分方法,特别涉及流分类中快速进行等价类划分的方法。
背景技术
在普通的路由器中,进行流分类是一项重要的基本功能。流分类的设置可以通过ACL(访问控制列表)来完成。ACL为网络管理者提供更新灵活的管理方法。ACL大量应用在报文过滤、NAT(网络地址转换)、Qos(服务质量)、策略路由、uRPF(单播反向路径转发)等应用中。
在由软件实现的ACL匹配算法中,应用较广泛、性能较好的是RFC(递归流分类)算法,如附图1所示,RFC算法通过对ACL规则集进行递归分类,构造多个等价类及多级索引表,报文通过对索引表的逐级匹配,在最后一级索引表中得到所属的classID(等价类编号),以及该等价类中最先匹配的ACL规则的信息。
使用该方法,对于查找定位的过程,效率较高,但是在划分等价类时,存在效率低下的问题,必须将所有的规则全部集中在一起,而且使用CLASS BITMAP(CBM)(等价类位图)的方式来进行等价类的划分。如果规则数目庞大,需要的BITMAP(位图)位数也相应加大,需要进行大量的逻辑“与”和“比较”工作,多次对内存进行读写,而且每增加/删除一条ACL规则,都需要重新进行计算,不适应实际应用中,要求快速生成等价类,使规则快速生效的需求。

发明内容
为了克服现有技术的缺陷和不足,本发明的目的在于提供一种提高访问控制列表规则生效速度的流分类中快速进行等价类划分的方法。
为了达到上述目的,本发明一种流分类中快速进行等价类划分的方法,包括以下步骤(1)对流分类中需要进行匹配的域范围所对应的所有结构初始化为一个只有一个线段的集合,并将该线段对应的等价类ID值设置为初始值;(2)当增加规则时,将从各个域对应线段集合的起始线段开始,依次比较规则覆盖范围和线段的范围,并根据比较结果记录或重新分配等价类ID值;(3)在记录或重新分配的等价类ID值中,将初始值或不是初始值但包含的线段没有被全部记录的等价类ID值重新分配新值,并把规则所覆盖的等价类ID值保存起来后,将等价类位图中对应的规则比特上置位1。
作为本发明的进一步改进,所述步骤(3)后还包括(4)当删除规则时,将该被删除规则覆盖范围的线段所对应等价类ID的等价类位图中对应的比特清零,并判断该等价类位图是否为零,如果判断结果为是,则将该等价类ID置为初始值;如果判断结果为否,则进入步骤(5);(5)在已生成的等价类ID中查找是否有与等价类位图相同的,如果能够找到,则将其对应的全部线段的等价类ID替换为找到的等价类ID,如果未能够找到,则修改其对应的等价类位图。
作为本发明的进一步改进,所述步骤(2)具体为(21)当增加规则时,比较线段范围的起点和规则覆盖范围的起点的大小,如果线段范围的起点等于规则覆盖范围的起点,则进入步骤(22);如果线段范围的起点小于规则覆盖范围的起点,则进入步骤(26);(22)判断线段范围的终点和规则覆盖范围的终点的大小关系,如果线段范围的终点等于规则覆盖范围的终点,则进入步骤(23);如果线段范围的终点大于规则覆盖范围的终点,则进入步骤(24);如果线段范围的终点小于规则覆盖范围的终点,则进入步骤(25);(23)记录该覆盖线段及对应的等价类ID值,如果该等价类ID值为初始值,则分配新的等价类ID值,进入步骤(3);(24)根据规则将原线段划分为两段,前一段为新生成的线段分配新的等价类ID,后一段修改原线段的起始位置,并记录该新生成的线段及其对应的新的等价类ID值,进入步骤(3);(25)记录覆盖线段及对应的等价类ID值,并将规则对应的起点修改为线段范围的终点加1后,取相邻下一条线段,返回步骤(21);(26)判断线段范围的终点和规则覆盖范围的终点的大小关系,如果线段范围的终点等于规则覆盖范围的终点,则进入步骤(27);如果线段范围的终点大于规则覆盖范围的终点,则进入步骤(28);如果线段范围的终点小于规则覆盖范围的终点,则进入步骤(29);(27)根据规则将原线段划分为两段,前一段修改原线段的起始位置,后一段为新生成的线段分配新的等价类ID值,并记录该新生成的线段及其对应新的等价类ID值,进入步骤(3);(28)根据规则将原线段划分为三段,前一段和后一段修改原线段的起始位置,为中间新生成的线段分配新的等价类ID值,并记录新生成的线段及其分配的新的等价类ID值,进入步骤(3);(29)根据规则将原线段划分为两段,前一段修改原线段的起始位置,后一段为新生成的线段分配新的等价类ID值,并记录该新生成的线段及其对应新的等价类ID值后,将规则对应的起点修改为线段范围的终点加1,取相邻下一条线段,返回步骤(21)。
作为本发明的进一步改进,所述步骤(3)具体为(31)遍历并判断记录或重新分配的等价类ID值是否为初始值,如果是,则新分配等价类ID值,如果不是,则进入步骤(32);(32)遍历其所包含的线段是否被全部被记录,如果不是,则为被记录的线段重新分配等价类ID值,如果是,则进入步骤(33);(33)判断所有遍历是否结束,如果判断结果为是,则把规则所覆盖的等价类ID值保存起来后,将等价类位图中对应的规则比特上置位1;如果判断结果为否,则返回步骤(31)。
采用上述的方法后,能够根据新增加的规则,通过对规则覆盖范围和线段范围的比较,动态地生成涉及匹配区域(CHUNK域)的等价类,不需要计算全部规则来重新划分所有相关匹配区域的等价类,大大提高ACL规则的生效速度,并且能够节省空间。


图1为标准的RFC算法示意图;图2为本发明中生成等价类实现的流程图。
具体实施例方式
下面结合附图对本发明的具体实施方式
作进一步详细说明。
如图2所示,本发明中生成等价类的实现流程包括以下步骤(201)对流分类涉及的chunk域进行初始化操作,将需要进行匹配的域所对应的范围映射为一个线段的集合,线段集合的范围由所在域的宽度所决定,对ACL规则匹配涉及的域范围对应的所有结构初始化为LINE
;(202)输入规则,将规则划分为多个域,计算各个域的范围;(203)从各个域对应的线段集合的起始线段开始,将线段范围和规则覆盖范围进行比较设规则的范围是(Rule_begin,Rule_End);(204)取第一条线段LINE
,设其范围为(l_begin,l_end),i=0;
(205)比较l_begin和Rule_begin的大小,如果l_begin等于Rule_begin,则进入步骤(206);如果l_begin小于Rule_begin,则进入步骤(207);(206)比较l_end和R_end的大小,如果l_end等于R_end,则进入步骤(208);如果l_end大于R_end,则进入步骤(209);如果l_end小于R_end,则进入步骤(210);(207)比较l_end和R_end的大小,如果l_end等于R_end,则进入步骤(211);如果l_end大于R_end,则进入步骤(212);如果l_end小于R_end,则进入步骤(213);(208)规则范围与原有线段重合,标记LINE[i],记录LINE[i]及对应的classID值,如原对应的classID值为初始值,重新分配新的classID值,进入步骤(3);(209)规则将原有线段分为两段,前一段是新生成的线段LINE_new,分配新的classID,标记LINE[i],后一段修改起始范围记录LINE_new及对应的classID值,进入步骤(3);(210)规则范围与原有线段重合,标记LINE[i],记录LINE[i]及对应的classID值,将规则对应的R_begin改为l_end+1,取相邻的下一条线段LINE[i],设其范围为(l_begin,l_end)i=i+1,返回步骤(205);(211)规则将原有线段分为两段,后一段是新生成的线段LINE_new,分配新的classID,前一段修改起始范围,记录LINE_new及对应的classID值,进入步骤(3);(212)规则将原有线段分为三段,中间一段是新生成的线段LINE_new,分配新的classID。前一段修改起始范围。后一段也是新生成的线段LINE_new2,对应的classID与LINE[i]相同,记录LINE_new及对应的classID值,进入步骤(3);(213)规则将原有线段分为两段,后一段是新生成的线段LINE_new,分配新的classID。前一段修改起始范围,记录LINE_new及对应的classID值,将规则对应的R_begin改为l_end+1,并取相邻的下一条线段LINE[i],设其范围为(l_begin,l_end)i=i+1,返回步骤(205);(214)遍历所有记录下的LINE[],如果其被标识,则根据此线段确定对应classID值;(215)判断此classID值对应的全部线段是否都被标识,如果判断结果为否,则进入步骤(216);如果判断结果为是,则进入步骤(217);(216)为被标识的线段重新分配classID值,进入步骤(217);(217)判断遍历是否全部结束,如果判断结果为是,则进入步骤(218);如果判断结果为否,则返回步zhouI(214);
(218)将规则所覆盖的classID值保存起来,以进行下一步的处理。
本发明在删除规则时,需要判断其覆盖范围的线段,将其对应的线段上的classID的CBM中相关比特清零,当CBM=0时,可将其置为初始值。否则不用删除。在已生成的classID中查找CBM与其相同的,如果能够找到,将其对应的全部线段的classID替换为新找到的classID,并进行合并处理。否则只修改其对应的CBM。
下面以配置的实际ACL规则进行说明。
对于ACL常用的5个匹配域源IP地址(32bit)、目的IP地址(32bit)、源端口(16bit)、目的端口(16bit)、协议(8bit),为节省空间,要将其设为7个域,分别是源IP地址高16位(16bit)、源IP地址低16位(16bit)、目的IP地址高16位(16bit)、目的IP地址低16位(16bit)、源端口(16bit)、目的端口(16bit)、协议(8bit)。初始时,每一个线段集合E1-E7都只有一个初始元素{L0},相应线段集合范围分别是(0-65535)、(0-65535)、(0-65535)、(0-65535)、(0-65535)、(0-65535)、(0-255)。
规则集合为

1)初始化7个域。参见图2中初始化部分第1个域源IP地址高16位

第2个域源IP地址低16位

第3个域目的地址高16位

第4个域目的地址低16位

第5个域源端口

第6个域目的端口

第7个域协议

2)增加第1条规则时的处理,第1个域源IP地址高16位

第2个域源IP地址低16位

第3个域目的地址高16位

第4个域目的地址低16位

第5个域源端口

第6个域目的端口


第7个域协议

3)增加第2条规则时的处理第1个域源IP地址高16位

第2个域源IP地址低16位

第3个域目的地址高16位

第4个域目的地址低16位

第5个域源端口

第6个域目的端口

第7个域协议

4)增加第3条规则时的处理第1个域源IP地址高16位


第2个域源IP地址低16位

第3个域目的地址高16位

第4个域目的地址低16位

第5个域源端口

第6个域目的端口

第7个域协议

5)增加第4条规则时的处理第1个域源IP地址高16位

第2个域源IP地址低16位

第3个域目的地址高16位


第4个域目的地址低16位

第5个域源端口

第6个域目的端口

第7个域协议

6)增加第5条规则时的处理
第1个域源IP地址高16位

第2个域源IP地址低16位

第3个域目的地址高16位

第4个域目的地址低16位

第5个域源端口


第6个域目的端口

第7个域协议

本发明在由软件实现的ACL算法中,大大提高了等价类划分的速度,尤其是当规则数目达到几千条的数量级时,与原有的RFC算法相比,对等价类的划分和生成速度提高效果尤为显著,并且节省空间,算法只要保存第一级表对应的CBM值,可以根据系统支持的最大ACL规则数预先申请足够的空间保存相关等价类的CBM,不用向原有的RFC算法那样动态申请CBM空间。
权利要求
1.一种流分类中快速进行等价类划分的方法,其特征在于,包括以下步骤(1)对流分类中需要进行匹配的域范围所对应的所有结构初始化为一个只有一个线段的集合,并将该线段对应的等价类ID值设置为初始值;(2)当增加规则时,将从各个域对应线段集合的起始线段开始,依次比较规则覆盖范围和线段的范围,并根据比较结果记录或重新分配等价类ID值;(3)在记录或重新分配的等价类ID值中,将初始值或不是初始值但包含的线段没有被全部记录的等价类ID值重新分配新值,并把规则所覆盖的等价类ID值保存起来后,将等价类位图中对应的规则比特上置位1。
2.按照权利要求1所述的快速进行等价类划分的方法,其特征在于,所述步骤(3)后还包括(4)当删除规则时,将该被删除规则覆盖范围的线段所对应等价类ID的等价类位图中对应的比特清零,并判断该等价类位图是否为零,如果判断结果为是,则将该等价类ID置为初始值;如果判断结果为否,则进入步骤(5);(5)在已生成的等价类ID中查找是否有与等价类位图相同的,如果能够找到,则将其对应的全部线段的等价类ID替换为找到的等价类ID,如果未能够找到,则修改其对应的等价类位图。
3.按照权利要求1或2所述的快速进行等价类划分的方法,其特征在于,所述步骤(2)具体为(21)当增加规则时,比较线段范围的起点和规则覆盖范围的起点的大小,如果线段范围的起点等于规则覆盖范围的起点,则进入步骤(22);如果线段范围的起点小于规则覆盖范围的起点,则进入步骤(26);(22)判断线段范围的终点和规则覆盖范围的终点的大小关系,如果线段范围的终点等于规则覆盖范围的终点,则进入步骤(23);如果线段范围的终点大于规则覆盖范围的终点,则进入步骤(24);如果线段范围的终点小于规则覆盖范围的终点,则进入步骤(25);(23)记录该覆盖线段及对应的等价类ID值,如果该等价类ID值为初始值,则分配新的等价类ID值,进入步骤(3);(24)根据规则将原线段划分为两段,前一段为新生成的线段分配新的等价类ID,后一段修改原线段的起始位置,并记录该新生成的线段及其对应的新的等价类ID值,进入步骤(3);(25)记录覆盖线段及对应的等价类ID值,并将规则对应的起点修改为线段范围的终点加1后,取相邻下一条线段,返回步骤(21);(26)判断线段范围的终点和规则覆盖范围的终点的大小关系,如果线段范围的终点等于规则覆盖范围的终点,则进入步骤(27);如果线段范围的终点大于规则覆盖范围的终点,则进入步骤(28);如果线段范围的终点小于规则覆盖范围的终点,则进入步骤(29);(27)根据规则将原线段划分为两段,前一段修改原线段的起始位置,后一段为新生成的线段分配新的等价类ID值,并记录该新生成的线段及其对应新的等价类ID值,进入步骤(3);(28)根据规则将原线段划分为三段,前一段和后一段修改原线段的起始位置,为中间新生成的线段分配新的等价类ID值,并记录新生成的线段及其分配的新的等价类ID值,进入步骤(3);(29)根据规则将原线段划分为两段,前一段修改原线段的起始位置,后一段为新生成的线段分配新的等价类ID值,并记录该新生成的线段及其对应新的等价类ID值后,将规则对应的起点修改为线段范围的终点加1,取相邻下一条线段,返回步骤(21)。
4.按照权利要求3所述的快速进行等价类划分的方法,其特征在于,所述步骤(3)具体为(31)遍历并判断记录或重新分配的等价类ID值是否为初始值,如果是,则新分配等价类ID值,如果不是,则进入步骤(32);(32)遍历其所包含的线段是否被全部被记录,如果不是,则为被记录的线段重新分配等价类ID值,如果是,则进入步骤(33);(33)判断所有遍历是否结束,如果判断结果为是,则把规则所覆盖的等价类ID值保存起来后,将等价类位图中对应的规则比特上置位1;如果判断结果为否,则返回步骤(31)。
全文摘要
本发明公开了一种流分类中快速进行等价类划分的方法。为解决现有技术中增加一条规则时,规则的生效速度慢的问题而发明。本发明包括以下步骤对流分类中需要进行匹配的域范围所对应的所有结构初始化为只有一个线段的集合,并将该线段对应的等价类ID值设置为初始值;当增加规则时,将从各个域对应线段集合的起始线段开始,依次比较规则覆盖范围和线段的范围,并根据比较结果记录或重新分配等价类ID值;在记录或重新分配的等价类ID值中,将初始值或不是初始值但包含的线段没有被全部记录的等价类ID值重新分配新值,并把规则所覆盖的等价类ID值保存起来后,将等价类位图中对应的规则比特上置位1。本发明能够提高增加规则的生效速度。
文档编号H04L12/56GK1964325SQ200610145330
公开日2007年5月16日 申请日期2006年11月24日 优先权日2006年11月24日
发明者潘建农 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1