可靠傳輸 - TCP
目錄
TCP協議
- HTTP 是基于 TCP 协议传输的
- TCP確保數據的可靠、順序和錯誤檢查的傳輸。
- TCP將數據劃分為數據包進行傳輸。
報文格式:頭部+數據
- 源端口號(16)
- 目的端口號(16)
- 序號(32):解决包乱序的问题
- 確認序列(32):确认发出去对方是否有收到,解决丢包的问题
- 狀態位:TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更
- SYN 是发起一个连接
- ACK 是回复
- RST 是重新连接
- FIN 是结束连接
- 窗口大小(16):做拥塞控制
- 校驗和(16)
- 數據
三次握手
0. 服務端監聽某個接口(Listen狀態)
- 客戶端主動發起連接
SYN,之後進入SYN-SENT - 服務端收到信號後發起連接,返回
SYN+ACK(ACK是對客戶端SYN發出的確認),之後進入SYN-RCVD狀態 - 客戶端收到服務端信號,發送對SYN確認的
ACK,之後處於ESTABLISHED狀態 - 服務端收到ACK後也處於
ESTABLISHED狀態
為什麼需要三次握手?
- "SYN" 發音像 "sin","ACK" 發音像 "ack"(如 "back" 去掉 "b")。
- 三次握手通過客戶端和服務器之間交換SYN和ACK數據包來建立可靠的連接。
- 兩步可能會因延遲的數據包而重新打開舊連接;三步可確保同步。
- 四步是多餘的,三步已足夠建立同步和確認。
- 如果客戶端在連接過程中失敗,服務器會重試並等待,如果未收到回應,最終會超時並關閉連接。
過長拆分(MTU/MSS)

- MTU:一個網絡包的最大長度,一般以太網中是1500byte
- MSS:除去IP和TCP頭部所能容納的TCP數據最大長度
TCP可靠傳輸機制
- 數據校驗和用於錯誤檢測
- 每個數據包包含校驗和以檢查數據完整性
- 如果發現錯誤,該數據包會被丟棄並重傳
- 亂序數據包重排序
- TCP會在交付到應用層前重新排序亂序的數據包
- 丟棄重複數據
- TCP會丟棄任何重複的數據包
- 確認機制 (ACK)
- TCP會對接收到的數據包發送確認,幫助確認數據到達
- 超時重傳
- 如果在設置的時間內未收到確認,TCP會重傳該數據包
- 流量控制與滑動窗口
- TCP根據接收端的容量調整窗口大小,防止緩衝區溢出