第一章:概述

1.1引言

很多不同的廠家生產各種型號的計算機,它們運行完全不同的操作系統,但TCP/IP協議族允許它們互相進行通信。這一點很讓人感到吃驚,因為它的作用已遠遠超出了起初的設想。TCP/IP起源于60年代末美國政府資助的一個分組交換網絡研究項目,到90年代已發展成為計算機之間最常應用的組網形式。它是一個真正的開放系統,因為協議族的定義及其多種實現可以不用花錢或花很少的錢就可以公開地得到。它成為被稱作“全球互聯網”或“因特網(Internet)”的基礎,該廣域網(WAN)已包含超過100萬臺遍布世界各地的計算機。

本章主要對TCP/IP協議族進行概述,其目的是為本書其余章節提供充分的背景知識。如果讀者要從歷史的角度了解有關TCP/IP的早期發展情況,請參考文獻[Lynch 1993]。

1.2:分層

網絡協議通常分不同層次進行開發,每一層分別負責不同的通信功能。一個協議族,比如TCP/IP,是一組不同層次上的多個協議的組合。TCP/IP通常被認為是一個四層協議系統,如圖1-1所示。

圖1-1 TCP/IP協議族的四個層次
每一層負責不同的功能:

1:鏈路層,有時也稱作數據鏈路層或網絡接口層,通常包括操作系統中的設備驅動程序和計算機中對應的網絡接口卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理接口細節。

2:網絡層,有時也稱作互聯網層,處理分組在網絡中的活動,例如分組的選路。在TCP/IP協議族中,網絡層協議包括IP協議(網際協議),ICMP協議(Internet互聯網控制報文協議),以及IGMP協議(Internet組管理協議)。

3:運輸層主要為兩臺主機上的應用程序提供端到端的通信。在TCP/IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。

TCP為兩臺主機提供高可靠性的數據通信。它所做的工作包括把應用程序交給它的數據分成合適的小塊交給下面的網絡層,確認接收到的分組,設置發送最后確認分組的超時時鐘等。由于運輸層提供了高可靠性的端到端的通信,因此應用層可以忽略所有這些細節。

而另一方面,UDP則為應用層提供一種非常簡單的服務。它只是把稱作數據報的分組從一臺主機發送到另一臺主機,但并不保證該數據報能到達另一端。任何必需的可靠性必須由應用層來提供。

這兩種運輸層協議分別在不同的應用程序中有不同的用途,這一點將在后面看到。

4:應用層負責處理特定的應用程序細節。幾乎各種不同的TCP/IP實現都會提供下面這些通用的應用程序
?Telnet遠程登錄。
? FTP文件傳輸協議。
? SMTP簡單郵件傳送協議。
? SNMP簡單網絡管理協議。

另外還有許多其他應用,在后面章節中將介紹其中的一部分。假設在一個局域網(LAN)如以太網中有兩臺主機,二者都運行FTP協議,圖1-2列出了該過程所涉及到的所有協議。


圖1-2 局域網上運行FTP的兩臺主機

這里,我們列舉了一個FTP客戶程序和另一個FTP服務器程序。大多數的網絡應用程序都被設計成客戶—服務器模式。服務器為客戶提供某種服務,在本例中就是訪問服務器所在主機上的文件。在遠程登錄應用程序Te lnet中,為客戶提供的服務是登錄到服務器主機上。

在同一層上,雙方都有對應的一個或多個協議進行通信。例如,某個協議允許TCP層進行通信,而另一個協議則允許兩個IP層進行通信。

在圖1-2的右邊,我們注意到應用程序通常是一個用戶進程,而下三層則一般在(操作系統)內核中執行。盡管這不是必需的,但通常都是這樣處理的,例如UNIX操作系統。

在圖1-2中,頂層與下三層之間還有另一個關鍵的不同之處。應用層關心的是應用程序的細節,而不是數據在網絡中的傳輸活動。下三層對應用程序一無所知,但它們要處理所有的通信細節。

在圖1-2中列舉了四種不同層次上的協議。FTP是一種應用層協議,TCP是一種運輸層協議,IP是一種網絡層協議,而以太網協議則應用于鏈路層上。TCP/IP協議族是一組不同的協議組合在一起構成的協議族。盡管通常稱該協議族為TCP/IP,但TCP和IP只是其中的兩種協議而已(該協議族的另一個名字是Internet協議族(Internet Protocol Suite))。

網絡接口層和應用層的目的是很顯然的——前者處理有關通信媒介的細節(以太網、令牌環網等),而后者處理某個特定的用戶應用程序(FTP、Telnet等)。但是,從表面上看,網絡層和運輸層之間的區別不那么明顯。為什么要把它們劃分成兩個不同的層次呢?為了理解這一點,我們必須把視野從單個網絡擴展到一組網絡。

在80年代,網絡不斷增長的原因之一是大家都意識到只有一臺孤立的計算機構成的“孤島”沒有太大意義,于是就把這些孤立的系統組在一起形成網絡。隨著這樣的發展,到了90年代,我們又逐漸認識到這種由單個網絡構成的新的更大的“島嶼”同樣沒有太大的意義。于是,人們又把多個網絡連在一起形成一個網絡的網絡,或稱作互連網(internet)。一個互連網就是一組通過相同協議族互連在一起的網絡。

構造互連網最簡單的方法是把兩個或多個網絡通過路由器進行連接。它是一種特殊的用于網絡互連的硬件盒。路由器的好處是為不同類型的物理網絡提供連接:以太網、令牌環網、點對點的鏈接和FDDI(光纖分布式數據接口)等等。

這些盒子也稱作IP路由器(IP Router),但我們這里使用路由器(Router)這個術語。從歷史上說,這些盒子稱作網關(gateway),在很多TCP/IP文獻中都使用這個術語。現在網關這個術語只用來表示應用層網關:一個連接兩種不同協議族的進程(例如,TCP/IP和IBM的SNA),它為某個特定的應用程序服務(常常是電子郵件或文件傳輸)。

圖1-3是一個包含兩個網絡的互連網:一個以太網和一個令牌環網,通過一個路由器互相連接。盡管這里是兩臺主機通過路由器進行通信,實際上以太網中的任何主機都可以與令牌環網中的任何主機進行通信。

在圖1-3中,我們可以劃分出端系統(End system)(兩邊的兩臺主機)和中間系統(Intermediate system)(中間的路由器)。應用層和運輸層使用端到端(End-to-end)協議。在圖中,只有端系統需要這兩層協議。但是,網絡層提供的卻是逐跳(Hop-by-hop)協議,兩個端系統和每個中間系統都要使用它。

圖1-3 通過路由器連接的兩個網絡

在TCP/IP協議族中,網絡層IP提供的是一種不可靠的服務。也就是說,它只是盡可能快地把分組從源結點送到目的結點,但是并不提供任何可靠性保證。而另一方面,TCP在不可靠的IP層上提供了一個可靠的運輸層。為了提供這種可靠的服務,TCP采用了超時重傳、發送和接收端到端的確認分組等機制。由此可見,運輸層和網絡層分別負責不同的功能。

從定義上看,一個路由器具有兩個或多個網絡接口層(因為它連接了兩個或多個網絡)。任何具有多個接口的系統,英文都稱作是多接口的(multihomed)。一個主機也可以有多個接口,但一般不稱作路由器,除非它的功能只是單純地把分組從一個接口傳送到另一個接口。同樣,路由器并不一定指那種在互聯網中用來轉發分組的特殊硬件盒。大多數的TCP/IP實現也允許一個多接口主機來擔當路由器的功能,但是主機為此必須進行特殊的配置。在這種情況下,我們既可以稱該系統為主機(當它運行某一應用程序時,如FTP或Telnet),也可以稱之為路由器(當它把分組從一個網絡轉發到另一個網絡時)。在不同的場合下使用不同的術語。

互聯網的目的之一是在應用程序中隱藏所有的物理細節。雖然這一點在圖1-3由兩個網絡組成的互聯網中并不很明顯,但是應用層不能關心(也不關心)一臺主機是在以太網上,而另一臺主機是在令牌環網上,它們通過路由器進行互連。隨著增加不同類型的物理網絡,可能會有20個路由器,但應用層仍然是一樣的。物理細節的隱藏使得互聯網功能非常強大,也非常有用。

連接網絡的另一個途徑是使用網橋。網橋是在鏈路層上對網絡進行互連,而路由器則是在網絡層上對網絡進行互連。網橋使得多個局域網(LAN)組合在一起,這樣對上層來說就好像是一個局域網。

TCP/IP傾向于使用路由器而不是網橋來連接網絡,因此我們將著重介紹路由器。文獻[Perlman 1992]的第12章對路由器和網橋進行了比較。

1.3 TCP/IP的分層

在TCP/IP協議族中,有很多種協議。圖1-4給出了本書將要討論的其他協議。


圖1-4 TCP/IP協議族中不同層次的協議

TCP和UDP是兩種最為著名的運輸層協議,二者都使用IP作為網絡層協議。

雖然TCP使用不可靠的IP服務,但它卻提供一種可靠的運輸層服務。本書第17~22章將詳細討論TCP的內部操作細節。然后,我們將介紹一些TCP的應用,如第26章中的Telnet和Rlogin、第27章中的FTP以及第28章中的SMTP等。這些應用通常都是用戶進程。

UDP為應用程序發送和接收數據報。一個數據報是指從發送方傳輸到接收方的一個信息單元(例如,發送方指定的一定字節數的信息)。但是與TCP不同的是,UDP是不可靠的,它不能保證數據報能安全無誤地到達最終目的。本書第11章將討論UDP,然后在第14章(DNS:域名系統),第15章(TFTP:簡單文件傳送協議),以及第16章(BOOTP:引導程序協議)介紹使用UDP的應用程序。SNMP也使用了UDP協議,但是由于它還要處理許多其他的協議,因此本書把它留到第25章再進行討論。

IP是網絡層上的主要協議,同時被TCP和UDP使用。TCP和UDP的每組數據都通過端系統和每個中間路由器中的IP層在互聯網中進行傳輸。在圖1-4中,我們給出了一個直接訪問IP的應用程序。這是很少見的,但也是可能的(一些較老的選路協議就是以這種方式來實現的。當然新的運輸層協議也有可能使用這種方式)。第3章主要討論IP協議,但是為了使內容更加有針對性,一些細節將留在后面的章節中進行討論。第9章和第10章討論IP如何進行選路。

ICMP是IP協議的附屬協議。IP層用它來與其他主機或路由器交換錯誤報文和其他重要信息。第6章對ICMP的有關細節進行討論。盡管ICMP主要被IP使用,但應用程序也有可能訪問它。我們將分析兩個流行的診斷工具,Ping和Traceroute(第7章和第8章),它們都使用了ICMP。

IGMP是Internet組管理協議。它用來把一個UDP數據報多播到多個主機。我們在第12章中描述廣播(把一個UDP數據報發送到某個指定網絡上的所有主機)和多播的一般特性,然后在第13章中對IGMP協議本身進行描述。

ARP(地址解析協議)和RARP(逆地址解析協議)是某些網絡接口(如以太網和令牌環網)使用的特殊協議,用來轉換IP層和網絡接口層使用的地址。我們分別在第4章和第5章對這兩種協議進行分析和介紹。

1.4 互聯網的地址

互聯網上的每個接口必須有一個唯一的Internet地址(也稱作IP地址)。IP地址長32 bit。Internet地址并不采用平面形式的地址空間,如1、2、3等。IP地址具有一定的結構,五類不同的互聯網地址格式如圖1-5所示。

圖1-5 五類互聯網地址

這些 32 位的地址通常寫成四個十進制的數,其中每個整數對應一個字節。這種表示方法稱作“點分十進制表示法(Dotted decimal notation)”。例如,作者的系統就是一個 B 類地址,它表示為: 140.252.13.33。

區分各類地址的最簡單方法是看它的第一個十進 制整數。圖 1-6 列出了各類地址的起止范圍,其中第一個十進制整數用加黑字體表示。

需要再次指出的是,多接口主機具有多個IP地址,其中每個接口都對應一個IP地址。

圖1-6 各類IP地址的范圍

由于互聯網上的每個接口必須有一個唯一的IP地址,因此必須要有一個管理機構為接入互聯網的網絡分配IP地址。這個管理機構就是互聯網絡信息中心(Internet Network Information Centre),稱作InterNIC。InterNIC只分配網絡號。主機號的分配由系統管理員來負責。

Internet注冊服務(IP地址和DNS域名)過去由NIC來負責,其網絡地址是nic.ddn.mil。1993年4月1日,InterNIC成立。現在,NIC只負責處理國防數據網的注冊請求,所有其他的Internet用戶注冊請求均由InterNIC負責處理,其網址是:rs.internic.net。

事實上InterNIC由三部分組成:注冊服務(rs.internic.net),目錄和數據庫服務(ds.internic.net),以及信息服務(is.internic.net)。

有三類IP地址:單播地址(目的為單個主機)、廣播地址(目的端為給定網絡上的所有主機)以及多播地址(目的端為同一組內的所有主機)。第12章和第13章將分別討論廣播和多播的更多細節。

在3.4節中,我們在介紹IP選路以后將進一步介紹子網的概念。圖3-9給出了幾個特殊的IP地址:主機號和網絡號為全0或全1。

1.5 域名系統

盡管通過IP地址可以識別主機上的網絡接口,進而訪問主機,但是人們最喜歡使用的還是主機名。在TCP/IP領域中,域名系統(DNS)是一個分布的數據庫,由它來提供IP地址和主機名之間的映射信息。我們在第14章將詳細討論DNS。

現在,我們必須理解,任何應用程序都可以調用一個標準的庫函數來查看給定名字的主機的IP地址。類似地,系統還提供一個逆函數—給定主機的IP地址,查看它所對應的主機名。

大多數使用主機名作為參數的應用程序也可以把IP地址作為參數。例如,在第4章中當我們用Telnet進行遠程登錄時,既可以指定一個主機名,也可以指定一個IP地址。

1.6 封裝

當應用程序用TCP傳送數據時,數據被送入協議棧中,然后逐個通過每一層直到被當作一串比特流送入網絡。其中每一層對收到的數據都要增加一些首部信息(有時還要增加尾部信息),該過程如圖1-7所示。TCP傳給IP的數據單元稱作TCP報文段或簡稱為TCP段(TCP segment)。IP傳給網絡接口層的數據單元稱作IP數據報(IP datagram)。通過以太網傳輸的比特流稱作幀(Frame)。

圖1-7中幀頭和幀尾下面所標注的數字是典型以太網幀首部的字節長度。在后面的章節中我們將詳細討論這些幀頭的具體含義。以太網數據幀的物理特性是其長度必須在46~1500字節之間。我們將在4.5節遇到最小長度的數據幀,在2.8節中遇到最大長度的數據幀。

所有的Internet標準和大多數有關TCP/IP的書都使用octet這個術語來表示字節。使用這個過分雕琢的術語是有歷史原因的,因為TCP/IP的很多工作都是在DEC-10系統上進行的,但是它并不使用8bit的字節。由于現在幾乎所有的計算機系統都采用8bit的字節,因此我們在本書中使用字節(byte)這個術語。

更準確地說,圖1-7中IP和網絡接口層之間傳送的數據單元應該是分組(packet)。分組既可以是一個IP數據報,也可以是IP數據報的一個片(fragment)。我們將在11.5節討論IP數據報分片的詳細情況。

圖1-7 數據進入協議棧時的封裝過程

UDP數據與TCP數據基本一致。唯一的不同是UDP傳給IP的信息單元稱作UDP數據報(UDP datagram),而且UDP的首部長為8字節。

回想1.3節中的圖1-4,由于TCP、UDP、ICMP和IGMP都要向IP傳送數據,因此IP必須在生成的IP首部中加入某種標識,以表明數據屬于哪一層。為此,IP在首部中存入一個長度為8bit的數值,稱作協議域。1表示為ICMP協議,2表示為IGMP協議,6表示為TCP協議,17表示為UDP協議。

類似地,許多應用程序都可以使用TCP或UDP來傳送數據。運輸層協議在生成報文首部時要存入一個應用程序的標識符。TCP和UDP都用一個16bit的端口號來表示不同的應用程序。TCP和UDP把源端口號和目的端口號分別存入報文首部中。

網絡接口分別要發送和接收IP、ARP和RARP數據,因此也必須在以太網的幀首部中加入某種形式的標識,以指明生成數據的網絡層協議。為此,以太網的幀首部也有一個16 bit的幀類型域。

1.7 分用

當目的主機收到一個以太網數據幀時,數據就開始從協議棧中由底向上升,同時去掉各層協議加上的報文首部。每層協議盒都要去檢查報文首部中的協議標識,以確定接收數據的上層協議。這個過程稱作分用(Demultiplexing),圖1-8顯示了該過程是如何發生的。

圖1-8以太網數據幀的分用過程

為協議ICMP和IGMP定位一直是一件很棘手的事情。在圖1-4中,把它們與IP放在同一層上,那是因為事實上它們是IP的附屬協議。但是在這里,我們又把它們放在IP層的上面,這是因為ICMP和IGMP報文都被封裝在IP數據報中。

對于ARP和RARP,我們也遇到類似的難題。在這里把它們放在以太網設備驅動程序的上方,這是因為它們和IP數據報一樣,都有各自的以太網數據幀類型。但在圖2-4中,我們又把ARP作為以太網設備驅動程序的一部分,放在IP層的下面,其原因在邏輯上是合理的。

這些分層協議盒并不都是完美的。

當進一步描述TCP的細節時,我們將看到協議確實是通過目的端口號、源IP地址和源端口號進行解包的。

1.8 客戶-服務器模型

大部分網絡應用程序在編寫時都假設一端是客戶,另一端是服務器,其目的是為了讓服務器為客戶提供一些特定的服務。

可以將這種服務分為兩種類型:重復型或并發型。重復型服務器通過以下步驟進行交互:

I1.等待一個客戶請求的到來。
I2.處理客戶請求。
I3.發送響應給發送請求的客戶。
I4.返回I1步。

重復型服務器主要的問題發生在I2狀態。在這個時候,它不能為其他客戶機提供服務。相應地,并發型服務器采用以下步驟:

C1.等待一個客戶請求的到來。
C2.啟動一個新的服務器來處理這個客戶的請求。在這期間可能生成一個新的進程、任務或線程,并依賴底層操作系統的支持。這個步驟如何進行取決于操作系統。生成的新服務器對客戶的全部請求進行處理。處理結束后,終止這個新服務器。
C3.返回C1步。

并發服務器的優點在于它是利用生成其他服務器的方法來處理客戶的請求。也就是說,每個客戶都有它自己對應的服務器。如果操作系統允許多任務,那么就可以同時為多個客戶服務。

對服務器,而不是對客戶進行分類的原因是因為對于一個客戶來說,它通常并不能夠辨別自己是與一個重復型服務器或并發型服務器進行對話。

一般來說,TCP服務器是并發的,而UDP服務器是重復的,但也存在一些例外。我們將在11.12節對UDP對其服務器產生的影響進行詳細討論,并在18.11節對TCP對其服務器的影響進行討論。

1.9 端口號

前面已經指出過,TCP和UDP采用16 bit的端口號來識別應用程序。那么這些端口號是如何選擇的呢?

服務器一般都是通過知名端口號來識別的。例如,對于每個TCP/IP實現來說,FTP服務器的TCP端口號都是21,每個Telnet服務器的TCP端口號都是23,每個TFTP(簡單文件傳送協議)服務器的UDP端口號都是69。任何TCP/IP實現所提供的服務都用知名的1~1023之間的端口號。這些知名端口號由Internet號分配機構(Internet Assigned Numbers Authority, IANA)來管理。

到1992年為止,知名端口號介于1~255之間。256~1023之間的端口號通常都是由Unix系統占用,以提供一些特定的Unix服務—也就是說,提供一些只有Unix系統才有的、而其他操作系統可能不提供的服務。現在IANA管理1~1023之間所有的端口號。

Internet擴展服務與Unix特定服務之間的一個差別就是Telnet和Rlogin。它們二者都允許通過計算機網絡登錄到其他主機上。Telnet是采用端口號為23的TCP/IP標準且幾乎可以在所有操作系統上進行實現。相反,Rlogin最開始時只是為Unix系統設計的(盡管許多非Unix系統現在也提供該服務),因此在80年代初,它的有名端口號為513。

客戶端通常對它所使用的端口號并不關心,只需保證該端口號在本機上是唯一的就可以了。客戶端口號又稱作臨時端口號(即存在時間很短暫)。這是因為它通常只是在用戶運行該客戶程序時才存在,而服務器則只要主機開著的,其服務就運行。

大多數TCP/IP實現給臨時端口分配1024~5000之間的端口號。大于5000的端口號是為其他服務器預留的(Internet上并不常用的服務)。我們可以在后面看見許多這樣的給臨時端口分配端口號的例子。

Solaris 2.2是一個很有名的例外。通常TCP和UDP的缺省臨時端口號從32768開始。

在E.4節中,我們將詳細描述系統管理員如何對配置選項進行修改以改變這些缺省項。

大多數Unix系統的文件/etc/services都包含了人們熟知的端口號。為了找到Telnet服務器和域名系統的端口號,可以運行以下語句:

Unix系統有保留端口號的概念。只有具有超級用戶特權的進程才允許給它自己分配一個保留端口號。

這些端口號介于1~1023之間,一些應用程序(如有名的Rlogin,26.2節)將它作為客戶與服務器之間身份認證的一部分。

1.10 標準化過程

究竟是誰控制著TCP/IP協議族,又是誰在定義新的標準以及其他類似的事情?事實上,有四個小組在負責Internet技術。

1:Internet協會(ISOC,Internet Society)是一個推動、支持和促進Internet不斷增長和發展的專業組織,它把Internet作為全球研究通信的基礎設施。

2:Internet體系結構委員會(IAB,Internet Architecture Board)是一個技術監督和協調的機構。它由國際上來自不同專業的15個志愿者組成,其職能是負責Internet標準的最后編輯和技術審核。IAB隸屬于ISOC。

3:Internet工程專門小組(IETF,Internet Engineering Task Force)是一個面向近期標準的組織,它分為9個領域(應用、尋徑和尋址、安全等等)。IETF開發成為Internet標準的規范。為幫助IETF主席,又成立了Internet工程指導小組(IESG, Internet Engineering Steering Group)。

4:Internet研究專門小組(IRIF,Internet Research Task Force)主要對長遠的項目進行研究。

IRTF和IETF都隸屬于IAB。文獻[Crocker 1993]提供了關于Internet內部標準化進程更為詳細的信息,同時還介紹了它的早期歷史。

1.11 RFC

所有關于Internet的正式標準都以RFC(Request for Comment)文檔出版。另外,大量的RFC并不是正式的標準,出版的目的只是為了提供信息。RFC的篇幅從1頁到200頁不等。每一項都用一個數字來標識,如RFC 1122,數字越大說明RFC的內容越新。

所有的RFC都可以通過電子郵件或用FTP從Internet上免費獲取。如果發送下面這份電子郵件,就會收到一份獲取RFC的方法清單:

To: rfc-info@ISI.EDU
Subject: getting rfcs
help: ways_to_get_rfcs

最新的RFC索引總是搜索信息的起點。這個索引列出了RFC被替換或局部更新的時間。下面是一些重要的RFC文檔:

1:賦值RFC(Assigned Numbers RFC)列出了所有Internet協議中使用的數字和常數。至本書出版時為止,最新RFC的編號是1340[Reynolds 和 Postel 1992]。所有著名的Internet端口號都列在這里。當這個RFC被更新時(通常每年至少更新一次),索引清單會列出RFC 1340被替換的時間。

2:Internet正式協議標準,目前是RFC 1600[Postel 1994]。這個RFC描述了各種Internet協議的標準化現狀。每種協議都處于下面幾種標準化狀態之一:標準、草案標準、提議標準、實驗標準、信息標準和歷史標準。另外,對每種協議都有一個要求的層次、必需的、建議的、可選擇的、限制使用的或者不推薦的。與賦值RFC一樣,這個RFC也定期更新。請隨時查看最新版本。

3:主機需求RFC,1122和1123[Braden 1989a, 1989b]。RFC 1122針對鏈路層、網絡層和運輸層;RFC 1123針對應用層。這兩個RFC對早期重要的RFC文檔作了大量的糾正和解釋。如果要查看有關協議更詳細的細節內容,它們通常是一個入口點。它們列出了協議中關于“必須”、“應該”、“可以”、“不應該”或者“不能”等特性及其實現細節。文獻[Borman 1993b]提供了有關這兩個RFC的實用內容。RFC 1127[Braden 1989c]對工作小組開發主機需求RFC過程中的討論內容和結論進行了非正式的總結。

4:路由器需求RFC,目前正式版是RFC 1009[Braden and Postel 1987],但一個新版已接近完成[Almquist 1993]。它與主機需求RFC類似,但是只單獨描述了路由器的需求。

1.12 標準的簡單服務

有一些標準的簡單服務幾乎每種實現都要提供。在本書中我們將使用其中的一些服務程序,而客戶程序通常選擇Telnet。圖1-9描述了這些服務。從該圖可以看出,當使用TCP和UDP提供相同的服務時,一般選擇相同的端口號。

圖1-9大多數實現都提供的標準的簡單服務

如果仔細檢查這些標準的簡單服務以及其他標準的TCP/IP服務(如Telnet、FTP、SMTP等)的端口號時,我們發現它們都是奇數。這是有歷史原因的,因為這些端口號都是從NCP端口號派生出來的(NCP,即網絡控制協議,是ARPANET的運輸層協議,是TCP的前身)。NCP是單工的,不是全雙工的,因此每個應用程序需要兩個連接,需預留一對奇數和偶數端口號。當TCP和UDP成為標準的運輸層協議時,每個應用程序只需要一個端口號,因此就使用了NCP中的奇數。

1.13 互聯網

在圖1-3中,我們列舉了一個由兩個網絡組成的互聯網——一個以太網和一個令牌環網。在1.4節和1.9節中,我們討論了世界范圍內的互聯網—Internet,以及集中分配IP地址的需要(InterNIC),還討論了知名端口號(IANA)。internet這個詞第一個字母是否大寫決定了它具有不同的含義。

internet意思是用一個共同的協議族把多個網絡連接在一起。而Internet指的是世界范圍內通過TCP/IP互相通信的所有主機集合(超過100萬臺)。Internet是一個internet,但internet不等于Internet。

1.14 實現

既成事實標準的TCP/IP軟件實現來自于位于伯克利的加利福尼亞大學的計算機系統研究小組。從歷史上看,軟件是隨同4.x BSD系統(Berkeley Software Distribution)的網絡版一起發布的。它的源代碼是許多其他實現的基礎。

圖1-10列舉了各種BSD版本發布的時間,并標注了重要的TCP/IP特性。列在左邊的BSD網絡版,其所有的網絡源代碼可以公開得到:包括協議本身以及許多應用程序和工具(如Telnet和FTP)。

圖1-10 不同的BSD版及其重要的TCP/IP特性

在本書中,我們將使用“伯克利派生系統”來指SunOS 4.x、SVR4以及AIX 3.2等那些基于伯克利源代碼開發的系統。這些系統有很多共同之處,經常包含相同的錯誤。

起初關于Internet的很多研究現在仍然在伯克利系統中應用——新的擁塞控制算法(21.7節)、多播(12.4節)、“長肥管道”修改(24.3節)以及其他類似的研究。

1.15 應用編程接口

使用TCP/IP協議的應用程序通常采用兩種應用編程接口(API):socket和TLI(運輸層接口:Transport Layer Interface)。前者有時稱作“Berkeley socket”,表明它是從伯克利版發展而來的。后者起初是由AT&T開發的,有時稱作XTI(X/Open運輸層接口),以承認X/Open這個自己定義標準的國際計算機生產商所做的工作。XTI實際上是TLI的一個超集。

本書不是一本編程方面的書,但是偶爾會引用一些內容來說明TCP/IP的特性,不管大多數的API(socket)是否提供它們。所有關于socket和TLI的編程細節請參閱文獻[Stevens 1990]。

1.16 測試網絡

圖1-11是本書中所有的例子運行的測試網絡。為閱讀時參考方便,該圖還復制在本書扉頁前的插頁中。

圖1-11 本書中所有例子運行的測試網絡,所有的IP地址均從140.252開始編址

在這個圖中(作者的子網),大多數的例子都運行在下面四個系統中。圖中所有的IP地址屬于B類地址,網絡號為140.252。所有的主機名屬于.tuc.noao.edu這個域(noao代表National Optical Astronomy Observatories,tuc代表Tu cson)。例如,右下方的系統有一個完整的名字:svr4.tuc.noao.edu,其IP地址是:140.252.13.34。每個方框上方的名稱是該主機運行的操作系統。這一組系統和網絡上的主機及路由器運行于不同的TCP/IP實現。

需要指出的是,noao.edu這個域中的網絡和主機要比圖1-11中的多得多。這里列出來的只是本書中將要用到的系統。

在3.4節中,我們將描述這個網絡所用到的子網形式。在4.6節中將介紹sun與netb之間的撥號SLIP的有關細節。2.4節將詳細討論SLIP。

1.17 小結

本章快速地瀏覽了TCP/IP協議族,介紹了在后面的章節中將要詳細討論的許多術語和協議。

TCP/IP協議族分為四層:鏈路層、網絡層、運輸層和應用層,每一層各有不同的責任。在TCP/IP中,網絡層和運輸層之間的區別是最為關鍵的:網絡層(IP)提供點到點的服務,而運輸層(TCP和UDP)提供端到端的服務。

一個互聯網是網絡的網絡。構造互聯網的共同基石是路由器,它們在IP層把網絡連在一起。第一個字母大寫的Internet是指分布在世界各地的大型互聯網,其中包括1萬多個網絡和超過100萬臺主機。

在一個互聯網上,每個接口都用IP地址來標識,盡管用戶習慣使用主機名而不是IP地址。域名系統為主機名和IP地址之間提供動態的映射。端口號用來標識互相通信的應用程序。服務器使用知名端口號,而客戶使用臨時設定的端口號。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 名詞延伸 通俗的說,域名就相當于一個家庭的門牌號碼,別人通過這個號碼可以很容易的找到你。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,622評論 2 56
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者...
    保川閱讀 5,983評論 1 13
  • 個人認為,Goodboy1881先生的TCP /IP 協議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,087評論 0 8
  • 1.這篇文章不是本人原創的,只是個人為了對這部分知識做一個整理和系統的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,125評論 6 174
  • Teredo 原理概述 http://www.ipv6bbs.cn/thread-144-1-1.html (出處...
    我是葉問小盆友閱讀 2,057評論 0 1