本文共 639 字,大约阅读时间需要 2 分钟。
很多的高性能网络设备都基于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的机制了。 转载于:https://blog.51cto.com/dog250/1268979