TC的連線釋放 四次揮手

2022-06-25 10:30:12 字數 1629 閱讀 2813

四次揮手釋放tcp連線的過程

fin-終止位;ack-確認位;seq-序號;ack-確認號;

established-連線建立狀態;

fin-wait-1-終止等待1狀態;fin-wait-2-終止等待2狀態;close-wait-關閉等待狀態;last-ack-最後確認狀態;time-wait-時間等待狀態;

fin(終止控制)報文段-終止控制位fin=1的報文段,可以攜帶資料,無論是否攜帶資料,都會消耗乙個序號。

msl-最長報文段生存時間;

資料傳輸結束後,服務端和客戶端均可釋放連線,此時均處於established狀態,假設客戶端主動關閉連線,服務端被動關閉連線。

第一次揮手:客戶端向服務端傳送連線釋放報文段,並停止傳送資料,首部中的終止位fin=1,序號seq=u(前面客戶端發給服務端的資料的最後乙個位元組的序號+1),此時,客戶端進入fin-wait-1狀態;

第二次揮手:服務端收到客戶端傳送的連線釋放報文段以後 ,發出確認報文段,首部中的確認位ack=1,序號seq=v(前面服務端發給客戶端的資料的最後乙個位元組的序號+1),確認號ack=u+1(上次客戶端傳送給服務端的序號+1),服務端進入close-wait狀態;此時,客戶端到服務端這個方向的連線已經釋放,tcp處於半關閉狀態(客戶端已經沒有資料要傳送,若服務端傳送資料,客戶端仍需接收);客戶端收到服務端的確認報文段後,進入fin-wait-2狀態,等待服務端傳送連線釋放報文段;

第三次揮手:當服務端沒有資料要發給客戶端時,服務端發出連線釋放報文段,首部中的終止位fin=1,確認位ack=1,序號seq=w(前面服務端發給客戶端的資料的最後乙個位元組的序號+1),確認號ack=u+1(上次客戶端傳送給服務端的序號+1),此時,服務端進入last-ack狀態;

第四次揮手:客戶端收到服務端的連線釋放報文段後,必須發出確認報文段,首部中的確認位ack=1,序號seq=u+1(上次客戶端傳送給服務端的序號+1),確認號ack=w+1(上次服務端發給客戶端的序號+1),此時,客戶端進入time-wait狀態,經過時間等待計時器設定的時間2msl後,客戶端進入closed狀態;服務端收到客戶端發來的確認報文段後,也進入closed狀態。

問題1:為什麼不是三次揮手?

由於tcp連線是全雙工的,每個方向都必須單獨進行關閉。當客戶端完成資料傳送時,向服務端傳送乙個fin報文段來終止這一方向的連線,服務端收到fin報文段以後只是說明客戶端不會再向服務端傳送資料了,但是服務端仍有可能向客戶端傳送資料,直到服務端也向客戶端傳送了fin報文段。

問題2:為什麼在time-wait狀態必須等待2msl的時間?

1.保證客戶端傳送的確認報文能夠到達服務端(可靠的終止tcp連線)。客戶端發給服務端的確認報文可能會丟失,若服務端沒有收到確認報文,服務端會超時重傳fin+ack報文段,客戶端就可以在2msl時間段內收到服務端重傳來的fin+ack報文段;接著,客戶端重傳一次確認報文段,且重新啟動2msl計時器,直到客戶端和服務端都進入closed狀態,否則,服務端無法正常進入closed狀態。

2.防止已經失效的連線請求報文出現在新連線中。客戶端傳送完確認報文段以後,經過2msl時間段後,就可以使本連線持續的時間內所產生的所有的報文段從網路中消失;就可以使下乙個新的連線中不會出現本連線失效的連線請求報文段。

tcp ip四次揮手釋放連線詳解

當某個應用程序在closed狀態下執行主動開啟時,tcp將傳送乙個syn分片,且新的狀態為syn sent.如果這個tcp接著收到乙個ack和syn,則它將傳送乙個ack,且新的狀態為established。如果某個應用程序在收到檔案結束符之前呼叫close 主動關閉 那就轉到fin wait 1狀...

TCP釋放連線的四次揮手過程

tcp斷開連線的過程 tcp四次揮手。資料傳輸結束後,通訊的雙方都可釋放連線。現在a和b都處於established狀態。a的應用程序先向tcp發出連線釋放報文段,主動關閉tcp連線。a把連線釋放報文段的首部的終止控制位fin置為1,序號seq u,它等於前面已傳送過的資料的最後乙個位元組的序號加1...

TCP的四次揮手(TCP的連線釋放)

通訊的雙方都可以啟動釋放連線,即客戶或者伺服器哪一方都可以啟動釋放連線假設客戶的應用程序主動啟動釋放連線,客戶的應用程序先向其tcp發出釋放連線報文段,並停止傳送資料,主動關閉tcp連線 第一步 客戶給伺服器傳送報文 客戶把連線釋放報文段的首部的fin 1,其序號seq u,等待b的確認第二步 伺服...