最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

一文帶你掌握Linux內(nèi)核協(xié)議棧架構(gòu)(超詳細(xì))

2022-03-25 19:46 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

一、Linux內(nèi)核代碼目錄分布


documentation:擁有一套有用內(nèi)核技術(shù)文檔。?

arch:此目錄的所有子目錄的文檔數(shù)據(jù)都是體系結(jié)構(gòu)特有的代碼。有3個(gè)子目錄:Kernel不同體系結(jié)構(gòu)內(nèi)核我有的實(shí)現(xiàn)方式,比如計(jì)時(shí)器、SMP、信號量等等;lib不同體系結(jié)構(gòu)下的高性能通用代碼實(shí)現(xiàn),比如memcpy等等;mm不同體系結(jié)構(gòu)特有的內(nèi)存管理 程序的實(shí)現(xiàn)。?

drivers:內(nèi)核的驅(qū)動(dòng)程序代碼。包括顯卡、網(wǎng)卡、PCI等外圍設(shè)備驅(qū)動(dòng)代碼。?

fs:文件系統(tǒng)代碼。Ext2 Ext3 Ext4等本地文件系統(tǒng)。

include:包含Linux內(nèi)核大部分的頭文件(.h)。?

init:內(nèi)核初始化過程中的代碼。?

ipc:進(jìn)程間通信代碼 kernel:Linux內(nèi)部最重要的目錄。主要包含進(jìn)程創(chuàng)建、銷毀和調(diào)度等代碼。?

net:Linux內(nèi)核網(wǎng)絡(luò)協(xié)議棧的代碼。在此目錄下有netfilter的實(shí)現(xiàn)代碼,建構(gòu)一個(gè)netfilter框架,內(nèi)核防火墻框架,靈活、可實(shí)現(xiàn)安全策略,如數(shù)據(jù)包過濾、數(shù)據(jù)包處理、透明代理、動(dòng)態(tài)網(wǎng)絡(luò)地址轉(zhuǎn)換、數(shù)據(jù)包處理等。抽象及通用化框架,作為中間件,為每種網(wǎng)絡(luò)協(xié)議(IPv4/IPv6等)定義整套鉤子函數(shù)。

  • Linux內(nèi)核--映射到Linux代碼3個(gè)內(nèi)核層源碼代碼組織,具體如下:



  • 具備開發(fā)經(jīng)驗(yàn)至少我們對TCP網(wǎng)絡(luò)編程流程(socket()/bind()/listen()/accept()/send()/recv()/關(guān)閉socket()順序)。網(wǎng)絡(luò)數(shù)據(jù)在內(nèi)核中處理過程主要是在網(wǎng)卡和協(xié)議棧之間進(jìn)行:交給協(xié)議棧處理;協(xié)議棧將需要發(fā)送的數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送出去。



  • Linux內(nèi)核的網(wǎng)絡(luò)協(xié)議棧架構(gòu)視圖如下:

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。?!前100名進(jìn)群領(lǐng)取,額外贈(zèng)送一份價(jià)值699的內(nèi)核資料包(含視頻教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)??


二、SK_BUFF內(nèi)部原理及協(xié)議棧

  • 內(nèi)核層和用戶層在網(wǎng)絡(luò)方面差別是比較大,在內(nèi)核的網(wǎng)絡(luò)層中sk_buff結(jié)構(gòu)占有重要地位。sk_buff數(shù)據(jù)結(jié)構(gòu)在內(nèi)核源碼組織結(jié)構(gòu)如下:

  • 網(wǎng)絡(luò)報(bào)文存儲(chǔ)空間是在應(yīng)用層發(fā)送網(wǎng)絡(luò)數(shù)據(jù)或者網(wǎng)絡(luò)設(shè)備收到網(wǎng)絡(luò)數(shù)據(jù)時(shí)動(dòng)態(tài)分配的,分配成功之后,將接收或者發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)填充到這個(gè)存儲(chǔ)空間中。

  • 三、網(wǎng)絡(luò)協(xié)議inet_protosw結(jié)構(gòu)分析

  • 網(wǎng)絡(luò)協(xié)議族TCP/UDP等,inet_init()函數(shù)進(jìn)程初始化,使用proto_register()函數(shù)來注冊每個(gè)內(nèi)嵌協(xié)議。


  • sk_buff的數(shù)據(jù)結(jié)構(gòu)視圖如下:


  • 四、軟中斷CPU報(bào)文隊(duì)列及處理

  • 我們在Linux內(nèi)核中是采用軟中斷方式實(shí)現(xiàn),軟中斷機(jī)制的實(shí)現(xiàn)原理如下:


  • 軟中斷機(jī)制構(gòu)成核心成員包括:中斷狀態(tài)、軟中斷向量表及軟中斷守護(hù)內(nèi)核線程。

  • 軟中斷狀態(tài):即是否有觸發(fā)的軟中斷未處理;

  • 軟中斷向量表:包含兩個(gè)成員變量,一個(gè)是處理此軟中斷的回調(diào)函數(shù),另一個(gè)是處理時(shí)所需的參數(shù)。

  • 軟中斷守護(hù)內(nèi)核線程:內(nèi)核創(chuàng)建一個(gè)內(nèi)核線程ksoftirq來輪詢軟中斷狀態(tài),調(diào)用軟中斷向量表中的軟中斷回調(diào)函數(shù)處理中斷。

  • 假設(shè):當(dāng)一個(gè)軟中斷事件發(fā)生之后,調(diào)用raise_softirq()設(shè)置中斷標(biāo)記位,觸發(fā)中斷事務(wù)。然后會(huì)檢測軟中斷狀態(tài)寄存器的狀態(tài),如果ksoftirq通過查詢發(fā)現(xiàn)某一個(gè)軟中斷事件發(fā)生之后,通過軟中斷向量表調(diào)用軟中斷服務(wù)程序action。

  • 常用軟中斷函數(shù):

  • open_softirq()函數(shù):它注冊一個(gè)軟中斷,將軟中斷的服務(wù)程序注冊到系統(tǒng)的軟中斷向量表;

  • raise_softirq()函數(shù):設(shè)置軟中斷狀態(tài)映射表,觸發(fā)軟中斷事務(wù)響應(yīng)。

  • 軟中斷整個(gè)處理架構(gòu)分為:上半部和下半部。

  • 網(wǎng)絡(luò)收到處理軟中斷的實(shí)現(xiàn)機(jī)制:考慮優(yōu)先級,分別占用向量表的2號和3號軟中斷來分別處理接收和發(fā)送。網(wǎng)絡(luò)協(xié)議棧的軟中斷機(jī)制實(shí)現(xiàn)原理如下:




一文帶你掌握Linux內(nèi)核協(xié)議棧架構(gòu)(超詳細(xì))的評論 (共 條)

使用qq登录你需要登录后才可以评论。
广宗县| 墨玉县| 周至县| 磐安县| 高唐县| 新乡市| 五华县| 大埔县| 蕉岭县| 郸城县| 信宜市| 峨山| 罗甸县| 资兴市| 手游| 威宁| 湖州市| 南投市| 永吉县| 运城市| 通化县| 南平市| 涪陵区| 唐山市| 乐清市| 明星| 中超| 抚远县| 长岭县| 东平县| 莫力| 墨竹工卡县| 镇赉县| 玉山县| 将乐县| 阳朔县| 化州市| 惠州市| 盐城市| 江都市| 青海省|