1:tcp的11種狀態:
上面的狀態有10種,第11種是CLOSING,這個的產生條件是當服務器和客戶端同時發送關閉請求,這時候不會產生FIN_WAIT狀態而是會產生CLOSING狀態。只有主動發送close的一端,纔會有TIME_WAIT狀態。
可以使用代碼來查看狀態。
服務器:客戶端的端口是53372
客戶端:服務器的端口是6666
查看tcp:
看不到SYN_SEND和SYN_RCVD的原因是這個所需時間太短。
查看其它狀態:
首先查看服務器進程pid:
然後關閉該服務器進程:
查看當前服務器的tcp狀態。
由上圖可以看出客戶端所處的狀態是CLOSE_WAIT,服務器所處的狀態是FIN_WAIT2.
然後有程序:如何使客戶端進入CLOSE_WAIT後面的狀態,在客戶端輸入字符回車:
查看當前狀態:
對於客戶端端來說,爲什麼可以在發送數據,是因爲接收到FIN僅僅代表對方不再發送數據。當客戶端向對方發送數據的時候,由於對方進程結束,導致對方會反饋RST段,當收到這個段之後,如果再調用write就會產生SIGPIPE信號,對於這個信號的處理我們通常忽略即可。