内核与用户空间通信有很多种通信方式,netlink是其中一种,其余的还有/proc、ioctl、sockopt、共享内存等等。netlink的特点是异步全双工。

 

netlink使用32位端口寻址,称为pid(与进程号没有关系),其中内核的pid地址为0,。netlink主要特性如下:

 

1 支持全双工、异步通信(当然同步也支持)

2 用户空间可使用标准的BSD socket接口(但netlink并没有屏蔽掉协议包的构造与解析过程,推荐使用libnl等第三方库)

3 在内核空间使用专用的内核API接口

4 支持多播(因此支持“总线”式通信,可实现消息订阅)

5 在内核端可用于进程上下文与中断上下文