傳輸控制協議(TCP)
傳輸控制協議可向IP層及其上各層提供大量服務。最為重要的是它可向各上層提供面向連接的服務,使各上層啟動應用程序,以確保網絡上所發送的數據報被完整接收。就這種作用而言,TCP的作用是提供可靠通信的有效報文協議。一旦數據報被破壞或丟失,通常是TCP(不是高層中的應用程序)將其重新傳輸。
TCP既管理來自各上層的數據報流,也管理來自IP層的數據報流。同時它還必須兼顧優先級和安全性。TCP必須能夠處理它上面的應用程序的終端,該終端正等待著進入的數據報以及各低層中的故障。TCP還必須維護TCP層內外所有數據流的狀態表。獨立層內的這些服務的隔離能夠啟動要設計的應用程序,而不必考慮控制或報文的可靠性。如果沒有TCP層,每個應用程序都必須處理這些服務本身,這是一種資源浪費。
TCP駐留在傳輸層,位于IP之上,但在各上層及其應用程序之下,如圖7-1所示。TCP只駐留在實際處理數據報的設備中,以確保數據報從源計算機傳輸到目標計算機。它不駐留在僅路由數據報的設備上,所以網關中沒有TCP層。這是很有意義的,因為在網關上,數據報在分層模式中不必比IP層傳輸到最高層。
因為TCP是面向連接的協議,它負責保證數據從源計算機到目標計算機的傳輸(即終端對終端通信),因此,TCP必須從信宿計算機接收通信信息,以確認數據報的接收。虛擬電路這一術語通常用于指示在這兩個終端計算機之間傳輸的信號握手,它們大多數是簡單的確認報文(接收確認或故障代碼)和數據報序號。
圖:TCP提供終端對終端的通信
為了描述TCP的作用,有必要跟蹤兩臺計算機之間的一個樣本報文。報文由應用程序生成,它從體系結構的下一個高層通過某些協議(通常指上層協議或ULP,以指明它駐留在TCP之上)傳輸到TCP。報文按流傳輸,流是非同步發送的單個字符序列。這與大多數協議是有區別的,大多數協議通常都使用固定的數據塊。程序只處理常規構造的數據塊或固定尺寸的報文,所以這里涉及到某些轉換問題。
TCP接收字節流并將它們集中到TCP數據段或包。在組合數據段的過程中,要加上頭標信息。每個數據段都有已計算的校驗和,并嵌入在頭標中,如果整個報文中包括不止一個數據段,則它還有序號。該數據段的長度通常由TCP或系統管理員設置的系統值來決定。
如果要求雙向通信(如與Telnet或FTP通信),并且為了路由在將數據段傳輸到IP之前,則需在發送和接收計算機之間建立連接(虛擬電路)。首先發送TCP的軟件向接收計算機提出建立TCP連接的請求,請求報文中有個唯一數(稱為插口號),用以標識發送計算機的連接。接收TCP的軟件指定它自己的唯一插口號,并將它發回到源計算機。在虛擬電路終止之前,這兩個唯一數定義兩臺計算機之間的連接。
虛擬電路建立之后,TCP將數據段發送到IP軟件,IP軟件將其作為數據報通過網絡發送該報文。經過網絡上的復雜過程之后,接收計算機的IP將接收到的數據段傳輸到接收計算機的TCP層,在此處理該數據段,并使用上層協議將其傳輸到它上面的應用程序。
如果報文包括多個數據段,接收TCP軟件根據每個數據段頭標中包含的序號將報文分解。如果數據丟失或損壞(可通過校驗和確定),TCP將文件中帶有錯誤序號的報文返回,然后,源發送TCP軟件重新發送這個錯誤數據段。
如果整個報文只有一個數據段,在與該段的校驗和重新計算的值比較之后,接收TCP軟件產生肯定確認(ACK)或請求重新發送該數據段,并將其發回到發送層。
接收計算機TCP的實施可以執行簡單的流控制,以防止緩沖器過載。它通過向發送計算機發送一個窗口值來實現這種控制,然后,發送計算機發送合適的字節填充該窗口。這樣可在兩臺計算機之間提供一個信息交換的協議,盡管這樣確實會降低傳輸速度并使網絡信息量稍有增加。
與大多數基于連接的協議一樣,定時器是TCP的一個很重要的方面。定時器的使用可確保在等待ACK或重復ACK報文,避免不必要的時間耽擱。如果定時器到時,定時處理程序通常會造成從源計算機重發數據報。
使用TCP時,定時器也會導致一些麻煩。TCP規范只提供確認正確接收的最大數據報號,但這樣不能正確處理零散的接收。如果報文由多個順序混亂的數據報組成,該規范說明在接收到所有數據報之前,TCP無法確認報文是否被接收。所以,即使該序列中部的一個數據報幾乎接收成功,定時處理程序也可能執行,并使所有數據報必須重新發送。對于大型報文,這樣可能造成網絡通信量激增。
如果接收TCP軟件接收到重復的數據報(定時期滿后重新傳輸),TCP的接收方案將放棄任何重復數據報,不發送重復ACK報文,發送系統只關心報文是否被接收,并不關心對方收到多少份。
TCP沒有否定確認(NAK)功能,它根據定時程序來指明沒有確認。如果定時程序在發送數據報后未接收確認便執行,則認為該數據報已經丟失,并重新傳輸。發送TCP軟件在正確確認之前,在緩沖器中保存多份所有未確認的數據報。當確認證實后,重發定時程序中止運行,從緩沖器中刪除該數據報。
TCP支持來自上層協議的進棧功能。應用程序希望立即發送數據,并且證實傳輸到TCP的報文已被傳輸成功,這時可以使用進棧功能,為此,在ULP連接中設置一個進棧標志,通知TCP盡快將應用程序中的緩存信息發送到信宿(相反,在準備發送之前一直保存在緩沖器中)。
原文地址:https://mp.weixin.qq.com/s?__biz=MjM5MTA0NzUwMA==&mid=2650620812&idx=1&sn=0642b35f311547856b5de24a95eebf16&chksm=beb269af89c5e0b983381fe99a0bae8f8e06afd2d9472134e66b9a70a3fa46b1ef493c5921c0&mpshare=1&s