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的一些东西,以便可以更多一点认知. ...
随机推荐
- win32 sdk 列表视图控件绘制
////////////////////////////////////////////////////////////// LRESULT ListViewCustomDraw(HWND hwnd, ...
- hdu 2147 SG函数打表(手写也可以) 找规律
kiki's game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 40000/1000 K (Java/Others) Total ...
- select value from v$diag_info where name='Default Trace File';
VALUE -------------------------------------------------------------------------------- /u01/diag/rdb ...
- 安装Apache Felix OSGI Framework小记
Felix是apache的开源OSGI服务框架,到 http://felix.apache.org/downloads.cgi 可以下载到最新的版本. 解压后目录结构如下: felix-framewo ...
- 使用Android简单实现有道电子词典
前言: 毕业设计的内容,仅仅有Java基础.没学过Android. 本着用到什么学什么.花费了10多个晚上完毕毕业设计. 当然,仅仅是简单的实线了电子词典功能,自始至终没有考虑过性能等问题. 本电子词 ...
- Function 详解(一)
一直想写一系列关于javascript的东西,可惜从申请博客以来就一直抽不出时间来好好写上一番,今天终于熬到周末,是该好好整理一下,那么先从声明函数开始吧; 总所周知,在javascript中有匿名函 ...
- thinkPHP 空模块和空操作、前置操作和后置操作 详细介绍(十四)
原文:thinkPHP 空模块和空操作.前置操作和后置操作 详细介绍(十四) 本章节:介绍 TP 空模块和空操作.前置操作和后置操作 详细介绍 一.空模块和空操作 1.空操作 function _em ...
- POJ1505&&UVa714 Copying Books(DP)
Copying Books Time Limit: 3000MS Memory Limit: 10000K Total Submissions: 7109 Accepted: 2221 Descrip ...
- Socket简介 (转)
Socket小白篇-附加TCP/UDP简介 Socket 网络通信的要素 TCP和UDP Socket的通信流程图 1.Socket 什么是Socket Socket:又称作是套接字,网络上的两个程序 ...
- Error : APP-FND-01926: The custom event WHEN-LOGON-CHANGED raised unhandled exception: ORA-06502: PL
In this Document _afrLoop=440418974213449&id=1508865.1&_afrWindowMode=0&_adf.ctrl-stat ...