題 什麼是CLOSE_WAIT和TIME_WAIT狀態?


當我做 netstat -a 在我的Windows機器上,我得到了四種狀態之一的端口列表:

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED

做什麼 CLOSE_WAIT 和 TIME_WAIT 意味著/說明什麼?


150
2017-08-08 19:23


起源


看到 webmasters.stackexchange.com/q/22946 - Dheeraj V.S.
看'man netstat',向下滾動到州部分: linux.die.net/man/8/netstat - MaQleod
無恥的插頭 對我們的姐妹們的回答 服務器故障。 - Hennes
跨站點欺騙: askubuntu.com/questions/538443/... - Mokubai♦


答案:


由於TCP / IP的工作方式,無​​法立即關閉連接。在連接關閉後,數據包可能無序到達或重新傳輸。 CLOSE_WAIT表示遠程端點(連接的另一端)已關閉連接。 TIME_WAIT表示本地端點(此端)已關閉連接。保持連接,以便任何延遲的數據包可以與連接匹配並進行適當處理。連接將在四分鐘內超時時被刪除。看到 http://en.wikipedia.org/wiki/Transmission_Control_Protocol 更多細節。


161
2017-08-08 19:42



@ADTC否,因為那沒有意義 - TCP是全雙工的,任何一方都可以是源或目的地。正確的單詞將是“本地端點”和“遠程端點”。 - Jonathon Reinhart
@JonathonReinhart,它只是“本地“和”遠程“。”端點“是多餘的。 - Pacerier
@Pacerier除“endpoint”是名詞而“local”不是。 - Jonathon Reinhart
@JonathonReinhart,兩個“本地“和”遠程“可以是名詞。除此之外,我在這裡發現了另一個討論,它說”是本地/ 窺視“而不是”本地/遠程“: stackoverflow.com/questions/14388706/... - Pacerier
@ADTC我同意, source 和 destination 對我來說最容易 - Kolob Canyon


基本上,“等待”狀態意味著一方關閉了連接,但關閉的最終確認正在等待中。

參見例如這個TCP狀態圖詳細信息:

http://www.jxos.org/Projects/TCP/tcpstate.html


27
2017-08-08 19:44



這準確地描述了CLOSE_WAIT但不是TIME_WAIT。 TIME_WAIT表示本地應用程序關閉了連接,另一方確認並發送了自己的FIN。我們現在正在等待可能擾亂​​同一端口的新用戶的任何雜散重複數據包。 - Chris Smowton
@ChrisSmowton,那麼誰使用正確的術語?圖表或 netstat? (比照) - Pacerier
@Pacerier我認為他們匹配 - 你認為他們在哪裡不一致? - Chris Smowton
@ChrisSmowton這意味著下一個端口所有者可能會獲得額外的字節,如果設置TIME_WAIT = 0,可能會破壞響應? - MonsterMMORPG
可能但非常不可能,因為序列號需要匹配應用程序以查看拼接到流中的惡意數據包,或者接收器需要緩衝顯然無序數據包直到出現正確的序列號。我不太了解實際實現,告訴你後者是否在實踐中完成。 - Chris Smowton


TIME_WAIT表示等待足夠的時間以確保遠程TCP收到其FIN請求的ACK。看到 en.wikipedia.org/wiki/Transmission_Control_Protocol (以及RFC 793)


0
2018-05-20 11:39



這對現有答案提供的信息有何影響? - fixer1234
添加對RFC 793的引用 - Denio Mariz