Netfilter和Netgraph

allcan 2012-04-03

很多的高性能网络设备都基于BSD系统,而不是Linux。不管什么操作系统,其协议栈的实现都是大同小异,这里面做的最统一的估计就是Windows NT的NDIS了,其次是BSD,Linux也许派不上号吧,主要的性能以及功能差异在协议栈上看不出来,主要要看如何扩展以及定制协议栈,Windows的NDIS不谈,对于BSD和Linux,我想有必要比较一下Netfilter和Netgraph,结果可想而知,Netgraph比Netfilter更灵活,效率更高。

1.实现

Netfilter
使用NF_HOOK宏将数据包引入协议栈内置的5个HOOK点之一。
Netgraph
使用_p回调函数将数据包引入一张独立的graph。

2.执行顺序和控制

Netfilter
由Netfilter自身来控制单独HOOK点诸多hook函数的执行,执行顺序为该HOOK点各个hook函数的优先级顺序。
Netgraph
由Netgraph自身来控制数据包在一张graph中各个Node的游历,执行顺序取决于该graph中各个Node是怎么连接的。

3.动作的不同

Netfilter
熟知的accept,deny...
Netgraph
取决于该graph中的接收Node的hook的rcvdata回调函数,对于ipfw,还可以skip掉某个或某些rule,当然是不是netgraph的范畴,而是ipf的机制了。

相关推荐