《追蹤Linux TCP和IP代碼運行——基於2.6核心》 本書以應用程式為線索,詳細描述了數據包在協定棧的分段、重組、傳送、接收過程,同時分析了路由的初始化和設定過程,主要包括socket應用程式、TCP/IP協定、路由、通知鏈、鄰居子系統等內容。全書涵蓋了協定棧的全部知識點,對於廣大的讀者來說這是一本極其難得的技術資料。同時,書中論述了網路設備的工作原理,解釋了RTL8169和嵌入式CS8900、DM9000網卡設備的核心過程。
基本介紹
- 書名:追蹤Linux TCP和IP代碼運行——基於2.6核心
- 作者:秦健
- ISBN:978-7-5124-0048-1
- 出版時間:2010-04
圖書簡介,基本信息,圖書目錄,圖書前言,
圖書簡介
本書以應用程式為線索,詳細描述了數據包在協定棧的分段、重組、傳送、接收過程,同時分析了路由的初始化和設定過程,主要包括socket應用程式、TCP/IP協定、路由、通知鏈、鄰居子系統等內容。全書涵蓋了協定棧的全部知識點,對於廣大的讀者來說這是一本極其難得的技術資料。同時,書中論述了網路設備的工作原理,解釋了RTL8169和嵌入式CS8900、dm9000網卡設備的核心過程。
本書可作為3G網路開發人員、嵌入式通信產品開發人員、網路套用開發人員、網路管理人員及網路愛好者、從事網路方向的本科生、研究生的參考書。
本書可作為3G網路開發人員、嵌入式通信產品開發人員、網路套用開發人員、網路管理人員及網路愛好者、從事網路方向的本科生、研究生的參考書。
基本信息
版次:1
印次:1
字數:829千字
開本:787×10921/16
紙張:
本書封面
圖書目錄
第1章本書的計畫1
1.1基本路線和要求1
技術要點:分析路線伺服器程式學習要求
1.2TCP/IP協定層的劃分與基本知識4
技術要點:協定層知識伺服器與客戶端的通信路線
1.3函式到系統調用的過程6
技術要點:庫函式的真實定義系統調用的總入口及傳值
1.4網路檔案系統11
技術要點:網路檔案系統的特點initcall機制網路檔案系統的安裝
第2章socket的創建15
2.1本章幾個重要數據結構15
技術要點:socket結構、sock結構、sk_buff結構、tcp_sock結構的定義
2.2分配並初始化socket結構23
技術要點:分配socket結構空間分配檔案節點
2.3使用協定族的函式表初始化socket27
技術要點:登記函式表定義、註冊及初始化協定族結構
2.4分配並初始化sock結構38
技術要點:分配結構空間初始化sock結構及數據包佇列頭
2.5TCP協定對sock結構初始化43
技術要點:TCP協定的初始化函式tcp_sock等結構的關聯
2.6socket與檔案系統的關聯46
技術要點:分配檔案指針和檔案號指定檔案操作表
第3章socket地址設定51
3.1地址設定接口51
技術要點:地址設定過程查找socket和檔案指針複製數據到核心
3.2地址結構定義54
技術要點:結構的定義及賦值協定族的設定函式網路空間結構
3.3地址類型58
技術要點:地址類型的概念查驗地址類型獲取路由函式表
3.4設定地址和連線埠62
技術要點:地址與連線埠的佇列結構地址與連線埠的查找與建立
3.5網路空間總管init_net73
技術要點:init_net結構的初始化佇列頭的初始化
第4章路由78
4.1路由函式表結構及關係圖78
技術要點:fib_table結構、fn_zone結構、fib_node結構及fib_info結構的關係
4.2路由函式表的初始化78
技術要點:路由表佇列、路由函式表佇列的初始化路由規則結構、路由函式表結構、路由區結構的定義子網掩碼的作用
4.3通過路由函式表查找路由信息100
技術要點:路由區及路由節點的匹配和查找路由信息、路由跳轉結構的查找
4.4路由的設定及相關結構的初如化109
技術要點:設定路由的三條路線路由配置結構的定義路由區的建立路由信息的創建和調整佇列節點的鏈入與摘除路由跳轉結構的初始化路由函式表的查找
路由別名結構的建立路由表的沖刷與釋放
4.5基於輸出方向的路由表查找與創建156
技術要點:路由鍵值結構的定義路由表結構的定義路由表佇列的輪詢路由表的創建與查找
4.6基於輸入方向的路由表查找與創建189
技術要點:為數據包查找路由表創建轉發的路由表
第5章通知鏈200
5.1設備通知鏈節點的掛入200
技術要點:通知鏈節點結構的定義設備配置結構的定義設備通知鏈的建立
5.2地址通知鏈節點的掛入206
技術要點:地址通知鏈的定義和鏈入
5.3通知鏈的調用和執行207
技術要點:網路設備結構的登記註冊通知節點函式的調用
第6章netlink概述212
6.1netlink的創建212
技術要點:netlink的sock結構定義及初始化
6.2註冊路由的netlink217
技術要點:路由的netlink結構定義及註冊
6.3通過netlink通信219
技術要點:netlink的信息結構、訊息頭結構、路由訊息結構的定義及初始化netlink數據包的建立及傳送
第7章監聽連線請求234
7.1核心的監聽函式234
技術要點:協定族監聽函式的調用連線數的控制監聽結構的建立及定義連線請求結構及佇列
7.2核心的監聽佇列241
技術要點:監聽佇列的鏈入過程監聽佇列的睡眠等待和喚醒
第8章接收連線請求245
8.1接收連線函式245
技術要點:協定族接收函式的調用定時等待連線請求
8.2異步接收方式253
技術要點:異步接收實例異步喚醒路線查詢客戶端sock結構和連線請求結構
8.3獲取連線請求257
技術要點:客戶端socket、sock結構的對接獲取客戶端的地址INET協定族結構的定義
第9章準備連線請求262
9.1核心的連線函式263
技術要點:客戶端程式及伺服器程式的通信效果協定族連線函式的調用源路由的分類和查找TCP協定的socket結構定義連線埠的查找與復用SYN數據包的建立路由項結構的定義MTU、MSS的作用及設定滑動視窗的初始化
9.2分配數據包結構和數據塊空間286
技術要點:創建並初始化數據包共享結構的定義及數據塊的分類TCP的控制結構傳送佇列的鏈入和計數數據包的結構示意圖
9.3構建、傳送TCP數據包299
技術要點:TCP頭部的定義TCP層的傳送過程克隆數據包的建立重發數據包的依據擁塞報告的建立
1.1基本路線和要求1
技術要點:分析路線伺服器程式學習要求
1.2TCP/IP協定層的劃分與基本知識4
技術要點:協定層知識伺服器與客戶端的通信路線
1.3函式到系統調用的過程6
技術要點:庫函式的真實定義系統調用的總入口及傳值
1.4網路檔案系統11
技術要點:網路檔案系統的特點initcall機制網路檔案系統的安裝
第2章socket的創建15
2.1本章幾個重要數據結構15
技術要點:socket結構、sock結構、sk_buff結構、tcp_sock結構的定義
2.2分配並初始化socket結構23
技術要點:分配socket結構空間分配檔案節點
2.3使用協定族的函式表初始化socket27
技術要點:登記函式表定義、註冊及初始化協定族結構
2.4分配並初始化sock結構38
技術要點:分配結構空間初始化sock結構及數據包佇列頭
2.5TCP協定對sock結構初始化43
技術要點:TCP協定的初始化函式tcp_sock等結構的關聯
2.6socket與檔案系統的關聯46
技術要點:分配檔案指針和檔案號指定檔案操作表
第3章socket地址設定51
3.1地址設定接口51
技術要點:地址設定過程查找socket和檔案指針複製數據到核心
3.2地址結構定義54
技術要點:結構的定義及賦值協定族的設定函式網路空間結構
3.3地址類型58
技術要點:地址類型的概念查驗地址類型獲取路由函式表
3.4設定地址和連線埠62
技術要點:地址與連線埠的佇列結構地址與連線埠的查找與建立
3.5網路空間總管init_net73
技術要點:init_net結構的初始化佇列頭的初始化
第4章路由78
4.1路由函式表結構及關係圖78
技術要點:fib_table結構、fn_zone結構、fib_node結構及fib_info結構的關係
4.2路由函式表的初始化78
技術要點:路由表佇列、路由函式表佇列的初始化路由規則結構、路由函式表結構、路由區結構的定義子網掩碼的作用
4.3通過路由函式表查找路由信息100
技術要點:路由區及路由節點的匹配和查找路由信息、路由跳轉結構的查找
4.4路由的設定及相關結構的初如化109
技術要點:設定路由的三條路線路由配置結構的定義路由區的建立路由信息的創建和調整佇列節點的鏈入與摘除路由跳轉結構的初始化路由函式表的查找
路由別名結構的建立路由表的沖刷與釋放
4.5基於輸出方向的路由表查找與創建156
技術要點:路由鍵值結構的定義路由表結構的定義路由表佇列的輪詢路由表的創建與查找
4.6基於輸入方向的路由表查找與創建189
技術要點:為數據包查找路由表創建轉發的路由表
第5章通知鏈200
5.1設備通知鏈節點的掛入200
技術要點:通知鏈節點結構的定義設備配置結構的定義設備通知鏈的建立
5.2地址通知鏈節點的掛入206
技術要點:地址通知鏈的定義和鏈入
5.3通知鏈的調用和執行207
技術要點:網路設備結構的登記註冊通知節點函式的調用
第6章netlink概述212
6.1netlink的創建212
技術要點:netlink的sock結構定義及初始化
6.2註冊路由的netlink217
技術要點:路由的netlink結構定義及註冊
6.3通過netlink通信219
技術要點:netlink的信息結構、訊息頭結構、路由訊息結構的定義及初始化netlink數據包的建立及傳送
第7章監聽連線請求234
7.1核心的監聽函式234
技術要點:協定族監聽函式的調用連線數的控制監聽結構的建立及定義連線請求結構及佇列
7.2核心的監聽佇列241
技術要點:監聽佇列的鏈入過程監聽佇列的睡眠等待和喚醒
第8章接收連線請求245
8.1接收連線函式245
技術要點:協定族接收函式的調用定時等待連線請求
8.2異步接收方式253
技術要點:異步接收實例異步喚醒路線查詢客戶端sock結構和連線請求結構
8.3獲取連線請求257
技術要點:客戶端socket、sock結構的對接獲取客戶端的地址INET協定族結構的定義
第9章準備連線請求262
9.1核心的連線函式263
技術要點:客戶端程式及伺服器程式的通信效果協定族連線函式的調用源路由的分類和查找TCP協定的socket結構定義連線埠的查找與復用SYN數據包的建立路由項結構的定義MTU、MSS的作用及設定滑動視窗的初始化
9.2分配數據包結構和數據塊空間286
技術要點:創建並初始化數據包共享結構的定義及數據塊的分類TCP的控制結構傳送佇列的鏈入和計數數據包的結構示意圖
9.3構建、傳送TCP數據包299
技術要點:TCP頭部的定義TCP層的傳送過程克隆數據包的建立重發數據包的依據擁塞報告的建立
圖書前言
學習過TCP/IP協定的讀者可能會感覺面對長篇大論的一堆文字往往不知道從何入手,甚至很多讀者在認真閱讀之後也無法領會協定的作用,更無法進入核心的協定棧閱讀代碼,以至於無法從事網路方面的開發與維護。然而,高速發展的網路時代要求技術人員必須快速掌握和運用協定的知識,那么有沒有一種有效的方法可以幫助我們實現這一目標呢?相信讀者可以在本書中找到答案。
理論的學習固然是基礎,但是不一定具備了理論才開始閱讀代碼,就像以往大家只採取背單詞、記語法的方式學英語,結果十幾年之後仍然不會說英語,不會用英語;因為這種英語教學方法只停留在理論層上,現代的英語教學則打破了以理論為主線的學習方法,從套用性和實用性出發,極大改變了學習的效果。因此,本書借鑑現代英語的學習模式,選擇從實際套用出發,以應用程式為主線進入Linux核心,通過應用程式的工作過程層層解析核心的協定棧,揭示協定棧的工作路線及網路的真實過程,幫助讀者徹底掌握協定棧,使其在閱讀完本書之後有一種登上泰山頂峰的興奮之情。目前,市場針對Linux網路的講解書籍已經很多,但內容基本都是對理論的泛泛而談,有的書籍缺少主線,有的書籍缺少與實際套用的結合,有的書籍採用的核心版本過於陳舊,這些問題加大了閱讀的難度,導致很多讀者使用“壓箱子底”的辦法放棄了學習。相反,本書克服了上述問題,並且在描述每一個關鍵過程時,採取穿插圖片和逐行解釋的方式解決了這些難點。
本書針對的是2.6版本的Linux核心,對於核心的進程管理、記憶體管理、檔案系統等內容,讀者可以借鑑本書推薦書籍或者直接跳過這些內容只閱讀核心部分;對於難以理解的內容可以先放一放,往往在讀第二遍時就會自然而解,因為核心的知識點是互為補充的。由於內容繁多,不足之處在所難免,請讀者指正。
廣州工程技術職業學院馮偉老師對本書的圖片編輯提供了幫助,羅燕軍、楊永祥、張文盛、李華、倪巍、馮偉、劉國兵、葛德奇、朱德良、羅兵、彭海、白瑜、顏詩敏、傅海熒、李柱棟、盛曉輝、修宸、張澤榮、陳嘉順、時安營、周丹、江均勇、楊碩、羅偉彬、李洪彬、楊春雷、付金平、繆曉及鐘海文也對本書的編輯提供了支持,在此向他們的辛勤付出表示感謝。
作者
2010年1月
理論的學習固然是基礎,但是不一定具備了理論才開始閱讀代碼,就像以往大家只採取背單詞、記語法的方式學英語,結果十幾年之後仍然不會說英語,不會用英語;因為這種英語教學方法只停留在理論層上,現代的英語教學則打破了以理論為主線的學習方法,從套用性和實用性出發,極大改變了學習的效果。因此,本書借鑑現代英語的學習模式,選擇從實際套用出發,以應用程式為主線進入Linux核心,通過應用程式的工作過程層層解析核心的協定棧,揭示協定棧的工作路線及網路的真實過程,幫助讀者徹底掌握協定棧,使其在閱讀完本書之後有一種登上泰山頂峰的興奮之情。目前,市場針對Linux網路的講解書籍已經很多,但內容基本都是對理論的泛泛而談,有的書籍缺少主線,有的書籍缺少與實際套用的結合,有的書籍採用的核心版本過於陳舊,這些問題加大了閱讀的難度,導致很多讀者使用“壓箱子底”的辦法放棄了學習。相反,本書克服了上述問題,並且在描述每一個關鍵過程時,採取穿插圖片和逐行解釋的方式解決了這些難點。
本書針對的是2.6版本的Linux核心,對於核心的進程管理、記憶體管理、檔案系統等內容,讀者可以借鑑本書推薦書籍或者直接跳過這些內容只閱讀核心部分;對於難以理解的內容可以先放一放,往往在讀第二遍時就會自然而解,因為核心的知識點是互為補充的。由於內容繁多,不足之處在所難免,請讀者指正。
廣州工程技術職業學院馮偉老師對本書的圖片編輯提供了幫助,羅燕軍、楊永祥、張文盛、李華、倪巍、馮偉、劉國兵、葛德奇、朱德良、羅兵、彭海、白瑜、顏詩敏、傅海熒、李柱棟、盛曉輝、修宸、張澤榮、陳嘉順、時安營、周丹、江均勇、楊碩、羅偉彬、李洪彬、楊春雷、付金平、繆曉及鐘海文也對本書的編輯提供了支持,在此向他們的辛勤付出表示感謝。
作者
2010年1月