TCP IP中的TIME WAIT狀態

2021-07-02 19:11:05 字數 951 閱讀 8973

毫無疑問,tcp中有關網路程式設計最不容易理解的是它的time_wait狀態,time_wait狀態存在於主動關閉socket連線的一方。

time_wait狀態存在的理由:

tcp/ip協議就是這樣設計的,是不可避免的。主要有兩個原因:

1)可靠地實現tcp全雙工連線的終止

tcp協議在關閉連線的四次握手過程中,最終的ack是由主動關閉連線的一端(後面統稱a端)發出的,如果這個ack丟失,對方(後面統稱b端)將重發出最終的fin,因此a端必須維護狀態資訊(time_wait)允許它重發最終的ack。如果a端不維持time_wait狀態,而是處於closed 狀態,那麼a端將響應rst分節,b端收到後將此分節解釋成乙個錯誤。

因而,要實現tcp全雙工連線的正常終止,必須處理終止過程中四個分節任何乙個分節的丟失情況,主動關閉連線的a端必須維持time_wait狀態 。

2)允許老的重複分節在網路中消逝

tcp分節可能由於路由器異常而「迷途」,在迷途期間,tcp傳送端可能因確認超時而重發這個分節,迷途的分節在路由器修復後也會被送到最終目的地,這個遲到的迷途分節到達時可能會引起問題。在關閉「前乙個連線」之後,馬上又重新建立起乙個相同的ip和埠之間的「新連線」,「前乙個連線」的迷途重複分組在「前乙個連線」終止後到達,而被「新連線」收到了。為了避免這個情況,tcp協議不允許處於time_wait狀態的連線啟動乙個新的可用連線,因為time_wait狀態持續2msl,就可以保證當成功建立乙個新tcp連線的時候,來自舊連線重複分組已經在網路中消逝。

msl為最長分節生命期,任何tcp實現都必須為msl選擇乙個值,rfc 1122的建議值是2分鐘,不過berkeley的實現傳統上改用30秒這個值,這意味著time_wait狀態的持續時間在1分鐘到4分鐘之間。msl是任何ip資料報能夠在網際網路中存活的最長時間。

優化TCP IP連線,減少TIME WAIT

一 tcp ip連線的狀態和對應的個數 netstat an awk tcp end 二 提公升伺服器的負載能力 vim etc sysctl.conf 然後,在這個檔案中,加入下面的幾行內容 net.ipv4.tcp syncookies 1 net.ipv4.tcp tw reuse 1 net...

好乙個Time Wait狀態(TCP IP)

首先簡單介紹一下time wait是個什麼鬼 在tcp ip協議中,我們都知道有三次握手四次揮手的過程,先來乙個簡單的圖 各個狀態和基本的過程想必了解過tcp ip協議的人都清楚,本次介紹的主題只有time wait狀態。ps 本文統一將主動斷開連線方稱a,被動斷開連線方稱b 1,time wait...

TCP中的time wait狀態

tcp連線的建立三次握手,連線的斷開需要四次揮手。tcp連線在四次揮手的過程中,主動關閉的一端往往會進入乙個叫time wait的狀態。這個狀態是被動關閉端發出fin分節以後,被動端就會進入last ack狀態,主動關閉端接受到這個fin分節以後就會發出最後乙個ack分節,並進入time wait狀...