TIME_WAIT狀態(tài)存在的理由

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秒。

  1. 可靠地實現(xiàn)TCP全雙工連接的終止。
    在客戶端發(fā)起關(guān)閉的場景中,假設(shè)客戶端發(fā)送的ACK丟失了,服務(wù)端將重新發(fā)送FIN,若客戶端不再維護(hù)該狀態(tài),則客戶端相應(yīng)RST,該分節(jié)將會被服務(wù)器解釋為一個錯誤。如果要徹底關(guān)閉TCP連接,則必須正確處理終止序列中任何一個分節(jié)丟失的情況。

  2. 允許老的重復(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ò)中消逝了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容