三次握手四次揮手

2021-10-09 23:53:26 字數 2196 閱讀 2265

tcp的連線釋放

tcp是tcp/ip體系中非常複雜的乙個協議。tcp是面向位元組流的,但是傳送的資料單元是報文段,乙個tcp報文段分為首部和資料兩部分。tcp首部的某些欄位是我們必須要掌握的,在說明三次握手和四次揮手之前,有必要先了解tcp首部的字段。

tcp報文段的首部前20個位元組是固定的,後面有4n個位元組是可變的,其中n是整數。因此tcp報文段的最小長度是20個位元組。

各字段的含義如下:

tcp建立連線的過程叫做握手,握手需要在客戶和伺服器之間交換三個tcp報文段,所以也叫三次握手。其實更準確的叫三報文握手。

假定主機a執行的是tcp客戶程式,b執行的是tcp伺服器程式。最初兩端都處於closed狀態。

a主動開啟連線,b被動開啟連線。

b的tcp伺服器先建立tcb(傳輸控制塊),準備接受客戶程序的連線請求。然後伺服器程序就處於listen狀態。

a的tcp客戶程序也建立tcb,向b傳送請求報文段,此時syn=1,同時選擇乙個初始序號seq=x。此時tcp客戶程序進入syn-sent狀態。(這部分是重點,之前面試官問過我三次握手建立連線的過程中,客戶和伺服器的各個階段的狀態是什麼。)

b收到請求報文段後,如果同意建立連線,會向a傳送確認。syn=1,ack=1,seq=y,ack=x+1。同樣消耗掉乙個序號。這是tcp伺服器程序進入syn-rcvd狀態。

tcp客戶程序收到b的確認後,還要向b給出確認。這時,tcp連線已經建立,a進入established狀態。

當b收到a的確認後,也進入established狀態。

或者說為什麼是三次握手而不是兩次握手?這主要是為了防止已失效的連線請求報文段突然又傳送到了b,因而產生錯誤。

假定出現了這樣一種異常情況,a向b傳送了第乙個連線請求,但是在某些網路節點長時間滯留了,以致延誤到a向b傳送了第二次連線請求,資料傳輸完畢後,連線釋放以後的某個時間才到達b,本來這是乙個早已時效的報文段。如果是兩次握手,b認為連線已經建立,一直等待a發來資料,b的許多資源就這樣白白浪費了。

資料傳輸結束後,通訊的雙方都可以釋放連線。

a和b一開始都處於established狀態。

a的應用程序先向其tcp發出連線釋放報文段,並停止再傳送資料,主動關閉tcp連線。a把連線釋放報文段首部的fin置為1,seq=u,它等於前面已傳送過的資料的最後乙個位元組的序號加一,這時a進入fin-wait-1(終止等待1)狀態,等待b的確認。

b收到連線釋放的報文段後即發出確認,確認號是ack=u+1,而這個報文段自己的序號是v,等於b前面已傳送過的資料的最後乙個位元組的序號加1.然後b就進入close-wait狀態,這時從a到b這個方向的連線就釋放了,這時tcp連線處於半關閉狀態。

a收到b的確認後,就進入fin-wait-2狀態,等待b發出的連線釋放報文。

若b沒有要向a傳送的資料,其應用程序就通知tcp釋放連線。這時b發出的連線釋放報文段必須使用fin=1。假定b的序號為w(在半關閉狀態b可能又傳送了一些資料)。b還必須重複上次已傳送過的確認號ack=u+1。這時b就進入last-ack(最後確認狀態),等待a的確認。

a在收到b的連線釋放報文段後,必須對此發出確認。在確認報文段中把ack置為1,確認號ack=w+1,自己的序號seq=u+1,然後進入到time-wait狀態,此時tcp連線還沒有釋放掉,必須經過時間等待計時器設定的2msl後,a才進入到closed狀態。msl叫做最長報文段壽命(maximum segment lifetime)。當a撤銷相應的tcb後,就結束了這次的tcp連線

保證a傳送的最後乙個ack報文段能夠到達b。、

因為這個ack報文段有可能丟失,因而使處在last-ack狀態的b收不到這個確認。b會超時重傳fin+ack報文段,而a就能在2msl時間內收到這個重傳的報文段,接著a重傳一次確認,重新啟動2msl計時器。最後a和b都正常進入closed狀態。否則,b無法正常進入closed狀態。

防止已失效的連線請求報文段出現在本連線中。

a在傳送完最後乙個ack報文段後,再經過2msl,就可以使本鏈結持續的時間內所產生的的所有報文段都從網路中消失。這樣就可以使下乙個新的連線中不會出現這種舊的連線請求報文段。

三次握手 四次揮手

1.tcp連線的建立 1 首先是伺服器初始化的過程,從 closed 關閉 狀態開始通過順序呼叫 socket bind listen 和accept 原語建立 socket 套接字,進入 listen 監聽 狀態,等待客戶端的 tcp傳輸連線請求。2 客戶端最開始也是從 closed 狀態開始呼叫...

三次握手,四次揮手

三次握手 three times handshake three way handshake 所謂的 三次握手 即對每次傳送的 資料量是怎樣跟蹤進行協商使 資料段的傳送和接收同步,根據所接收到的資料量而確定的資料確認數及資料傳送 接收完畢後何時撤消聯絡,並建立虛連線。為了提供可靠的傳送,tcp在傳送...

三次握手 四次揮手

在tcp ip 協議中,tcp 協議提供可靠的連線服務,採用三次握手建立乙個連線,如圖1所示。1 第一次握手 建立連線時,客戶端a 傳送syn 包 syn j 到伺服器b 並進入syn send 狀態,等待伺服器b 確認。2 第二次握手 伺服器b 收到syn 包,必須確認客戶a 的syn ack j...