天天看點

MSL(max segment lifetime) TCP程序結束 端口是否再配置設定

TCP的MSL(max segment lifetime) 參考:http://blog.csdn.net/lile269/article/details/6406878

TCP連結中有一個MSL的概念,也就是最大生成時間,MSL的值在一般的實作中取30s,有些實作采用2分鐘,在TCP的狀态機中的“被動關閉”:從CLOSE_WAIT到LAST_ACK中有一個如下的規則:當T C P執行一個主動關閉,并發回最後一個A CK,該連接配接必須在TIME_WAIT狀态停留的時間為2倍的MSL。這樣可讓TCP再次發送最後的ACK以防這個ACK丢失(另一端逾時并重發最後的FIN)。

存在這個規則導緻一個後果就是在這個2MSL的時間内,該位址上的連結(用戶端位址、端口和伺服器端的位址、端口)不能被使用。比如我們在建立一個連結後關閉連結然後迅速重新開機連結,那麼就會出現端口不可用的情況。

 利用TAO跳過三次握手

為了了解何以能跳過三次握手,我們需要先了解三次握手的目的。RFC793中對此隻是做了一個簡單的說明:“引入三次握手的主要原因是為了避免過時的重複連接配接在再次建連時造成的混亂。

       是以,T/TCP協定必須提供一種方法,使收到SYN封包段的一方能夠不經過三次握手就保證這個SYN不是過時的重複封包段,進而使得随該SYN封包段一起傳送過來的資料能立刻傳遞給上層的使用者程序。這裡的保護手段是客戶發出的SYN封包段中附帶的CC選項和伺服器緩存的最近一次從該客戶收到的合法CC值。

采用的方法就是RFC1644中所述的TAO測試:“如果某個特定客戶主機的第一個SYN封包段(即隻含SYN位而不含ACK位的封包段)中所攜帶的CC值大于緩存中的該客戶CC值,CC值的單調遞增特性可以確定這是一個新的SYN封包段,可以立即接收下來”。正是CC值的單調遞增特性以及下面的兩個假設確定了SYN封包段是新的,使得T/TCP協定能夠跳過三次握手:

1)      所有的封包段都隻有有限的MSL秒的生存期;

2)      tcp_ccgen計數器在2MSL的時間内的遞增量不超過2的32次方減一。