HiPAC算法简介

HiPAC是一个高性能的报文分类算法,nf-HiPAC是其衍生出来的一个支持Linux内核框架包过滤模块,由用户态应用程序和内核态模块组成,用于代替iptable。这个算法其实出来挺早的,第一个版本支持linux2.4,最新的版本也可以支持2.6了。不过貌似应用不是很广泛,猜测原因是由于算法比较复杂维护困难。HiPAC和iptables对比起来,其优点主要在于分类规模很大时依然能够保持较好的性能。
网上能够找到的文章基本是这两篇,一篇是nf-HiPAC的简介,一篇是HiPAC算法的介绍,应该是一篇论文。由于文档不太好搜,我把文档粘上来。
H-HiPAC-04
nf-hipac-nfws2005

HiPAC的思路基本上是将报文分类抽象为多维的范围匹配问题,算法大概如下:

一维范围匹配:
假设每个分类规则有三个参数,我们规定如下四条规则。编号位1的规则优先级最高,编号为4的策略优先级最低。用几何图形表示四条规则中的第一个参数,如下图所示:黑色坐标轴最左边表示0,最右边表示无穷大,四条规则将坐标轴分为6个区域。上面有数字标识的横线表示规则和优先级,横线越低表示优先级越高。查找时只要判断第一个参数落在哪个范围内,就可以根据优先级一下子确定第一个条件满足哪一个或多个规则。

多维范围匹配:
对于多维范围匹配,可以在第一维的基础上按照上述规则对第二维参数进行转化。转化的规则基本就是,将第一维中有重复规则的区域,再次按照第二维参数进行划分,划分的方法和第一维相同。

查找的例子:
如下图所示,按照第一个参数40查找第一维,落在绿色小叉号表示的区间,其中1、2、3、4条规则都满足。继续按照第二维的参数进行查找,在第二维的图中,落入左侧区间,其中1、2、3、4规则都满足。继续按照第三维的参数进行查找,落入最左侧的区间,其中3、4规则满足条件。但由于3的优先级高,所以匹配规则三。

大体的算法就这样,查找不算复杂,但插入、删除节点时需要复杂的更新,且树的大小不好控制。不过还是有很多思想可以借鉴的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nf-HiPAC能十分高效的在linux 2.4的netfilter构架下执行包过滤。它一个用户空间工具,称作“nf-HiPAC”,它被设计为完美兼容'iptables -t filter'。 'nf- hipac'和使用相同的钩子钩在linux 2.4核心的网络栈中,'iptables -t filter'也一样做。用户空间的工具能定义每一个规则在一个数组成的分类器中,能随意对某一连接产生作用。最大的优势在于能够兼容iptables, 用户能够充分按iptables的语法进行设置。 你或许会问:“为什么要使用另外一个包过滤器?” 最短最好的回答是:“性能!” iptables,象更多的包过滤,使用一个简单的包分类算法,对线性的穿过一个链中的每一个包在进行匹配(非)一个规则。明显的,这个方法缺乏效率。 nf-HiPAC ,提供一个新颖包分类的架构。当查找每一个包的时候使用一个高级算法来减少内存占用。在一个有特别多的规则和高带宽的网络中nf-HiPAC表现十分完美。 功能: 充分优化以实现适度内存占用和高性能的包分类 完全动态: 当插入或者删除规则时数据结构没有重建,高速更新成为可能。 在规则更新时,只很短暂时间的锁定,包匹配没有锁定。 支持64位体系。 优化核心用户空间协议(netlink),改良列表速度。 libnfhipac: netlink library for kernel-user communication 原始匹配支持: 源/目的 ip in/out 网络界面 协议 (udp, tcp, icmp) 包分段 源/目的 端口 (udp, tcp) icmp 类型 tcp 标记 ttl 连接状态匹配 match negation ("!") iptables 兼容: 语法和语义同iptables十分相似。 nf-HiPAC和iptables二者可以同时使用 安装需要环境: linux 2.6.26.5 内核源代码 iptables 1.4.4 源代码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值