負載均衡服務器中存在大量的TIME_WAIT怎么解決


首先需要明白什么是TIME_WAIT。TIME_WAIT是在tcp斷開連接時進行四次回收的時候,主動斷開端在收到被動關閉端的FIN包並發送ACK包給被動關閉后進入的狀態。這個狀態默認情況下是2倍的MSL(Max segment lifetime,數據段在網絡中的最大存活時間),設置TIME_WAIT的主要目的主要有三個:

1.確保被動關閉端收到了第四次握手的ACK包,否則被動關閉端在LAST_ACK狀態中會超時重傳FIN包,浪費帶寬。

2.tcp的端口是可以復用的,這次用完這個端口,下次建立連接時,還是可以用這個端口(想想socket,就是個源IP、源port、目的IP、目的port、協議類型這樣一個五元組),在復用這個端口后,可能又收到了遺留在網絡中的上一次連接的包比如是個FIN包,導致自己又要發送一個RST包。有了TIME_WAIT,那么FIN包肯定已經不會有了(有兩倍的MSL啊)。

3.如果沒有TIME_WAIT,但主動關閉端企圖發起一個新的tcp連接並且發出第一次握手消息(SYN置1),被動關閉端可能此時還處在LAST_ACK狀態,它此時在等待的是一個ACK包,卻收到一個SYN包,於是他返回一個RST包,導致新連接失敗。有了TIME_WAIT,可以避免這種情況發生。

所以,TIME_WAIT很重要,並且時長為2MSL,通常為30秒,當有大量的短連接是,就會導致出現大量的TIME_WAIT。

未完待續~~


免責聲明!

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



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