1. 程式人生 > >2MSL導致的伺服器端口占用問題

2MSL導致的伺服器端口占用問題

MSL(Maximum Segment Lifetime)是最大報文段生存時間,它代表任何報文段在被丟棄前在網路中被允許存在的最長時間。這個時間是有限制的,因為TCP依賴IP傳輸資料報,而IP資料報有TTL欄位和最大跳數字段,這兩個欄位限制了IP資料報在網路中的生存時間,最長為2分鐘。

2MSL是關閉TCP連線時,進入TIME_WAIT狀態後,主動發起關閉的一方需要等待的時間,關閉發起方一直要等到被動關閉方的ACK。

當一條TCP被客戶端主動關閉,立即重啟客戶端,那麼新的客戶端不能使用相同的本地埠,因為客戶端使用的是由作業系統分配的臨時埠,而且客戶端也不關係被分配的埠是多少。但是,如果我們終止一個已經建立一條連線的伺服器程序,然後立即重啟伺服器,此時會報“地址已佔用”的繫結錯誤。這是因為當連線進入2MSL等待狀態後,埠號依然是這條TCP連線的一部分。