ONE
什么是Netlink?Netlink是linux提供的用于內核和用戶态进程之间的通信方式;它是Linux 所特有的一种特殊的 socket,类似于BSD 中的AF_ROUTE 但又远比它的功能強大,目前在Linux核心中使用netlink 进行应用与内核通讯的应用很多; 包括:路由Daemon(NETLINK_ROUTE)
,应用态socket 协议(NETLINK_USERSOCK
) ,防火墙(NETLINK_FIREWALL
),netfilter 子系统(NETLINK_NETFILTER
),内核事件向用户态通知(NETLINK_KOBJECT_UEVENT
)。
常见的应用程序和内核通信的方式如下:
(1)
系统调用
:常见的有write、read、ioctl
等等,它需要应用程序主动向内核写入或读取数据,是一种同步的单工数据传输方式(2)
procfs(/proc)
:伪文件系统,主要是文件读写操作(3)
sysctl(/proc/sys)
:本质上还是用到了文件的读写操作,来完成用户态和内核态的通信。它使用的是 /proc 的一个子目录 /proc/sys。和 procfs 的区别在于:procfs 主要是输出只读数据,而 sysctl 输出的大部分信息是可写的(4)
sysfs(/sys)
:虚拟文件系统,它的做法也是通过文件 /sys 来完成用户态和内核的通信(5)
netlink<