TCP 透過多重機制確保資料可靠交付:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 來源埠號 | 目的埠號 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 序號 (Sequence Number) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 確認號 (Acknowledgment Number) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 資料位移 |保留|U|A|P|R|S|F| 視窗大小 |
| | |R|C|S|S|Y|I| |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 檢驗和 | 緊急指標 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 選項 (Options) | 填充 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 資料 (Data) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 欄位 | 長度 | 核心功能 |
|---|---|---|
| 序號 | 32-bit | 標識段中第一個資料位元組的位元組流序號 |
| 確認號 | 32-bit | 期望收到的下一個序號 (僅當 ACK=1 時有效) |
| 資料位移 | 4-bit | 標頭長度 (以 32-bit 為單位),最大 60 bytes |
| 6 個旗標 | 6-bit | URG, ACK, PSH, RST, SYN, FIN 可同時置 1 |
| 視窗大小 | 16-bit | 接收緩衝區剩餘容量 (bytes),最大 65,535 |
| 檢驗和 | 16-bit | 強制性,涵蓋偽標頭 + TCP 標頭 + 資料 |
| 緊急指標 | 16-bit | 指向緊急資料最後一個位元組 (相對序號偏移) |
注意:SYN 佔用一個序號,ISN (Initial Sequence Number) 需隨機產生以防舊連線干擾。
採指數加權移動平均 (EWMA) 追蹤 RTT 變化:
SRTT = (1-α) * SRTT + α * RTT_sample
RTTVAR = (1-β) * RTTVAR + β * |SRTT - RTT_sample|
RTO = SRTT + 4 * RTTVAR
| 演算法 | 核心邏輯 | 觸發條件 |
|---|---|---|
| 慢啟動 | cwnd 指數增長 (每收 1 ACK, cwnd++) | 連線建立、超時後 |
| 擁塞避免 | cwnd 線性增長 (每 RTT 增加 1 MSS) | cwnd ≥ ssthresh |
| 快速重傳 | 收到 3 個重複 ACK 立即重傳 | 3 Duplicate ACKs |
| 快速恢復 | ssthresh = cwnd/2, cwnd = ssthresh + 3 MSS | 快速重傳後 |