TCP 的状态转换
轉換圖如下:
其中粗實線代表主動方動作;
虛線代表被動方動作;
細實線代表主動方和被動方同時的動作。
1、主動方
(1)主動建立連接過程:一般來講:客戶端主動、服務器被動(但不絕對)。
主動方原始處于 CLOSE(關閉狀態);然后向被動方發送 SYN 請求連接 ,這時 主動方處于 SYN_SENT
(主動打開狀態),此時等待被動方的 ACK 應答 ,得到應答的同時,被動方也會向主動方發送 SYN請求連接 ,主動方接收到這 2 個消息,同時回復被動方的請求 ,這時主動方處于 ESTABLISHED(數據傳輸狀態)。與三次握手對應如下:
(2)主動關閉連接過程:
主動方通信時處于 ESTABLISHED(數據傳輸狀態);當主動方向被動方發送 FIN 請求關閉時主動方端處于FIN_WAIT_1 狀態,此時等待被動方的ACK應答 ,當獲得被動方的ACK應答 時主動方處于FIN_WAIT_2(半關閉狀態);當獲得被動方 FIN 關閉請求,同時給予 ACK 應答時主動方處于 TIME_WAIT 狀態;經 過 2MSL 后主動方完全關閉,處于 CLOSE 狀態。
特別注意:FIN_WAIT_2(半關閉狀態)、 TIME_WAIT 這 2 個狀態是主動關閉方獨有的。
2、被動方
(1)被動建立連接過程:比如服務器。
(2)被動關閉連接過程:
查看當前運行狀態的 shell 命令:
在網絡編程中:
啟動./server 程序時服務器處于 LISTEN 狀態,等待客戶端連接;
接著./client 程序運行這時雙方都處于 ESTABLISHED即數據傳輸狀態;
數據傳輸過程中雙方都處于 ESTABLISHED 狀態;
一方主動調用 close ,這時主動方處于 FIN_WAIT_2(半關閉狀態),被動方處于 CLOSE_WAIT狀態;
然后另一方調用 close ,這時主動方先切換到 TIME_WAIT,經 2MSL,再到 CLOSE 被動方也處于 CLOSE狀態。
總結
- 上一篇: TCP 三次握手 / 四次挥手
- 下一篇: 端口复用(解决C/S模型的BUG)