TCP 4次揮手 TIME_WAIT狀態(tài) 說明

TCP交互狀態(tài)示意圖
image.png
問題來源

毫無疑問,TCP中有關(guān)網(wǎng)絡(luò)編程最不容易理解的是它的TIME_WAIT狀態(tài)。在圖中我們看到執(zhí)行主動(dòng)關(guān)閉的那端經(jīng)歷了這個(gè)狀態(tài)。該端點(diǎn)停留在這個(gè)狀態(tài)的持續(xù)時(shí)間是最長(zhǎng)分節(jié)生周期(maximumsegmentlifetime,MSL)的兩倍,有時(shí)候稱之為2MSL。
任何TCP實(shí)現(xiàn)都必須為MSL選擇一個(gè)值。RFC1122[Braden1989]的建議值是2分鐘,不過源自Berkeley的實(shí)現(xiàn)傳統(tǒng)上改用30秒這個(gè)值。這意味著TIME_WAIT狀態(tài)的持續(xù)時(shí)間在1分鐘到4分鐘之間。

TIME_ WAIT狀態(tài)有兩個(gè)存在的理由:

(1)可靠地實(shí)現(xiàn)TCP全雙工連接的終止;

    通過查看圖2-5并假設(shè)最終的ACK丟失了來解釋。服務(wù)器將重新發(fā)送它的最終那
個(gè)FIN,因此客戶必須維護(hù)狀態(tài)信息,以允許它重新發(fā)送最終那個(gè)ACK。要是客
戶不維護(hù)狀態(tài)信息,它將響應(yīng)以一個(gè)RST(另外一種類型的TCP分節(jié)),該分
節(jié)將被服務(wù)器解釋成一個(gè)錯(cuò)誤。
    如果TCP打算執(zhí)行所有必要的工作以徹底終止某個(gè)連接上兩個(gè)方向的數(shù)據(jù)流(即全雙工關(guān)
閉),那么它必須正確處理連接終止序列4個(gè)分節(jié)中任何一個(gè)分節(jié)丟失的情況。本例子也說
明了為什么執(zhí)行主動(dòng)關(guān)閉的那一端是處于TIME_WAIT狀態(tài)的那一端:因?yàn)榭赡懿坏貌恢貍?最終那個(gè)ACK的就是那一端。  

(2)允許老的重復(fù)分節(jié)在網(wǎng)絡(luò)中消逝。

    為理解存在TIME_WAIT狀態(tài)的第二個(gè)理由,我們假設(shè)在12.106.32.254的1500端口和 
206.168.112.219的21端口之間有一個(gè)TCP連接。我們關(guān)閉這個(gè)連接,過一段時(shí)間后在相同 
的IP地址和端口之間建立另一個(gè)連接。后一個(gè)連接稱為前一個(gè)連接的化身(incarnation),
因?yàn)樗鼈兊腎P地址和端口號(hào)都相同。TCP必須防止來自某個(gè)連接的老的重復(fù)分組在該連接
已終止后再現(xiàn),從而被誤解成屬于同一連接的某個(gè)新的化身。
    為做到這一點(diǎn),TCP將不給處于TIME_WAIT狀態(tài)的連接發(fā)起新的化身。既然TIME_WAIT
狀態(tài)的持續(xù)時(shí)間是MSL的2倍,這就足以讓某個(gè)方向上的分組最多存活MSL秒即被丟棄,另
一個(gè)方向上的應(yīng)答最多存活MSL秒也被丟棄。通過實(shí)施這個(gè)規(guī)則,我們就能保證每成功建立
一個(gè)TCP連接時(shí),來自該連接先前化身的老的重復(fù)分組都已在網(wǎng)絡(luò)中消逝了。

這個(gè)規(guī)則存在一個(gè)例外:
如果到達(dá)的SYN的序列號(hào)大于前一化身的結(jié)束序列號(hào),源自Berkeley的實(shí)現(xiàn)將給當(dāng)前處于TIME_WAIT狀態(tài)的連接啟動(dòng)新的化身。TCPv2第958~959頁(yè)對(duì)這種情況有詳細(xì)的敘述。它要求服務(wù)器執(zhí)行主動(dòng)關(guān)閉,因?yàn)榻邮障乱粋€(gè)SYN的那一端必須處于TIME_WAIT狀態(tài)。rsh命令具備這種能力。RFC1185[Jacobson,Braden,andZhang1990]講述了有關(guān)這種情形的一些陷阱。

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

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