當客戶端進入TIME-WAIT狀態的時候(也就是第四次揮手的時候),必須經過時間計數器設置的時間2MSL(最長報文段壽命)后,才能進入關閉狀態,這時為什么呢????
這最主要是因為兩個理由:
1、為了保證客戶端發送的最后一個ACK報文段能夠到達服務器。因為這個ACK有可能丟失,從而導致處在LAST-ACK狀態的服務器收不到對FIN-ACK的確認報文。服務器會超時重傳這個FIN-ACK,接著客戶端再重傳一次確認,重新啟動時間等待計時器。最后客戶端和服務器都能正常的關閉。假設客戶端不等待2MSL,而是在發送完ACK之后直接釋放關閉,一但這個ACK丟失的話,服務器就無法正常的進入關閉連接狀態。
2、他還可以防止已失效的報文段。客戶端在發送最后一個ACK之后,再經過經過2MSL,就可以使本鏈接持續時間內所產生的所有報文段都從網絡中消失。從保證在關閉連接后不會有還在網絡中滯留的報文段去騷擾服務器。
注意:在服務器發送了FIN-ACK之后,會立即啟動超時重傳計時器。客戶端在發送最后一個ACK之后會立即啟動時間等待計時器。