編輯推薦
《TCP/IP詳解捲2:實現》針對任何希望理解TCP/IP協議是如何實現的讀者設計;無論是編寫網絡應用的程序員,負責利用TCP/TP維護計算機係統和網絡的係統管理員,還是任何有興趣理解大塊非凡代碼的普通讀者;本書都是一本優秀的教科書。
此商品有兩版印刷封麵,隨機發貨!
內容簡介
《TCP/IP詳解·捲2:實現》完整而詳細地介紹瞭TCP/IP協議是如何實現的。書中給齣瞭約500個圖例,15000行實際操作的C代碼,采用舉例教學的方法幫助你掌握TCP/IP實現。《TCP/IP詳解·捲2:實現》不僅說明瞭插口API和協議族的關係以及主機實現與路由器實現的差彆。還介紹瞭4.4BSD-Lite版的新的特點。《TCP/IP詳解·捲2:實現》適用於希望理解TCP/IP協議如何實現的人,包括編寫網絡應用程序的程序員以及利用TCP/IP維護計算機網絡的係統管理員。
作者簡介
G.R.賴特(Gary R.Wright),美國Connix公司的董事長。閤著有《TCP/IP詳解 捲2:實現》。
內頁插圖
目錄
譯者序
前言
第1章 概述
1.1 引言
1.2 源代碼錶示
1.2.1 將擁塞窗口設置為1
1.2.2 印刷約定
1.3 曆史
1.4 應用編程接口
1.5 程序示例
1.6 係統調用和庫函數
1.7 網絡實現概述
1.8 描述符
1.9 mbuf與輸齣處理
1.9.1 包含插口地址結構的mbuf
1.9.2 包含數據的mbuf
1.9.3 添加IP和UDP首部
1.9.4 IP輸齣
1.9.5 以太網輸齣
1.9.6 UDP輸齣小結
1.10 輸入處理
1.10.1 以太網輸入
1.10.2 IP輸入
1.10.3 UDP輸入
1.10.4 進程輸入
1.11 網絡實現概述(續)
1.12 中斷級彆與並發
1.13 源代碼組織
1.14 測試網絡
1.15 小結
第2章 mbuf:存儲器緩存
2.1 引言
2.2 代碼介紹
2.2.1 全局變量
2.2.2 統計
2.2.3 內核統計
2.3 mbufl的定義
2.4 mbuf結構
2.5 簡單的mbuf宏和函數
2.5.1 m-get函數
2.5.2 MGET宏
2.5.3 m-etry函數
2.5.4 mbuf鎖
2.6 m-devget和m-pullup函數
2.6.1 m-devget函數
2.6.2 mtod和dtom宏
2.6.3 pullup函數和連續的協議首部
2.6.4 m-pullup和IP的分片與重組
2.6.5 TCP重組避免調用m-pullup
2.6.6 m-pullup使用總結
2.7 mbuf宏和函數的小結
2.8 Neff3聯網數據結構小結
2.9 m-Copy和簇引用計數
2.10 其他選擇
2.11 小結
第3章 接口層
3.1 引言
3.2 代碼介紹
3.2.1 全局變量
3.2.2 SNMP變量
3.3 ifnet結構
3.4 ifadck結構,
3.5 sockaddr結構
3.6 ifnet與土faddr的專用化
3.7 網絡初始化概述
3.8 以太網初始化
3.9 suP初始化
3.10 環迴初始化
3.11 if_attach函數
3.12 ifinit函數
3.13 小結
第4章 接口:以太網
4.1 引言
4.2 代碼介紹
4.2.1 全局變量
4.2.2 統計量
4.2.3 SNMP變量
4.3 以太網接口
4.3.1 leintr函數
4.3.2 leread函數
4.3.3 ether_input函數
4.3.4 ether_output函數
4.3.5 lestart函數
4.4 ioctl係統調用
4.4.1 ifioctl函數
4.4.2 ifconf函數
4.4.3 舉例
4.4.4 通用接口ioctl命令
4.4.5 if_down和if_up函數
4.4.6 以太網、SLIP和環迴
4.5 小結
第5章 接口:SLIP和環迴
5.1 引言
5.2 代碼介紹
5.2.1 全局變量
5.2.2 統計量
5.3 SLIP接口
5.3.1 SLIP綫路規程:SLIPDISC
5.3.2 SLIP初始化:slopen slinit
5.3.3 SLIP輸入處理:slinput
5.3.4 SLIP輸齣處理:sloutput
5.3.5 slstart函數
5.3.6 SLIP分組丟失
5.3.7 SLIP性能考慮
5.3.8 slclose函數
5.3.9 sltioctl函數
5.4 環迴接口
5.5 小結
第6章 IP編址
6.1 引言
6.1.IIP地址
6.I.2 IP地址的印刷規定
6.1.3 主機和路由器
6.2 代碼介紹
6.3 接口和地址小結
6.4 sockaddr_in結構
6.5 in_ifaddr結構
6.6 地址指派
6.6.1 ifioctl函數
6.6.2 in_control函數
6.6.3 前提條件:SIOCSIFADDR、SIOCSIFNETMASK和SIOCSIFDSFADDR
6.6.4 地址指派:SIOCSIFADDR
6.6.5 in_ifinit函數
6.6.6 網絡掩碼指派:SIOCSIFNETMASK
6.6.7 目的地址指派:SIOCSIFDSTADDR
6.6.8 獲取接口信息
6.6.9 每個接口多個IP地址
6.6.10 附加IP地址:SIOCAIFADDR
6.6.11 刪除IP地址:SIOCDIFADDR
6.7 接口ioctl處理
6.7.1 leioctl函數
6.7.2 slioctl函數
6.7.3 loioctl函數
6.8 Internet實用函數
6.9 ifnet實用函數
6.10 小結
第7章 域和協議
7.1 引言
7.2 代碼介紹
7.2.1 全局變量
7.2.2 統計量
7.3 domain結構
7.4 protosw結構
7.5 IP的domain和protosw結構
7.6 pffindproto~Hpffindtype函數
7.7 pfctlinput函數
7.8 IP初始化
7.8.1 Intemet傳輸分用
7.8.2 ip_init函數
7.9 sysctl係統調用
7.10 小結
第8章 IP:網際協議
8.1 引言
8.2 代碼介紹
8.2.1 全局變量
8.2.2 統計量
8.2.3 SNMP變量
8.3 IP分組
8.4 輸入處理:ipintr函數
8.4.1 ipintr概觀
8.4.2 驗證
8.4.3 轉發或不轉發
8.4.4 重裝和分用
8.5 轉發:ip_forward函數
8.6 輸齣處理:ip_output函數
8.6.1 首部初始化
8.6.2 路由選擇
8.6.3 源地址選擇和分片
8.7 Internet檢驗和:in_cksum函數
8.8 setsockopt和getsockopt係統調用
8.8.1 PRCO_SETOPT的處理
8.8.2 PRCO_GETOPT的處理
8.9 ip_sysctl函數
8.10 小結
第9章 IP選項處理
9.1 引言
9.2 代碼介紹
9.2.1 全局變量
9.2.2 統計量
9.3 選項格式
9.4 ip_dooptions函數
9.5 記錄路由選項
9.6 源站和記錄路由選項
9.6.1 save_rte函數
9.6.2 ip_srcroute函數
9.7 時間戳選項:
9.8 ip_insertoptions函數
9.9 ip_pcbopts函數
9.10 一些限製
9.11 小結
笫10章 IP的分片與重裝
10.1 引言
10.2 代碼介紹
10.2.1 全局變量
10.2.2 統計量
10.3 分片
10.4 ip_optcopy函數
10.5 重裝
10.6 ip_reass函數
10.7 ip_slowtimo函數
10.8 小結
第11章 ICMP:Internet控製報文協議
11.1 引言
11.2 代碼介紹
11.2.1 全局變量
11.2.2 統計量
11.2.3 SNMP變量
11.3 icmp結構
11.4 ICMP的protosw結構
11.5 輸入處理:icmp_input函數
11.6 差錯處理
11.7 請求處理
11.7.1 迴顯詢問:ICMP_ECHO和ICMLHCHOREPLY
11.7.2 時間戳詢問:ICMP_TSTAMP和
ICMPTSTAMPREPLY
11.7.3 地址掩碼詢問:ICMP_MASKREQ和ICMP_MASKREPLY
11.7.4 信息詢問:ICMP_IREQ和ICMP_IREQREPLY
11.7.5 路由器發現:ICMP_ROUTERADVERy和ICMP_ROUTERSOLICIF
11.8 重定嚮處理
11.9 迴答處理
11.10 輸齣處理
11.11 icmp_error函數
11.12 icmpreflect函數
11.13 icmp_send函數
11.14 icmp_sysctl函數
11.15 小結
第12章 IP多播
12.1 引言
12.2 代碼介紹
12.2.1 全局變量
12.2.2 統計量
12.3 以太網多播地址
12.4 ether_multi結構
12.5 以太網多播接收
12.6 inmulti結構
12.7 ip_moptions結構
12.8 多播的插口選項
12.9 多播的TTL值
12.9.1 MBONE
12.9.2 擴展環搜索
12.10 ip_setmoptions函數
12.10.1 選擇一個明確的多播接口:IP_MULTICAS%_IF
12.10.2 選擇明確的多播TTL:IP_MULTICASTTTL
12.10.3 選擇多播環迴:IPMULTICAST_LOOP
12.11 加入一個IP多播組
12.11.1 in_addmulti函數
12.11.2 slioctl和loioctl函數:SIOCADDMULTT和SIOCDRLTI
12.11.3 Leioctl函數:SIOCADDMULTI和SIOCDELMULTI
12.11.4 etheraddmulti函數
12.12 離開一個IP多播組
12.12.1 in_delmulti函數
12.12.2 ether_delmulti函數
12.13 ip_getmoptions函數
12.14 多播輸入處理:ipintr函數
12.15 多播輸齣處理:ip_output函數
12.16 性能的考慮
12.17 小結
第13章 IGMP:Intemet組管理協議
13.1 引言
13.2 代碼介紹
13.2.1 全局變量
13.2.2 統計量
13.2.3 SNMP變量
13.3 igrmp結構
13.4 IGMP的protosw的結構
13.5 加入一個組:igmp_joingroup函數
13.6 igmp_fasttimo函數
]3.7 輸入處理:igmp_input函數
13.7.1 成員關係查詢:IGMP_HOST_M194BERSHIPQUERY
13.7.2 成員關係報告:IGMP_HOST_MEMBERSHIPREPORT
13.8 離開一個組:ignlo_leavegroup函數
13.9 小結
第14章 IP多播選路
14.1 引言
14.2 代碼介紹
14.2.1 全局變量
14.2.2 統計量
14.2.3 SNMP變量
14.3 多播輸齣處理(續)
14.4 mrouted守護程序
14.5 虛擬接口
14.5.1 虛擬接口錶
14.5.2 add_vif函數
14.5.3 del_vif函數
14.6 IGMP(續)
14.6.1 add_igrp函數
14.6.2 del_igrp函數
14.6.3 grplst_member函數
14.7 多播選路
……
第15章 插口層
第16章 插口I/O
第17章 插口選項
第18章 Radix樹路由錶
第19章 選路請求和選路消息
第20章 選路插口
前言/序言
我們願意嚮廣大的讀者推薦W.RichardStevens關於TCP/IP的經典著作(共3捲)的中譯本。本書是其中的第2捲:《TCP/iP詳解捲2:實現》。
大傢知道,TCP/IP已成為計算機網絡的事實上的標準。在關於瞭CP/IP的論著中,最有影響的就是兩部著作。一部是DouglasE.Comer寫的《用TCP/IP進行網際互連》,一套共3捲(中譯本已由電子工業齣版社於1998年齣版),而另一部就是Stevens寫的這3捲書。這兩套巨著都很有名,各有其特點。無論是從事計算機網絡教學的教師還是進行科研的技術人員,這兩套書都應當是必讀的。
本書的特點是內容豐富,概念清楚且準確,講解詳細,例子很多.作者在書中舉齣的所有例子均在作者安裝的計算機網絡上通過實際驗證。各章都留有一定數量的習題。在附錄A作者對部分習題給齣瞭解答。在本書的最後,作者給齣瞭許多經典的參考文獻,並——寫齣瞭評論。
第2捲是第1捲的繼續深入。讀者在學習這一捲時,應當先具備第1捲所闡述的關於TCP/IP的基本知識。本捲的特點是使用大量的源代碼來講述TCP/IP協議族中的各協議是怎樣實現的。這些內容對於編寫TCP/IP網絡應用程序的程序員和負責維護基於TCP/IP協議的計算機網絡的係統管理員來說,應當是必讀的。
參加本書翻譯的有:謝鈞(序言和第1章~第7章),蔣慧(第8章~第14章,第22章。第23章),吳禮發(第15~第17章),端義峰(第18章~第19章),胥光輝(第20章~第21章)和陸雪瑩(第24章.第32章以及全部附錄)。全書由謝希仁教授審校。
限於水平,翻譯中不妥或錯誤之處在所難免,敬請廣大讀者批評指正。
《網絡協議的藝術:深入剖析TCP/IP實現細節》 在現代數字世界的基石中,TCP/IP協議棧扮演著至關重要的角色。它如同一套精密的交通規則,指導著數據在全球範圍內高效、可靠地流動。然而,當我們翻開那些關於TCP/IP的經典著作,常常會陷入高層次的理論和抽象概念之中,對於數據如何在實際的網絡硬件和操作係統中真正“運行”,以及那些精妙的實現細節,卻往往隻是一筆帶過。 本書《網絡協議的藝術:深入剖析TCP/IP實現細節》正是為瞭填補這一領域的空白而生。它並非重復市麵上已有的、側重於協議設計原理或宏觀概述的著作。相反,我們將帶領讀者深入網絡協議實現的“車間”,去探究那些隱藏在代碼和硬件接口背後的真實工作機製。我們不會泛泛而談TCP的連接建立過程,而是會細緻地剖析在Linux內核中,SYN、SYN-ACK、ACK這三個關鍵報文的生成、接收、處理流程,以及在這個過程中,socket緩衝區是如何被填充、消耗,`connect()`、`accept()`係統調用是如何與內核的TCP實現交互的。 本書的核心價值在於其“實現導嚮”的視角。我們不再滿足於知道“TCP如何工作”,而是要追問“TCP在操作係統裏是如何工作的”。這意味著,我們將大量地涉及操作係統內核的網絡棧實現,特彆是Linux內核。讀者將有機會看到,當一個應用程序調用`send()`函數發送數據時,數據是如何從用戶空間穿越到內核空間,如何被封裝成TCP段,如何加入IP包,最終如何被網卡驅動程序所捕獲,並轉化為電信號發送齣去。同樣,當數據報到達網卡時,又是如何被中斷機製喚醒,經過內核的網絡棧層層解包、處理,最終遞送到應用程序的socket緩衝區中,等待應用程序的讀取。 我們將深入理解TCP的擁塞控製算法是如何在內核中實現的。以經典的Tahoe算法為例,我們會分析它如何通過丟包檢測(超時重傳、快速重傳)來感知網絡擁塞,如何調整發送窗口的大小(慢啓動、擁塞避免、快重傳、快恢復)來平衡網絡吞吐量和穩定性。我們會探討這些算法背後的數學模型和C語言代碼實現,理解其在不同網絡條件下的行為錶現。 對於UDP,我們同樣不會停留在“無連接、不可靠”的簡單描述。我們將探討UDP報文在內核中的生成和處理過程,理解用戶空間的數據如何被打包成UDP報文,如何被IP層封裝。我們會分析UDP校驗和的計算過程,以及內核在接收UDP報文時如何處理校驗和錯誤。 IP層的實現細節也將是本書的重點。讀者將看到IP地址是如何在內核中被解析和路由的,ARP協議(地址解析協議)是如何在鏈路層和網絡層之間建立起MAC地址與IP地址的映射關係的。我們將深入剖析IP數據報的封裝和分片機製,理解當數據包超過MTU(最大傳輸單元)時,內核是如何進行分片的,以及接收端又是如何重組這些分片。 路由查找是IP層工作的核心。我們將詳細介紹Linux內核中的路由錶結構,以及當內核需要發送一個IP數據包時,它是如何根據目標IP地址在路由錶中進行查找,從而決定下一跳(next hop)的IP地址和齣接口的。這涉及到對`ip route`命令背後內核機製的理解。 ICMP(Internet控製消息協議)作為網絡故障排除和控製的基石,其實現細節同樣不容忽視。我們將分析ping命令是如何利用ICMP Echo Request和Echo Reply報文來檢測網絡連通性和測量往返時間的,以及traceroute命令是如何利用ICMP Time Exceeded報文來追蹤數據包的路由路徑的。 本書還會觸及一些更底層的網絡接口和驅動程序交互。我們會介紹網絡接口卡(NIC)在內核中的抽象模型,以及數據包是如何在內核網絡棧和網卡驅動程序之間傳遞的。這包括對DMA(Direct Memory Access)等硬件加速技術的簡要介紹,以及它們如何提升網絡 I/O 的性能。 另外,我們還會探討一些與TCP/IP實現密切相關的操作係統特性,例如: Socket API的內部機製:深入理解`socket()`、`bind()`、`listen()`、`connect()`、`accept()`、`send()`、`recv()`、`close()`等係統調用的內核實現,它們與TCP/IP協議棧如何協同工作。 網絡緩衝區管理:分析內核中發送緩衝區(send buffer)和接收緩衝區(receive buffer)的結構、大小限製(`SO_SNDBUF`、`SO_RCVBUF`)、以及數據在其中的流動和管理。 中斷處理機製:理解網卡接收到數據包後,如何觸發硬件中斷,以及內核中斷處理程序是如何高效地處理這些中斷,從而避免CPU的過度占用。 用戶空間與內核空間的數據拷貝:分析`send()`和`recv()`等操作中,數據在用戶空間和內核空間之間是如何被拷貝的,以及一些零拷貝(zero-copy)技術的應用。 網絡性能調優的底層視角:通過理解TCP/IP的實現細節,讀者將能更好地理解內核參數(如TCP擁塞控製參數、緩衝區大小等)對網絡性能的影響,從而進行更有效的調優。 本書的目標讀者是那些對網絡協議的理論知識有一定基礎,並且希望深入瞭解其在實際操作係統中如何實現的開發者、網絡工程師和係統管理員。我們假設讀者具備C語言編程知識,並且對Linux操作係統的基本概念有所瞭解。 我們將使用大量的代碼片段和僞代碼來闡釋概念,並盡可能地引用Linux內核的實際代碼(在不影響閱讀流暢性的前提下)。通過這種方式,我們希望能夠提供一種“親身體驗”式的學習過程,讓讀者能夠真正理解TCP/IP協議棧在現代計算環境中是如何運作的。 本書不是一本教你如何編寫一個TCP/IP協議棧的書,也不是一本深入探討網絡安全攻防的書。它是一本專注於“如何讓TCP/IP協議在操作係統裏跑起來”的實現細節的書。它將為你揭示那些隱藏在網絡流暢運行背後的工程智慧和技術細節,讓你對這個我們日常生活中不可或缺的網絡技術有更深刻、更實在的認識。 免責聲明: 本簡介旨在概括本書的核心內容和風格,具體章節和技術細節會根據實際編寫情況有所調整。本書不包含任何關於《TCP/IP詳解捲2:實現》這本書本身的詳細內容,而是以此為切入點,聚焦於網絡協議實現的底層細節。