TCP協議小結

_shine發表於2018-02-23

TCP協議的定義

TCP屬於傳輸層協議,提供了一種端到端的連線。

  • 是面向連線的、可靠的的程式到程式通訊的協議
  • TCP提供全雙工服務,即資料可在同一時間雙向傳播
  • TCP將若干個位元組構成一個分組,此分組稱為報文段(Segment)

TCP的功能

  • 將資料進行分段打包傳輸
  • 對每個資料包編號控制順序
  • 運輸中丟失、重發和丟棄處理
  • 流量控制避免擁塞

TCP資料包封裝

image.png

  • 源埠號和目標埠號,計算機通過埠號識別訪問哪個服務,比如http服務或ftp服務,傳送方埠號是進行隨機埠,目標埠號決定了接收方哪個程式來接收
  • 32位序列號 TCP用序列號對資料包進行標記,以便在到達目的地後重新重灌,假設當前的序列號為 s,傳送資料長度為 l,則下次傳送資料時的序列號為 s + l。在建立連線時通常由計算機生成一個
  • 確認應答號 它等於下一次應該接收到的資料的序列號。假設傳送端的序列號為 s,傳送資料的長度為 l,那麼接收端返回的確認應答號也是 s + l。傳送端接收到這個確認應答後,可以認為這個位置以前所有的資料都已被正常接收。
  • 首部長度:TCP 首部的長度,單位為 4 位元組。如果沒有可選欄位,那麼這裡的值就是 5。表示 TCP 首部的長度為 20 位元組。
  • 控制位 TCP的連線、傳輸和斷開都受這六個控制位的指揮
    • URG 緊急指標:控制位為 1 時有效。表示緊急資料的末尾在 TCP 資料部分中的位置。通常在暫時中斷通訊時使用(比如輸入 Ctrl + C)。
    • ACK(acknowledgement 確認)為1表示確認號
    • PSH(push急迫位) 快取區將滿,立刻傳輸速度
    • RST(reset重置位) 連線斷了重新連線
    • SYN(synchronous建立聯機) 同步序號位 TCP建立連線時要將這個值設為1
    • FIN傳送端完成位,提出斷開連線的一方把FIN置為1表示要斷開連線
  • 視窗大小:用於表示從應答號開始能夠接受多少個 8 位位元組。如果視窗大小為 0,可以傳送視窗探測。 視窗值 說明本地可接收資料段的數目,這個值的大小是可變的。當網路通暢時將這個視窗值變大加快傳輸速度,當網路不穩定時減少這個值可以保證網路資料的可靠傳輸。它是來在TCP傳輸中進行流量控制的
  • 校驗和: 用來做差錯控制,TCP校驗和的計算包括TCP首部、資料和其它填充位元組。在傳送TCP資料段時,由傳送端計算校驗和,當到達目的地時又進行一次檢驗和計算。如果兩次校驗 和一致說明資料是正確的,否則 將認為資料被破壞,接收端將丟棄該資料
  • 緊急指標:盡在 URG(urgent緊急) 控制位為 1 時有效。表示緊急資料的末尾在 TCP 資料部分中的位置。通常在暫時中斷通訊時使用(比如輸入 Ctrl + C)

TCP的握手與斷開

image.png
## 建立連線時的三次握手

  • 第一次握手主機A通過一個標識為SYN標識位的資料段傳送給主機B請求連線,通過該資料段告訴主機B希望建立連線,需要B應答,並告訴主機B傳輸的起始序列號
  • 第二次握手是主機B用一個確認應答ACK和同步序列號SYNC標誌位的資料段來響應主機A,一是傳送ACK告訴主機A收到了資料段,二是通知主機A從哪個序列號做標記。
  • 第三次握手是主機A確認收到了主機B的資料段並可以開始傳輸實際資料。

斷開連線時的四次請求

  • 主機A傳送FIN控制位發出斷開連線的請求
  • 主機B進行響應,確認收到斷開連線請求
  • 主機B提出反方向的關閉要求
  • 主機A確認收到的主機B的關閉連線請求

為什麼要四次分手?

TCP協議是一種面向連線的、可靠的、基於位元組流的運輸層通訊協議。TCP是全雙工 模式,這就意味著,當主機1發出FIN報文段時,只是表示主機1已經沒有資料要傳送了,主機1告訴主機2, 它的資料已經全部傳送完畢了;但是,這個時候主機1還是可以接受來自主機2的資料;當主機2返回ACK報文 段時,表示它已經知道主機1沒有資料傳送了,但是主機2還是可以傳送資料到主機1的;當主機2也傳送了FIN 報文段時,這個時候就表示主機2也沒有資料要傳送了,就會告訴主機1,我也沒有資料要傳送了,之後彼此 就會愉快的中斷這次TCP連線。

結尾

TCP是一個非常複雜的協議,這裡稍微總結了一下,隨著學習時間增加,繼續補充。

相關文章