发明名称 一种基于IPV6的高维大规模包匹配方法
摘要 本发明公开了一种基于IPV6的高维大规模包匹配方法,把基于实数编码的差分演化算法与传统的包匹配算法相融合,在适应值设计上引入变异系数的思想,从而使问题的处理更具有客观性。通过引入分布性特征,自适应调整变异的剧烈程度,从而动态权衡种群的多样性和收敛性之间的矛盾。数值实验表明与传统算法相比,在速度、存储空间等综合性能上得到有效改善,另外本方法还有一个显著特点:包匹配的时间性能与规则数目之间具有很弱的相关性,从而本方法适合处理高维和大规模包匹配问题。
申请公布号 CN103269342A 申请公布日期 2013.08.28
申请号 CN201310173713.3 申请日期 2013.05.10
申请人 南通大学 发明人 魏晓宁;王则林;曹利;顾翔
分类号 H04L29/06(2006.01)I;H04L12/70(2013.01)I 主分类号 H04L29/06(2006.01)I
代理机构 南通市永通专利事务所 32100 代理人 葛雷
主权项 1.一种基于IPV6的高维大规模包匹配方法,其特征是:数据包采用包括源IP地址、目的IP地址、源端口、目的端口、协议的五元组来确定一个分组;在IPV6协议里IP地址以××××︰××××︰××××︰××××︰××××︰××××︰××××︰××××的形式存在;源IP和目的IP地址从高位到低位,把每一段分别标识为x<sub>ij</sub>,i∈{1,2},j∈<maths num="0001"><![CDATA[<math><mrow><mo>{</mo><mn>1,2,3,4,5,6,7,8</mn><mo>}</mo><msub><mi>X</mi><mi>i</mi></msub><mo>=</mo><mi>Extract</mi><mrow><mo>(</mo><mi>IP</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mn>8</mn></munderover><mrow><mo>(</mo><msub><mi>x</mi><mi>ij</mi></msub><mi>mod</mi><mn>1024</mn><mi>&lambda;</mi><mo>)</mo></mrow><mi>i</mi><mo>&Element;</mo><mo>{</mo><mn>1,2</mn><mo>}</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow></math>]]></maths>其中λ参数的值根据网络规模进行设计,在处理x<sub>i1</sub>时,只考虑单播的情况,最高三位的值固定为001,故x<sub>i1</sub>不考虑最高三维的值;源端口和目的端口都是以十六位二进制表示,以相应的十进制Y<sub>3</sub>、Y<sub>4</sub>标识;X<sub>i</sub>=Y<sub>i</sub>mod1024λ,i∈(3,4),上层传输层协议用八位的二进制表示,以相应的十进制X<sub>5</sub>标识,设X表示向量(X<sub>1</sub>,X<sub>2</sub>,X<sub>3</sub>,X<sub>4</sub>,X<sub>5</sub>);<maths num="0002"><![CDATA[<math><mrow><mi>F</mi><mrow><mo>(</mo><mi>X</mi><mo>)</mo></mrow><mo>=</mo><mrow><mo>(</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mn>5</mn></munderover><msub><mi>&alpha;</mi><mi>i</mi></msub><msub><mi>X</mi><mi>i</mi></msub><mo>+</mo><mi>&lambda;&beta;</mi><mo>)</mo></mrow><mi>mod</mi><mn>1024</mn><mi>&lambda;</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow></math>]]></maths>F(X)∈(0,1024λ),并且F(X)为整数,0≦α<sub>i</sub>≦1,0≦β≦1024;依据公式(1)、(2),F(X)函数把X映射到一维空间(0,1024λ);F(X)函数的目的就是把无规则的规则库映射到一个区间;在映射函数F(X),X域空间和F(X)映射空间已知的条件下,识别α<sub>i</sub>和β的参数值,定义向量A为(α<sub>1,</sub>α<sub>2,</sub>α<sub>3,</sub>α<sub>4,</sub>α<sub>5</sub>),运用差分演化算法来搜索使适应值最小的A和β的组合;采用实数进行编码,以便引入与问题领域相关的启发式信息以增加演化算法的搜索能力;在采用实数编码时考虑下面两个问题:(a)群体个体的描述:个体是一个实数向量,向量中的每个元素都是一个连续的变量;个体用向量为S<sub>i</sub>(s<sub>i1</sub>…s<sub>ij</sub>…s<sub>in</sub>),n是问题的维数,S<sub>i</sub>表示第i个个体,s<sub>ij</sub>表示第i个个体的第j个分量,s<sub>ij</sub>是一个浮点数,范围在[l(j),u(j)];(b)在对个体进行变异操作时,如s<sub>ij</sub>的值超出[l(j),u(j)],要进行相应的操作,采用下列公式进行:<maths num="0003"><![CDATA[<math><mrow><msub><mi>S</mi><mi>ij</mi></msub><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>l</mi><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow></mtd><mtd><msub><mi>S</mi><mi>ij</mi></msub><mo>&lt;</mo><mi>l</mi><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow><mi>andr</mi><mo>&lt;</mo><mn>0.5</mn></mtd></mtr><mtr><mtd><mn>2</mn><mi>l</mi><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow><mo>-</mo><msub><mi>S</mi><mi>ij</mi></msub></mtd><mtd><msub><mi>S</mi><mi>ij</mi></msub><mo>&lt;</mo><mi>l</mi><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow><mi>andr</mi><mo>></mo><mo>=</mo><mn>0.5</mn></mtd></mtr><mtr><mtd><mi>u</mi><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow></mtd><mtd><msub><mi>S</mi><mi>ij</mi></msub><mo>></mo><mi>u</mi><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow><mi>andr</mi><mo>&lt;</mo><mn>0.5</mn></mtd></mtr><mtr><mtd><mn>2</mn><mi>u</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>-</mo><msub><mi>S</mi><mi>ij</mi></msub></mtd><mtd><msub><mi>S</mi><mi>ij</mi></msub><mo>></mo><mi>u</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mi>andr</mi><mo>&lt;</mo><mn>0.5</mn></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mrow></math>]]></maths>其中r是一个范围在[0,1]之间的随机数;所述基本差分演化算法为:父代两个相异随机个体进行差操作得到的差分矢量加到随机选择的第三个相异个体上,生成一变异个体,接着按照一定的概率,父代个体与变异个体之间进行交叉操作,生成一新个体,在父代个体与新个体之间根据适应值的大小进行选择操作,选择适应值较优的个体作为子代;变异时依据下列公式(6)进行操作。ν<sub>m</sub>(t+1)=S<sub>gbest</sub>(t)+Δ(t,S<sub>r2</sub>(t)-S<sub>r3</sub>(t))        (6)其中m≠gbest≠r<sub>2</sub>≠r<sub>3</sub>其中t为当前演化代数,而函数Δ(t,x)的值域为[0,x]或[x,0],并使得当t增大时,Δ(t,x)接近于0的概率大增,即t的值越大,Δ(t,x)取值接近于0的概率越大,从而可以做到演化初期更多的考虑全局搜索,而在后期偏向于局部搜索;Δ(t,x)=x(1-τ<sup>β</sup>),其中β=(1-t/T)<sup>η</sup>     (7)其中τ是[0,1]上的一个随机数,T表示最大代数,η是决定变异激烈程度的一个参数,起着调整局部搜索区域的作用,其取值一般为{2,3,4,5};当ν<sub>mj</sub>(t+1)超出[l(j),u(j)],根据公式(5)进行处理;S<sub>r2</sub>(t),S<sub>r3</sub>(t)是父代随机选择的两对个体,进行锦标赛选择得到的两个相异个体,S<sub>gbest</sub>(t)是父种群最优个体;交叉时依据下列公式(8)进行操作:<maths num="0004"><![CDATA[<math><mrow><msub><mi>&mu;</mi><mi>mj</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>v</mi><mi>mj</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow></mtd><mtd><mi>rand</mi><mrow><mo>(</mo><mo>)</mo></mrow><mo>&le;</mo><msub><mi>C</mi><mi>R</mi></msub></mtd></mtr><mtr><mtd><msub><mi>S</mi><mi>mj</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mtd><mtd><mi>rand</mi><mrow><mo>(</mo><mo>)</mo></mrow><mo>></mo><msub><mi>C</mi><mi>R</mi></msub></mtd></mtr></mtable></mfenced><mi>j</mi><mo>=</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mi>N</mi><mo>.</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>8</mn><mo>)</mo></mrow></mrow></math>]]></maths>C<sub>R</sub>=RED<sub>N</sub>/(64λ)        (9)其中RED<sub>N</sub>定义为:如X域中数目超过M阀值,且这些点从X域映射到F(X<u>)</u>域同一个点,F(X<u>)</u>域中这样的点定义为冗余点,F(X)域中冗余点的数目定义为RED<sub>N</sub>,而λ值根据网络规模进行设置,λ的值的设置确保C<sub>R</sub>大于1为小概率事件;选择操作依据下列公式(10)进行操作:<img file="FDA00003172592200032.GIF" wi="1092" he="166" />设计适应性度量:F(X)域中冗余点的数目越少,即RED<sub>N</sub>点越小,种群个体就越优;统计F(X)域中被X域映射到的点,这些点的平均值记为<img file="FDA00003172592200041.GIF" wi="75" he="76" />再计算出标准差S,根据<img file="FDA00003172592200042.GIF" wi="270" he="84" />计算出变异系数C<sub>V</sub>,-C<sub>V</sub>值越小,种群个体就越优;RED<sub>N</sub>和C<sub>V</sub>都是从F(X)域中被映射到的点的分布性能来考虑问题,利用统计学原理来保证点的分布性,分布性越好,内存空间占用就越少,而且包的匹配速度与F(X)域中被映射到的点的分布性有很大关系,分布性性越好,包的匹配速度相应提高;设x域映射到F(X)中同一个点i的数目定义为H(i);V为x域所有映射点的总和,定义如公式(12)<maths num="0005"><![CDATA[<math><mrow><mi>V</mi><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><mi>H</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>11</mn><mo>)</mo></mrow></mrow></math>]]></maths>其中if H(i)=0then H(i)=ω,ω可以调节,F(X)中如存在点没有被映射到会带来内存的浪费,适当把ω动态增加,得到的A,β组合会减少内存消耗;令<maths num="0006"><![CDATA[<math><mrow><mi>T</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>1</mn></mtd><mtd><mi>ifH</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>&NotEqual;</mo><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mi>otherwise</mi></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>12</mn><mo>)</mo></mrow></mrow></math>]]></maths>令<img file="FDA00003172592200045.GIF" wi="263" he="142" />V<sub>AVE</sub>=V/T     (13)由公式(11)、(12)、(13)得到的V<sub>AVE</sub>这个指标可以用来分析F(X)域中点被映射的密集度,通过它观察包匹配的时间效率随规则数增长的变化情况,它的值越小意味着被映射的点分布越均匀,分布性能越好;令f(A,β)=φRED<sub>N</sub>-ψC<sub>V+□</sub>V<sub>AVE</sub>       (14)φ,ψ,□是用来调节RED<sub>N</sub>、G以及□对适应值的贡献大小,φ、ψ、□的值在0和1之间,和为1;衡量种群个体的指标就是f(A,β),它的值越小,个体就越优,寻找A,和β的最优组合,就是搜索使f(A,β)的值最小的A,β组合;由公式(9)中RED<sub>N</sub>的描述知F(X)域中的点可能有多个X映射,这样就可能有多个规则存放在同一个点,可以借助传统方法设计一个指针链表串联多个规则,以保证包匹配顺利进行;当防火墙或者路由器收到数据包时,分析数据包的协议头,提取出IP地址,根据Extract(IP)和F(X)两函数计算出此数据包映射的点,如此点存在多个规则,依据指针链表进行顺序查找。
地址 226019 江苏省南通市啬园路9号