計算機網路——自頂向下方法之運輸層
概述
運輸層協議為執行在不同主機上的應用程序之間提供了邏輯通訊功能。應用程序使用運輸層提供的邏輯通訊功能彼此傳送報文,而無需考慮承載這些報文的物理基礎設施細節。
運輸層協議實在端系統而不是路由器中實現的。
網路路由器僅作用在該資料包的網路層欄位,即它們不檢查封裝在該資料舉報的運輸層報文段的欄位。
網路層提供了主機之間的邏輯通訊,而運輸層為執行在不同主機上的程序之間提供了邏輯通訊。
在端系統中,運輸層協議將來自應用程序的報文移動到網路邊緣(即網路層),反過來也是一樣,但對有關這些報文在網路核心如何移動不做任何規定。
IP為主機之間提供了邏輯通訊,服務模型為盡力而為交付服務,且為不可靠服務。
UDP流量是不可調節的,使用UDP傳輸的應用程式可以根據其需要以其願意的任何速率傳送資料。
多路複用和多路分解
接收主機中的運輸層實際上並沒有直接將資料交付給程序,而是將資料交給了一箇中間的套接字。由於在任意時刻,在接收主機上可能有不止一個套接字,所以每個套接字都有唯一的識別符號。識別符號的格式取決於它是UDP還是TCP套接字。
將運輸層報文段中的資料交付給正確的套接字的工作稱為多路分解。在源主機從不同套接字中生成資料段,併為每個資料塊封裝上首部資訊從而生成報文段,然後將報文段傳遞到網路層,稱為多路複用。
套接字都有唯一識別符號,每個報文段有特殊欄位來只是該報文段所要交付到的套接字。比如源埠號欄位和目的埠欄位。
0-1023範圍的埠號稱為周知埠號。
在主機上的每個套接字能夠分配一個埠號,當報文段到達主機時,運輸層檢查報文段中的目的埠號,並將其定向到對應套接字。報文段的資料也通過套接字進入相應程序。
如果是一個周至協議的伺服器端,那麼必須為其分配一個周知埠號。通常,應用程式的客戶端運輸層自動獲得一個埠號,而伺服器端則分配一個特定的埠號。
一個UDP套接字是由一個二元組來全面標識的,該二元組包含一個目的IP地址和一個目的埠號。
TCP套接字是由一個四元組(源IP地址,源埠號,目的IP地址,目的埠號)來表示的。
UDP
使用UDP的應用是可以實現可靠資料傳輸的。
如果端到端資料傳輸服務要提供差錯檢測,UDP就必須在端到端基礎上在運輸層提供差錯檢測。
雖然UDP提供差錯檢測,但是對差錯恢復無能為力。UDP的某種實現只是丟棄受損的報文段,其它實現是將受損的報文段交給應用程式並給出警告。
可靠資料傳輸原理
流水線的效率要比停等高得多,不過流水線要求必須增加序號範圍,而解決差錯由回退N步(GBN)和選擇回傳(SR)兩種放方法
流量控制是對傳送方進行限制的原因之一
TCP有一個32位元的序號欄位,其中的TCP序號是按照位元組流中的位元組進行計數的,而不是按照分組計數的。
SR接收方將確認一個正確接收的分組而不管是否按序,時許的分組將被快取直到序號更小的分組被收到位置,這時才可以將一批分組按序交付給上層。
對於SR協議,傳送方和接收方的視窗並不總是一致
對於SR協議,視窗長度必須小於等於序號空間的一般
面向連線的運輸:TCP
TCP在一個應用程序開始向另一個應用程序傳送資料之前,兩個程序必須先相互握手,即它們必須相互發送某些預備報文段,以建立確保資料傳輸的引數。
TCP連線只存在域端系統中,中間的網路元素不會維持TCP的連線狀態,中間路由器看到的是資料報而不是連線。
TCP連線總是點對點的。
客戶首先發送一個特殊的TCP報文段,伺服器用另一個特殊的TCP報文段來響應,最後,客戶再用第三個特殊報文段作為相應。前兩個報文段不承載有效載荷,第三個報文段承載有效載荷(應用層資料),所以這種連線建立過程常被稱為三次握手。
TCP將把從套接字獲得的資料引導在該連線的傳送快取裡,傳送快取是三次五首初期設定的快取之一,之後會不時從傳送快取裡取一塊資料。
TCP可從快取中取出並放入報文段中的資料數量受限於最大報文段長度(MSS)。MSS通常根據最初缺點的由本地傳送主機發送的最大鏈路層幀長度(MTU)。設定該MSS要保證一個TCP報文段要適合單個鏈路層幀。
TCP為每塊客戶資料配上一個TCP首部,從而形成多個TCP報文段。而TCP另一端接收到一個報文段後,該報文段的資料就放入該TCP連線的接受快取中,應用程式從快取中讀取資料流。
TCP報文段由首部欄位和一個數據欄位組成。資料欄位包含一塊應用資料。MSS限制了報文段資料欄位的最大長度。互動式應用通常傳送長度小於MSS的資料庫。
TCP報文段首部最重要的欄位是序號欄位和確認好欄位,這兩個欄位是TCP可靠傳輸服務的關鍵部分。而序號建立在傳送的位元組流上,而不是建立在傳送的報文段的序列之上。一個報文段的序號,因此是該報文段收位元組的位元組流編號。
從B主機到達的每個報文段中都有一個序號用於從B流向A的資料。主機A填充進報文段的確認號是主機A期望從主機B收到的下一位元組的序號。
TCP只確認該流中至第一個丟失位元組為止的位元組,所以TCP被稱為累計確認。
Telnet是一個用於遠端登陸的應用層協議。
對客戶到伺服器的資料的確認被裝在在一個成在伺服器到客戶的資料的報文段中,這種確認被稱為是被捎帶在伺服器到客戶的資料報文段中的。
TCP採用超時回傳機制來處理報文段的丟失問題。
TCP為它的應用程式提供了流量控制服務以消除傳送方使接收方快取溢位的可能性。TCP因為IP網路的擁塞而被控制則被稱為擁塞控制。
TCP通過讓傳送方維護一個稱為接收視窗的變數來提供流量控制,接收視窗告訴傳送方該接收方還有多少可用的快取空間。
主機B通過吧當前到達rwnd值放入它發給主機A的報文段接收視窗欄位中,通知主機A他在該練級的快取中還有多少可用空間。
TCP規範要求,當主機B的接收視窗為0時,主機A繼續傳送只有一個位元組資料的報文段。這些報文段將會被接收方確認。最終快取將開始清空,並且確認報文裡包含一個非0rwnd值
參加一條TCP連線的兩個程序的任何一個都能終止該資源。
若客戶端要終止連線,則向伺服器程序傳送一個特殊的TCP報文段(FIN欄位置為1),伺服器收到,傳送ACK。然後伺服器傳送自己的終止報文段,然後客戶端傳送確認。
當客戶端向某個埠發起TCP連線而目標主機的目標埠不接受該連結,則傳送一個特殊重置報文段(RET為1)
當一臺主機接收到一個UDP分組,其目的埠域進行中的UDP套接字不匹配,則傳送一個特殊的ICMP資料報。
TCP擁塞控制
TCP必須使用端到端擁塞控制而不是是網路輔助的擁塞控制。
TCP所採用的方法是讓每一個傳送方根據所感知到的網路阻塞程度來限制其能相連線傳送流量的速率。
通過約束髮送方未被確認的資料流,可以間接的限制傳送方的傳送速率。
TCP丟包事件定義為:要麼出現超時,要麼接收到3個冗餘ACK。
因為TCP使用確認來出發(或計時)增大它的阻塞視窗長度,TCP被說是自計時的。
在TCP中,具有較小RTT的連結能夠在鏈路空閒時更快地搶到可用寬頻,因而將比那些較大RTT的連結享受到更大的吞吐量。