端口狀態(tài)說明 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT
Posted on 2009-04-01 19:37 Prayer 閱讀(17524) 評論(0) 編輯 收藏 引用 所屬分類: SOCKETTCP狀態(tài)轉(zhuǎn)移要點
TCP協(xié)議規(guī)定,對于已經(jīng)建立的連接,網(wǎng)絡(luò)雙方要進(jìn)行四次握手才能成功斷開連接,如果缺少了其中某個步驟,將會使連接處于假死狀態(tài),連接本身占用的資源不會被釋放。網(wǎng)絡(luò)服務(wù)器程序要同時管理大量連接,所以很有必要保證無用連接完全斷開,否則大量僵死的連接會浪費許多服務(wù)器資源。在眾多TCP狀態(tài)中,最值得注意的狀態(tài)有兩個:CLOSE_WAIT和TIME_WAIT。
1、LISTENING狀態(tài)
FTP服務(wù)啟動后首先處于偵聽(LISTENING)狀態(tài)。
TCP協(xié)議規(guī)定,對于已經(jīng)建立的連接,網(wǎng)絡(luò)雙方要進(jìn)行四次握手才能成功斷開連接,如果缺少了其中某個步驟,將會使連接處于假死狀態(tài),連接本身占用的資源不會被釋放。網(wǎng)絡(luò)服務(wù)器程序要同時管理大量連接,所以很有必要保證無用連接完全斷開,否則大量僵死的連接會浪費許多服務(wù)器資源。在眾多TCP狀態(tài)中,最值得注意的狀態(tài)有兩個:CLOSE_WAIT和TIME_WAIT。
1、LISTENING狀態(tài)
FTP服務(wù)啟動后首先處于偵聽(LISTENING)狀態(tài)。
2、ESTABLISHED狀態(tài)
ESTABLISHED的意思是建立連接。表示兩臺機(jī)器正在通信。
3、CLOSE_WAIT
對方主動關(guān)閉連接或者網(wǎng)絡(luò)異常導(dǎo)致連接中斷,這時我方的狀態(tài)會變成CLOSE_WAIT 此時我方要調(diào)用close()來使得連接正確關(guān)閉
4、TIME_WAIT
我方主動調(diào)用close()斷開連接,收到對方確認(rèn)后狀態(tài)變?yōu)門IME_WAIT。TCP協(xié)議規(guī)定TIME_WAIT狀態(tài)會一直持續(xù)2MSL(即兩倍的分段最大生存期),以此來確保舊的連接狀態(tài)不會對新連接產(chǎn)生影響。處于TIME_WAIT狀態(tài)的連接占用的資源不會被內(nèi)核釋放,所以作為服務(wù)器,在可能的情況下,盡量不要主動斷開連接,以減少TIME_WAIT狀態(tài)造成的資源浪費。
目前有一種避免TIME_WAIT資源浪費的方法,就是關(guān)閉socket的LINGER選項。但這種做法是TCP協(xié)議不推薦使用的,在某些情況下這個操作可能會帶來錯誤。