TCP/IP詳解 卷3:TCP事務(wù)協(xié)議、HTTP、NNTP和UNIX域協(xié)議
定 價(jià):59 元
叢書名:計(jì)算機(jī)科學(xué)叢書
- 作者:[美]理查德·史蒂文斯(W.Richard Stevens)
- 出版時(shí)間:2019/2/1
- ISBN:9787111617778
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TN915.04
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
第3卷詳細(xì)介紹了當(dāng)今TCP/IP程序員和網(wǎng)絡(luò)管理員必須非常熟悉的四個(gè)基本主題: TCP的擴(kuò)展、Hyper文本傳輸協(xié)議、網(wǎng)絡(luò)新聞傳輸協(xié)議和UNIX域協(xié)議。與前兩卷一樣,本書介紹了4.4BSD-Lite網(wǎng)絡(luò)代碼中的示例和實(shí)現(xiàn)細(xì)節(jié)。
引言和本書的組織
本書是套書《TCP/IP詳解》的第3卷,這套書的卷1是[Stevens 1994],卷2是[Wright and Stevens 1995]。本書分成三個(gè)部分,每個(gè)部分覆蓋了不同的內(nèi)容。
1) TCP事務(wù)協(xié)議,通常叫作T/TCP。這是對(duì)TCP的擴(kuò)展,其設(shè)計(jì)目的是使客戶-服務(wù)器事務(wù)更快、更高效和更可靠。這個(gè)目標(biāo)的實(shí)現(xiàn)省略了連接開始時(shí)TCP的三次握手,并縮短了連接結(jié)束時(shí)TIME_WAIT狀態(tài)的持續(xù)時(shí)間。我們將會(huì)看到,在客戶-服務(wù)器事務(wù)中,T/TCP的性能與UDP相當(dāng),而且T/TCP具有可靠性和適應(yīng)性,這兩點(diǎn)相對(duì)UDP來說都是很大的改進(jìn)。
事務(wù)是這樣定義的:一個(gè)客戶向服務(wù)器發(fā)出請(qǐng)求,接下來是服務(wù)器給出響應(yīng)(這里的名詞“事務(wù)”(transaction)并非數(shù)據(jù)庫(kù)中的事務(wù)處理,數(shù)據(jù)庫(kù)中的事務(wù)處理有封鎖、兩步提交和回退)。
2) TCP/IP應(yīng)用,特別是HTTP(超文本傳輸協(xié)議,WWW的基礎(chǔ))和NNTP(網(wǎng)絡(luò)新聞傳輸協(xié)議Usenet新聞系統(tǒng)的基礎(chǔ))。
3) Unix域協(xié)議。這些協(xié)議是所有Unix的TCP/IP實(shí)現(xiàn)中都提供的,在許多非Unix的實(shí)現(xiàn)中也有提供。這些協(xié)議提供了一種進(jìn)程之間通信(IPC)的手段,采用了與TCP/IP中一樣的插口接口。當(dāng)客戶與服務(wù)器進(jìn)程在同一主機(jī)上時(shí),Unix域協(xié)議通常要比TCP/IP快1倍。
第一部分是對(duì)T/TCP的介紹,又分成兩個(gè)小部分。第1~4章介紹協(xié)議,并給出了大量實(shí)例來說明它們是怎樣工作的。這些材料主要是對(duì)卷1中24.7節(jié)的補(bǔ)充,在那里對(duì)T/TCP只是做了簡(jiǎn)單的介紹。第5~12章介紹T/TCP在4.4BSD-Lite網(wǎng)絡(luò)代碼(即卷2中給出的代碼)中的確切實(shí)現(xiàn)。由于最早的T/TCP實(shí)現(xiàn)遲至1994年9月才發(fā)布,已經(jīng)是本書卷1出版一年以后了,那時(shí)卷2也快完成了,因此T/TCP的詳細(xì)敘述,包括諸多實(shí)例和所有的實(shí)現(xiàn)細(xì)節(jié)都只好放在本系列書的卷3中了。
第二部分介紹HTTP和NNTP應(yīng)用,是卷1的第25~30章中介紹的TCP/IP應(yīng)用的延續(xù)。在卷1出版后的兩年里,隨著Internet的發(fā)展,HTTP得到了極大的流行,而NNTP的使用則在最近的10多年中每年增長(zhǎng)了大約75%。T/TCP對(duì)HTTP來說也是非常好的,可以這樣來用TCP:在少量數(shù)據(jù)傳輸中縮短連接時(shí)間,因?yàn)檫@種時(shí)候連接的建立和拆除時(shí)間往往占總時(shí)間的大頭。在繁忙的Web服務(wù)器上,成千上萬個(gè)不同而且不斷變化的客戶對(duì)HTTP(因此也對(duì)TCP)的高負(fù)荷使用,也提供了唯一可以對(duì)服務(wù)器上確切的分組進(jìn)行考察的機(jī)會(huì)(第14章),可以回顧卷1和卷2中給出的TCP/IP的許多特性。
第三部分中的Unix域協(xié)議原本是準(zhǔn)備在卷2中介紹的,但由于卷2已多達(dá)1200頁而刪去了。在名為《TCP/IP詳解》這樣的套書中夾雜著TCP/IP以外的協(xié)議不免令人奇怪,但Unix域協(xié)議幾乎15年前就已經(jīng)伴隨著BSD版TCP/IP的實(shí)現(xiàn)在4.2BSD中發(fā)布了。今天,它們?cè)谌魏我粋(gè)從伯克利衍生而來的內(nèi)核中都在頻繁地使用,但它們的使用往往“被掩蓋在后臺(tái)”,大多數(shù)用戶不知道它們的存在。除了在從伯克利衍生而來的內(nèi)核中充當(dāng)Unix管道的基礎(chǔ)外,它們的另一個(gè)大用戶是當(dāng)客戶程序和服務(wù)器程序在同一主機(jī)(典型的情況是工作站)上時(shí)的X Window系統(tǒng)。Unix域的插口也用于進(jìn)程之間傳遞描述符,是進(jìn)程之間通信的一個(gè)強(qiáng)大工具。由于Unix域協(xié)議所用的插口API(應(yīng)用編程接口)與TCP/IP所用的插口API幾乎是相同的,Unix域協(xié)議以最小的代碼變化提供了一個(gè)簡(jiǎn)單的手段來增強(qiáng)本地應(yīng)用的性能。
以上三個(gè)部分的每個(gè)部分都可以獨(dú)立閱讀。
讀者
與這套書的前兩卷一樣,這一卷是為所有想要理解TCP/IP如何工作的人寫的:編寫網(wǎng)絡(luò)應(yīng)用的程序員,負(fù)責(zé)維護(hù)采用TCP/IP的計(jì)算機(jī)網(wǎng)絡(luò)的系統(tǒng)管理員,以及在日常工作中經(jīng)常與TCP/IP應(yīng)用程序打交道的用戶。
第一和第二部分是理解TCP/IP工作原理的基礎(chǔ)。不熟悉TCP/IP的讀者應(yīng)該看看這套書的卷1,見[Stevens 1994],以便對(duì)TCP/IP協(xié)議集有一個(gè)全面的了解。第一部分的前半部分(第1~4章,TCP/IP中的概念和例子)與卷2無關(guān),可以直接閱讀。但后半部分(第5~12章,T/TCP的實(shí)現(xiàn))則需要先熟悉4.4 BSD-Lite網(wǎng)絡(luò)程序,這些內(nèi)容在卷2中介紹。
在整本書中有大量的向前和向后參考索引,這些參考索引是針對(duì)本書的兩個(gè)主題,以及對(duì)卷1和卷2的內(nèi)容,為想要了解更詳細(xì)內(nèi)容的讀者提供的。在本書最后有書中用到的所有縮略語,書中介紹的所有結(jié)構(gòu)、函數(shù)和宏(以字母順序排列)及其介紹起始頁碼的交叉索引。如果本書引用了卷2中的定義,則該交叉索引也列出了卷2中的定義。
源碼版權(quán)
本書中引自4.4BSD-Lite版的所有源碼(源程序)都包括下面這樣的版權(quán)聲明:
第6章路由表的源碼則包括下面這樣的版權(quán)聲明:
印刷慣例
當(dāng)需要顯示交互的輸入和輸出信息時(shí),將用黑體表示鍵盤輸入,而計(jì)算機(jī)輸出則用Courier體,并用中文宋體做注釋。
書中總是把系統(tǒng)名作為命令解釋程序提示符的一部分(例如sun),以說明命令是在哪個(gè)主機(jī)上執(zhí)行的。在正文中引用的程序名通常都是首字母大寫(如Telnet和Tcpdump),以避免過多的字體形式。
在整本書中,我們會(huì)使用這種縮進(jìn)格式的附加說明來描述實(shí)現(xiàn)細(xì)節(jié)或歷史觀點(diǎn)。
W. Richard Stevens
圖森,亞利桑那
1995年11月
rstevens@noao.edu
http://www.noao.edu/~rstevens
W. 理查德•史蒂文斯(W. Richard Stevens)
博士,是國(guó)際知名的UNIX和網(wǎng)絡(luò)專家、受人尊敬的技術(shù)作家和咨詢顧問。他教會(huì)了一代網(wǎng)絡(luò)專業(yè)人員使用TCP/IP的功能,使互聯(lián)網(wǎng)成為人們?nèi)粘I畹闹行。Stevens于1999年去世,年僅48歲。在短暫而精彩的一生中,他著有多部經(jīng)典的傳世之作,包括《TCP/IP詳解》(三卷本)、《UNIX網(wǎng)絡(luò)編程》(兩卷本)以及《UNIX環(huán)境高級(jí)編程》。2000年他被國(guó)際機(jī)構(gòu)Usenix追授“終身成就獎(jiǎng)”。
出版者的話
本書贊譽(yù)
譯者序
前言
第一部分 TCP事務(wù)協(xié)議
第1章 T/TCP概述1
1.1 概述1
1.2 UDP上的客戶-服務(wù)器1
1.3 TCP上的客戶-服務(wù)器6
1.4 T/TCP上的客戶-服務(wù)器12
1.5 測(cè)試網(wǎng)絡(luò)15
1.6 時(shí)間測(cè)量程序15
1.7 應(yīng)用17
1.8 歷史19
1.9 實(shí)現(xiàn)20
1.10 小結(jié)21
第2章 T/TCP協(xié)議23
2.1 概述23
2.2 T/TCP中的新TCP選項(xiàng)23
2.3 T/TCP實(shí)現(xiàn)所需變量25
2.4 狀態(tài)變遷圖27
2.5 T/TCP的擴(kuò)展?fàn)顟B(tài)28
2.6 小結(jié)30
第3章 T/TCP使用舉例31
3.1 概述31
3.2 客戶重新啟動(dòng)31
3.3 常規(guī)的T/TCP事務(wù)33
3.4 服務(wù)器收到過時(shí)的重復(fù)SYN34
3.5 服務(wù)器重啟動(dòng)35
3.6 請(qǐng)求或應(yīng)答超出報(bào)文段最大長(zhǎng)度36
3.7 向后兼容性39
3.8 小結(jié)41
第4章 T/TCP協(xié)議(續(xù))43
4.1 概述43
4.2 客戶的端口號(hào)和TIME_WAIT狀態(tài)43
4.3 設(shè)置TIME_WAIT狀態(tài)的目的45
4.4 TIME_WAIT狀態(tài)的截?cái)?8
4.5 利用TAO跳過三次握手51
4.6 小結(jié)55
第5章 T/TCP實(shí)現(xiàn):插口層56
5.1 概述56
5.2 常量56
5.3 sosend函數(shù)56
5.4 小結(jié)58
第6章 T/TCP實(shí)現(xiàn):路由表59
6.1 概述59
6.2 代碼介紹59
6.3 radix_node_head結(jié)構(gòu)60
6.4 rtentry結(jié)構(gòu)61
6.5 rt_metrics結(jié)構(gòu)61
6.6 in_inithead函數(shù)61
6.7 in_addroute函數(shù)62
6.8 in_matroute函數(shù)63
6.9 in_clsroute函數(shù)63
6.10 in_rtqtimo函數(shù)64
6.11 in_rtqkill函數(shù)66
6.12 小結(jié)69
第7章 T/TCP實(shí)現(xiàn):協(xié)議控制塊70
7.1 概述70
7.2 in_pcbladdr函數(shù)71
7.3 in_pcbconnect函數(shù)71
7.4 小結(jié)72
第8章 T/TCP實(shí)現(xiàn): TCP概要73
8.1 概述73
8.2 代碼介紹73
8.3 TCP的protosw結(jié)構(gòu)74
8.4 TCP控制塊74
8.5 tcp_init函數(shù)75
8.6 tcp_slowtimo函數(shù)75
8.7 小結(jié)76
第9章 T/TCP實(shí)現(xiàn):TCP輸出77
9.1 概述77
9.2 tcp_output函數(shù)77
9.3 小結(jié)83
第10章 T/TCP實(shí)現(xiàn):TCP函數(shù)84
10.1 概述84
10.2 tcp_newtcpcb函數(shù)84
10.3 tcp_rtlookup函數(shù)85
10.4 tcp_gettaocache函數(shù)86
10.5 重傳超時(shí)間隔的計(jì)算86
10.6 tcp_close函數(shù)89
10.7 tcp_msssend函數(shù)90
10.8 tcp_mssrcvd函數(shù)91
10.9 tcp_dooptions函數(shù)96
10.10 tcp_reass函數(shù)98
10.11 小結(jié)99
第11章 T/TCP實(shí)現(xiàn):TCP輸入101
11.1 概述101
11.2 預(yù)處理103
11.3 首部預(yù)測(cè)104
11.4 被動(dòng)打開的啟動(dòng)105
11.5 主動(dòng)打開的啟動(dòng)108
11.6 PAWS:防止序號(hào)重復(fù)114
11.7 ACK處理115
11.8 完成被動(dòng)打開和同時(shí)打開115
11.9 ACK處理(續(xù))116
11.10 FIN處理118
11.11 小結(jié)119
第12章 T/TCP實(shí)現(xiàn):TCP用戶請(qǐng)求120
12.1 概述120
12.2 PRU_CONNECT請(qǐng)求120
12.3 tcp_connect函數(shù)120
12.4 PRU_SEND和PRU_SEND_EOF請(qǐng)求124
12.5 tcp_usrclosed函數(shù)125
12.6 tcp_sysctl函數(shù)126
12.7 T/TCP的前景126
12.8 小結(jié)127
第二部分 TCP的其他應(yīng)用
第13章 HTTP:超文本傳輸協(xié)議129
13.1 概述129
13.2 HTTP和HTML概述130
13.3 HTTP132
13.4 一個(gè)例子136
13.5 HTTP的統(tǒng)計(jì)資料138
13.6 性能問題139
13.7 小結(jié)141
第14章 在HTTP服務(wù)器上找到的分組142
14.1 概述142
14.2 多個(gè)HTTP服務(wù)器144
14.3 客戶端SYN的到達(dá)間隔時(shí)間145
14.4 RTT的測(cè)量149
14.5 用listen設(shè)置入連接隊(duì)列的容量150
14.6 客戶端的SYN選項(xiàng)154
14.7 客戶端的SYN重傳156
14.8 域名157
14.9 超時(shí)的持續(xù)探測(cè)157
14.10 T/TCP路由表大小的模擬160
14.11 mbuf的交互162
14.12 TCP的PCB高速緩存和首部預(yù)測(cè)163
14.13 小結(jié)165
第15章 NNTP:網(wǎng)絡(luò)新聞傳輸協(xié)議166
15.1 概述166
15.2 NNTP167
15.3 一個(gè)簡(jiǎn)單的新聞客戶170
15.4 一個(gè)復(fù)雜的新聞客戶171
15.5 NNTP的統(tǒng)計(jì)資料172
15.6 小結(jié)173
第三部分 Unix域協(xié)議
第16章 Unix域協(xié)議:概述175
16.1 概述175
16.2 用途176
16.3 性能177
16.4 編碼舉例177
16.5 小結(jié)179
第17章 Unix域協(xié)議:實(shí)現(xiàn)180
17.1 概述180
17.2 代碼介紹180
17.3 Unix domain和protosw結(jié)構(gòu)181
17.4 Unix域插口地址結(jié)構(gòu)182
17.5 Unix域協(xié)議控制塊183
17.6 uipc_usrreq函數(shù)185
17.7 PRU_ATTACH請(qǐng)求和unp_attach函數(shù)186
17.8 PRU_DETACH請(qǐng)求和unp_detach函數(shù)187
17.9 PRU_BIND請(qǐng)求和unp_bind函數(shù)189
17.10 PRU_CONNECT請(qǐng)求和unp_connect函數(shù)191
17.11 PRU_CONNECT2請(qǐng)求和unp_connect2函數(shù)195
17.12 socketpair系統(tǒng)調(diào)用198
17.13 pipe系統(tǒng)調(diào)用202
17.14 PRU_ACCEPT請(qǐng)求203
17.15 PRU_DISCONNECT請(qǐng)求和unp_disconnect函數(shù)204
17.16 PRU_SHUTDOWN請(qǐng)求和unp_shutdown函數(shù)205
17.17 PRU_ABORT請(qǐng)求和unp_drop函數(shù)206
17.18 其他各種請(qǐng)求207
17.19 小結(jié)209
第18章 Unix域協(xié)議:I/O和描述符的傳遞210
18.1 概述210
18.2 PRU_SEND和PRU_RCVD請(qǐng)求210
18.3 描述符的傳遞214
18.4 unp_internalize函數(shù)218
18.5 unp_externalize函數(shù)220
18.6 unp_discard函數(shù)221
18.7 unp_dispose函數(shù)222
18.8 unp_scan函數(shù)222
18.9 unp_gc函數(shù)223
18.10 unp_mark函數(shù)230
18.11 性能(再討論)231
18.12 小結(jié)231
附錄A 測(cè)量網(wǎng)絡(luò)時(shí)間232
附錄B 編寫T/TCP應(yīng)用程序242
參考文獻(xiàn)246
縮略語251