【計算機基礎】-TCP四次揮手

【計算機基礎】-TCP四次揮手

TCP四次揮手

在講解tcp四次揮手之前我們也先來認識一下tcp首部中的某些字段:

ACK:隻有該字段置1時ack(确認号)才有效

FIN:當該字段置1時用于請求釋放連接

seq:序列号,表示該報文段的序号

ack:确認号,表示希望收到的下一個報文段,并且該報文段以前的報文已經收到

四次揮手

先來講解一下大體的一個過程:(以客戶端先主動釋放連接爲例)

一、 客戶端釋放連接,客戶端進入FIN-WAIT1狀态

二、 服務端收到tcp報文段,并發出确認 服務端進入CLOSE-WAIT狀态

客戶端收到确認後進入FIN-WAIT2狀态。

這兩個步驟完成後該tcp進入半關閉狀态,即客戶端到服務端的連接已經關閉,但有可能服務端需要向客戶端發送數據,所以有可能需要等待服務端繼續發送數據

三、 服務端釋放連接 服務端進入LAST-ACK狀态

四、 客戶端收到該報文段,發出确認,客戶端進入TIME-WAIT狀态,在經過2MSL(最長報文段壽命)時間後進入CLOSED狀态

服務端收到确認報文後也進入COISED狀态。

爲什麽最後客戶端需要等待2MSL的時間,原因有兩個:

一、 保證客戶端最後發送的确認報文段可以被服務端收到,使服務端順利進入CLOSED狀态。因爲最後客戶端發出的确認請求報文可能不能到達服務端,而2MLS的時間可以保證服務端重發釋放連接的報文可以到達客戶端,這樣才能保證客戶端确認報文一定可以到達服務端。

二、 防止已失效的連接請求報文。

2MLS時間可以讓本報文段所産生的所有報文都從網絡中消失。

具體過程:

一、 客戶端将tcp頭部 FIN置1,seq=u(u等于前面發送報文段序号+1),向服務端發送該報文,客戶端進入FIN-WAIT1狀态

二、 接收到客戶端的報文後,将tcp頭部ACK置1, ack=u+1,seq=v(v等于前面發送報文段序号+1),服務端進入CLOSE-WAIT狀态

客戶端收到确認報文後進入FIN-WAIT2狀态,整個tcp連接進入半關閉狀态

中間可能服務端依然向客戶端發送數據

三、 服務端數據發送完成後,将tc頭部FIN置1,seq=w(w等于v加上中間向服務端發送的數據),ack=u+1(這裏需要注意),發送該報文段,服務端進入LAST-ACK狀态

四、 客戶端收到服務端報文後,将tcp頭部ACK置1,ack=w+1,seq=u+1,發送該報文後客戶端進入TIME-WAIT狀态,再等待2MSL時間後進入到CLOSED狀态。

服務端收到确認後也進入到CLOSED狀态。

原文鏈接:https://www.mrgaocloud.com/?p=1137,轉載請注明出處。
1

評論0

請先

站點公告

歡迎使用紅狐網!紅狐彈幕播放器已更新新版V1.7.2!立即查看
顯示驗證碼
沒有賬号?注冊  忘記密碼?

社交賬号快速登錄