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