原创 《深入理解Linux網絡技術內幕》閱讀筆記(二)

數據結構 191 struct sk_buff_head { 192 /* These two members must be first. */ 193 struct sk_buff *next

原创 用戶態進程如何在堆棧執行代碼

用戶態進程在堆棧執行代碼時,因爲內核在加載該進程的時候,取消了在堆棧上執行代碼的權限,因此如果在其上執行代碼的話,進程會直接死掉。 接下來是在堆棧執行代碼的測試例子,主要思路是給物理內存加上可執行代碼的權限。代碼如下: #inc

原创 《深入理解Linux網絡技術內幕》閱讀筆記(三)

Netlink Netlink套接字代表用戶空間和內核的IP網絡配置之間的首選接口。Netlink也可作爲內核部分以及多個用戶空間進程之間的消息傳輸系統。 通過Netlink套接字,你可以使用標準套接字API打開或關閉套接字,

原创 關於如何使用內核模塊來卸載文件系統(文件系統正在被使用)的測試和驗證

今天做的一個測試,當做筆記記錄一下。 測試環境: 我在/home目錄下面建立一個proc文件夾,然後把proc文件系統掛載到上面,結果如下: 然後執行sleep 200 < ./proc,模擬./proc被使用情況。 以

原创 《深入理解Linux網絡技術內幕》閱讀筆記(五)

通過中斷,NIC能夠告知其驅動程序幾種不同的事情,包括: 1.接收一幀。 2.傳輸失敗。 3.DMA傳輸已成功完成。給定一個幀傳輸,當幀上載至NIC的內存準備在此媒介上傳輸時,驅動程序就會將持有該幀的緩衝區釋放掉。使用同步傳

原创 《深入理解Linux網絡技術內幕》閱讀筆記(十六)

當copied被設定時,若封包需要分段,IP層就必須把該選項拷貝至每個片段。class會根據四條準則對此選項分類;這些字段可根據IP選項過濾封包,或者把不同的Qos參數施加至這些封包。 不含選項的IP報頭的大

原创 利用typeof實現一個自己的sizeof

不知道C裏面的sizeof是怎麼實現的,我自己利用typeof實現一個sizeof,實現的宏爲: #define SIZEOF(val) ((size_t)((typeof(val) *)0+1)) 測試代碼: #include<

原创 《深入理解Linux網絡技術內幕》閱讀筆記(十五)

注意Netfilter鉤子函數位置: 當開啓STP時: 1.處理入口BPDU。 2.BPDU也可能是本地產生的。 3,入口網絡數據不是轉發到正確端口就是擴散到所有端口。 4

原创 《深入理解Linux網絡技術內幕》閱讀筆記(十二)

這些分層通常稱爲網絡協議棧,因爲通信會往下傳播通過各個分層,直到實際上經過線路或無線頻道傳輸,然後再返回來。報頭也會以LIFO的方式添加和刪除掉。 每一層都有很多種協議可以用。在最底層的接口交換數據,而所用的協議是預先決定的

原创 《深入理解Linux網絡技術內幕》閱讀筆記(六)

PCI的優點之一是,其支持尋找IRQ和每個設備所需的其他資源的探測方式相當優雅。模塊可以在加載期間接收一些輸入參數,以告知該如何配置其所負責的所有設備。但是,有些時候,特別是PCI這類總線,讓驅動程序自行檢查系統上的設備,然後爲其

原创 《深入理解Linux網絡技術內幕》閱讀筆記(七)

parse_args是一個函數,用於解析輸入字符串,而輸入的字符串內是一些參數,其形式爲變量名稱=值,尋找特定關鍵字,並啓用適當的處理函數。 內核組件可以利用__setup宏註冊關鍵字和相關聯的處理函數。 __setup宏把註

原创 《深入理解Linux網絡技術內幕》閱讀筆記(十三)

中繼器: 通常配有兩個端口,只是簡單地把一個端口所接收的東西複製到另一個端口,反之亦然。它複製的數據是按位複製的,並且對協議毫不關心。 網橋: 它瞭解鏈路層協議,因此可以按幀複製數據,而非按位複製。也就是說,網橋在每個端口上

原创 Linux內核命名空間中關於pid管理的一些理解

記得看《深入Linux內核架構》時,裏面有講到關於命名空間的概念,但是現在卻基本上彎光了,唉。所以今天特意自己翻看一下內核4.2代碼,整理一下命名空間中關於pid管理的部分,等什麼時候有空了,再去翻看那本著作吧(寫的比較亂〒_〒)

原创 《深入理解Linux網絡技術內幕》閱讀筆記(四)

通知鏈 數據結構: 14 struct notifier_block 15 { 16 int (*notifier_call)(struct notifier_block *self, unsigned l

原创 《深入理解Linux網絡技術內幕》閱讀筆記(九)

當特定事件發生時,設備驅動程序會代表內核指示設備產生硬件中斷。處理函數會把該幀排入隊列某處,然後通知內核。該技術是低流量負載下的最佳選擇。遺憾的是,在高流量負載下就無法良好運作:每接收一個幀就強制產生中斷,很快就會讓c