linux用户态内核态通讯分析-11.11linux用户态内核态通讯分析-11.11.pdfVIP

linux用户态内核态通讯分析-11.11linux用户态内核态通讯分析-11.11.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux用户态内核态通讯分析-11.11linux用户态内核态通讯分析-11.11

Linux 内核态与用户态通信程序的分析与应用: 多数的 Linux 内核态程序都需要和用户空间的进程交 换数据,但 Linux 内核态无法对传统的 Linux 进程间同步 和通信的方法提供足够的支持。netlink是一种很好的解决 机制。 在 Linux 2.4 版以后版本的内核中,几乎全部的中断 过程与用户态进程的通信都是使用 netlink 套接字实现的 ,例如iprote2网络管理工具,它与内核的交互就全部使用 了netlink ,著名的内核包过滤框架Netfilter在与用户空间 的通信,也在必威体育精装版版本中改变为netlink。 netlink socket ; • netlink socekt是一种用于在内核态和用户态进程之间进行数据传输的 特殊的IPC。它通过为内核模块提供一组特殊的API ,并为用户程序提 供了一组标准的socket 接口的方式,实现了一种全双工的通讯连接。 类似于TCP/IP中使用AF_INET地址族一样,netlink socket使用地址 族AF_NETLINK。 • 下面是netlink socket 目前的特性集合以及它支持的协议类型: • NETLINK_ROUTE 用户空间的路由守护程序之间的通讯通道,比如 BGP,OSPF,RIP以及内核数据转发模块。用户态的路由守护程序通过 此类型的协议来更新内核中的路由表。 • NETLINK_FIREWALL:接收IPV4防火墙代码发送的数据包。 • NETLINK_NFLOG:用户态的iptables管理工具和内核中的netfilter模块 之间通讯的通道。 • NETLINK_ARPD:用来从用户空间管理内核中的ARP表 用户态进程和内核态进程通信的方法: 1、系统调用。 2、ioctl接口。 3、proc文件系统。 4、netlink socket等等。 为什么使用netlink socket ? 1、为新的特性添加一个新的系统调用,ioctls或者一个proc文件的做法并 不是很容易的一件事情,因为我们要冒着污染内核代码并且可能破坏 系统稳定性的风险去完成这件事情。 2、内核中实现系统调用的代码都是在编译时静态链接到内核的,因此, 在动态加载模块中去包含一个系统调用的做法是不合适的。 3、它支持多点传送。一个进程可以把消息传输给一个netlink组地址,然 后任意多个进程都可以监听那个组地址(并且接收消息)。 4、系统调用和ioctl都属于单工方式的IPC ,也就是说,这种IPC会话的发 起者只能是用户态程序。Netlink 通过允许内核初始化会话的方式完 美的解决了此问题,我们称之为netlink socket的双工特性。 problem: • 用户态应用使用什么接口与内核通讯(用户态接口和内核 态接口) • 用户态程序和内核态程序使用何种方式实现消息的发送和 接收 • 内核程序如何设计成模块以及如何动态加载 /thread-2029813- 1-1.html ways: • 查看netlink内核原代码并进行代码分析,分析了解到用户态应用使用标 准的socket与内核通讯。用户空间的netlink API接口:socket()、 bind()、 sendmsg()、 recvmsg() 和 close()等接口。这些很容易地应 用到 netlink socket ;内核空间的netlink API接口: netlink_kernel_create ()、input()、skb_recv_datagram()、 wake_up_interruptible ()等。熟悉并使用这些接口。使用socket() 函数创建一个socket ,输入: eg: int socket(int domain, int type, int protocol) socket域(地址族)是AF_NETLINK,socket的类型是SOCK_RAW或 者SOCK_DGRAM,因为netlink是一种面向数据包的服务 • netlink通信依据是一个对应于进程的标识,一般定为该进程的 ID。当 通信的一端处于中断过程时,该标识为 0。当使用 netlink 套接字进行 通信,通信的双方都是用户态进程,则使用方法类似于消息队列。 netl

您可能关注的文档

文档评论(0)

vshoulrengb3 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档