TCP連接建立的經典「三次握手」究竟發生了什麼?本文結合RFC 793標準與PlantUML序列圖,逐幀拆解SYN、SYN-ACK、ACK交互細節與狀態機流轉。
SYN_SENT 狀態。SEQ=x為初始序號(ISN)。SYN_RCVD 狀態。ESTABLISHED 狀態,開始數據傳輸。@startuml
autonumber
participant Client
participant Server
note over Client, Server : 初始狀態均為 CLOSED
Client -> Server : SYN (SEQ=x)
activate Client
note left of Client : 進入 SYN_SENT
Server -> Client : SYN (SEQ=y), ACK (x+1)
activate Server
note right of Server : 進入 SYN_RCVD
Client -> Server : ACK (y+1)
deactivate Client
deactivate Server
note left of Client : 進入 ESTABLISHED
note right of Server : 進入 ESTABLISHED
note over Client, Server : 三次握手結束,雙方可傳輸數據
@enduml
| 端點 | 初始 | 發送/接收 | 中間 | 最終 |
|---|---|---|---|---|
| Client (Active Open) | CLOSED | 發SYN | SYN_SENT | ESTABLISHED |
| Server (Passive Open) | LISTEN | 收SYN→發SYN+ACK | SYN_RCVD | ESTABLISHED |
掌握三次握手微觀細節,是網絡排障、安全分析、協議開發的基石能力。