linux-socket編程(六) tcp

1:tcp的11種狀態:

                                                  

上面的狀態有10種,第11種是CLOSING,這個的產生條件是當服務器和客戶端同時發送關閉請求,這時候不會產生FIN_WAIT狀態而是會產生CLOSING狀態。只有主動發送close的一端,纔會有TIME_WAIT狀態。

TCP協議11種狀態集!

可以使用代碼來查看狀態。

服務器:客戶端的端口是53372

客戶端:服務器的端口是6666

查看tcp:

看不到SYN_SEND和SYN_RCVD的原因是這個所需時間太短。

查看其它狀態:

首先查看服務器進程pid:

然後關閉該服務器進程:

查看當前服務器的tcp狀態。

由上圖可以看出客戶端所處的狀態是CLOSE_WAIT,服務器所處的狀態是FIN_WAIT2.

然後有程序:如何使客戶端進入CLOSE_WAIT後面的狀態,在客戶端輸入字符回車:

查看當前狀態:

對於客戶端端來說,爲什麼可以在發送數據,是因爲接收到FIN僅僅代表對方不再發送數據。當客戶端向對方發送數據的時候,由於對方進程結束,導致對方會反饋RST段,當收到這個段之後,如果再調用write就會產生SIGPIPE信號,對於這個信號的處理我們通常忽略即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章