netlink机制-总结

简介:
1.为何我认为netlink要比procfs和sysfs更好? 
答曰:基于文件系统的方案 好处在于文件系统是“设置即所见”,缺点也正在于这种所见即所得的特性  ,由于文件系统的管理目前是基于用户的,就算为sysfs/procfs设置了了内核访问策略,这种策略也会复杂的让人望而却步!管理员A希望为内核增加1000个配置,她使用了sysfs,管理员B希望在sysfs中查一个信息,他ls了一下,这要比xxx --help好用很多,然而“我的天啊,1000多个个文件,哪个是我想要的啊!?”,于是这增加了和管理员A约会的机会...管理员A最终仅仅告诉了管理员B,使用sysfs比使用ioctl更好,避免了污染内核,然而netlink要比sysfs更好,避免了污染文件系统...
2.netlink机制和系统调用相比呢? 
答曰:如果我非要说每个用户态和内核态通信的接口都是一个门(gate)的话(毕竟用户进程不能随意访问特权级别的内核态,必须通过门),那么每一个系统调用就是一个门,这么多扇门,将用户态和内核态之间的界面堵得丑陋无比。一扇门就是一个硬编码,更改很不灵活...真的是这样吗?不是!这么理解是错的,因为系统调用是一个统一的接口,各个不同的系统调用使用“系统调用号”来区分,在32位的x86的linux上,统一使用int 0x80进入,然后在内核中进行再分发,系统调用号在这里就是消息体的一部分,这个和netlink的设计完全一致。 我强调netlink更具优势原因在于,它便于实现异步操作,因为发起者和执行者并不在一个进程空间,一切完全基于消息!  
3.netlink和ioctl再PK一下 
答曰:没有这个必要了, 污染是从上至下的,沉淀越深,越不容易降解!  起初,ioctl的设计就是为了避免增加系统调用,于是统一设计了一个ioctl入口。ioctl避免了增加系统调用,将对内核的更改压缩到了一个固定的地方,也就是ioctl的分发代码,然后进一步,不想修改内核代码了,于是进一步压缩,将修改压缩到了每一个模块,但是为了绕开ioctl,因此它导出了文件系统接口,一切问题解决了,然而却污染了文件系统,最终,netlink来了,一切基于消息! 这是个压缩的过程!  
4.使用sysfs比使用ioctl更好,避免了污染内核,然而netlink要比sysfs更好,避免了污染文件系统...netlink将一切控制逻辑封装在了消息中,它什么也没有污染,消息去了就去了,来了就来了,从不保留,哪里也不保留,它是纯软的,然而它污染了我们的大脑,我们必须自己封装消息!在如此的高层次体现PCIe的精神是否有必要还值得讨论。 
5.关于IPC 

标准的inet套接字就能实现,而且是inet套接字设计的初衷,然而netlink套接字更好用,而且还可以实现多点到多点传输任意消息 。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271023


相关文章
|
8天前
|
网络协议 Linux
Linux内核源码剖析之TCP保活机制(KeepAlive)
总之,TCP保活机制通过定期发送保活探测报文,以检测空闲连接是否仍然活跃。这种机制在网络通信中有助于及时检测和关闭不再使用的连接,从而节省资源并提高连接的可靠性。
28 0
|
8天前
|
网络协议
netmap: UDP 协议栈的实现
netmap: UDP 协议栈的实现
|
缓存 安全 Linux
|
Linux API 网络安全
|
网络协议 Linux 网络安全
netfilter和iptables的实现机制
随着计算机网络和Internet普及,计算机很久之前就开始遭受各种入侵了。因此为了阻止入侵,就产生了网络防火墙以及网络数据分析的需求。 而这个netfilter就是在linux系统中来实现防火墙功能。
2677 0
|
存储 缓存 网络协议
Linux网络协议栈(二)——套接字缓存(socket buffer)
Linux网络核心数据结构是套接字缓存(socket buffer),简称skb。它代表一个要发送或处理的报文,并贯穿于整个协议栈。1、    套接字缓存skb由两部分组成:(1)    报文数据:它保存了实际在网络中传输的数据;(2)    管理数据:供内核处理报文的额外数据,这些数据构成了协议之间交换的控制信息。
1368 0
|
索引 Unix API
内核中的UDP socket流程(6)——sendto
内核中的UDP socket流程(6)——sendto作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/space.php?uid=23629988&do=blog&id=85912 现在开始新的API sendto,那么就重新回到了socket.c文件。
1225 0
内核中的UDP socket流程(8)——udp_sendmsg
作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/space.php?uid=23629988&do=blog&id=91590 继续分析udp_sendmsg,      ipc.
1158 0
内核中的UDP socket流程(7)——udp_sendmsg
作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/space.php?uid=23629988&do=blog&id=85925 sock_sendmsg的代码很简单 int sock_sendmsg(struct sock...
1261 0