衆所周知,TCP建立連接三次握手,斷開連接四次揮手,具體流程如下:
MSL是什麼意思?
MSL, the maximum segment lifetime (最長報文段壽命) 。 segment可以在網絡中存活的最長時間,超過這個時間會被丟棄。這個時間限制是有界限的,TCP Segment通過IP datagrams進行傳輸,IP datagrams使用ttl屬性來定義這個時間。RFC793中規定MSL爲2分鐘,但這完全是從工程上來考慮,對於現在的網絡,MSL=2分鐘可能太長了一些。因此TCP允許不同的實現可根據具體情況使用更小的MSL值。TTL與MSL是有關係的但不是簡單的相等關係,MSL要大於TTL。
爲什麼需要等待2MSL?
在TIME_WAIT (也被叫做2MSL等待狀態)狀態下,客戶端向服務器發出ACK以後需要等待2個MSL的時間。假如ACK在傳輸中丟失,超時後服務端會重新發送FIN, 客戶端收到以後會重新發ACK。假如在2MSL時間中客戶端都沒有收到服務端重發的FIN,那麼客戶端認爲服務端已經收到了客戶端發送的ACK, 此時客戶端纔可以放心的斷開連接。
爲什麼等待時間是2MSL?
客戶端發送的ACK segment存活期1MSL,服務端重發FIN segment存活期1MSL,加一起2MSL。2MSL是一個臨界值,利用盡量大的等待時間來確保TCP連接斷開的可靠性。