可靠傳輸 - TCP

目錄

TCP協議

  • HTTP 是基于 TCP 协议传输的
  • TCP確保數據的可靠、順序和錯誤檢查的傳輸。
  • TCP將數據劃分為數據包進行傳輸。

報文格式:頭部+數據

  1. 源端口號(16)
  2. 目的端口號(16)
  3. 序號(32):解决包乱序的问题
  4. 確認序列(32):确认发出去对方是否有收到,解决丢包的问题
  5. 狀態位:TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更
    • SYN 是发起一个连接
    • ACK 是回复
    • RST 是重新连接
    • FIN 是结束连接
  6. 窗口大小(16):做拥塞控制
  7. 校驗和(16)
  8. 數據

三次握手

URL結構圖 0. 服務端監聽某個接口(Listen狀態)

  1. 客戶端主動發起連接SYN,之後進入SYN-SENT
  2. 服務端收到信號後發起連接,返回SYN+ACK(ACK是對客戶端SYN發出的確認),之後進入SYN-RCVD狀態
  3. 客戶端收到服務端信號,發送對SYN確認的ACK,之後處於ESTABLISHED狀態
  4. 服務端收到ACK後也處於ESTABLISHED狀態

為什麼需要三次握手?

  • "SYN" 發音像 "sin","ACK" 發音像 "ack"(如 "back" 去掉 "b")。
  • 三次握手通過客戶端和服務器之間交換SYN和ACK數據包來建立可靠的連接。
  • 兩步可能會因延遲的數據包而重新打開舊連接;三步可確保同步。
  • 四步是多餘的,三步已足夠建立同步和確認。
  • 如果客戶端在連接過程中失敗,服務器會重試並等待,如果未收到回應,最終會超時並關閉連接。

過長拆分(MTU/MSS)

MTU_MSS

  • MTU:一個網絡包的最大長度,一般以太網中是1500byte
  • MSS:除去IP和TCP頭部所能容納的TCP數據最大長度

TCP可靠傳輸機制

  1. 數據校驗和用於錯誤檢測
    • 每個數據包包含校驗和以檢查數據完整性
    • 如果發現錯誤,該數據包會被丟棄並重傳
  2. 亂序數據包重排序
    • TCP會在交付到應用層前重新排序亂序的數據包
  3. 丟棄重複數據
    • TCP會丟棄任何重複的數據包
  4. 確認機制 (ACK)
    • TCP會對接收到的數據包發送確認,幫助確認數據到達
  5. 超時重傳
    • 如果在設置的時間內未收到確認,TCP會重傳該數據包
  6. 流量控制與滑動窗口
    • TCP根據接收端的容量調整窗口大小,防止緩衝區溢出