tcp中close wait狀態出現的原因

2021-04-13 09:02:46 字數 1214 閱讀 6837

close_wait出現的原因: 就是某一方在網路連線斷開後,對等方沒有檢測到這個錯誤(對方斷開)而沒有調   用 closesocket,導致了這個狀態的出現.

模擬這樣乙個環境:伺服器192.168.1.112:4500在接收到乙個客戶端的連線後,休眠五秒後,伺服器關閉與客戶 端通訊的socket後正常退出,而客戶端在連線伺服器後,等待使用者輸入字元後,傳送給客戶端。現在有這樣幾個問題:

1.伺服器在休眠五秒後,正常退出了,但是由於客戶端還在等待使用者輸入,此時伺服器端tcp的狀態是什麼?(fin_wait_2),客戶端的tcp狀態是什麼?(close_wait)

2.伺服器在休眠五秒後,正常退出了,在伺服器退出後,如果客戶端異常退出,那麼伺服器端tcp的狀態是什麼?客戶端的tcp狀態是什麼?

在伺服器正常退出後,客戶端異常退出,那麼客戶端就會向伺服器傳送rst標誌,然後客戶端和伺服器端的tcp狀態都是closed

3.伺服器在休眠五秒後,正常退出了,在伺服器退出後,從客戶端輸入資料後,向伺服器傳送,此時伺服器怎樣處理這個資料?

客戶端通過psh標誌向伺服器段傳送資料,能夠傳送成功,但因為伺服器的tcp處於(fin_wait_2)狀態,此時伺服器會向客戶端傳送乙個rst標示,並且伺服器端口狀態和客戶端的tcp狀態都變為closed。

4.在伺服器休眠的過程中,殺死伺服器程序,伺服器端tcp狀態是什麼?客戶端的tcp狀態是什麼?

在伺服器休眠的過程中,殺死伺服器程序,此時伺服器方會向客戶端傳送乙個

rst標誌,伺服器tcp狀態是

closed,客戶端的tcp狀態也是close.

在伺服器休眠五秒後,如果不關閉與客戶端通訊的

socket直接正常退出,此時,伺服器方也向客戶端傳送了

rst標誌。

對於上面的四個問題,必須注意到伺服器正常斷開的時候,向客戶端傳送的fin根本不能被客戶端的所正常處理,因為客戶端正處於接收使用者的輸入。所以由於每次都是伺服器主動斷開,但是伺服器tcp狀態卻有可能不能進入到time_wait狀態。有興趣的可以研究以下第三個問題,看看在什麼情況下,伺服器可以進入到time_wait狀態.  (在伺服器正常退出後,客戶端也接著正常退出,伺服器tcp就會進入到

time_wait狀態)

TCP協議 CLOSE WAIT狀態

1.伺服器異常 如果伺服器出了異常,十之 都是以下兩種情況 1.伺服器保持了大量time wait狀態 2.伺服器保持了大量close wait狀態 因為linux分配給乙個使用者的檔案控制代碼是有限的,而time wait和close wait兩種狀態如果一直被保持,那麼意味著對應數目的通道就一直...

TCP連線大量CLOSE WAIT狀態問題排查

close wait產生原因 close wait是被動關閉連線是形成的,根據tcp狀態機,伺服器端收到客戶端傳送的fin,tcp協議棧會自動傳送ack,鏈結進入close wait狀態。但如果伺服器端不執行socket的close 操作,狀態就不能由close wait遷移到last ack,則系...

tcp連線大量CLOSE WAIT

netstat n awk tcp end last ack 1 syn recv 15 close wait 7729 established 471 fin wait1 3 fin wait2 52 syn sent 1 time wait 725 從結果可以看到有大量的連線處於close wa...