傳輸控制協議TCP學習(一)

時間:2014.06.25

地點:基地

---------------------------------------------------------------------------------

一、TCP服務

  TCP位於應用層與網絡層之間,提供介於應用程序和網絡功能之間的服務。主要包括如下服務:

1.1進程到進程的通信

  與UDP一樣,TCP也使用端口號提供進程到進程的通信

1.2流交付服務

  與UDP不一樣,TCP是一種面向流的協議。

  UDP中,進程將已定義好邊界的報文發給UDP以便進行交付,UDP對每個報文都加上自己的8byte首部,然後再把它們傳遞給IP來傳輸。從進程發來的報文稱爲用戶數據報,最終形成IP數據報,不論UDP還是IP,數據報之間不存在任何關聯。

  TCP中,允許發送進程以字節流的形式來傳遞數據,也允許接收進程把數據作爲字節流來接收。就好像兩個進程之間用一根假象的管道相連接,兩個進程之間的數據即通過這根管道在因特網上進行傳輸。

1.2.1發送緩存和接收緩存

  因爲發送進程和接收進程可能以不同的速度向管道寫入數據和從管道中讀取數據,因此TCP需要使用緩存來存儲數據。這裏需要兩個緩存:發送緩存和接收緩存,緩存還將被TCP利用來進行流量控制和差錯控制,緩存的實現是使用1byte位置節組成的環形陣列。

在發送方,發送緩存環形陣列劃分三個區域:

a.空槽:允許發送進程(生產者)向空槽填入數據

b.已發送槽:數據已經發送出去,但還未收到確認,於是在緩存中還保留着這些數據,直達收到相應的確認,一旦被確認,已發送槽將會被回收成爲空槽,再次被髮送進行使用。

c.未發送槽:數據已經填入但還再等待被髮送,於是先緩存在這裏。


接受緩存則被劃分爲兩個區域:

a.空槽:用於接受數據字節的填入

b.已接收槽:包含已接收的字節,這些字節將會被接收進程讀取,當一個字節被接收進程讀取後,相應的槽會被回收成爲空槽。

總的一句話說來:我們可以利用緩存機制來處理生成進程和消耗進程在速度上的差異。

1.2.2報文段

  我們知道IP層爲TCP提供服務是以分組爲單位發送數據的,而不是按字節流,這樣在運輸層,TCP把若干字節組成一個分組,稱爲報文段,這些報文段長度不一定相同,TCP還會把每個分組後的報文段添加一個首部,用於控制,然後再把這個報文段交付給IP層傳輸。這些報文段被封裝成IP數據報發送出去後,在接收端可能會失序、丟失、受損等,這都將由TCP來處理,對於接收進程來說,它並不知道TCP的這些活動。

1.3全雙工通信

  TCP提供全雙工服務,即數據可在同一時間雙向流動。因爲TCP的兩個端點分別有着自己的發送緩存和接收緩存,報文段可以在這兩個方向運動。

1.4複用和分用

和UDP一樣,TCP在發送端執行復用在接收端執行分用。

1.5面向連接的服務

與UDP不一樣,TCP是一個面向連接的協議,每一對進程都需要建立一條連線。當站點A的一個進程和站點B的另一個進程交換數據時需要經過以下三個階段:

a.在兩個進程之間建立一條虛連接

b.數據在兩個方向上交換

c.連接終止

需要說明的是,TCP兩個端點間的連接是虛連接不是物理連接,只是創建了面向流的環境——一條虛連接,它可以負責把這些字節按順序交付到終點。TCP報文段被封裝成IP數據報後,有可能在發送時失序、丟失或損壞並重傳。每一個IP數據報可以走不同的路徑到達終點。

1.6可靠的服務

  TCP是一個可靠的運輸協議,使用確認機制來檢查數據是否安全完好地到達。

---------------------------------------------------------------------------------

二、TCP的特點

2.1編號系統

  TCP報文段首部中有兩個字段叫做:序號和確認號,指的是字節的編號,非報文段的編號。

a.字節編號(字節號)

  TCP把在一個連接中要發送的所有數據字節都編上號,兩個方向的編號是相互獨立的。當TCP接收來自進程的數據字節時,即進程將要發送的數據託付給TCP時,就把他們存儲在發送緩存中,並進行編號,編號從0~(2的32次方-1)之間的一個隨機數開始,比如這個隨機數位1057,發送數據總長爲6000字節時,那麼這些字節的編號從1057~7056,即這對要發送數據的每個字節都逐一進行了編號。這種編號機制在差錯控制和流量控制中都要用到。

每條連接上傳送的數據字節都被TCP編了號,編號從一個隨機產生的數開始。

b.序號

  當字節都被編號後,TCP就給每一個要發送的報文段指派了一個序號,每個報文段的序號就是這個報文段第一個數據字節的序號。即報文段的序號字段值定義的是這個報文段包含的第一個數據字節所分配的編號(字節號)

c.確認號

  TCP通信是全雙工通信,連接建立後,雙方能同時發送和接收數據。通常雙方從不同的起始號對字節編號,每一個方向上的序號表示的是該方向的報文段所攜帶的第一個數據字節的編號。雙方還使用確認號對各自接收到的自己表示確認。

  確認號定義的是:它期望接收的下一個字節的編號,類似程序計數器。確認號也是累積的,即把它收到的最後一個安全完好的字節的編號加1所得的值宣佈爲確認號。比如某一方使用5250作爲確認號,即表示它已收到從開始一直到編號5249的所有字節,下一階段是想接收5250編號的字節。

總的一句說:報文段中確認字段的值定義了某一方期望接收的下一個字節的編號,確認號是累加的

  


發佈了193 篇原創文章 · 獲贊 53 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章