計算機網路中tcp的三次握手與四次揮手一直都不是很清楚,今天認真的學習了一下,在此記錄下來:
這裡a代表tcp客戶端程式(client),b代表tcp伺服器程式,最初兩者都是處於cloae(關閉)狀態。現在a先開啟連線,b被動開啟連線 ,b的tcp伺服器程序先建立傳輸控制塊tcb,準備接收客戶端程序的連線,並處於listen(收聽狀態):
(1)第一次握手:a的tcp客戶程序也先建立傳輸控制塊tcb,然後a首次傳送同步位(syn=1),序列號隨機數字x(seq=x)的報文段,syn報文段不攜帶資料,但是要消耗乙個序列號。同時a進入syn-sent(同步傳送)狀態;
(2)第二次握手:b接收到a的報文段請求後,如果同意連線,著發出確認:syn和ack都設定為1,序列號選擇另乙個隨機數seq=y,確認號為ack=x+1。此報文也是不能攜帶資料,同樣消耗了乙個序號。這時b處於syn-rcvd(同步接收狀態)
(3)第三次握手:a收到收到b的確認後,還要給b傳送確認。確認報文段的ack=1,確認號ack=y+1,自己的序號seq=x+1,ack報文段可以攜帶資料,如果不攜帶則不消耗序號。這時a和b的tcp連線已經建立,a進入established(已建立連線)狀態。
b收到a的確認後也進入established(已建立連線)狀態。
注意:ack和ack的區別:乙個是確認值(acknowledgement),為1便是確認連線;另乙個是確認編號(acknowledgement number),即接收到的上一次遠端主機傳來的seq然後+1,再傳送給遠端主機。提示遠端主機已經成功接收上一次所有資料。
為了防止已失效的報文又傳到了b。考慮這樣一種情況:假設a傳送了連線請求報文,丟失了沒有收到確認。再次傳送乙個請求,收到確認並建立了tcp連線,資料傳輸結束後又釋放了tcp連線。但是第一次傳送的那個請求是在某個網路結點長期滯留了,但是在連線釋放以後的某個結點到達了b,b誤認為是a的一次新的連線請求,所以同意連線。並向a傳送確認,但是a並沒有傳送建立連線請求,所以不會理睬b,b卻一直等待a的資料,白白浪費了資源。
tcp釋放過程要複雜一些,現在a和b都處在建立連線的狀態:
(1)第一次揮手:a首先向b發出釋放報文,並停止傳送資料,釋放報文的首部控制位fin置1,序號seq=u(等於前面已經傳送過來的資料的最後乙個位元組的序號加1).這時a進入fin-wait-1(終止等待1)狀態,等待b的確認。
(2)第二次揮手:b收到釋放報文段後傳送確認,ack=1,確認號ack=u+1,序號seq=v(等於前面已經傳送過來的資料的最後乙個位元組的序號加1),然後b進入closewait(關閉)狀態。a到b的這個方向的連線就釋放了。這時tcp處於半關閉狀態,a已經沒有資料要傳送了,但是如果b還有資料要傳送,a仍然要接收。
(3)第三次揮手:a收到b的確認後就處於fin-wait-2(終止等待2)狀態,等待b發出釋放報文。當b的資料傳輸完了,就像a傳送釋放報文:fin=1,ack=1,seq=w(等於前面已經傳送過來的資料的最後乙個位元組的序號加1),b還必須重複上次已經傳送過的確認號:ack=u+1.這時a就進入到了last-ack(最後確認)狀態。等待a的確認。
(4)第四次揮手:a收到b的報文後,必須再傳送確認:ack=1,seq=u+1(fin報文要消耗乙個序號),ack=w+1。然後進入到time-wait(時間等待)狀態。此時連線還沒有被釋放掉,還需要經過乙個時間等待計時器(time-wait timer)設定成兩個最長報文壽命及2msl(maximum segment lifetime),時間到了a進入closed狀態。
b收到確認後也進入closed狀態。
以為連線的時候同步syn和確認ack可以同時傳送。但是揮手時,因為b有可能資料沒有傳輸完,終止fin和ack不能同時傳送。這樣就多出了一次揮手。
因為有可能a最後ack報文沒有傳送到b,b等待了一定時間會超時重傳,會再此傳送fin資訊,在2msl時間內,a可以收到fin做出響應。確保b可以正常進入close
Tcp三次握手與四次揮手
tcp三次握手 四次揮手 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 syn 同步序列編號 synchronize sequence numbers 第二次...
TCP三次握手與四次揮手
也許三次握手你會經常聽到,但你知道三次握手的真正意義嗎,為什麼需要三次握手呢?首先我們必須明白tcp是面向連線的協議,無論哪乙個方向在傳送資料之前,都必須先在雙方之間建立連線。這一點與udp協議是不一樣的,udp在傳送資料報之前是不需要建立連線的。建立tcp連線的過程中,通訊的雙方需要互相發報文進行...
tcp三次握手與四次揮手
一.tcp三次握手 簡述 a傳送乙個請求給b,b發回確認,然後a再加以確認,來回共3次 1 第一次握手 客戶端傳送syn包 syn x 到伺服器,並進入syn send狀態,等待伺服器確認。2 第二次握手 伺服器收到syn包之後,必須確認客戶的syn ack x 1 同時自己也傳送乙個syn syn...