MSL是Maximum Segment Lifetime的英文縮寫,可譯為“最長報文段壽命”,它是任何報文在網(wǎng)絡(luò)上存在的最長時間,超過這個時間報文將被丟棄。
為了保證客戶端發(fā)送的最后一個ACK報文段能夠到達(dá)服務(wù)器。
因為這個ACK有可能丟失,從而導(dǎo)致處在LAST-ACK狀態(tài)的服務(wù)器收不到對FIN-ACK的確認(rèn)報文。服務(wù)器會超時重傳這個FIN-ACK,接著客戶端再重傳一次確認(rèn),重新啟動時間等待計時器。最后客戶端和服務(wù)器都能正常的關(guān)閉。假設(shè)客戶端不等待2MSL,而是在發(fā)送完ACK之后直接釋放關(guān)閉,一但這個ACK丟失的話,服務(wù)器就無法正常的進(jìn)入關(guān)閉連接狀態(tài)。
兩個理由:
1. 保證客戶端發(fā)送的最后一個ACK報文段能夠到達(dá)服務(wù)端。
這個ACK報文段有可能丟失,使得處于LAST-ACK狀態(tài)的B收不到對已發(fā)送的FIN+ACK報文段的確認(rèn),服務(wù)端超時重傳FIN+ACK報文段,而客戶端能在2MSL時間內(nèi)收到這個重傳的FIN+ACK報文段,接著客戶端重傳一次確認(rèn),重新啟動2MSL計時器,最后客戶端和服務(wù)端都進(jìn)入到CLOSED狀態(tài),若客戶端在TIME-WAIT狀態(tài)不等待一段時間,而是發(fā)送完ACK報文段后立即釋放連接,則無法收到服務(wù)端重傳的FIN+ACK報文段,所以不會再發(fā)送一次確認(rèn)報文段,則服務(wù)端無法正常進(jìn)入到CLOSED狀態(tài)。
2. 防止“已失效的連接請求報文段”出現(xiàn)在本連接中。
客戶端在發(fā)送完最后一個ACK報文段后,再經(jīng)過2MSL,就可以使本連接持續(xù)的時間內(nèi)所產(chǎn)生的所有報文段都從網(wǎng)絡(luò)中消失,使下一個新的連接中不會出現(xiàn)這種舊的連接請求報文段。
為什么TIME_WAIT狀態(tài)需要經(jīng)過2MSL才能返回到CLOSE狀態(tài)?
理論上,四個報文都發(fā)送完畢,就可以直接進(jìn)入CLOSE狀態(tài)了,但是可能網(wǎng)絡(luò)是不可靠的,有可能最后一個ACK丟失。所以TIME_WAIT狀態(tài)就是用來重發(fā)可能丟失的ACK報文。