tcp/ip TIME_WAIT 狀態
阿新 • • 發佈:2019-01-03
一個T C P連線由一個4元組唯一確定:本地I P地址、本地埠號、遠端I P地址和遠端埠
號。無論何時關閉一個連線,一端必須保持這個連線,我們看到T I M E WA I T狀態將處理這個
問題。處理的原則是執行主動開啟的一端在進入這個狀態時要保持的時間為T C P實現中規定
的M S L值的兩倍。
【tcp/ip 詳解 18.12 小結】
之所以要維護TIME_WAIT狀態,並且要等待2MSL (max segment lifetime)。原因如下:
1.在關閉一個TCP連線後,又重新建立起一個相同的IP地址和埠之間的TCP連線,有可能出現這種情況,新連線收到本屬於舊連線的分組,為了避免這個情 況,tcp規則不允許在TIME_WAIT狀態使用相同ip和埠新建一個連線。 因為TIME_WAIT狀態持續2MSL,就可以保證當成功建立一個TCP連線的時 候,來自舊連線的重複分組已經在網路中消逝。
2.因為網路是不可靠的,無法保證你最後傳送的ACK報文會一定被對方收到,因此對方處於LAST_ACK狀態下的SOCKET可能會因為超時未收到ACK報文,而重發FIN報文。如果沒有TIME_WAIT狀態,則收到FIN報文後,會返回一個RST報文,接收到RST後,會產生 連線被重置的錯誤。而在TIME_WAIT狀態下,則可以正確的返回對FIN的ACK.從而正確的關閉連線。
【Q】
如果在關閉期間網路斷開,則TIME_WAIT狀態終會因超時而進入CLOSED狀態,而被動關閉端,可能會一直處於LAST_ACK狀態。