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怎么办?比方以下的规则,我当然以我们最熟悉的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算法的插入,删除,查找。背后有非常复杂的数学原理,作为project技术人员,理解这些数学是必要的,尽管关于HiPAC的HOWTO不多,可是相关论文还是不少的。
就为了回复一封邮件,又写了一篇文章,老婆和丈母娘在看《红高粱》的大结局,小小在玩iPad。我在餐桌上画那个复杂的图,这就是不喝酒的优点,否则此时我预计又在梦里云游了....白天忙了一天,对于论坛以及远方朋友的相求,我还是必应的,就当是学习了。
只是,我还是希望晚上到家不再动不论什么技术问题,起初强制自己晚上不再喝酒不是为了搞网络技术的,也不是为了写代码的,而是想给自己充下电。充实一下自己的,看点历史。洗涤一下心灵。比方还能够学学烹饪,装潢设计之类的。
HiPAC高性能规则匹配算法之查找过程的更多相关文章
- 命题作文:在一棵IPv4地址树中彻底理解IP路由表的各种查找过程
这是一篇命题作文.近期一直想写点东西,但一直找不到题目.正好收到一封邮件,有人问我Linux路由表的布局问题以及路由缓存的问题,加之前些日子又帮人做了一个片上路由表,所以认为这是个好题目,索性花了多半 ...
- php中include包含文件路径查找过程
首先,“路径”分为三种: 1.绝对路径,以/开头(unix系统)或c:等盘符开头(windows系统). 2.相对路径,以.开头,有./(当前目录)和../(上级目录). 3.其他路径,不是绝对路径和 ...
- 什么是maven,jar包的查找过程?
1.什么是maven? Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. 2.什么是项目管理工具? 就是SVN.对于SVN的介绍见我的上一篇博客 ...
- Hbase region查找过程
HBase的table是该region切分的,client操作一个row的时候,如何知道这个row对应的region是在哪台Region server上呢?这里有个region location过程. ...
- CQengine高性能内存数据缓存查找框架
CQengine可实现高性能内存数据缓存查找 CQEngine 需要设置字段对应的属性以方便访问与查询 主要有属性链接 SimpleAttribute(不能为空) SimpleNullableAttr ...
- 高性能Java解析器实现过程详解
如果你没有指定数据或语言标准的或开源的Java解析器, 可能经常要用Java实现你自己的数据或语言解析器.或者,可能有很多解析器可选,但是要么太慢,要么太耗内存,或者没有你需要的特定功能.或者开源解析 ...
- hadoop中的一次集群任务执行超时问题查找过程
问题背景 本次进行一个项目的重构,在某些活动数据量比较大的情况下,会偶尔出现1200s超时的情况,如下: AttemptID:attempt_1410771599055_11709_m_000033_ ...
- 通用的规则匹配算法(原创)(java+.net)
1.java里可以使用Spring的 Spel或者Google的Aviator 如果使用 Aviator 则添加以下依赖 <dependency> <groupId>com.g ...
- JVM系列(四):java方法的查找过程实现
经过前面几章的简单介绍,我们已经大致了解了jvm的启动框架和执行流程了.不过,这些都是些无关痛痒的问题,几行文字描述一下即可. 所以,今天我们从另一个角度来讲解jvm的一些东西,以便可以更多一点认知. ...
随机推荐
- 【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)
原文:[ASP.NET Web API教程]3.3 通过WPF应用程序调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...
- 与众不同 windows phone (5) - Chooser(选择器)
原文:与众不同 windows phone (5) - Chooser(选择器) [索引页][源码下载] 与众不同 windows phone (5) - Chooser(选择器) 作者:webabc ...
- MySQL 执行计划里的rows
<pre name="code" class="html">SQL> alter session set statistics_level=a ...
- 写给C语言新手的话
首先声明啊,写这个是因为一些加我QQ的朋友问我学习经验,我才写的. 另外,如果是二级党,那么请用谭浩强老师的书.然后你就可以不用看了.倒不是有偏见,而是我写的这个东西,根本不是为了考试,而是为了和新手 ...
- 450A - Jzzhu and Children 找规律也能够模拟
挺水的一道题.规律性非常强,在数组中找出最大的数max,用max/m计算出倍数t,然后再把数组中的书都减去t*m,之后就把数组从后遍历找出第一个大于零的即可了 #include<iostream ...
- Swift - 使用UIWebView和UIToolbar制作一个浏览器
使用网页控件(UIWebView)与工具栏控件(UIToolbar),我们可以自制一个小型的浏览器,其功能如下: 1,输入网址,点击“Go”按钮加载网页 2,加载过程中有进度条,同时可以点击停止按钮取 ...
- 解决Eclipse中文乱码的方法
(1)设置Project的编码格式: 在 Workspace中新建的项目默认继承Workspace的编码设置.我们也能够单独更改某个项目的编码格式.右键点击project.选择 Properties, ...
- SQL查询语句联系
建立四个表,分别是学生表,课程表,成绩表和教师信息表 插入信息: 题目: 1. 查询Student表中的所有记录的Sname.Ssex和Class列 select Sname,Ssex,Class f ...
- fragment Trying to instantiate a class com.example.testhuanxindemo.MyFragment that is not a Fragmen
在使用fragment的时候,先创建了一个fragment,然后为他创建布局,并在oncreateview中返回载入该视图的后返回的view,在activity的布局文件里,使用xml布局,用frag ...
- blend
看着各位大虾出系列文章貌似挺好玩的,本人耍了2个月的Wpf,有点见解,希望各位看官笑纳.本系列第一章就先来点简单又有用的吧o(∩_∩)o 哈哈.. 终于效果例如以下: ←点它 本人一直在做WPF算是第 ...