为什么TCP的TIME_WAIT状态要保持2MSL?
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                为什么TCP的TIME_WAIT状态要保持2MSL?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            TIMEWAIT狀態也稱為
2MSL等待狀態。
每個具體TCP實現必須選擇一個報文段最大生存時間MSL(Maximum Segment Lifetime)。
它是任何報文段被丟棄前在網絡內的最長時間。
 
我們知道這個時間是有限的,因為TCP報文段以IP數據報在網絡內傳輸,而IP數據報則有限制其生存時間的TTL字段。
 
RFC 793 [Postel 1981c] 指出MSL為2分鐘。然而,實現中的常用值是30秒,1分鐘,或2分鐘。
 
在實際應用中,對IP數據報TTL的限制是基于跳數,而不是定時器。
 
對一個具體實現所給定的MSL值,處理的原則是:當TCP執行一個主動關閉,并發回最后一個ACK,該連接必須在TIMEWAIT狀態停留的時間為2倍的MSL。
 
這樣可讓TCP再次發送最后的ACK以防這個ACK丟失(另一端超時并重發最后的FIN)。
這種2MSL等待的另一個結果是 這個TCP連接在2MSL等待期間,定義這個連接的插口(客戶的IP地址和端口號,服務器的IP地址和端口號)不能再被使用。
這個連接只能在2MSL結束后才能再被使用。
 
遺憾的是,大多數TCP實現(如伯克利版)強加了更為嚴格的限制。
在2MSL等待期間,插口中使用的本地端口在默認情況下不能再被使用。
 
某些實現和API提供了一種避開這個限制的方法。
 
使用插口API時,可說明其中的SOREUSEADDR選項,它將讓調用者對處于2MSL等待的本地端口進行賦值。
但我們將看到TCP原則上仍將避免使用仍處于2MSL連接中的端口。
 
在連接處于2MSL等待時,任何遲到的報文段將被丟棄。
因為處于2MSL等待的、由該插口對(socket pair)定義的連接在這段時間內不能被再用,因此當要建立一個有效的連接時,來
自該連接的一個較早替身(incarnation)的遲到報文段作為新連接的一部分不可能不被曲解
 
                        
                        
                        每個具體TCP實現必須選擇一個報文段最大生存時間MSL(Maximum Segment Lifetime)。
它是任何報文段被丟棄前在網絡內的最長時間。
我們知道這個時間是有限的,因為TCP報文段以IP數據報在網絡內傳輸,而IP數據報則有限制其生存時間的TTL字段。
RFC 793 [Postel 1981c] 指出MSL為2分鐘。然而,實現中的常用值是30秒,1分鐘,或2分鐘。
在實際應用中,對IP數據報TTL的限制是基于跳數,而不是定時器。
對一個具體實現所給定的MSL值,處理的原則是:當TCP執行一個主動關閉,并發回最后一個ACK,該連接必須在TIMEWAIT狀態停留的時間為2倍的MSL。
這樣可讓TCP再次發送最后的ACK以防這個ACK丟失(另一端超時并重發最后的FIN)。
這種2MSL等待的另一個結果是 這個TCP連接在2MSL等待期間,定義這個連接的插口(客戶的IP地址和端口號,服務器的IP地址和端口號)不能再被使用。
這個連接只能在2MSL結束后才能再被使用。
遺憾的是,大多數TCP實現(如伯克利版)強加了更為嚴格的限制。
在2MSL等待期間,插口中使用的本地端口在默認情況下不能再被使用。
某些實現和API提供了一種避開這個限制的方法。
使用插口API時,可說明其中的SOREUSEADDR選項,它將讓調用者對處于2MSL等待的本地端口進行賦值。
但我們將看到TCP原則上仍將避免使用仍處于2MSL連接中的端口。
在連接處于2MSL等待時,任何遲到的報文段將被丟棄。
因為處于2MSL等待的、由該插口對(socket pair)定義的連接在這段時間內不能被再用,因此當要建立一個有效的連接時,來
自該連接的一個較早替身(incarnation)的遲到報文段作為新連接的一部分不可能不被曲解
(一個連接由一個插口對來定義。一個連接的新的實例(instance)稱為該連接的替身)。
 
 
參考:《TCP IP詳解卷一》18.6.1
《UNIX網絡編程(卷1):套接字聯網API(第3版)》2.7
為什么TCP的TIME_WAIT狀態要保持2MSL?
 
總結
以上是生活随笔為你收集整理的为什么TCP的TIME_WAIT状态要保持2MSL?的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 使用strace和ltrace跟踪程序调
 - 下一篇: Linux下高并发socket最大连接数