1.TCP之2MSL
1.1 MSL
MSL:Maximum Segment Lifetime報文段最大生存時間,它是任何報文段被丟棄前在網絡內的最長時間
1.2為什么存在MSL
TCP報文段以IP數據報在網絡內傳輸,而IP數據報則有限制其生存時間的TTL字段,并且TTL的限制是基于跳數
1.3MSL大小定義
RFC文檔中規定為2分鐘,但是實際實現過程中,MSL一般為:30秒、1分鐘、2分鐘
2.1 何為2MSL狀態
在TCP調用connect建立socket的連接后,主動關閉socket連接的過程中有一個狀態為Time_Wait(也就是2MSL等待機制,需要停留2MSL的時間),具體見下面的圖:
2.2什么時候有2MSL狀態
只有主動關閉socket連接的時候才有此狀態,并且在2MSL等待期間,定義這個連接的Socket
Pair(客戶的IP地址和端口號,服務器的IP地址和端口號)不能再被使用
3.1 2MSL機制作用
保證了最后一個ACK發送給被動關閉端,確保連接雙方關閉完成,如果沒有該機制,最后一個ACK丟失后會出現半連接的狀態
3.2 為什么客戶端在 TIME-WAIT 狀態必須等待 2MSL 的時間?
就好像分手一樣,客戶端主動關閉的,你得為這件事負責吧?客戶端為了確保服務器收到最后一次揮手的報文。如果最后一次丟包了,服務器沒有收到第四次揮手的報文,還以為客戶端不想分手,就會再重發一次第三次揮手的報文,看看客戶端是不是后悔了,不想分手了。這個等待時間就是為了接收超時重傳的報文。
假如客戶端發完就斷開了鏈接,然后服務器一直等不到回應,重傳了報文還是沒有得到回應,服務器不死心啊,服務器就關閉不了鏈接。客戶端這時就是典型的渣男角色,分手你別讓別人還抱有幻想是不是?
說多了,回歸正題, tcp最大的特點就是數據不會丟失啊,客戶端渣渣的建立了新連接,然后發現有一個舊的數據包,然后讓客戶端的新連接也不好了,這就叫自食其果。所以有了這個等待時間,既保證了雙方都正常關閉,又保證了所有報文段消失,不會在新連接中出現舊的請求報文段。
總結
主動發送 fin 關閉的一方,在 4 次揮手最后一次要等待一段時間我們稱這段時間為 ??2MSL??。