官术网_书友最值得收藏!

1.3.2 TCP/IP的分層

1.TCP/IP組件中不同層次的協議

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

雖然TCP使用不可靠的IP服務,但它卻提供一種可靠的傳輸層服務。

UDP為應用程序發送和接收數據報。一個數據報是指從發送方傳輸到接收方的一個信息單元(例如,發送方指定的一定字節數的信息)。但是與TCP不同的是,UDP是不可靠的,它不能保證數據報能安全無誤地到達最終目的。

IP是網絡層上的主要協議,同時被TCP和UDP使用。TCP和UDP的每組數據都通過端系統和每個中間路由器中的IP層在互聯網中進行傳輸。

ICMP是IP協議的附屬協議。IP層用它來與其他主機或路由器交換錯誤報文和其他重要信息。盡管ICMP主要被IP使用,但應用程序也有可能訪問它。

IGMP是Internet組管理協議。它用來把一個UDP數據報傳播到多個主機。

ARP(地址解析協議)和RARP(逆地址解析協議)是某些網絡接口(如以太網和令牌環網)使用的特殊協議,用來轉換IP層和網絡接口層使用的地址。

2.域名系統

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

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

3.封裝

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

以太網數據幀的物理特性是其長度必須在46~1500字節之間。

所有的Internet標準和大多數有關TCP/IP的書都使用octet這個術語來表示字節。使用這個過分雕琢的術語是有歷史原因的——因為TCP/IP的很多工作都是在DEC-10系統上進行的,但是它并不使用8位的字節。

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

4.數據進入協議棧時的封裝過程

由于TCP、UDP、ICMP和IGMP都要向IP傳送數據,因此IP必須在生成的IP頭部中加入某種標志,以表明數據屬于哪一層。為此,IP在頭部中存入一個長度為8位的數值,叫協議域。該域的1表示為ICMP協議,2表示為IGMP協議,6表示為TCP協議,17表示為UDP協議。

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

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

5.分用(Demultiplexing)

當目的主機收到一個以太網數據幀時,數據就開始從協議棧中由底向上升,同時去掉各層協議加上的報文頭部。每層協議盒都要去檢查報文頭部中的協議標志,以確定接收數據的上層協議。這個過程稱為分用。

6.以太網數據幀的分用過程

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

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

7.客戶服務器模型

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

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

(1)等待一個客戶請求的到來。

(2)處理客戶請求。

(3)發送響應給發送請求的客戶。

(4)返回步驟(1)。

相應地,并發型服務器采用以下步驟:

(1)等待一個客戶請求的到來。

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

(3)返回步驟(1)。

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

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

一般來說,TCP服務器是并發的,而UDP服務器是重復的,但也存在一些例外。

8.端口號

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

服務器一般都是通過人們所熟知的端口號來識別的。例如,對于每個TCP/IP實現來說,FTP服務器的TCP端口號都是21,每個Telnet服務器的TCP端口號都是23,每個FTTP(簡單文件傳輸協議)服務器的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系統現在也提供該服務),因此在20世紀80年代初,它的有名端口號為513。

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

大多數TCP/IP協議實現給臨時端口分配1024~5000之間的端口號。大于5000的端口號是為其他服務器預留的(Internet上并不常用的服務)。在本章后面還有許多給臨時端口分配端口號的例子。

主站蜘蛛池模板: 白银市| 湟中县| 和政县| 双峰县| 乡城县| 岑巩县| 嘉鱼县| 甘南县| 景德镇市| 临颍县| 罗田县| 洮南市| 格尔木市| 南溪县| 开封市| 泽州县| 宜宾县| 宝应县| 松桃| 金沙县| 定陶县| 澎湖县| 万年县| 山丹县| 建宁县| 博罗县| 墨江| 当阳市| 云龙县| 尉犁县| 方城县| 弥勒县| 福州市| 博罗县| 永顺县| 彭州市| 环江| 浪卡子县| 北安市| 呼伦贝尔市| 留坝县|