計算機網絡複習 ---- TCP協議

一、TCP協議簡介

TCP“人如其名”,是對“傳輸、發送、通信”進行“控制”的“協議”。TCP與UDP的區別相當大。它充分地實現了數據傳輸時各種控制功能,可以進行丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。而這些在UDP中都沒有。此外,TCP作爲一種面向有連接的協議,只有在確認通信對端存在時纔會發送數據,從而可以控制通信流量的浪費。

二、TCP的特點及其目的

  • TCP的特點是可靠傳輸,爲了通過IP數據報實現可靠性傳輸,需要考慮很多事情,例如數據的破壞、丟包、重複以及分片順序混亂等問軌如不能解決這些問題,也就無從談起可靠傳輸。
  • TCP通過檢驗和、序列號、確認應答、重發控制、連接管理以及窗口控制等機制實現可靠性傳輸。

三、通過序列號與確認應答實現高可靠性

  • 在TCP中,當發送端的數據到達接收主機時,接收端主機會返回一個已收到消息的通知。這個消息叫做確認應答(ACK)。
    在這裏插入圖片描述
  • TCP通過肯定的確認應答(ACK)實現可靠的數據傳輸。當發送端將數據發出之後會等待對端的確認應答。如果有確認應答,說明數據已經成功到達對端。反之,則數據丟失的可能性很大。
    如果在一定時間內沒有等到確認應答,發送端就可以認爲數據已經丟失,並進行重發。由此,即使產生了丟包,仍然能夠保證數據能夠到達對端,實現可靠傳輸。
    在這裏插入圖片描述
  • 未收到確認應答並不意味着數據一定丟失。也有可能是數據對方已經收到,只是返回的確認應答在途中丟失。這種情況也會導致發送端因沒有收到確認應答,而認爲數據沒有到達目的地,從而進行重新發送。
    在這裏插入圖片描述
  • 此外,也有可能因爲一些其他原因導致確認應答延遲到達,在源主機重發數據以後纔到達的情況也履見不鮮。此時,源發送主機只要按照機制重發數據即可。但是對於目標主機來說,這簡直是一種“災難”。它會反覆收到相同的數據。而爲了對上層應用提供可靠的傳輸,必須得放棄重複的數據包。爲此,就必須引入一種機制,它能夠識別是否巳經接收數據,又能夠判斷是否需要接收。
  • 上述這些確認應答處理、重發控制以及重複控制等功能都可以通過序列號實現。序列號是按順序給發送數據的每一個字節(8位字節)都標上號碼的編號接收端査詢接收數據TCP首部中的序列號和數據的長度,將自己下一步應該接收的序號作爲確認應答返送回去。就這樣,通過序列號和確認應答號,TCP可以實現可靠傳輸。

四、重發超時如何確定

  • 重發超時是指在重發數據之前,等待確認應答到來的那個特定時間間隔。如果超過了這個時間仍未收到確認應答,發送端將進行數據重發。那麼這個重發超時的具體時間長度又是如何確定的呢?
  • 最理想的是,找到一個最小時間,它能保證“確認應答一定能在這個時間內返回”。然而這個時間長短隨着數據包途徑的網絡環境的不同而有所變化。例如在高速的LAN中時間相對較短,而在長距離的通信當中應該比LAN要長一些。即使是在同一個網絡中,根據不同時段的網絡擁堵程度時間的長短也會發生變化。
  • TCP要求不論處在何種網絡環境下都要提供高性能通信,並且無論網絡擁堵情況發生何種變化,都必須保持這一特性。爲此,它在每次發包時都會計算往返時間及其偏差將這個往返時間和偏差相加重發超時的時間,就是比這個總和要稍大一點的值。
  • 重發超時的討律既要考慮往返時間又要考慮偏差是有其原因。根據網絡環境的不同往返時間可能會產生大幅度的搖擺,之所以發生這種情況是因爲數據包的分段是經過不同線路到達的。TCP/IP的目的是即使在這種環境下也要進行控制,儘量不要浪費網絡流量。
  • 在BSD的Unix以及Windows系統中,超時都以0.5秒爲單位進行控制,因此重發超時都是0.5秒的整數倍二 不過,由於最初的數據包還不知道往返時間,所以其重發超時一般設置爲6秒左右。
  • 數據被重發之後若還是收不到確認應答,則進行再次發送。此時,等待確認應答的時間將會以2倍、4倍的指數函數延長。
  • 此外,數據也不會被無限、反覆地重發。達到一定重發次數之後,如果仍沒有任何確認應答返回,就會判斷爲網絡或對端主機發生了異常,強制關閉連接。並且通知應用通信異常強行終止。

五、連接管理(三次握手、四次揮手)

  • TCP提供面向有連接的通信傳輸。面向有連接是指在數據通信開始之前先做好通信兩端之間的準備工作。
  • UDP是一種面向無連接的通信協議,因此不檢査對端是否可以通信,直接將UDP包發送出去。TCP與此相反,它會在數據通信之前,通過TCP首部發送一個SYN包作爲建立連接的請求等待確認應答如果對端發來確認應答,則認爲可以進行數據通信。如果對端的確認應答未能到達,就不會進行數據通信。此外,
    在通信結束時會進行斷開連接的處理(FIN包)。
  • 可以使用TCP首部用於控制的字段來管理TCP連接。一個連接的建立與斷開,正常過程至少需要來回發送7個包才能完成。
    在這裏插入圖片描述

六、TCP以段爲單位發送數據

  • 在建立TCP連接的同時,也可以確定發送數據包的單位,我們也可以稱其爲“最大消息長度” (MSS; Maximum Segment Size) 。最理想的情況是,最大消息長度正好是IP中不會被分片處理的最大數據長度。
  • TCP在傳送大量數據時,是以MSS的大小將數據進行分割發送。進行重發時也是以MSS爲單位。
  • MSS是在三次握手的時候,在兩端主機之間被計算得出。兩端的主機在發出建立連接的請求時,會在TCP首部中寫入MSS選項,告訴對方自己的接口能夠適應的MSS的大小。 然後會在兩者之間選擇一個較小的值投入使用。

其實TCP還有一些重要的特性來提高傳輸速率(滑動窗口),以及TCP首部的介紹將在後面繼續介紹,這篇博客其實就是抄書,不過TCP就是這麼重要~
參考文獻《圖解TCP/IP》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章