TIME_WAIT狀態(tài)肯定是要存在的,否則TCP的會存在半關(guān)閉的狀態(tài),這里主要討論下TIME_WAIT狀態(tài)為什么要保持2MSL時間。
關(guān)于MSL
MSL是任何IP數(shù)據(jù)報能夠在網(wǎng)絡(luò)中存貨的最長時間,這個時間是有限的,每個數(shù)據(jù)報有個稱之為跳限的字段,該字段是8bit,最大值為255,盡管這是一個跳數(shù)限制,而不是一個真正的時間限制,我們?nèi)匀患僭O(shè):具有最大跳限的數(shù)據(jù)報在網(wǎng)絡(luò)中存活的最長時間不可能超過MSL秒。
可靠地實現(xiàn)TCP全雙工連接的終止。
在客戶端發(fā)起關(guān)閉的場景中,假設(shè)客戶端發(fā)送的ACK丟失了,服務(wù)端將重新發(fā)送FIN,若客戶端不再維護(hù)該狀態(tài),則客戶端相應(yīng)RST,該分節(jié)將會被服務(wù)器解釋為一個錯誤。如果要徹底關(guān)閉TCP連接,則必須正確處理終止序列中任何一個分節(jié)丟失的情況。允許老的重復(fù)分節(jié)在網(wǎng)絡(luò)中消逝。
假設(shè)在IP1:Port1(客戶端)和IP2:Port2(服務(wù)端)之間有一個TCP連接,我們關(guān)閉這個連接,過一段時間仍在相同的IP和端口建立另一個連接,后一個連接稱之為前一個連接的化身。TCP必須阻止老的重復(fù)分組在該連接終止后再出現(xiàn),為做到這一點(diǎn),TCP不給處于TIME_WAIT狀態(tài)的分組發(fā)起新的化身。 既然TIME_WAIT狀態(tài)的持續(xù)時間是2MSL,這足以人任一方向上的TCP數(shù)據(jù)報被丟棄,我們就能保證沒成功建立一個TCP連接時,來自該連接先前的化身的老的重復(fù)分組都已經(jīng)在網(wǎng)絡(luò)中消逝了。