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

简介:

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


wKiom1RqBOTTNQhxAADjNZ5i4iI795.jpg


在上图中,定义了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,具体的匹配过程都在图里面,就不再用文字细说了:

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



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1577675

相关文章
|
6天前
|
数据采集 机器学习/深度学习 算法
数据分享|WEKA关联规则挖掘Apriori算法在学生就业数据中的应用
数据分享|WEKA关联规则挖掘Apriori算法在学生就业数据中的应用
|
11天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】关联规则学习:Apriori算法详解
【4月更文挑战第30天】Apriori算法是一种用于关联规则学习的经典算法,尤其适用于购物篮分析,以发现商品间的购买关联。该算法基于支持度和置信度指标,通过迭代生成频繁项集并提取满足阈值的规则。Python中可借助mlxtend库实现Apriori,例如处理购物篮数据,设置支持度和置信度阈值,找出相关规则。
|
13天前
|
数据可视化 算法
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(下)
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(下)
|
13天前
|
算法 数据可视化 网络可视化
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(上)
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(上)
|
13天前
|
数据采集 存储 算法
数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
|
13天前
|
数据采集 算法 安全
数据分享|R语言关联规则挖掘apriori算法挖掘评估汽车性能数据
数据分享|R语言关联规则挖掘apriori算法挖掘评估汽车性能数据
|
17天前
|
移动开发 算法 数据可视化
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
|
18天前
|
算法 数据可视化 搜索推荐
数据分享|Python用Apriori算法关联规则分析亚马逊购买书籍关联推荐客户和网络图可视化
数据分享|Python用Apriori算法关联规则分析亚马逊购买书籍关联推荐客户和网络图可视化
|
18天前
|
算法 数据可视化 数据挖掘
【视频】关联规则模型、Apriori算法及R语言挖掘商店交易数据与交互可视化|数据分享
【视频】关联规则模型、Apriori算法及R语言挖掘商店交易数据与交互可视化|数据分享
|
19天前
|
数据可视化 算法 数据挖掘
R语言关联规则模型(Apriori算法)挖掘杂货店的交易数据与交互可视化
R语言关联规则模型(Apriori算法)挖掘杂货店的交易数据与交互可视化