TCP

TCP(Transmission Control Protocol)傳輸控制協定,是一種可靠的、面向連線的傳輸層協定。

三次握手 (Three-Way Handshake)

建立 TCP 連線需要三次握手,確保雙方都準備好進行通訊。

  sequenceDiagram
    participant C as Client
    participant S as Server

    Note left of C: Sends SYN
    C->>S: SYN seq: 0
    Note right of S: SYN Received
    Note right of S: Sends SYN+ACK
    S->>C: SYN-ACK seq: 0 ack: 1
    Note left of C: Received SYN+ACK
    Note left of C: Sends ACK
    C->>S: ACK seq: 1 ack: 1
    Note right of S: Received ACK
    Note right of S: Connection Established

訊息類型

MessageDescription
SYN用於啟動和建立連線,同步序列號
ACK確認收到 SYN
SYN-ACK本地設備的 SYN 和早期封包的 ACK
FIN用於終止連線

TCP Header 格式

TCP Header Format

連線流程

TCP Connection Flow

Segment(資料區段)

應用層的 Data 放入 TCP 表頭後的整段資料。

在建立連線的過程中,往往還沒有應用層的資料,因此 Segment Len 為 0,ACK Number 等於對方 SEQ + 1。若有傳輸資料,則通常 ACK Number 為對方的「SEQ + Segment Len」。
Client Side Request:
SEQ4 = 101, Segment Len4 = 87, ACK Number4 = 301

Server Side Response:
SEQ5 = 301, Segment Len5 = XXX, ACK Number5 = 101 + 87 = 188

完整連線範例

TCP Connection Flow Example
  1. Host X 發送 TCP SYN 封包,包含隨機序列號(例如 4321)
  2. Server 回應其序列號,加上確認號(Host X 的序列號 + 1 = 4322)
  3. Host X 回應確認號(Server 的序列號 + 1)
  4. 資料傳輸完成後,TCP 自動終止連線

為什麼是三次握手?

為什麼不是兩次? 無法確認 Client 的接收能力。

為什麼不是四次? 三次已足夠確認雙方的發送和接收能力,四次是多餘的。

TCP vs UDP

特性TCPUDP
連線面向連線無連線
可靠性保證送達不保證
順序保證順序不保證
速度較慢較快
適用網頁、郵件、檔案串流、遊戲、DNS