為什麼TCP4次揮手時等待為2MSL?

B收到ACK,關閉連接。但是A無法知道ACK是否已經到達B,於是開始等待?等待什麼呢?假如ACK沒有到達B,B會為FIN這個消息超時重傳 timeout retransmit ,那如果A等待時間足夠,又收到FIN消息,說明ACK沒有到達B,於是再發送ACK,直到在足夠的時間內沒有收到FIN,說明ACK成功到達。這個等待時間至少是:B的timeout + FIN的傳輸時間
那麼B的timeout時間不應該是FIN傳送時間的最大值MSL+ACK傳送時間的最大值MSL=2MSL嗎?
這樣一來整個等待時間不應該是3MSL嗎


通信所要解決的首要問題就是,保持通信雙方的信息對稱,使通信雙方處於同步狀態。

先來一個例子:
羅密歐大學期間寫信給中學同學朱麗葉,信的內容如下:

小葉子,我喜歡你!

這封信發出之後,羅密歐無法知道朱麗葉能否收到,只有收到小葉子的回信,才能知道自己的信已經到達對方。

三天之後,小葉子回信了,信的內容如下:

小歐,來信已閱,我也喜歡你…

此時,小葉子眼中雙方的狀態是:互相愛慕

如果小歐收到回信,小歐眼中雙方的狀態也是:互相愛慕!

如果小歐沒有收到回信,小歐眼中雙方的狀態是:單相思

小葉子為了杜絕小歐模稜兩可的狀態,使他與自己達成「互相愛慕」的共識,需要做以下工作:

1)先耐心地等小歐的第三封信

2)如果若干天沒有收到回信,需要把自己的第二封信再次發出

如果收到了小歐的回信,那麼雙方的狀態終於同步了:「互相愛慕」!

即使2)發生了,N天之後也可以達成同步狀態。

之後,雙方可以甜言蜜語地談戀愛了。


TCP四次揮手也遵循相似的套路。

主動斷開的一側為A,被動斷開的一側為B。

第一個消息:A發FIN

第二個消息:B回復ACK

第三個消息:B發出FIN

此時此刻:B單方面認為自己與A達成了共識,即雙方都同意關閉連接。

此時,B能釋放這個TCP連接佔用的內存資源嗎?不能,B一定要確保A收到自己的ACK、FIN。

所以B需要靜靜地等待A的第四個消息的到來:

第四個消息:A發出ACK,用於確認收到B的FIN

當B接收到此消息,即認為雙方達成了同步:雙方都知道連接可以釋放了,此時B可以安全地釋放此TCP連接所佔用的內存資源、埠號。

所以被動關閉的B無需任何wait time,直接釋放資源。

但,A並不知道B是否接到自己的ACK,A是這麼想的:

1)如果B沒有收到自己的ACK,會超時重傳FiN

那麼A再次接到重傳的FIN,會再次發送ACK

2)如果B收到自己的ACK,也不會再發任何消息,包括ACK

無論是1還是2,A都需要等待,要取這兩種情況等待時間的最大值,以應對最壞的情況發生,這個最壞情況是:

去向ACK消息最大存活時間(MSL) + 來向FIN消息的最大存活時間(MSL)。

這恰恰就是2MSL( Maximum Segment Life)。

等待2MSL時間,A就可以放心地釋放TCP佔用的資源、埠號,此時可以使用該埠號連接任何伺服器。

為何一定要等2MSL?
如果不等,釋放的埠可能會重連剛斷開的伺服器埠,這樣依然存活在網路里的老的TCP報文可能與新TCP連接報文衝突,造成數據衝突,為避免此種情況,需要耐心等待網路老的TCP連接的活躍報文全部死翹翹,2MSL時間可以滿足這個需求(儘管非常保守)!


MSL 是Maximum Segment Lifetime英文的縮寫,中文可以譯為「報文最大生存時間」,他是任何報文在網路上存在的最長時間,超過這個時間報文將被丟棄。

所以timeout不就該是msl時間嗎?
而且這個mls時間是規定,不是算出來的,規範上說兩分鐘,可想而知,這遠比定時器設置的時間要長。

理解了這個概念就明白為什麼是2不是三了,你說的三完全是用另一個概念,「定時器超時時間」。


這裡2msl是主動關閉方A在發送ACK後等待的時間,與b的timeout無關


概念:MSL是報文在網路中最長生存時間,這是一個工程值(經驗值),不同的系統中可能不同。

場景:
1. A發出ACK後,等待一段時間T,確保如果B重傳FIN自己一定能收到

分析:
1. ACK從A到B最多經過1MSL,超過這個時間B會重發FIN
2. B重發的FIN最多經過1MSL到達A

結論:如果B重發了FIN,且網路沒有故障(重發的FIN被丟棄或錯誤轉發),那麼A一定能在2MSL之內收到該FIN,因此A只需要等待2MSL。


題主說總時間是
B的timeout時間+FIN傳輸時間
但是又說B的timeout時間是
ACK的傳輸時間+FIN的傳輸時間
這裡FIN的傳輸時間相當於計算了兩次?


推薦閱讀:

在計算機領域中,有哪些令你拍案叫絕的思想?
乙太網與互聯網有什麼區別?
埠號和協議號的區別在哪裡?
10MB寬頻會有這樣的速度嗎?
機器學習和遺傳演算法有什麼聯繫?

TAG:互聯網 | 計算機科學 | TCPIP | TCP | TCP服務 |