?? ?
字號:
前 言
引言和本書的組織
本書是“TCP/IP詳解系列”的延續:此系列的卷1是[Stevens 1994],卷2是[Wright and Stevens 1995]。本書分成三個部分,每個部分覆蓋了不同的內容。
(1) TCP事務協議,通常叫做T/TCP。這是對TCP的擴展,其設計目的是使客戶-服務器事務更快、更高效和更可靠。這個目標的實現省略了連接開始時TCP的三次握手,并縮短了連接結束時TIME_WAIT狀態的持續時間。我們將會看到,在客戶-服務器事務中,T/TCP的性能與UDP相當,而且T/TCP具有可靠性和適應性,這兩點相對UDP來說都是很大的改進。
事務是這樣定義的:一個客戶向服務器發出請求,接下來是服務器給出響應(這里的名詞“事務”(transaction)并非數據庫中的事務處理,數據庫中的事務處理有封鎖、兩步提交和回退)。
(2) TCP/IP應用,特別是HTTP(超文本傳送協議,WWW的基礎)和NNTP(網絡新聞傳送協議,Usenet新聞系統的基礎)。
(3) Unix域協議。這些協議是所有Unix中的TCP/IP實現中都提供的,在許多非Unix的實現中也都提供。這些協議提供了進程之間通信(IPC)的一種手段,采用了與TCP/IP中一樣的插口接口。當客戶與服務器進程在同一主機上時,Unix域協議通常要比TCP/IP快一倍。
第一部分,即對T/TCP的介紹,又分成兩個小部分。第1~4章介紹協議,并給出了大量實例來說明它們是怎樣工作的。這些材料主要是對卷1中24.7節的補充,在那里對T/TCP只是做了簡單的介紹。第2小部分,即第5~12章,介紹T/TCP在4.4BSD-Lite網絡代碼(即,卷2中給出的代碼)中的確切實現。由于最早的T/TCP實現遲至1994年9月才發布,已經是本書卷1出版一年以后了,那時卷2也快完成了,因此T/TCP的詳細敘述,包括諸多實例和所有的實現細節都只好放在本系列書的卷3中了。
第二部分,即HTTP和NNTP應用,是卷1的第25~30章中介紹TCP/IP應用的延續。在卷1出版后的兩年里,隨著Internet的發展,HTTP得到了極大的流行,而NNTP的使用則在最近的10多年中每年增長了大約75%。T/TCP對HTTP來說也是非常好的,可以這樣來用TCP:在少量數據傳輸中縮短連接時間,因為這種時候連接的建立和拆除時間往往占總時間的大頭。在繁忙的Web服務器上,成千上萬個不同而且不斷變化的客戶對HTTP(因此也對TCP)的高負荷使用,也提供了唯一可以對服務器上確切的分組進行考查的機會(第14章),可以觀察卷1和卷2中給出的TCP/IP的許多特性。
第三部分中的Unix域協議原本是準備在卷2中介紹的,但由于卷2已多達1200頁而刪去了。在書名為《TCP/IP詳解》這樣的系列書中夾雜著TCP/IP以外的協議不免令人生奇,但Unix域協議幾乎15年前就已經伴隨著BSD版TCP/IP的實現在4.2BSD中發布了。今天,它們在任何一個從伯克利衍生而來的內核中都在頻繁地使用,但它們的使用往往“被掩蓋在后臺”,大多數用戶不知道它們的存在。除了在從伯克利衍生而來的內核中充當Unix管道的基礎外,它們的另一個大用戶是當客戶程序和服務器程序在同一主機(典型的情況是工作站)上時的X Window系統。Unix域的插口也用于進程之間傳遞描述符,也是進程之間通信的一個強大工具。由于Unix域協議所用的插口API(應用編程接口)與TCP/IP所用的插口API幾乎是相同的,Unix域協議以最小的代碼變化提供了一個簡單的手段來增強本地應用的性能。
以上三個部分的每個部分都可以獨立閱讀。
讀者
與本系列書的前兩卷一樣,這一卷是為所有想要理解TCP/IP如何工作的人寫的:編寫網絡應用的程序員,負責維護采用TCP/IP的計算機和網絡的系統管理員,以及在日常工作中經常與TCP/IP應用程序打交道的用戶。
第一和第二部分是理解TCP/IP工作原理的基礎。不熟悉TCP/IP的讀者應該看看本系列書的卷1,見[Stevens 1994],以便對TCP/IP協議集有一個全面的了解。第一部分的前半部分(第1~4章,TCP/IP中的概念和例子)與卷2無關,可以直接閱讀。但后半部分(第5~12章,T/TCP的實現)則需要先熟悉4.4 BSD-Lite網絡程序,這些內容在卷2中介紹。
在整本書中有大量的向前和向后參考索引,這些參考索引是針對本書的兩個主題,以及對卷1和卷2的內容,為想要了解更詳細內容的讀者提供的。在本書最后有書中用到的所有縮略語,封底背面則有書中介紹的所有結構、函數和宏(以字母順序排列)及其介紹起始頁碼的交叉參考列表。如果本書引用了卷2中的定義,則該交叉參考列表也列出了卷2中的定義。
源碼版權
本書中引自4.4BSD-Lite版的所有源碼(源程序)都包括有下面這樣的版權說明:
第6章路由表的源碼則包括下面這樣的版權說明:
印刷慣例
當需要顯示交互的輸入和輸出信息時,將用黑體表示鍵盤輸入,而計算機輸出則用Courrier體,并用中文宋體作注釋。
書中總是把系統名作為命令解釋程序提示符的一部分(例如sun),以說明命令是在哪個主機上執行的。在正文中引用的程序名通常都是首字母大寫(如Telnet和Tcpdump),以避免過多的字體形式。
在整個這本書中,我們將用像上述這段文字一樣的縮進、附加的注釋來說明實現細節中的歷史階段。
W. Richard Stevens
Tucson, Arizona
1995年11月
rstevens@noao.edu
http://www.noao.edu/~rstevens
[關閉此窗口]
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -