TCP協議的定義
TCP屬於傳輸層協議,提供了一種端到端的連線。
- 是面向連線的、可靠的的程式到程式通訊的協議
- TCP提供全雙工服務,即資料可在同一時間雙向傳播
- TCP將若干個位元組構成一個分組,此分組稱為報文段(Segment)
TCP的功能
- 將資料進行分段打包傳輸
- 對每個資料包編號控制順序
- 運輸中丟失、重發和丟棄處理
- 流量控制避免擁塞
TCP資料包封裝
- 源埠號和目標埠號,計算機通過埠號識別訪問哪個服務,比如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的握手與斷開
## 建立連線時的三次握手- 第一次握手主機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是一個非常複雜的協議,這裡稍微總結了一下,隨著學習時間增加,繼續補充。