HiPAC高性能规则匹配算法之查找过程

来源:互联网 发布:南风知我意1七微书包网 编辑:程序博客网 时间:2024/05/19 00:36
收到一封邮件,有位朋友觉得我误解了nf-HiPAC,如此的一个高性能算法怎能被什么传统的hash,tree之类的胁迫。是啊,HiPAC是一个很猛的算法,文档也比较少,这就更加增加了其神秘感,但是这决不意味着它是不可理解的,相反,它的思想很简单。
       HiPAC算法本质上是一种基于优先级的区间匹配算法,怎么理解呢?我们把匹配域定义成一个连续的区间,那么每一条Rule则定义了该区间的一段子区间,如果多条规则覆盖了相同的子区间,那么就涉及到了优先级的问题,这个在防火墙的访问控制列表中很有用,在存在多条Rule的情况下,先定义的那条Rule优先级最高。用一幅图表示上面的陈述会比较好些:




在上图中,定义了5条Rule,其中Rule1的优先级最高,Rule5优先级最低,表示在图上就是从下到上优先级逐次降低。按照上图所示,各个区间的匹配如下:
区间1:匹配Rule5;
区间2:匹配Rule3,Rule5;
区间3:匹配Rule2,Rule3,Rule5;
区间4:匹配Rule2,Rule3,Rule4,Rule5;
区间5:匹配Rule1,Rule2,Rule3,Rule4,Rule5;
区间6:匹配Rule1,Rule3,Rule4,Rule5;
区间7:匹配Rule1,Rule4,Rule5;
区间8:匹配Rule1,Rule4;
区间9:匹配Rule4;
区间10:没有任何Rule匹配!
如果一个match落在了区间5,那么它到底匹配哪个Rule呢?在区间5从下到上贯穿一条线,首先穿透的是Rule1,因为它的优先级最高,所以便匹配Rule1;如果一个match落在了区间2呢,从下到上最先贯穿Rule3,因此它便匹配Rule3;如果一个match落在了区间1,那么由于只贯穿了Rule5,因此就匹配Rule5;如果落在了区间10,很抱歉,没有任何一条Rule被贯穿,说明没有任何规则被匹配!
       基本就是这样的!那么可能你会问,如果有多个match怎么办?比如下面的规则,我当然以我们最熟悉的iptables举例,虽然我要将HiPAC移植到iptables还需要几个周末:
iptables -A FORWARD -s $ip1 -d $ip2 -p udp -j DROP
在这个规则里,我一共展示了3个match,分别是ip1,ip2,udp,因此就需要3个上面的图吗?是的!这就是所谓的多维HiPAC匹配,只是个词汇罢了,我不喜欢引申定义。由于第一张图在某些区间已经排除了若干Rule,因此后面的图中很多的Rule便不用画出来了。
       为了展示一下整理的查找过程,我画了一个相对简单的图,一共3个match,具体的匹配过程都在图里面,就不再用文字细说了:



关于HiPAC算法要说的是优先级匹配是关键,如果还需要继续匹配match,我们说就是延展了一个维度,查找顺着树继续向下,如果不需要继续匹配match了,那么就在当前区间从下向上贯穿一条线,首先碰触到的Rule就是匹配的规则。在上图中有很多的Rule都被画成了虚线,这是因为该条Rule在上一个层次或者说维度已经被排除了,因此画贯穿线时应该忽略掉虚线。
       如果理解了这个过程,就会发现它是超级高效的,无须回溯,无须依赖复杂的hash算法,无须依赖hash散列的程度,和输入数据无关,多少个匹配就有多少层,至于如何来维护这个算法,那就是实现问题了。本质上这还是一个树型数据结构,巧妙点在于其结构。
       本文仅仅给出了一个概览,至于HiPAC算法的插入,删除,查找,背后有很复杂的数学原理,作为工程技术人员,理解这些数学是必要的,虽然关于HiPAC的HOWTO不多,但是相关论文还是不少的。
       就为了回复一封邮件,又写了一篇文章,老婆和丈母娘在看《红高粱》的大结局,小小在玩iPad,我在餐桌上画那个复杂的图,这就是不喝酒的好处,否则此时我估计又在梦里云游了....白天忙了一天,对于论坛以及远方朋友的相求,我还是必应的,就当是学习了。不过,我还是希望晚上到家不再动任何技术问题,起初强制自己晚上不再喝酒不是为了搞网络技术的,也不是为了写代码的,而是想给自己充下电,充实一下自己的,看点历史,洗涤一下心灵,比如还可以学学烹饪,装潢设计之类的。

原文出自: http://blog.csdn.net/dog250/article/details/41220085
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 非洲菊生虫子了怎么办 多肉的花剪下来怎么办 结石痛怎么办怎么止疼 喝玫瑰花茶胃疼怎么办 卡地亚戒指掉色怎么办 苹果8plus掉电快怎么办 苹果8plus耗电快怎么办 卡地亚戒指划痕怎么办 苹果手机玫瑰金掉色怎么办 14k玫瑰金掉色怎么办 卡地亚手镯掉色怎么办 手机掉油漆里了怎么办 黄金戴久了变黑怎么办 玫瑰金褪色不亮了怎么办 黄金带久了不亮怎么办 玉石带久了不亮怎么办 手表带久了不亮怎么办 蜜蜡带久了不亮怎么办 钛钢首饰不亮了怎么办 潘多拉玫瑰金戒指褪色了怎么办 金色手表漆掉了怎么办 玫瑰金表带褪色后怎么办 K金褪色或泛黄怎么办 钛钢玫瑰金变黑怎么办 玫瑰金手镯掉色了怎么办 彩金颜色不亮了怎么办 玫瑰金链子黑了怎么办 18k玫瑰金变黑了怎么办 玫瑰金戒指遇到火变黑怎么办 18k白金发黄了怎么办 18k金掉色后怎么办吗 dw手表金色掉漆怎么办 dw玫瑰金手表褪色怎么办 dw金色表带黑了怎么办 机械表机芯坏了怎么办 银镀玫瑰金褪色怎么办 苹果七p玫瑰金掉漆怎么办 美度镀金表掉色怎么办 吃了发黑的香菇怎么办 脸上的皮肤暗黄怎么办 吃了变黑的香菇怎么办