之前所說了解有兩個原因:
1、防止客戶端最后一次發給服務器的確認在網絡中丟失以至於客戶端關閉,而服務端並未關閉,導致資源的浪費。
2、等待最大的2msl可以讓本次連接的所有的網絡包在鏈路上消失,以防造成不必要的干擾。
但對於第二條造成不必要的干擾之前沒有做過多的解讀,今天在網上查了下,順便給大家分享下:
如果client直接closed,然后又向server發起了一個新連接,我們不能保證這個新連接和剛關閉的連接的端口號是不同的。假設新連接和已經關閉的老端口號是一樣的,如果前一次滯留的某些數據仍然在網絡中,這些延遲數據會在新連接建立后到達Server,所以socket就認為那個延遲的數據是屬於新連接的,數據包就會發生混淆。所以client要在TIME_WAIT狀態等待2倍的MSL,這樣保證本次連接的所有數據都從網絡中消失。