TIME_WAIT狀態及存在原因


1. 客戶端與服務器端建立TCP/IP連接后關閉SOCKET后,服務器端連接的端口狀態為TIME_WAIT;
 
2. 主動關閉的Socket端會進入TIME_WAIT狀態,並且持續2MSL時間長度,MSL就是maximum segment lifetime(最大分節生命期);
    這是一個IP數據包能在互聯網上生存的最長時間,超過這個時間將在網絡中消失。
    MSL在RFC 1122上建議是2分鍾,而源自berkeley的TCP實現傳統上使用30秒,因而,TIME_WAIT狀態一般維持在1-4分鍾。
 

3. 動關閉的一方在發送最后一個ack 后就會進入TIME_WAIT 狀態 停留2MSL(max segment lifetime)時間這個是TCP/IP必不可少的,也就是“解決”不了的。

4. TIME_WAIT狀態存在的理由:

1)防止上一次連接中的包,迷路后重新出現,影響新連接
  (經過2MSL,上一次連接中所有的重復包都會消失)

2)可靠的關閉TCP連接
    在進行關閉連接四路握手協議時,最后的ACK是由主動關閉端發出的,如果這個最終的ACK丟失,服務器將重發最終的FIN,因此客戶端必須維護狀態信息允 許它重發最終的ACK。
    如果不維持這個狀態信息,那么客戶端將響應RST分節,服務器將此分節解釋成一個錯誤(在java中會拋出connection reset的SocketException)。
     因而,要實現TCP全雙工連接的正常終止,必須處理終止序列四個分節中任何一個分節的丟失情況,主動關閉 的客戶端必須維持狀態信息進入TIME_WAIT狀態。
 
 


 
 


免責聲明!

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



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