出版時間:2010-1 出版社:人民郵電出版社 作者:羅鈺 頁數(shù):342 字數(shù):524000
Tag標簽:無
前言
這是一本介紹協(xié)議棧實現(xiàn)源代碼的書,不是介紹“協(xié)議”的書。很多人對網(wǎng)絡非常感興趣,但卻不理解內(nèi)部是如何運作的,或知之不多,那么最終的結果就是行之不遠。本書嘗試用淺顯的語言和合理的安排帶領讀者到Linux內(nèi)核網(wǎng)絡模塊的代碼叢林中一游,既讓你有所知,也讓您有所思。為什么選定Linux來介紹網(wǎng)絡實現(xiàn)?首先,某些操作系統(tǒng)不是開源的,本人看不到也不能拿來解說;其次,Linux的市場占有率還是比BSD要高的;最后,Linux是經(jīng)過成千上萬用戶使用過并且還將不斷發(fā)展的。目前Linux在服務器市場上已經(jīng)證明其設計的精巧和健壯,特別是當內(nèi)核也從非搶占式發(fā)展成為搶占式后,嵌入設備市場上也將要掀起一股風浪。于是Linux內(nèi)核分析的資料層出不窮,但有的太老(內(nèi)核的代碼還使用2.2的),有的對網(wǎng)絡部分的分析不甚詳細,于是作者萌發(fā)了分析整個Linux網(wǎng)絡協(xié)議棧的想法。希望能在研究一些經(jīng)典代碼時發(fā)現(xiàn)與時俱進的部分,拋磚引玉,吸引更多的人參與到研究網(wǎng)絡協(xié)議棧的實現(xiàn)技巧以及移植工作上,而不用對照枯燥的RFC文檔和代碼。本人做過一些網(wǎng)絡通信產(chǎn)品開發(fā),所以對網(wǎng)絡內(nèi)部實現(xiàn)很感興趣,于是在學習和工作時間之余記錄下分析和調(diào)試Linux的網(wǎng)絡協(xié)議棧的心得體會。2005年開始計劃寫這本書,當時研究的內(nèi)核版本是2.6.5,但是現(xiàn)在我使用RHEL5作為研究平臺時,內(nèi)核卻升級到了2.6.18版本,協(xié)議棧的部分代碼就已經(jīng)發(fā)生了很多變化,最新的內(nèi)核版本已經(jīng)是2.6.26版本,再一次感嘆計劃趕不上變化的同時,還是鎖定了這個版本,畢竟這是知名公司服務器使用的內(nèi)核版本,有問題還可以到社區(qū)尋找援助。本書的整體風格是比較隨性的記錄。我的目標讀者是廣大對Linux和TCP/IP協(xié)議棧實現(xiàn)感興趣的讀者,而且要有一定研發(fā)經(jīng)驗和編程基礎。只對協(xié)議感興趣的讀者,本書是不太適合的,要看最好是去看RFC或者相關的手冊。
內(nèi)容概要
本書主要對Linux 2.6.18內(nèi)核協(xié)議棧源代碼做了一些基本的分析,這些分析基于作者在操作系統(tǒng)方面的研究和網(wǎng)絡協(xié)議開發(fā)過程中的經(jīng)驗和筆記,編寫本書的目的主要是使讀者能夠在盡可能短的時間內(nèi)掌握Linux內(nèi)核協(xié)議棧的工作機理,為移植和擴展協(xié)議棧打下基礎。 本書首先介紹了內(nèi)核源碼的整體概況及協(xié)議棧初始化過程,然后結合配置、用戶使用協(xié)議棧的方法,采取深入淺出、由上及下的策略對協(xié)議棧的代碼進行了分解和注釋。最后還介紹了通信界里較流行的VLAN技術和LACP協(xié)議?! ”緯m合Linux網(wǎng)絡開發(fā)人員以及對Linux內(nèi)核感興趣的讀者閱讀。
作者簡介
羅鈺,貴州人,國防科學技術大學碩士畢業(yè),多年Linux底層開發(fā)經(jīng)驗,精通軟件分析與設計、TCP/IP協(xié)議,曾開發(fā)Windows/Linux/Vxworks/FreeBSD等平臺的設備驅(qū)動,開發(fā)過以太網(wǎng)芯片驅(qū)動、二層協(xié)議以及OSPF路由協(xié)議,對MPLS架構設計有非常豐富的經(jīng)驗,擅長編譯器、CPU技術,近年來一直致力于無線網(wǎng)絡產(chǎn)品系統(tǒng)的分析與設計工作。
書籍目錄
第1章 操作系統(tǒng)、網(wǎng)絡、協(xié)議棧、代碼 1.1 Linux操作系統(tǒng)介紹 1.1.1 Linux操作系統(tǒng)架構簡介 1.1.2 網(wǎng)絡協(xié)議發(fā)展介紹 1.2 本書的組織和安排 1.2.1 基本的數(shù)據(jù)結構和計算機術語 1.2.2 圖片風格演示 1.2.3 本書的組織第2章 內(nèi)核系統(tǒng)初始化 2.1 系統(tǒng)初始化流程簡介 2.2 內(nèi)核文件解讀 2.2.1 ELF文件格式 2.2.2 Link Scripts知識 2.2.3 Linux內(nèi)核鏡像解析 2.3 中斷及任務調(diào)度管理 2.3.1 中斷及軟中斷模型 2.3.2 各種語境下的切換 2.3.3 內(nèi)核下的同步與互斥 2.3.4 各種異步手段 2.4 虛擬文件系統(tǒng) 2.5 網(wǎng)絡協(xié)議棧各部分初始化 2.5.1 網(wǎng)絡基礎系統(tǒng)初始化 2.5.2 網(wǎng)絡內(nèi)存管理 2.5.3 網(wǎng)絡文件系統(tǒng)初始化 2.5.4 網(wǎng)絡協(xié)議初始化 2.5.5 初步了解路由系統(tǒng) 2.6 Linux設備管理 2.6.1 底層PCI模塊的初始化 2.6.2 網(wǎng)絡設備接口初始化例程第3章 配置網(wǎng)絡系統(tǒng) 3.1 配置過程分析 3.1.1 配置是如何下達到內(nèi)核的? 3.1.2 socket系統(tǒng)調(diào)用 3.1.3 ioctl代碼的實現(xiàn) 3.1.4 loopback接口的配置過程 3.1.5 IP別名的實現(xiàn) 3.2 回顧FIB系統(tǒng)初始化 3.3 深入FIB系統(tǒng) 3.4 FIB系統(tǒng)發(fā)生了什么樣的變化 3.5 直接訪問路由表 3.6 接口狀態(tài)變化的處理過程第4章 網(wǎng)絡層實現(xiàn)的初步研究 4.1 從ping 127.0.0.1開始旅程 4.2 再次相遇Socket系統(tǒng)調(diào)用 4.3 IP數(shù)據(jù)報文格式 4.4 send系統(tǒng)調(diào)用 4.5 在路由系統(tǒng)中游歷 4.5.1 查找出口 4.5.2 當目的地址是遠端主機時 4.5.3 創(chuàng)建對應路由cache表項 4.5.4 創(chuàng)建對應鄰居表項 4.6 回到發(fā)送的路徑 4.6.1 IP層發(fā)送過程 4.6.2 揭密hh_cache 4.7 ARP的作用 4.7.1 ARP的機制 4.7.2 ARP報文格式 4.7.3 Linux ARP協(xié)議的實現(xiàn) 4.8 到達設備驅(qū)動層 4.8.1 數(shù)據(jù)鏈路層幀格式 4.8.2 Loopback設備的發(fā)送過程 4.9 接收過程:從中斷到路由系統(tǒng) 4.10 ICMP 4.10.1 ICMP報文格式 4.10.2 ping本機地址及回環(huán)地址 4.10.3 ping外部地址 4.11 從內(nèi)核到用戶第5章 傳輸層實現(xiàn)的研究第6章 Select系統(tǒng)調(diào)用的實現(xiàn)機制第7章 數(shù)據(jù)鏈路層協(xié)議實現(xiàn)后記參考文獻
章節(jié)摘錄
插圖:因此RCU實際上是一種改進的刑rwlock,讀操作幾乎沒有什么同步開銷,它不需要鎖,不使用原子指令,因此不會導致鎖競爭、內(nèi)存延遲以及流水線停滯。不需要鎖也使得使用更容易,因為死鎖問題就不需要考慮了。寫操作的同步開銷比較大,它需要延遲數(shù)據(jù)結構的釋放,復制被修改的數(shù)據(jù)結構,它也必須使用某種鎖機制同步并行的其他寫操作的修改操作。讀操作必須提供一個信號給寫操作,以便寫操作能夠確定數(shù)據(jù)可以被安全地釋放或修改的時機。有一個專門的垃圾收集器來探測讀操作的信號,一旦所有的讀操作都已經(jīng)發(fā)送信號告知它們都不在使用被RCU保護的數(shù)據(jù)結構,垃圾收集器就調(diào)用回調(diào)函數(shù)完成最后的數(shù)據(jù)釋放或修改操作。RCU與rwloek的不同之處是:它既允許多個讀操作同時訪問被保護的數(shù)據(jù),又允許多個讀操作和多個寫操作同時訪問被保護的數(shù)據(jù)(注意:是否可以有多個寫操作并行訪問取決于寫操作之間使用的同步機制),讀操作沒有任何同步開銷,而寫操作的同步開銷則取決于使用的寫操作間同步機制。但RCU不能替代rwlock,因為如果寫操作比較多時,對讀操作的性能的提高不能彌補寫操作導致的損失。2.3.4各種異步手段1.Timer(定時器函數(shù))作為一個有經(jīng)驗的開發(fā)者,一定知道所謂的定時器函數(shù),其實都是一些回調(diào)函數(shù)而已,只不過本書中涉及的定時器都是在內(nèi)核中執(zhí)行,內(nèi)核中的Timer不是線程,它們運行在中斷級,所以timer函數(shù)不應該做任何精細的工作。如果需要進一步處理,那么應該在tasklet里完成,因為tasklet可以被中斷搶占。創(chuàng)建Timer的方式有好幾種,出于篇幅的原因,這里只舉一個在協(xié)議棧經(jīng)常使用的方式:(1)定義一個timer_listf{}結構比如名叫atimer;(2)調(diào)用init_timer(&atimer);(3)指定atimer.expires為執(zhí)行周期,atimer.function為回調(diào)函數(shù),timer.data為回調(diào)函數(shù)的參數(shù);(4)執(zhí)行add_timer(&atimer);(5)當執(zhí)行atimer.expires之后,執(zhí)行回調(diào),并且在回調(diào)函數(shù)中再執(zhí)行(4),依次重復。為什么要采用這種方式而非其他,是因為要保證這種rimer的優(yōu)先級高于其他方式創(chuàng)建的Timer。
后記
寫完這本書,我只能感嘆,時間真是靠擠出來的。盡管《深入理解Linux網(wǎng)絡內(nèi)幕》已經(jīng)面市,但我還是覺得我要繼續(xù)完成這部分工作,一來了卻自己的愿望,二來希望用自己的語言和見解來分析Linux的協(xié)議棧,使之更符合我國軟件工程師的需要,我的目的就達到了。閱讀本書能大概了解Linux是如何實現(xiàn)TCP/IP協(xié)議棧的,但卻不是能用來當枕頭的“紅寶書”,所以,讀者必須結合協(xié)議的RFC文檔來看本書。本人將選擇Linux和。FreeBSD的網(wǎng)絡協(xié)議棧作為自己的業(yè)余研究對象。所以本套書應該有兩本,該本是Linux協(xié)議棧的剖析另一本還在計劃之中。為何選擇這兩者?其一:代碼是公開且免費的,不會有公司來找我麻煩,我也不需要采用極端的方式獲取這些代碼。其二:這兩種代碼已成為網(wǎng)絡應用之事實標準,Linux在當前大行其道,自不必說,而FreeBSD是BSD家族中應用最廣泛者,其協(xié)議棧為VxWorks等工業(yè)級操作系統(tǒng)采用,而且是故去的Steven所著的《TCP-IP詳解卷2實現(xiàn)》的代碼基。為投開發(fā)人員之所好,我決定研究這兩個操作系統(tǒng)的網(wǎng)絡協(xié)議棧。本書就是我的第一本關于Linux方面的文檔。將來有時間我將寫出FreeBSD的協(xié)議棧文檔。我們知道如果想研究BSD的協(xié)議??梢钥碐ray R.Wright和W.Richard Stevens編寫的《TCP/IP Illustrated Volume2:The Implementation》(中文譯名:《TCP/IP詳解卷2:實現(xiàn)》),但是:FreeBSD已經(jīng)進化到7.0版本了,其內(nèi)部的結構已經(jīng)有相當大的變化,光看那本書估計還不夠。而且,根據(jù)我的經(jīng)驗,作為高端嵌入式軟件市場占有量最大的嵌入式操作系統(tǒng)VxWorks,其網(wǎng)絡協(xié)議棧即從BSD發(fā)展而來,卻對BSD協(xié)議棧進行了大量的修改,連代碼風格都不一樣。但看這本書就更不能完全理解VxWorks的網(wǎng)絡協(xié)議棧。于是許多研究者在研究路由器操作系統(tǒng)的協(xié)議棧時,不知從何處研究起。在本文完成之際,作者謹向所有給予我指導、關心、支持和幫助的老師、Leader、同事、同學和親人致以衷心的感謝!
編輯推薦
《深入淺出Linux TCP /IP協(xié)議?!穼WLinux TCP/IP,從這里開始!從Linux 2.6內(nèi)核基礎講起,引導讀者快速入門運用大量示意圖,清晰講解函數(shù)之間的調(diào)用關系詳細分析核心代碼實現(xiàn)思想,代碼注釋詳盡《深入淺出Linux TCP /IP協(xié)議棧》首先介紹了Linux內(nèi)核源碼的整體概況及協(xié)議棧初始化過程,然后結合配置、用戶使用協(xié)議棧的方法,采取深入淺出、由上及下的策略對協(xié)議棧代碼進行分解和注釋,涵蓋以下內(nèi)容:操作系統(tǒng)、網(wǎng)絡、協(xié)議棧、代碼內(nèi)核系統(tǒng)初始化配置網(wǎng)絡系統(tǒng)網(wǎng)絡層的實現(xiàn)傳輸層的實現(xiàn)Select系統(tǒng)調(diào)用的實現(xiàn)機制數(shù)據(jù)鏈路層協(xié)議實現(xiàn)
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載
深入淺出Linux TCP/IP協(xié)議棧 PDF格式下載