端口狀態說明 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT

TCP狀態轉移要點
   TCP協議規定,對於已經建立的連接,網絡雙方要進行四次握手才能成功斷開連接,如果缺少了其中某個步驟,將會使連接處於假死狀態,連接本身佔用的資源不會被釋放。網絡服務器程序要同時管理大量連接,所以很有必要保證無用連接完全斷開,否則大量僵死的連接會浪費許多服務器資源。在衆多TCP狀態中,最值得注意的狀態有兩個:CLOSE_WAIT和TIME_WAIT。  

1、LISTENING狀態
  FTP服務啓動後首先處於偵聽(LISTENING)狀態。
2、ESTABLISHED狀態
  ESTABLISHED的意思是建立連接。表示兩臺機器正在通信。
3、CLOSE_WAIT
   對方主動關閉連接或者網絡異常導致連接中斷,這時我方的狀態會變成CLOSE_WAIT 此時我方要調用close()來使得連接正確關閉
4、TIME_WAIT
   我方主動調用close()斷開連接,收到對方確認後狀態變爲TIME_WAIT。TCP協議規定TIME_WAIT狀態會一直持續2MSL(即兩倍的分段最大生存期),以此來確保舊的連接狀態不會對新連接產生影響。處於TIME_WAIT狀態的連接佔用的資源不會被內核釋放,所以作爲服務器,在可能的情況下,儘量不要主動斷開連接,以減少TIME_WAIT狀態造成的資源浪費。
   目前有一種避免TIME_WAIT資源浪費的方法,就是關閉socket的LINGER選項。但這種做法是TCP協議不推薦使用的,在某些情況下這個操作可能會帶來錯誤。


FIN_WAIT1

fin_wait1狀態是在server端主動要求關閉tcp連接,並且主動發送fin以後,等待client端回覆ack時候的狀態




本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/82169/showart_1333813.html

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