互動式網路協定教材 · 離線單檔
TCP 連線狀態機
看見封包怎麼走,也看見 Client 與 Server 的狀態怎麼變。
狀態 STATE每一端在某一刻各有一個 TCP 狀態。
事件 EVENT送出或收到 SYN、ACK、FIN、RST。
轉換 TRANSITION事件發生後,依規則進入下一狀態。
選擇情境
主機 A
Client
目前狀態
CLOSED
封包傳遞方向會顯示在這裡
主機 B
Server
目前狀態
LISTEN
0 / 3
讀懂這個狀態機
左右是兩個各自獨立的有限狀態機。封包是事件;同一個封包送出與抵達時,兩端可有不同的狀態。教學動畫將一次傳送與接收合成一步,方便在投影上觀察。
正常關閉時,先送 FIN 的一端依序走過 FIN-WAIT-1 → FIN-WAIT-2 → TIME-WAIT → CLOSED;另一端經過 CLOSE-WAIT → LAST-ACK → CLOSED。TIME-WAIT 在標準狀態圖中等待 2×MSL;本動畫以一步表示計時完成,不代表實際只需幾秒。
標準狀態一覽
CLOSEDLISTENSYN-SENTSYN-RECEIVEDESTABLISHEDFIN-WAIT-1FIN-WAIT-2CLOSE-WAITCLOSINGLAST-ACKTIME-WAIT
CLOSING 用於雙方幾乎同時送出 FIN 的情況;四次揮手範例不會經過它。CLOSED 在標準狀態圖中是概念上的狀態。
原圖片與標準 TCP FSM 有什麼不同?
| 原圖標示/說法 | 標準表示 | 教學說明 |
|---|---|---|
| EMPTY | CLOSED、LISTEN | 尚未連線的主動端是 CLOSED;被動開啟後等待 SYN 的端點是 LISTEN,不能合成 EMPTY。 |
| SYN-SENT、SYN_RECEIVED | SYN-SENT、SYN-RECEIVED | 標準名稱使用連字號;兩者分別代表已送 SYN、已收 SYN 且送出 SYN/ACK。 |
| ESTABLISHMENT | ESTABLISHED | 已建立連線的 TCP 狀態名稱是 ESTABLISHED。 |
| FIN_WAIT | FIN-WAIT-1、FIN-WAIT-2 | 送出 FIN 後與收到 FIN 的 ACK 後,是兩個不同狀態。 |
| BOTH_CLOSE | CLOSING 或 TIME-WAIT 等 | BOTH_CLOSE 不是標準狀態;同時關閉可進入 CLOSING,正常主動關閉會進入 TIME-WAIT。 |
| RST 一律轉 CLOSE_WAIT | 有效 RST 通常中止連線 | 此說法不正確。RST 的接收處理依目前狀態與封包有效性而定,不能視作 FIN 或固定轉到 CLOSE-WAIT。 |
原圖把 Client 與 Server 的路徑畫在同一張圖中,也略去了部分狀態與條件。本教材以兩端同步視角重畫常見路徑;它是教學示意,沒有模擬重傳、序號視窗和所有例外分支。