这和以前所介绍的/proc,ioctl和setsockopt方式是不同的,另外一个区别是以前这几种方法都是用户
空间程序主动向内核发出请求,相当于客户端,内核相当于一个服务器;而netlink方法则是内核和用
户空间都可以主动向对方发送数据。
netlink现在已经是Linux内核中网络部分的一个基本协议族,具体代码在net/netlink中定义。
最初netlink接口主要是提供给路由程序来和内核通信修改系统的路由表的,从2.2内核开始在防火墙模
块中也有了netlink的支持。到了2.6,nfnetlink纳入官方内核中,并成为推荐的防火墙模块的netlink支持,
ip_queue虽然还在内核代码中,但已经不推荐使用(obsolete)。
通过netlink接口,netfilter可以向用户空间发送网络数据包,防火墙日志信息等,并能进行netlink
的连接跟踪,相关代码在net/netfilter/nfnetlink.c, net/netfilter/nfnetlink_conntrack.c,
net/netfilter/nfnetlink_queue.c, net/netfilter/nfnetlink_log.c等文件中。
由此可见,nfnetlink和ip_queue两者都是通过调用 netlink_kernel_create函数来初始化netlink套接口的,
ip_queue功能比较单纯,就是传输网络数据包,而nfnetlink有所扩展,不光是传递数据包,还
可传递其他数据,如日志信息的,不同类型数据处理是通过netlink子系统来区分的,不仅包括了
ip_queue的功能,还进行了扩展,这可能就是ip_queue被废的原因。
netlink学习笔记(一) http://blog.csdn.net/macrossdzh/article/details/4491957