深入淺出Linux TCP/IP協(xié)議棧

出版時(shí)間:2010-1  出版社:人民郵電出版社  作者:羅鈺  頁數(shù):342  字?jǐn)?shù):524000  
Tag標(biāo)簽:無  

前言

這是一本介紹協(xié)議棧實(shí)現(xiàn)源代碼的書,不是介紹“協(xié)議”的書。很多人對網(wǎng)絡(luò)非常感興趣,但卻不理解內(nèi)部是如何運(yùn)作的,或知之不多,那么最終的結(jié)果就是行之不遠(yuǎn)。本書嘗試用淺顯的語言和合理的安排帶領(lǐng)讀者到Linux內(nèi)核網(wǎng)絡(luò)模塊的代碼叢林中一游,既讓你有所知,也讓您有所思。為什么選定Linux來介紹網(wǎng)絡(luò)實(shí)現(xiàn)?首先,某些操作系統(tǒng)不是開源的,本人看不到也不能拿來解說;其次,Linux的市場占有率還是比BSD要高的;最后,Linux是經(jīng)過成千上萬用戶使用過并且還將不斷發(fā)展的。目前Linux在服務(wù)器市場上已經(jīng)證明其設(shè)計(jì)的精巧和健壯,特別是當(dāng)內(nèi)核也從非搶占式發(fā)展成為搶占式后,嵌入設(shè)備市場上也將要掀起一股風(fēng)浪。于是Linux內(nèi)核分析的資料層出不窮,但有的太老(內(nèi)核的代碼還使用2.2的),有的對網(wǎng)絡(luò)部分的分析不甚詳細(xì),于是作者萌發(fā)了分析整個(gè)Linux網(wǎng)絡(luò)協(xié)議棧的想法。希望能在研究一些經(jīng)典代碼時(shí)發(fā)現(xiàn)與時(shí)俱進(jìn)的部分,拋磚引玉,吸引更多的人參與到研究網(wǎng)絡(luò)協(xié)議棧的實(shí)現(xiàn)技巧以及移植工作上,而不用對照枯燥的RFC文檔和代碼。本人做過一些網(wǎng)絡(luò)通信產(chǎn)品開發(fā),所以對網(wǎng)絡(luò)內(nèi)部實(shí)現(xiàn)很感興趣,于是在學(xué)習(xí)和工作時(shí)間之余記錄下分析和調(diào)試Linux的網(wǎng)絡(luò)協(xié)議棧的心得體會。2005年開始計(jì)劃寫這本書,當(dāng)時(shí)研究的內(nèi)核版本是2.6.5,但是現(xiàn)在我使用RHEL5作為研究平臺時(shí),內(nèi)核卻升級到了2.6.18版本,協(xié)議棧的部分代碼就已經(jīng)發(fā)生了很多變化,最新的內(nèi)核版本已經(jīng)是2.6.26版本,再一次感嘆計(jì)劃趕不上變化的同時(shí),還是鎖定了這個(gè)版本,畢竟這是知名公司服務(wù)器使用的內(nèi)核版本,有問題還可以到社區(qū)尋找援助。本書的整體風(fēng)格是比較隨性的記錄。我的目標(biāo)讀者是廣大對Linux和TCP/IP協(xié)議棧實(shí)現(xiàn)感興趣的讀者,而且要有一定研發(fā)經(jīng)驗(yàn)和編程基礎(chǔ)。只對協(xié)議感興趣的讀者,本書是不太適合的,要看最好是去看RFC或者相關(guān)的手冊。

內(nèi)容概要

  本書主要對Linux 2.6.18內(nèi)核協(xié)議棧源代碼做了一些基本的分析,這些分析基于作者在操作系統(tǒng)方面的研究和網(wǎng)絡(luò)協(xié)議開發(fā)過程中的經(jīng)驗(yàn)和筆記,編寫本書的目的主要是使讀者能夠在盡可能短的時(shí)間內(nèi)掌握Linux內(nèi)核協(xié)議棧的工作機(jī)理,為移植和擴(kuò)展協(xié)議棧打下基礎(chǔ)。  本書首先介紹了內(nèi)核源碼的整體概況及協(xié)議棧初始化過程,然后結(jié)合配置、用戶使用協(xié)議棧的方法,采取深入淺出、由上及下的策略對協(xié)議棧的代碼進(jìn)行了分解和注釋。最后還介紹了通信界里較流行的VLAN技術(shù)和LACP協(xié)議。  本書適合Linux網(wǎng)絡(luò)開發(fā)人員以及對Linux內(nèi)核感興趣的讀者閱讀。

作者簡介

羅鈺,貴州人,國防科學(xué)技術(shù)大學(xué)碩士畢業(yè),多年Linux底層開發(fā)經(jīng)驗(yàn),精通軟件分析與設(shè)計(jì)、TCP/IP協(xié)議,曾開發(fā)Windows/Linux/Vxworks/FreeBSD等平臺的設(shè)備驅(qū)動(dòng),開發(fā)過以太網(wǎng)芯片驅(qū)動(dòng)、二層協(xié)議以及OSPF路由協(xié)議,對MPLS架構(gòu)設(shè)計(jì)有非常豐富的經(jīng)驗(yàn),擅長編譯器、CPU技術(shù),近年來一直致力于無線網(wǎng)絡(luò)產(chǎn)品系統(tǒng)的分析與設(shè)計(jì)工作。

書籍目錄

第1章  操作系統(tǒng)、網(wǎng)絡(luò)、協(xié)議棧、代碼 1.1  Linux操作系統(tǒng)介紹  1.1.1  Linux操作系統(tǒng)架構(gòu)簡介  1.1.2  網(wǎng)絡(luò)協(xié)議發(fā)展介紹 1.2  本書的組織和安排  1.2.1  基本的數(shù)據(jù)結(jié)構(gòu)和計(jì)算機(jī)術(shù)語  1.2.2  圖片風(fēng)格演示  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  中斷及任務(wù)調(diào)度管理  2.3.1  中斷及軟中斷模型  2.3.2  各種語境下的切換  2.3.3  內(nèi)核下的同步與互斥  2.3.4  各種異步手段 2.4  虛擬文件系統(tǒng) 2.5  網(wǎng)絡(luò)協(xié)議棧各部分初始化  2.5.1  網(wǎng)絡(luò)基礎(chǔ)系統(tǒng)初始化  2.5.2  網(wǎng)絡(luò)內(nèi)存管理  2.5.3  網(wǎng)絡(luò)文件系統(tǒng)初始化  2.5.4  網(wǎng)絡(luò)協(xié)議初始化  2.5.5  初步了解路由系統(tǒng) 2.6  Linux設(shè)備管理  2.6.1  底層PCI模塊的初始化  2.6.2  網(wǎng)絡(luò)設(shè)備接口初始化例程第3章  配置網(wǎng)絡(luò)系統(tǒng) 3.1  配置過程分析  3.1.1  配置是如何下達(dá)到內(nèi)核的?  3.1.2  socket系統(tǒng)調(diào)用  3.1.3  ioctl代碼的實(shí)現(xiàn)  3.1.4  loopback接口的配置過程  3.1.5  IP別名的實(shí)現(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)絡(luò)層實(shí)現(xiàn)的初步研究 4.1  從ping 127.0.0.1開始旅程 4.2  再次相遇Socket系統(tǒng)調(diào)用 4.3  IP數(shù)據(jù)報(bào)文格式 4.4  send系統(tǒng)調(diào)用 4.5  在路由系統(tǒng)中游歷  4.5.1  查找出口  4.5.2  當(dāng)目的地址是遠(yuǎn)端主機(jī)時(shí)  4.5.3  創(chuàng)建對應(yīng)路由cache表項(xiàng)  4.5.4  創(chuàng)建對應(yīng)鄰居表項(xiàng) 4.6  回到發(fā)送的路徑  4.6.1  IP層發(fā)送過程  4.6.2  揭密hh_cache 4.7  ARP的作用  4.7.1  ARP的機(jī)制  4.7.2  ARP報(bào)文格式  4.7.3  Linux ARP協(xié)議的實(shí)現(xiàn) 4.8  到達(dá)設(shè)備驅(qū)動(dòng)層  4.8.1  數(shù)據(jù)鏈路層幀格式  4.8.2  Loopback設(shè)備的發(fā)送過程 4.9  接收過程:從中斷到路由系統(tǒng) 4.10  ICMP  4.10.1  ICMP報(bào)文格式  4.10.2  ping本機(jī)地址及回環(huán)地址  4.10.3  ping外部地址 4.11  從內(nèi)核到用戶第5章  傳輸層實(shí)現(xiàn)的研究第6章  Select系統(tǒng)調(diào)用的實(shí)現(xiàn)機(jī)制第7章  數(shù)據(jù)鏈路層協(xié)議實(shí)現(xiàn)后記參考文獻(xiàn)

章節(jié)摘錄

插圖:因此RCU實(shí)際上是一種改進(jìn)的刑rwlock,讀操作幾乎沒有什么同步開銷,它不需要鎖,不使用原子指令,因此不會導(dǎo)致鎖競爭、內(nèi)存延遲以及流水線停滯。不需要鎖也使得使用更容易,因?yàn)樗梨i問題就不需要考慮了。寫操作的同步開銷比較大,它需要延遲數(shù)據(jù)結(jié)構(gòu)的釋放,復(fù)制被修改的數(shù)據(jù)結(jié)構(gòu),它也必須使用某種鎖機(jī)制同步并行的其他寫操作的修改操作。讀操作必須提供一個(gè)信號給寫操作,以便寫操作能夠確定數(shù)據(jù)可以被安全地釋放或修改的時(shí)機(jī)。有一個(gè)專門的垃圾收集器來探測讀操作的信號,一旦所有的讀操作都已經(jīng)發(fā)送信號告知它們都不在使用被RCU保護(hù)的數(shù)據(jù)結(jié)構(gòu),垃圾收集器就調(diào)用回調(diào)函數(shù)完成最后的數(shù)據(jù)釋放或修改操作。RCU與rwloek的不同之處是:它既允許多個(gè)讀操作同時(shí)訪問被保護(hù)的數(shù)據(jù),又允許多個(gè)讀操作和多個(gè)寫操作同時(shí)訪問被保護(hù)的數(shù)據(jù)(注意:是否可以有多個(gè)寫操作并行訪問取決于寫操作之間使用的同步機(jī)制),讀操作沒有任何同步開銷,而寫操作的同步開銷則取決于使用的寫操作間同步機(jī)制。但RCU不能替代rwlock,因?yàn)槿绻麑懖僮鞅容^多時(shí),對讀操作的性能的提高不能彌補(bǔ)寫操作導(dǎo)致的損失。2.3.4各種異步手段1.Timer(定時(shí)器函數(shù))作為一個(gè)有經(jīng)驗(yàn)的開發(fā)者,一定知道所謂的定時(shí)器函數(shù),其實(shí)都是一些回調(diào)函數(shù)而已,只不過本書中涉及的定時(shí)器都是在內(nèi)核中執(zhí)行,內(nèi)核中的Timer不是線程,它們運(yùn)行在中斷級,所以timer函數(shù)不應(yīng)該做任何精細(xì)的工作。如果需要進(jìn)一步處理,那么應(yīng)該在tasklet里完成,因?yàn)閠asklet可以被中斷搶占。創(chuàng)建Timer的方式有好幾種,出于篇幅的原因,這里只舉一個(gè)在協(xié)議棧經(jīng)常使用的方式:(1)定義一個(gè)timer_listf{}結(jié)構(gòu)比如名叫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)當(dāng)執(zhí)行atimer.expires之后,執(zhí)行回調(diào),并且在回調(diào)函數(shù)中再執(zhí)行(4),依次重復(fù)。為什么要采用這種方式而非其他,是因?yàn)橐WC這種rimer的優(yōu)先級高于其他方式創(chuàng)建的Timer。

后記

寫完這本書,我只能感嘆,時(shí)間真是靠擠出來的。盡管《深入理解Linux網(wǎng)絡(luò)內(nèi)幕》已經(jīng)面市,但我還是覺得我要繼續(xù)完成這部分工作,一來了卻自己的愿望,二來希望用自己的語言和見解來分析Linux的協(xié)議棧,使之更符合我國軟件工程師的需要,我的目的就達(dá)到了。閱讀本書能大概了解Linux是如何實(shí)現(xiàn)TCP/IP協(xié)議棧的,但卻不是能用來當(dāng)枕頭的“紅寶書”,所以,讀者必須結(jié)合協(xié)議的RFC文檔來看本書。本人將選擇Linux和。FreeBSD的網(wǎng)絡(luò)協(xié)議棧作為自己的業(yè)余研究對象。所以本套書應(yīng)該有兩本,該本是Linux協(xié)議棧的剖析另一本還在計(jì)劃之中。為何選擇這兩者?其一:代碼是公開且免費(fèi)的,不會有公司來找我麻煩,我也不需要采用極端的方式獲取這些代碼。其二:這兩種代碼已成為網(wǎng)絡(luò)應(yīng)用之事實(shí)標(biāo)準(zhǔn),Linux在當(dāng)前大行其道,自不必說,而FreeBSD是BSD家族中應(yīng)用最廣泛者,其協(xié)議棧為VxWorks等工業(yè)級操作系統(tǒng)采用,而且是故去的Steven所著的《TCP-IP詳解卷2實(shí)現(xiàn)》的代碼基。為投開發(fā)人員之所好,我決定研究這兩個(gè)操作系統(tǒng)的網(wǎng)絡(luò)協(xié)議棧。本書就是我的第一本關(guān)于Linux方面的文檔。將來有時(shí)間我將寫出FreeBSD的協(xié)議棧文檔。我們知道如果想研究BSD的協(xié)議??梢钥碐ray R.Wright和W.Richard Stevens編寫的《TCP/IP Illustrated Volume2:The Implementation》(中文譯名:《TCP/IP詳解卷2:實(shí)現(xiàn)》),但是:FreeBSD已經(jīng)進(jìn)化到7.0版本了,其內(nèi)部的結(jié)構(gòu)已經(jīng)有相當(dāng)大的變化,光看那本書估計(jì)還不夠。而且,根據(jù)我的經(jīng)驗(yàn),作為高端嵌入式軟件市場占有量最大的嵌入式操作系統(tǒng)VxWorks,其網(wǎng)絡(luò)協(xié)議棧即從BSD發(fā)展而來,卻對BSD協(xié)議棧進(jìn)行了大量的修改,連代碼風(fēng)格都不一樣。但看這本書就更不能完全理解VxWorks的網(wǎng)絡(luò)協(xié)議棧。于是許多研究者在研究路由器操作系統(tǒng)的協(xié)議棧時(shí),不知從何處研究起。在本文完成之際,作者謹(jǐn)向所有給予我指導(dǎo)、關(guān)心、支持和幫助的老師、Leader、同事、同學(xué)和親人致以衷心的感謝!

編輯推薦

《深入淺出Linux TCP /IP協(xié)議棧》學(xué)Linux TCP/IP,從這里開始!從Linux 2.6內(nèi)核基礎(chǔ)講起,引導(dǎo)讀者快速入門運(yùn)用大量示意圖,清晰講解函數(shù)之間的調(diào)用關(guān)系詳細(xì)分析核心代碼實(shí)現(xiàn)思想,代碼注釋詳盡《深入淺出Linux TCP /IP協(xié)議?!肥紫冉榻B了Linux內(nèi)核源碼的整體概況及協(xié)議棧初始化過程,然后結(jié)合配置、用戶使用協(xié)議棧的方法,采取深入淺出、由上及下的策略對協(xié)議棧代碼進(jìn)行分解和注釋,涵蓋以下內(nèi)容:操作系統(tǒng)、網(wǎng)絡(luò)、協(xié)議棧、代碼內(nèi)核系統(tǒng)初始化配置網(wǎng)絡(luò)系統(tǒng)網(wǎng)絡(luò)層的實(shí)現(xiàn)傳輸層的實(shí)現(xiàn)Select系統(tǒng)調(diào)用的實(shí)現(xiàn)機(jī)制數(shù)據(jù)鏈路層協(xié)議實(shí)現(xiàn)

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    深入淺出Linux TCP/IP協(xié)議棧 PDF格式下載


用戶評論 (總計(jì)6條)

 
 

  •   對學(xué)習(xí)網(wǎng)絡(luò)數(shù)據(jù)傳輸很有幫助,特別是LINUX下的網(wǎng)絡(luò)編程
  •   書不錯(cuò),不過速度太慢了,三天才到,到了都沒用看的勁頭了
  •   送貨非常及時(shí),非常滿意
  •   這本書很不錯(cuò):首先從linux本身開始,然后一點(diǎn)點(diǎn)分析分析協(xié)議棧,不錯(cuò),推薦
  •   這本書比較難看明白,個(gè)人建議先看下Linux內(nèi)核的相關(guān)知識。另外,錯(cuò)別字有點(diǎn)多。
  •   書感覺不是很新,書角折過
 

250萬本中文圖書簡介、評論、評分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號-7