傳輸層和網路層之間的關係
在協議棧中,傳輸層位於網路層之上,傳輸層協議為不同主機上啟動並執行進程提供邏輯通訊,而網路層協議為不同主機提供邏輯通訊。這個區別很微妙,但是卻非常重要。讓我們用一家人作為類比來說明一下這個區別。
設想一下有兩所房子,一個位於東海岸而另一個位於西海岸,每所房子裡都住著12個小孩。東海岸的房子裡的小孩和西海岸房子裡的小孩是堂兄妹。兩所房子裡的孩子喜歡互相通訊——每個孩子每周都給每一個堂兄妹寫一封信,每一封信都由老式的郵局分別用信封來寄。這樣,每一家每周就都有144封信要送到另一家(這些孩子如果可以用電子郵件的話就可以省掉很多錢了!)在每一家裡面.都由一個孩子——西海岸的房子裡的Ann和東海岸房子裡的BilI——負責郵件的收集和分發。每周Ann都從她的兄弟姐妹那裡收集起來信件,並將這些信件送到每天都來的郵遞服務員那裡。當信件到達西海岸的房子,Ann又將這些信件分發給她的兄弟姐妹。BilI在東海岸有著同樣的工作。
在這個例於中,郵遞服務提供著兩所房子之間的邏輯通訊——郵遞服務在兩所房子之間傳遞郵件,而不是針對每個人的服務。另一方面,Ann和BilI提供堂兄妹之間的邏輯通訊——Ann和BilI從他們的兄弟姐妹那裡收集郵件並將郵件遞送給他們。注意,從這些堂兄妹的角度看,Ann和BilI是郵件的服務人,儘管他們倆只是端到端寄送服務的一部分(終端系統部分)。這個例子是傳輸層和網路層之間的關係的一個形象比喻:
主機(也稱為終端系統)=房子 進程=堂兄妹
應用程式訊息=信封裡的信 網路層協議=郵遞服務(包括郵遞員)
傳輸層協議=Ann和Bill |
繼續我們的這個例子,Ann和Bill各自在他們的家中做所有的工作:他們不負責各個郵遞中心的郵件分類工作以及將郵件從一個中心送到另一個中心的工作。這正與傳輸層協議在終端系統中的作用一樣。在一個終端系統中,傳輸層協議將應用進程的訊息傳送到網路邊緣(也就是網路層),反之亦然:但是它並不涉及訊息是如何在網路層之間傳送的工作。事實上,正1中所說的,中間路由器對於傳輸層加在應用程式訊息上的資訊不能做任何識別和處理。
繼續我們的例子,假設Ann和Bill都去度假了,另外一對堂兄妹——Susan和Harvey代替——他們來提供家庭內部的郵件收取和分發工作。不幸的是,Susan和Harvey所提供的收集和分發工作與Ann和Bill所提供的不完全相同。對於年齡更小的Susan和Harvey來說,他們收集和分發郵件的頻率比較少,而且偶爾會發生丟失信件的事情(這些信件偶爾被家裡的狗吃掉了)。這樣,這一對堂兄妹Susan和Harvey提供了一套不同於Ann和Bill的服務(也就是說,服務模型不同)。打比方來說,正如一個電腦網路可以接受不同的傳輸層協議一樣,每一個協議為應用程式提供不同的服務模型。
Ann和Bill所可能提供服務明顯地受限於郵遞服務所提供的服務。例如,如果郵遞服務並不提供在兩所房子之間傳遞郵件所需要的最大時限(如3天),那麼Ann和Bill也就不能保證各個堂兄妹之間的郵件的最大延遲。同樣,傳輸層協議所提供的服務也通常受限於位於其下方的網路層協議。如果網路層協議不能提供主機之間傳送的4—PDU的延遲和頻寬保證,那麼傳輸層協議也不能提供進程之間傳送的訊息的延遲和頻寬保證。
然而,即使當下面的網路層協議使得網路層並不能提供某些相應服務時,傳輸層協議仍然可以提供某些特定服務。例如,即使下面的網路層協議並不是可靠的,也就是說,即使網路層協議丟失、篡改或者複製了傳送的資料包,傳輸層協議也可以提供可靠的Data Transmission Service。另一個例子是,即使網路層不能保證4—PDU的保密性,傳輸層協議也可以通過加密的方式來保證應用程式訊息不被入侵吝讀取。我們會在以後的文章裡逐漸接觸到這些問題。
網際網路中傳輸層
回憶一下網際網路,通常是TCP/IP網路,應用程式層可以得到兩種不同的傳輸層協議。其中—·種協議是UDP(User Datagram
Protocol),它為調用應用進程提供了一種不可靠的、不需連線的服務。第二種協議是TCP(Tansmission Control
Protocol),它為調用應用進程提供了一種可靠的、連線導向的服務。當設計一個網路應用程式時,應用程式外發者必須指定這兩種傳輸協議中的一種。
在進行UDP和TCP的簡單介紹之前,我們有必要先簡介—下網際網路的網路層。網際網路的網路層協議有——個名字——ID,也就是iNTERNET
Protocol。IP提供了主機之間的邏輯通訊。IP服務模型是一個儘力傳送服務。這就意味著IP盡它最大的努力在通訊主機之間傳送資料區段,但是卻不提供任何保障。特別是,它不能保證資料區段傳輸的安全性,不能保證資料區段的順序傳輸,不能保證資料區段傳輸的資料完整性。基於這些原因,IP被稱為不可靠服務。每一個主機都要有一個IP地址。
在對IP服務模型進行了簡要介紹之後,讓我們來總結—下TCP和UDP的服務模型。UDP和TCP的基本職責就是將IP的兩個終端系統之間的傳送服務擴充為終端系統上啟動並執行兩個進程之間的傳送服務。主機—主機的傳送到進程—進程傳送的擴充被稱為應用程式的多工和多路分解。UDP和TCP還通過在頭部中加入錯誤修正欄位來提供完整性檢測。這兩個最小的傳輸層服務——進程—進程資料傳送和錯誤偵測——是UDP所提供的惟一的兩個服務!特別是,正如IP一樣,UDP是一種不可靠的服務,它不能保證由一個進程送出的資料可以完整地到達目標進程。
另一方面,TCP為應用進程提供了幾種額外的服務。首先,也是最重要的,它提供可靠的資料轉送。通過使用資料流控制、序列編號、確認和計時器(我們會在以後的文章介紹這些技術),TCP保證了資料正確有序地從發送方進程傳送到接收方進程。這樣,TCP就將IP的終端系統之間的不可靠傳送服務轉換成了進程之間的可靠的Data Transmission Service。TCP還使用了擁塞控制機制。與其說擁塞控制是提供給調用進程的服務,不如說它是提供給整個網際網路的服務,為了公用利益的服務。泛泛地說,TCP擁塞控制阻止了任何一個TCP串連在超大量資料轉送時鏈路和交換器被淹沒的問題。確切地說,TCP允許TCP串連通過一個擁擠的網路鏈路平等地分享該連結的頻寬。這是通過調整發送方TCP可以傳送到網路的流量米實現的。而UDP的通訊流量是無法進行控制的。一個使用UDP傳輸協議的應用程式可以用其需要的任意速度發送資料。