很多的高性能網絡設備都基於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的機制了。