1. 程式人生 > >TCP(Transmission Control Protocol)傳輸控制協議 (轉)

TCP(Transmission Control Protocol)傳輸控制協議 (轉)

TCP(Transmission Control Protocol)傳輸控制協議

 TCP協議主為了在主機間實現高可靠性的包交換傳輸協議。本文將描述協議標準和實現的一些方法。因為計算機網路在現代社會中已經是不可缺少的了,TCP協議主要在網路不可靠的時候完成通訊,對軍方可能特別有用,但是對於政府和商用部門也適用。TCP是面向連線的端到端的可靠協議。它支援多種網路應用程式。TCP對下層服務沒有多少要求,它假定下層只能提供不可靠的資料報服務,它可以在多種硬體構成的網路上執行。下面的圖是TCP在層次式結構中的位置,它的下層是IP協議,TCP可以根據IP協議提供的服務傳送大小不定的資料,IP協議負責對資料進行分段,重組,在多種網路中傳送。

TCP的上面就是應用程式,下面是IP協議,上層介面包括一系列類似於作業系統中斷的呼叫。對於上層應用程式來說,TCP應該能夠非同步傳送資料。下層介面我們假定為IP協議介面。為了在並不可靠的網路上實現面向連線的可靠的傳送資料,TCP必須解決可靠性,流量控制的問題,必須能夠為上層應用程式提供多個介面,同時為多個應用程式提供資料,同時TCP必須解決連線問題,這樣TCP才能稱得上是面向連線的,最後,TCP也必須能夠解決通訊安全性的問題。

網路環境包括由閘道器(或其它裝置)連線的網路,網路可以是區域網也可以是一些都會網路或廣域網,但無論它們是什麼,它們必須是基於包交換的。主機上不同的協議有不同的埠號,一對程序通過這個埠號進行通訊。這個通訊不包括計算機內的IO操作,只包括在網路上進行的操作。網路上的計算機被看作包傳送的源和目的結點。特別應該注意的是:計算機中的不同程序可能同時進行通訊,這時它們會用埠號進行區別,不會把發向A程序的資料由B程序接收的。

程序為了傳送資料會呼叫TCP,將資料和相應的引數傳送給TCP,於是TCP會將資料傳送到目的TCP那裡,當然這是通過將TCP包打包在IP包內在網路上傳送達到的。接收方TCP在接收到資料後會通訊上層應用程式,TCP會保證接收資料順序的正確性。雖然下層協議可能不會保證順序是正確的。這裡需要說明的是閘道器在接收到這個包後,會將包解開,看看是不是已經到目的地了,如果沒有到,應該走什麼路由達到目的地,在決定後,閘道器會根據下一個網路內的協議情況再次將TCP包打包傳送,如果需要,還要把這個包再次分成幾段再傳送。這個落地檢查的過程是一個耗時的過程。從上面,我們可以看出TCP傳送的基本過程,當然具體過程可能要複雜得多。

在實現TCP的主機上,TCP可以被看成是一個模組,和檔案系統區別不大,TCP也可以呼叫一些作業系統的功能,TCP不直接和網路打交道,控制網路的任務由專門的裝置驅動模組完成。TCP只是呼叫IP介面,IP向TCP提供所有TCP需要的服務。

上面已經說過了,TCP連線是可靠的,而且保證了傳送資料包的順序,保證順序是用一個序號來保證的。響應包內也包括一個序列號,表示接收方準備好這個序號的包。在TCP傳送一個數據包時,它同時把這個資料包放入重發佇列中,同時啟動記數器,如果收到了關於這個包的確認資訊,將此包從佇列中刪除,如果計時超時則需要重新發送此包。請注意,從TCP返回的確認資訊並不保證最終接收者接收到資料,這個責任由接收方負責。

每個用於傳送TCP的通道都有一個埠標記,因為這個標記是由每個TCP終端確定的,因此TCP可能不唯一,為了保證這個數值的唯一,要使用網路地址和埠號的組合達到唯一標識的目的,我們稱這個為了套接字(Socket),一個連線由連線兩端的套接字標識,本地的套接字可能和不同的外部套接字通訊,這種通訊是全雙工的。

通過向本地埠傳送OPEN命令及外部套接字引數建立連線,TCP返回一個標記這個連線的名稱,以後如果使用者需要使用這個名稱標記這個連線。為了儲存這個連線的資訊,我們假設有一個稱為傳輸控制塊(Transmission Control Block,TCB)的東西來儲存。OPEN命令還指定這個連線的建立是主動請求還是被動等待請求。

這裡對TCP所一個簡單的介紹。TCPIP協議是互聯上的廣泛使用的一種協議,瞭解它對了解網路操作是十分有好處的。