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

2021-10-04 09:43:57 字數 1453 閱讀 6252

1、客戶端a向伺服器b傳送連線請求報文,此時首部的同步位syn=1,同時選擇乙個初始序號seq=x.tcp規定syn報文(syn=1)不能攜帶資料,但是要消耗乙個序列號,這時tcp客戶程序進入syn-sent(同步以傳送)狀態;

2、伺服器b收到連線請求報文後,如果同意建立連線,則向a傳送確認,在確認報文中應把syn和ack都置為1,確認號是ack=x+1,同時為自己選擇乙個初始序列號seq=y。同樣報文不能攜帶資料,但是要消耗乙個序列號,此時伺服器b的程序進入syn-rcvd(同步收到)狀態。

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

連線釋放

1、資料傳輸結束,通訊雙方都可釋放連線,a的程序主動發起連線釋放報文。首先將報文首部的終止控制位fin置1,其序號seq=u(u等於前面已經傳輸的資料的最後乙個位元組的序號加1),這時a進入fin-wait-1(終止等待1)狀態,等待b的確認。fin不攜帶資料,但是需要消耗乙個序號。

2、b收到連線釋放報文後隨機發出確認,確認號ack=u+1,該報文自己的序號是v,等於前面已傳送的資料的最後乙個位元組的序號加1,b進入close-wait(關閉等待)狀態,這時的tcp連線進入半關閉狀態。即a已經沒有資料要傳送了,但是b還有資料要傳送,a扔可以接收。a收到了b的確認報文後,進入fin-wait-2(終止等待狀態2),等待b傳送連線釋放報文。

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

4、a收到b的連線釋放報文後,必須做出確認,在確認報文中ack置1,確認號ack=w+1,自己的學號seq=u+1,然後進入time-wait(時間等待)狀態。經過2個msl後,釋放連線。

常見面試題

保持資訊對等。

防止請求超時導致髒連線。

如果兩次握手就建立連線,傳輸完資料並釋放連線後,第乙個超時的連線請求才到達伺服器,伺服器會認為是客戶端建立新連線的請求,然後建立連線。此時客戶端的狀態不是syn_sent,所以會直接丟棄伺服器傳來的確認資料,導致最後只是伺服器單方面建立了連線。

客戶端要確認伺服器能收到ack訊號。(如果不確認這一點,伺服器會認為客戶端沒有收到自己的fin+ack報文,所以會重發)

防止失效請求。(為了防止已失效的連線的請求資料報和正常的混淆)

TCP的連線和釋放過程

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

TCP從連線到釋放過程全解

參考書籍 計算機網路第5版 tcp是面向連線的協議,採用c s模型建立連線,由client主動發起連線請求,server端允許請求的模式建立連線,通常稱為三次握手建立tcp連線。準備條件 b的server端先建立傳輸控制塊tcb。準備接受client程序的連線請求,此時server程序處於liste...

簡述TCP建立連線和釋放連線

第一次握手 客戶端將同步號syn置為1,隨機產生乙個值seq x,將該資料報傳送給服務端,客戶端進入syn sent狀態,等待服務端確認。第二次握手 服務端收到資料報後由同步號syn 1知道客戶端請求建立連線,服務端將標誌位syn和ack都置為1,ack x 1,隨機產生乙個值seq y,並將該資料...