TCP埠狀態說明ESTABLISHED、TIME_WAIT、 CLOSE_WAIT

weixin_34117211發表於2017-11-16

一. 首先說下tcp埠的幾種狀態:

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協議不推薦使用的,在某些情況下這個操作可能會帶來錯誤。
5、SYN_SENT狀態

   SYN_SENT狀態表示請求連線,當你要訪問其它的計算機的服務時首先要發個同步訊號給該埠,此時狀態為SYN_SENT,如果連線成功了就變為 ESTABLISHED,此時SYN_SENT狀態非常短暫。但如果發現SYN_SENT非常多且在向不同的機器發出,那你的機器可能中了衝擊波或震盪波 之類的病毒了。這類病毒為了感染別的計算機,它就要掃描別的計算機,在掃描的過程中對每個要掃描的計算機都要發出了同步請求,這也是出現許多 SYN_SENT的原因。

二、如發現系統存在大量TIME_WAIT狀態的連線,通過調整核心引數解決,

vim /etc/sysctl.conf
編輯檔案,加入以下內容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然後執行 /sbin/sysctl -p 讓引數生效。
 
time_wait的設計,是基於tcp的四次揮手,上面改的那些核心引數的修改並非一勞永逸,可以參考:系統調優,你所不知道的TIME_WAIT和CLOSE_WAIT









本文轉自 jiu~ 部落格園部落格,原文連結:http://www.cnblogs.com/jiu0821/p/8119363.html,如需轉載請自行聯絡原作者

相關文章