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
訊息類型
| Message | Description |
|---|---|
| SYN | 用於啟動和建立連線,同步序列號 |
| ACK | 確認收到 SYN |
| SYN-ACK | 本地設備的 SYN 和早期封包的 ACK |
| FIN | 用於終止連線 |
TCP Header 格式

連線流程

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完整連線範例

- Host X 發送 TCP SYN 封包,包含隨機序列號(例如 4321)
- Server 回應其序列號,加上確認號(Host X 的序列號 + 1 = 4322)
- Host X 回應確認號(Server 的序列號 + 1)
- 資料傳輸完成後,TCP 自動終止連線
為什麼是三次握手?
為什麼不是兩次? 無法確認 Client 的接收能力。
為什麼不是四次? 三次已足夠確認雙方的發送和接收能力,四次是多餘的。
TCP vs UDP
| 特性 | TCP | UDP |
|---|---|---|
| 連線 | 面向連線 | 無連線 |
| 可靠性 | 保證送達 | 不保證 |
| 順序 | 保證順序 | 不保證 |
| 速度 | 較慢 | 較快 |
| 適用 | 網頁、郵件、檔案 | 串流、遊戲、DNS |