主权项 |
一种包分类规则集快速压缩方法,首先提取源/目的地址的前缀长度、源/目的端口号的范围、协议类型以及处理动作这些规则信息,通过哈希函数 <mrow> <mi>h</mi> <mo>=</mo> <mi>H</mi> <mrow> <mo>(</mo> <msub> <mi>R</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <munder> <munder> <munder> <mi>Σ</mi> <mrow> <mi>mask</mi> <mo>=</mo> <mi>sip</mi> <mo>_</mo> <mi>h</mi> <mo>,</mo> </mrow> </munder> <mrow> <mi>sip</mi> <mo>_</mo> <mi>l</mi> <mo>,</mo> </mrow> </munder> <mrow> <mi>dip</mi> <mo>_</mo> <mi>h</mi> </mrow> </munder> <mi>mask</mi> <mo>+</mo> <munder> <munder> <mi>Σ</mi> <mrow> <mi>w</mi> <mo>=</mo> <mi>sp</mi> <mo>_</mo> <mi>w</mi> <mo>,</mo> </mrow> </munder> <mrow> <mi>dp</mi> <mo>_</mo> <mi>w</mi> </mrow> </munder> <mi>log</mi> <mrow> <mo>(</mo> <mi>w</mi> <mo>)</mo> </mrow> <mo>+</mo> <mi>prtcl</mi> <mo>+</mo> <mi>action</mi> </mrow>将规则信息散列,式中Ri表示包分类规则集中的第i条规则,sip_h、sip_l和dip_h分别为源地址高16位、低16位和目的地址高16位的前缀长度,sp_w和dp_w分别为源端口和目的端口的范围,prtcl为协议类型值,action为处理动作项的值;再以散列值作为查找关键字构建二叉查找树,然后为二叉查找树的每个结点保存一个冲突列表,并在冲突列表中顺序比较每条规则,最后合并冲突列表中的可合并规则;其特征在于:先通过使用哈希函数将提取的规则信息散列并以散列值作为查找关键字构建二叉查找树实现粗略分类;然后为二叉查找树的每个结点保存一个冲突列表,在冲突列表中顺序比较每条规则完成精确分类;最后遍历二叉查找树所有结点的冲突列表,合并其中可合并的规则;重复“先通过使用哈希函数将提取的规则信息散列”到“合并其中可合并的规则”的过程直至规则集中没有可以合并的规则,然后将没有被合并的规则‑即合并了其它规则和不能被其它规则合并的规则‑组成一个新的规则集,重复执行上述所有过程直至不可能再发生合并;具体操作步骤如下:第一步、规则集读取和存储步骤:读取规则集并将其存储在嵌套定义的数据结构中;第二步、快速压缩步骤,该步骤又可分为以下具体步骤:初始化步骤1):置规则集的合并标志为假,并新建一棵空的二叉查找树;提取规则信息步骤2):对于包分类规则集中的某条规则Ri,如果它没有被合并且没有合并其它规则,则对其提取规则信息并使用哈希函数散列成查找关键字;查找关键字步骤3):在二叉查找树上查找与包分类规则集中的某条规则Ri的查找关键字相同的结点;如果遍历整棵二叉查找树都没有找到关键字相同的结点,则将查找关键字和该规则信息作为一个新的结点插入树中并为其新建冲突列表,然后执行合并规则步骤5);如果找到相同结点,则执行检查规则信息步骤4);检查规则信息步骤4):判断查找关键字相同结点的规则信息是否相同;如果相同,则返回结点的冲突列表;如果不相同,则执行合并规则步骤5);合并规则步骤5):遍历冲突列表,如果冲突列表为空则将包分类规则集中的规则Ri直接插入,如果冲突列表不为空并且包分类规则集中的规则Ri与列表中的所有规则都是可合并的,则将包分类规则集中的某条规则Ri添加至冲突列表中;如果冲突列表不为空而且包分类规则集中的某条规则Ri与列表中的所有规则并不都是可合并的,则不添加包分类规则集中的规则Ri,执行重复处理步骤6);重复处理步骤6):重复执行提取规则信息步骤2)到合并规则步骤5),直至所有规则被处理;获取冲突列表步骤7):遍历二叉查找树,得到所有冲突列表;设置合并标志步骤8):将冲突列表中的规则合并,如果有规则发生合并,则设置合并标志为1,并且对于其中被合并或合并其它规则分别设置相应的标志;检查合并标志步骤9):删除二叉查找树;并且,如果合并标志为真,则返回初始化步骤1);如果合并标志不为真,则执行再次合并步骤10);再次合并步骤10):将没有被合并的规则看作新的规则集重复执行初始化步骤1)到检查合并标志步骤9),直至不再有合并发生;第三步、释放压缩阶段过程中的临时空间和被合并规则的存储空间。 |