TCP連線建立和釋放過程中狀態機的變化

2021-09-13 23:47:16 字數 1925 閱讀 5610

tcp是面向連線的協議,tcp運輸連線的建立和釋放是每一次面向連線的通訊中必不可少的過程。 

運輸連線有三個階段:連線建立,資料傳送和連線釋放。 

tcp連線採用的是客戶伺服器方式。主動發起連線建立請求的應用程序叫客戶,而被動等待連線建立的應用程序叫伺服器。

tcp的連線建立:三次握手 

如下圖所示tcp連線建立的過程。假定a主機執行的是tcp客戶程式,而b主機執行的是tcp伺服器程式。最初兩端都處於closed(關閉)狀態。a主動開啟連線,b被動開啟連線。

b的tcp伺服器程序先建立傳輸控制塊tcb,準備接受客戶程序的連線請求。然後伺服器程序就處於listen(收聽)狀態,等待客戶的連線請求。如有,則做出響應。

a的tcp客戶程序也是先建立傳輸控制塊tcb,然後向b傳送連線請求報文,這是首部中的同步位syn=1,同時選擇乙個廚師序號seq = x。tcp規定,syn報文段(syn=1的報文段)不能攜帶資料,但要消耗掉乙個序號,這時,tcp客戶程序進入syn_sent(同步已傳送)狀態。

b收到連線請求報文段後,如同意建立連線,則向a傳送確認。在確認報文中應把syn位和ack位都置1,確認號是ack = x+1,同時也為自己選擇乙個廚師序號seq = y.這個報文段也不能攜帶資料,但同樣要消耗掉乙個序號。這時,tcp伺服器程序進入syn_rcvd(同步收到)狀態 

。 tcp客戶程序收到b的確認後,還要向b給出確認。確認報文段的ack置1,確認號ack = y+1,而自己的序號seq = x+1。tcp的標準規定,ack的報文段可以攜帶資料。但如果不攜帶資料則不消耗序號,在這種情況下,下乙個資料報文段的序號仍是seq = x+1。這時tcp連線已經建立,a進入established(已建立連線)狀態。

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

a傳送確認主要是為了防止已經失效的連線請求報文段突然又傳送到了b,因而產生錯誤。 

tcp的連線釋放:四次揮手 

資料傳輸結束後,通訊的雙方都可以釋放連線。現在a和b都處於established狀態。

a的應用程序先向其tcp發出連線釋放報文段,並停止傳送資料,主動關閉tcp連線。a吧連線釋放報文段首部的終止控制位fin置1,其序號seq = u,它等於前面已傳送過的資料的最後乙個位元組的序號加1 。這時a進入fin_wait_1(終止等待1)狀態,等待b的確認。tcp規定,fin報文段即使不懈怠資料,也要消耗點乙個序號。

b收到連線釋放報文後即發出確認,確認號是ack=u+1,而這個報文段自己的序號是v,等於b前面已經傳送過的最後乙個位元組的序號+1.這時,b進入close_wait(關閉等待)狀態。

tcp伺服器程序此時應該通知高層應用程序,一二從a到b這個方向的連線已經關閉,這時的tcp程序屬於半關閉(half_close)狀態,即a已經不會像b傳送資料了,但b要向a傳送資料,a還得接收。

a收到來自b的確認後,就進入了fin_wait_2(終止等待2),等待b發出的連線釋放報文。如果b沒有資料向a傳送,其應用程序就通知tcp釋放鏈結。這時b發出的連線釋放報文段fin=1.現假定b的序號是w(半關閉狀態b向a傳送了資料)。b還必須重複上次已傳送過的確認號ack=u+1。這時b就進入了lask_ack(最後確認)狀態,等待a的確認。

a在收到b的釋放鏈結報文段後,必須對此發出確認。在確認阿伯文段中吧ack置1,確認號ack = w+1,而自己的序號是seq = u+1(根據tcp標準,前面傳送過的fin要消耗乙個序號)。然後進入到time_wait(時間等待)狀態。但是,現在tcp連線還沒有釋放,必須經過時間等待計時器(time_wait timer)設定的時間2msl後,a才能進入到closed狀態。

為了更清晰的看出tcp連線的各種狀態之間的關係,如下圖給出了tcp的有限狀態機。

TCP連線建立和釋放過程中狀態機的變化

tcp是面向連線的協議,tcp運輸連線的建立和釋放是每一次面向連線的通訊中必不可少的過程。運輸連線有三個階段 連線建立,資料傳送和連線釋放。tcp連線採用的是客戶伺服器方式。主動發起連線建立請求的應用程序叫客戶,而被動等待連線建立的應用程序叫伺服器。tcp的連線建立 三次握手 如下圖所示tcp連線建...

TCP 連線建立過程和連線釋放過程

1 客戶端a向伺服器b傳送連線請求報文,此時首部的同步位syn 1,同時選擇乙個初始序號seq x.tcp規定syn報文 syn 1 不能攜帶資料,但是要消耗乙個序列號,這時tcp客戶程序進入syn sent 同步以傳送 狀態 2 伺服器b收到連線請求報文後,如果同意建立連線,則向a傳送確認,在確認...

TCP的連線和釋放過程

tcp的連線和釋放過程 1 三次握手的過程 1 主機a向主機b傳送tcp連線請求資料報,其中包含主機a的初始序列號seq a x。其中報文中同步標誌位syn 1,ack 0,表示這是乙個tcp連線請求資料報文 序號seq x,表明傳輸資料時的第乙個資料位元組的序號是x 2 主機b收到請求後,會發回連...