内核与用户空间通信有很多种通信方式,netlink是其中一种,其余的还有/proc、ioctl、sockopt、共享内存等等。netlink的特点是异步全双工。
netlink使用32位端口寻址,称为pid(与进程号没有关系),其中内核的pid地址为0,。netlink主要特性如下:
1 支持全双工、异步通信(当然同步也支持)
2 用户空间可使用标准的BSD socket接口(但netlink并没有屏蔽掉协议包的构造与解析过程,推荐使用libnl等第三方库)
3 在内核空间使用专用的内核API接口
4 支持多播(因此支持“总线”式通信,可实现消息订阅)
5 在内核端可用于进程上下文与中断上下文