版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
用戶空間和內(nèi)核空間通訊之Netlink引言AlanCox在內(nèi)核1.3版本的開發(fā)階段最先引入了Netlink,剛開始時(shí)Netlink是以字符驅(qū)動(dòng)接口的方式提供內(nèi)核與用戶空間的雙向數(shù)據(jù)通信;隨后,在2.1內(nèi)核開發(fā)過程中,AlexeyKuznetsov將Netlink改寫成一個(gè)更加靈活、且易于擴(kuò)展的基于消息通信接口,并將其應(yīng)用到高級(jí)路由子系統(tǒng)的基礎(chǔ)框架里。自那時(shí)起,Netlink就成了Linux內(nèi)核子系統(tǒng)和用戶態(tài)的應(yīng)用程序通信的主要手段之一。2001年,F(xiàn)orCESIETF委員會(huì)正式對(duì)Netlink進(jìn)行了標(biāo)準(zhǔn)化的工作。JamalHadiSalim提議將Netlink定義成一種用于網(wǎng)絡(luò)設(shè)備的路由引擎組件和其控制管理組件之間通信的協(xié)議。不過他的建議最終沒有被采納,取而代之的是我們今天所看到的格局:Netlink被設(shè)計(jì)成一個(gè)新的協(xié)議域,domain。Linux之父托瓦斯曾說過“Linuxisevolution,notintelligentdesign”。什么意思?就是說,Netlink也同樣遵循了Linux的某些設(shè)計(jì)理念,即沒有完整的規(guī)范文檔,亦沒有設(shè)計(jì)文檔。只有什么?你懂得---“Readthef**kingsourcecode”。當(dāng)然,本文不是分析Netlink在Linux上的實(shí)現(xiàn)機(jī)制,而是就“什么是Netlink”以及“如何用好Netlink”的話題和大家做個(gè)分享,只有在遇到問題時(shí)才需要去閱讀內(nèi)核源碼弄清個(gè)所以然。<spanstyle="font-size:10.5pt;mso-bidi-font-size:11.0pt;font-family:宋體;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:">什么是Netlink關(guān)于Netlink的理解,需要把握幾個(gè)關(guān)鍵點(diǎn):1、面向數(shù)據(jù)報(bào)的無連接消息子系統(tǒng)2、基于通用的BSDSocket架構(gòu)而實(shí)現(xiàn)關(guān)于第一點(diǎn)使我們很容易聯(lián)想到UDP協(xié)議,能想到這一點(diǎn)就非常棒了。按著UDP協(xié)議來理解Netlink不是不無道理,只要你能觸類旁通,做到“活學(xué)”,善于總結(jié)歸納、聯(lián)想,最后實(shí)現(xiàn)知識(shí)遷移這就是學(xué)習(xí)的本質(zhì)。Netlink可以實(shí)現(xiàn)內(nèi)核->用戶以及用戶->內(nèi)核的雙向、異步的數(shù)據(jù)通信,同時(shí)它還支持兩個(gè)用戶進(jìn)程之間、甚至兩個(gè)內(nèi)核子系統(tǒng)之間的數(shù)據(jù)通信。本文中,對(duì)后兩者我們不予考慮,焦點(diǎn)集中在如何實(shí)現(xiàn)用戶<->內(nèi)核之間的數(shù)據(jù)通信??吹降诙c(diǎn)腦海中是不是瞬間閃現(xiàn)了下面這張圖片呢?如果是,則說明你確實(shí)有慧根;當(dāng)然,不是也沒關(guān)系,慧根可以{__u32nlmsg_len;/*Lengthofmessageincludingheader*/__u16nlmsg_type;/*Messagecontent*/__u16nlmsg_flags;/*Additionalflags*/__u32nlmsg_seq;/*Sequencenumber*/__u32nlmsg_pid;/*SendingprocessPID*/};消息頭中各成員屬性的解釋及說明:nlmsg_type:消息的類型,即是數(shù)據(jù)還是控制消息。目前(內(nèi)核版本2.6.21)Netlink僅支持四種類型的控制消息,如下:NLMSG_NOOP-空消息,什么也不做;NLMSG_ERROR-指明該消息中包含一個(gè)錯(cuò)誤;NLMSG_DONE-如果內(nèi)核通過Netlink隊(duì)列返回了多個(gè)消息,那么隊(duì)列的最后一條消息的類型為NLMSG_DONE,其余所有消息的nlmsg_flags屬性都被設(shè)置NLM_F_MULTI位有效。NLMSG_OVERRUN-暫時(shí)沒用到。nlmsg_flags:附加在消息上的額外說明信息,如上面提到的NLM_F_MULTI。摘錄如下:<tableclass="MsoTableGrid"style="border-collapse:collapse;border:none;mso-border-alt:solidblack.5pt;mso-border-themecolor:text1;mso-yfti-tbllook:1184;mso-padding-alt:0cm5.4pt0cm5.4pt"border="1"cellpadding="0"cellspacing="0">標(biāo)記<tdstyle="width:340.45pt;border:solidblack1.0pt;mso-border-themecolor:text1;border-left:none;mso-border-left-alt:solidblack.5pt;mso-border-left-themecolor:text1;mso-border-alt:solidblack.5pt;mso-border-themecolor:text1;padding:0cm5.4pt0cm5.4pt"valign="top"width="454">作用及說明<tdstyle="width:85.65pt;border:solidblack1.0pt;mso-border-themecolor:text1;border-top:none;mso-border-top-alt:solidblack.5pt;mso-border-top-themecolor:text1;mso-border-alt:solidblack.5pt;mso-border-themecolor:text1;padding:0cm5.4pt0cm5.4pt"valign="top"width="114">NLM_F_REQUEST<tdstyle="width:340.45pt;border-top:none;border-left:none;border-bottom:solidblack1.0pt;mso-border-bottom-themecolor:text1;border-right:solidblack1.0pt;mso-border-right-themecolor:text1;mso-border-top-alt:solidblack.5pt;mso-border-top-themecolor:text1;mso-border-left-alt:solidblack.5pt;mso-border-left-themecolor:text1;mso-border-alt:solidblack.5pt;mso-border-themecolor:text1;padding:0cm5.4pt0cm5.4pt"valign="top"width="454">如果消息中有該標(biāo)記位,說明這是一個(gè)請(qǐng)求消息。所有從用戶空間到內(nèi)核空間的消息都要設(shè)置該位,否則內(nèi)核將向用戶返回一個(gè)EINVAL無效參數(shù)的錯(cuò)誤<tdstyle="width:85.65pt;border:solidblack1.0pt;mso-border-themecolor:text1;border-top:none;mso-border-top-alt:solidblack.5pt;mso-border-top-themecolor:text1;mso-border-alt:solidblack.5pt;mso-border-themecolor:text1;padding:0cm5.4pt0cm5.4pt"valign="top"width="114">NLM_F_MULTI<tdstyle="width:340.45pt;border-top:none;border-left:none;border-bottom:solidblack1.0pt;mso-border-bottom-themecolor:text1;border-right:solidblack1.0pt;mso-border-right-themecolor:text1;mso-border-top-alt:solidblack.5pt;mso-border-top-themecolor:text1;mso-border-left-alt:solidblack.5pt;mso-border-left-themecolor:text1;mso-border-alt:solidblack.5pt;mso-border-themecolor:text1;padding:0cm5.4pt0cm5.4pt"valign="top"width="454">消息從用戶->內(nèi)核是同步的立刻完成,而從內(nèi)核->用戶則需要排隊(duì)。如果內(nèi)核之前收到過來自用戶的消息中有NLM_F_DUMP位為1的消息,那么內(nèi)核就會(huì)向用戶空間發(fā)送一個(gè)由多個(gè)Netlink消息組成的鏈表。除了最后個(gè)消息外,其余每條消息中都設(shè)置了該位有效。<tdstyle="width:85.65pt;border:solidblack1.0pt;mso-border-themecolor:text1;border-top:none;mso-border-top-alt:solidblack.5pt;mso-border-top-themecolor:text1;mso-border-alt:solidblack.5pt;mso-border-themecolor:text1;padding:0cm5.4pt0cm5.4pt"valign="top"width="114">NLM_F_ACK<tdstyle="width:340.45pt;border-top:none;border-left:none;border-bottom:solidblack1.0pt;mso-border-bottom-themecolor:text1;border-right:solidblack1.0pt;mso-border-right-themecolor:text1;mso-border-top-alt:solidblack.5pt;mso-border-top-themecolor:text1;mso-border-left-alt:solidblack.5pt;mso-border-left-themecolor:text1;mso-border-alt:solidblack.5pt;mso-border-themecolor:text1;padding:0cm5.4pt0cm5.4pt"valign="top"width="454">該消息是內(nèi)核對(duì)來自用戶空間的NLM_F_REQUEST消息的響應(yīng)<tdstyle="width:85.65pt;border:solidblack1.0pt;mso-border-themecolor:text1;border-top:none;mso-border-top-alt:solidblack.5pt;mso-border-top-themecolor:text1;mso-border-alt:solidblack.5pt;mso-border-themecolor:text1;padding:0cm5.4pt0cm5.4pt"valign="top"width="114">NLM_F_ECHO<tdstyle="width:340.45pt;border-top:none;border-left:none;border-bottom:solidblack1.0pt;mso-border-bottom-themecolor:text1;border-right:solidblack1.0pt;mso-border-right-themecolor:text1;mso-border-top-alt:solidblack.5pt;mso-border-top-themecolor:text1;mso-border-left-alt:solidblack.5pt;mso-border-left-themecolor:text1;mso-border-alt:solidblack.5pt;mso-border-themecolor:text1;padding:0cm5.4pt0cm5.4pt"valign="top"width="454">如果從用戶空間發(fā)給內(nèi)核的消息中該標(biāo)記為1,則說明用戶的應(yīng)用進(jìn)程要求內(nèi)核將用戶發(fā)給它的每條消息通過單播的形式再發(fā)送給用戶進(jìn)程。和我們通常說的“回顯”功能類似。<tdstyle="width:85.65pt;border:solidblack1.0pt;mso-border-themecolor:text1;border-top:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025中國(guó)建筑股份限公司崗位招聘1人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)華能集團(tuán)限公司華能核能技術(shù)研究院限公司招聘50人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)人壽神農(nóng)架支公司招聘10人(湖北)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中共北京市委黨校公開招聘應(yīng)屆畢業(yè)生11人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年陜西商洛市事業(yè)單位招聘工作人員278人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年聯(lián)考筆試實(shí)錘這幾省份明確會(huì)參加高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年湖北事業(yè)單位10.27聯(lián)考(1337人)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年浙江麗水市青田縣招聘88名國(guó)企業(yè)工作人員高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年山東青島市市北區(qū)部分事業(yè)單位招聘23人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年四川省內(nèi)江東興區(qū)部分事業(yè)單位考聘89人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- DB63∕T 2013-2022 公路養(yǎng)護(hù)工程預(yù)算定額
- InternationalSettlementsLecture3InternationalClearingSystems
- 蘇武傳作文素材整理-
- 小學(xué)一年級(jí)班會(huì)課教案匯編 全冊(cè)
- 公司董事會(huì)、總經(jīng)理辦公會(huì)議事清單.docx
- 汽車?yán)碚撟鳂I(yè)Matlab程序輕型貨車動(dòng)力性能評(píng)價(jià)
- 長(zhǎng)沙理工大學(xué)工程經(jīng)濟(jì)課程設(shè)計(jì)(共86頁)
- 2017版和2002版醫(yī)療器械分類目錄對(duì)比
- 閥門的壓力試驗(yàn)規(guī)范
- 鄭家坡鐵礦充填系統(tǒng)設(shè)計(jì)
- 直讀光譜儀測(cè)量低合金鋼中各元素含量的不確定度評(píng)定
評(píng)論
0/150
提交評(píng)論