關於time_wait狀態的理解


TIME_WAIT狀態之所以存在,是為了保證網絡的可靠性
有以下原因:

1.為實現TCP全雙工連接的可靠釋放
    當服務器先關閉連接,如果不在一定時間內維護一個這樣的TIME_WAIT狀態,那么當被動關閉的一方的FIN到達時,服務器的TCP傳輸層會用RST包響應對方,這樣被對方認為是有錯誤發生,事實上這只是正常的關閉連接工程,並沒有異常

2.為使過期的數據包在網絡因過期而消失
   在這條連接上,客戶端發送了數據給服務器,但是在服務器沒有收到數據的時候服務器就斷開了連接
現在數據到了,服務器無法識別這是新連接還是上一條連接要傳輸的數據,一個處理不當就會導致詭異的情況發生


下面講講大量的TIME_WAIT產生需要的條件:
1.高並發

2.服務器主動關閉連接

如果服務器不主動關閉連接,那么TIME_WAIT就是客戶端的事情了


問題1:如果服務器端確實存在大量的TIME_WAIT,那么會導致什么問題呢?

問題2: 首先先明確TIME_WAIT狀態占用的到底是什么?

被占用的是一個五元組(協議,本地IP,本地端口,遠程IP,遠程端口)
對於Web服務器,協議是TCP,本地ip也只有一個,端口一般是80或者433或8080(固定的),只剩下遠程IP和遠程端口可用了,如果遠程IP相同的話,就只有遠程端口可用了,遠程端口只有幾萬個,所以當同一客戶端向服務器建立了大量連接的話,可用的五元組會耗盡導致問題


現在我們知道了大量的TIME_WAIT會占用大量的五元組

那么五元組什么時候會耗盡呢?

當客戶端通過應用層的負載均衡代理到服務器導致進入服務器的ip地址只有幾個的話,可能會導致五元組耗盡!

  

產生大量TIME_WAIT狀態的解決辦法:

解決方法1:服務器不主動關閉連接,那么這個問題就是客戶端應該解決的了~(TIME_WAIT將不會產生)

解決方法2:增加客戶端IP(一般客戶端IP少都是通過應用層的負載均衡到達服務器的)(五元組將不會耗盡)

解決方法3:設置允許地址重用,這樣每次bind的時候,如果五元組正在使用,bind就會把五元組搶過來(不安全


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM