TCP四次揮手中的TIME WAIT狀態存在的理由

2021-08-04 14:31:14 字數 980 閱讀 3501

(1)第一次揮手:client傳送乙個fin,用來關閉client到server的資料傳送,client進入fin_wait_1狀態。

(2)第二次揮手:server收到fin後,傳送乙個ack給client,確認序號為收到序號+1(與syn相同,乙個fin占用乙個序號),server進入close_wait狀態。

(3)第三次揮手:server傳送乙個fin,用來關閉server到client的資料傳送,server進入last_ack狀態。

(4)第四次揮手:client收到fin後,client進入time_wait狀態,接著傳送乙個ack給server,確認序號為收到序號+1,server進入closed狀態,完成四次揮手。

注意到,第四次握手時,client接收到fin後,並沒有立即進入closed狀態,而是進入time_wait狀態,這是為什麼呢?

(1)client不能保證最後的ack能到達server,所以還應該觀望一段時間,護送一段時間。如果最後的ack丟失,那麼server顯然收不到,於是server發起了重傳fin的操作,此時如果client處於closed狀態,就無法重發ack了。所以client要等待乙個2msl的時間,這段時間就是time_wait。

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

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

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

聊聊TCP四次揮手中的timewait

一句話總結 保證雙方正常關閉 廢棄存在於路由上的舊資訊。下面假設a是主動關閉方,b是被動關閉方。1 time wait什麼時候出現 當a主動關閉傳送fin給b時,進入fin wait 1,b接收到fin後發給a乙個ack,進入close wait 當a接收到b的ack後進入fin wait 2 b進...

tcp 四次揮手 TCP四次揮手

tcp斷開連線的過程 客戶端傳送fin報文,表明客戶端將不在傳送資料。具體過程 把fin標誌位改為1,序號seq u,之前傳送的資料加1,這裡規定即使不攜帶資料序號也要 1。該過程中客戶端通過close系統呼叫從established狀態進入fin wait 1狀態。第二次揮手 服務端收到客戶端發來...

TCP四次揮手中TIME WAIT的作用及危害

1 為實現tcp連線的可靠釋放 保證最後乙個ack能到達伺服器,如果伺服器沒有收到客戶端的確認報文,它會重新進行第四次揮手,這樣客戶端在2msl內能收到重發的報文,並給出回應,重置2msl計時器 msl是maximum segment lifetime英文的縮寫,中文可以譯為 報文最大生存時間 2 ...