Netlink通信機(jī)制的基礎(chǔ)概念

什么是Netlink通信機(jī)制

Netlink套接字是用以實(shí)現(xiàn)用戶進(jìn)程與內(nèi)核進(jìn)程通信的一種特殊的進(jìn)程間通信(IPC) ,也是網(wǎng)絡(luò)應(yīng)用程序與內(nèi)核通信的最常用的接口。
Netlink 是一種特殊的 socket,它是 Linux 所特有的,類(lèi)似于 BSD 中的AF_ROUTE 但又遠(yuǎn)比它的功能強(qiáng)大,目前在Linux 內(nèi)核中使用netlink 進(jìn)行應(yīng)用與內(nèi)核通信的應(yīng)用很多;
包括:

  • 路由 daemon(NETLINK_ROUTE),
  • 用戶態(tài) socket 協(xié)議(NETLINK_USERSOCK),
  • 防火墻(NETLINK_FIREWALL),
  • netfilter 子系統(tǒng)(NETLINK_NETFILTER),
  • 內(nèi)核事件向用戶態(tài)通知(NETLINK_KOBJECT_UEVENT),
  • 通用 netlink(NETLINK_GENERIC)
    等。
    Netlink 是一種在內(nèi)核與用戶應(yīng)用間進(jìn)行雙向數(shù)據(jù)傳輸?shù)姆浅:玫姆绞?,用戶態(tài)應(yīng)用使用標(biāo)準(zhǔn)的 socket API 就可以使用 netlink 提供的強(qiáng)大功能,
    內(nèi)核態(tài)需要使用專(zhuān)門(mén)的內(nèi)核 API 來(lái)使用 netlink。
    Netlink 相對(duì)于系統(tǒng)調(diào)用,ioctl 以及 /proc文件系統(tǒng)而言具有以下優(yōu)點(diǎn):
    1. netlink使用簡(jiǎn)單,只需要在include/linux/netlink.h中增加一個(gè)新類(lèi)型的 netlink 協(xié)議定義即可,(如 #define NETLINK_TEST 20 然后,內(nèi)核和用戶態(tài)應(yīng)用就可以立即通過(guò) socket API 使用該 netlink 協(xié)議類(lèi)型進(jìn)行數(shù)據(jù)交換);
    2. netlink是一種異步通信機(jī)制,在內(nèi)核與用戶態(tài)應(yīng)用之間傳遞的消息保存在socket緩存隊(duì)列中,發(fā)送消息只是把消息保存在接收者的socket的接收隊(duì)列,而不需要等待接收者收到消息;
      3.使用 netlink 的內(nèi)核部分可以采用模塊的方式實(shí)現(xiàn),使用 netlink 的應(yīng)用部分和內(nèi)核部分沒(méi)有編譯時(shí)依賴;
      4.netlink 支持多播,內(nèi)核模塊或應(yīng)用可以把消息多播給一個(gè)netlink組,屬于該neilink 組的任何內(nèi)核模塊或應(yīng)用都能接收到該消息,內(nèi)核事件向用戶態(tài)的通知機(jī)制就使用了這一特性;
      5.內(nèi)核可以使用 netlink 首先發(fā)起會(huì)話;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容