古詩詞大全網 - 成語故事 - 為什麽PID為0的系統空閑進程會“不停使用”網絡資源?

為什麽PID為0的系統空閑進程會“不停使用”網絡資源?

通過仔細觀察,我們可以發現,命令結果列出的所有PID為0的通信的狀態均為Time_Wait,而決不會是Established建立狀態或者是Listening監聽狀態,這個就要涉及到壹個TCP Socket的問題了。

原因是這樣的:

壹、關於Time_Wait狀態:

TCP TIME-WAIT 延遲斷開TCP 連接時,套接字對被置於壹種稱為TIME-WAIT 的狀態。這樣,新的連接不會使用相同的協議、源 IP 地址、目標 IP 地址、源端口和目標端口,直到經過足夠長的時間後,確保任何可能被錯誤路由或延遲的段沒有被異常傳送。

因此,Time_Wait不是多余的狀態,而是為了保證通信的正確性、準確性而存在的。而且,這樣的狀態往往都交給系統空閑進程處理了,因為具體的應用程序已經完成了通信過程,發出了數據。因此,這裏PID為0的通信均是已“斷開”的曾經被進程使用過的連接,而且還沒有釋放端口。

二、關於端口的釋放:

三、我們所看到的空閑進程端口占用的特點:

因為總是有程序要交替或者分段連續地訪問網絡,而且同壹個程序在端口被完全釋放之前,可能還會再次使用,就算不再使用,為了保證正確通信,也要等待兩個MSL,故處於Time_Wait。因此我們看到的情況是,系統空閑進程占用了壹些端口,而且這些端口、端口的數量隨著每次執行netstat -a -n -o命令時也會有變化。

因為可能在某個處於Time_Wait的端口被完全釋放之前,又有壹個連接不再需要某個端口了,故新的壹個端口又被置於Time_Wait狀態,過了不久,前壹個終於被釋放了,於是您還是看到有這樣的狀態,但是端口是不壹樣的。