下面接着《詳解TCPIP斷開連接配接後的Time-wait狀态》一文的内容,我們讨論下socket在斷開連接配接中的另外三種狀态FIN_WAIT1、FIN_WAIT2狀态和CLOSE_WAIT狀态。
首先啟動socket服務端,然後用用戶端進行連接配接,用netstat –ant指令檢視目前套接字的狀态:
發現用戶端和伺服器的套接字都進入了established狀态,說明用戶端和服務端都正常工作,此時我們在服務端輸入Ctrl+C終端服務端程式,再次輸入netstat–ant指令,這是就看到了服務端進入了FIN_WAIT2狀态,而用戶端進入了CLOSE_WAIT狀态。
關于斷開套接字斷開連接配接時的四次握手在這裡不再贅述,而這個FIN_WAIT2狀态就是服務端在主動發起斷開的連接配接請求時,發送FIN并收到用戶端的ACK進入的等待用戶端FIN的狀态;而與FIN_WAIT2相對的FIN_WAIT1就是服務端發送完成FIN後還未接收到用戶端傳回的ACK時進入的狀态,這個狀态時長很短,在我本機上無法捕捉;這個CLOSE_WAIT狀态是用戶端接受到服務端的FIN并發送ACK後,等待使用者手動關閉套接字的狀态。
此時如果關閉用戶端的套接字,直接在用戶端輸入Ctrl+C,服務端就會進入我們熟悉的TIME_WAIT狀态: