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進入establised(已建立連線)狀態。
當b收到a的確認後,也進入established 狀態。
之所以採用a還需要傳送一次確認的原因在於,防止已經失效的連線請求報文段突然又傳送到了b,產生錯誤。
「四次揮手」
資料傳輸結束後,通訊的雙方都可以釋放連線。現在a和b都處於established狀態。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若傳送資料,a仍要接受,也就是說從b到a這個方向的連線並未關閉。這個狀態可能會持續一段時間。
a收到b的確認後,進入fin-wait-2(終止等待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連線還沒有釋放掉,必須經過時間等待計時器(time-wait timer)設定的2msl後,a才能進入closed 狀態。時間msl叫做最長報文段壽命。進入closed狀態後,才能開始建立下乙個新的連線。當a撤銷相應的傳輸控制塊tcb後,就結束了這次的tcb連線。
b只要收到a發出的為確認,就進入「closed」狀態,同樣b在撤銷相應的傳輸控制塊tcb,結束這次的tcp連線。b結束tcp的時間比a稍微早一點。
為什麼a要經過time-wait狀態必須等待2msl的時間呢?
(1)為了保證a傳送的最後乙個ack報文段能夠達到b;
(2)防止「已經失效的連線請求報文段」出現在本連線中。
TCP三次握手 四次揮手
tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...
TCP三次握手 四次揮手
服務端的tcp程序先建立傳輸控制塊tcb,準備接受客戶端程序的連線請求,然後服務端程序處於listen狀態,等待客戶端的連線請求,如有,則作出響應。1 客戶端的tcp程序也首先建立傳輸控制模組tcb,然後向服務端發出連線請求報文段,該報文段首部中的syn 1,ack 0,同時選擇乙個初始序號seq ...
TCP三次握手四次揮手
tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線。位碼即tcp標誌位,有6種標誌 urg urgent緊急 ack acknowledgement 確認 psh push傳送 rst...