這是乙個很有意思的問題~
首先,我們要知道tcp是全雙工的,即客戶端在給伺服器端傳送資訊的同時,伺服器端也可以給客戶端傳送資訊。而半雙工的意思是a可以給b發,b也可以給a發,但是a在給b發的時候,b不能給a發,即不同時,為半雙工。 單工為只能a給b發,b不能給a發; 或者是只能b給a發,不能a給b發。
我們假設a和b是通訊的雙方。我理解的握手實際上就是通訊,發一次資訊就是進行一次握手。
第一次握手: a給b打**說,你可以聽到我說話嗎?
第二次握手: b收到了a的資訊,然後對a說: 我可以聽得到你說話啊,你能聽得到我說話嗎?
第三次握手: a收到了b的資訊,然後說可以的,我要給你發資訊啦!
在三次握手之後,a和b都能確定這麼一件事: 我說的話,你能聽到; 你說的話,我也能聽到。 這樣,就可以開始正常通訊了。
如果兩次,那麼b無法確定b的資訊a是否能收到,所以如果b先說話,可能後面的a都收不到,會出現問題 。
如果四次,那麼就造成了浪費,因為在三次結束之後,就已經可以保證a可以給b發資訊,a可以收到b的資訊; b可以給a發資訊,b可以收到a的資訊。
那麼三次握手在正式情況下都做了什麼呢?
第一次握手:
客戶端傳送乙個tcp的syn標誌位置1的包指明客戶打算連線的伺服器的埠,以及初始序號x,儲存在包頭的序列號(sequence number)欄位裡
第二次握手 :
伺服器發回確認包(ack)應答。即syn標誌位和ack標誌位均為1同時,將確認序號(acknowledgement number)設定為客戶的i s n加1以.即x+1。
第三次握手:
客戶端再次傳送確認包(ack) syn標誌位為0,ack標誌位為1.並且把伺服器發來ack的序號欄位+1,放在確定欄位中傳送給對方.並且在資料段放寫isn的+1
tcp四次揮手的過程:
四次揮手:
a:「喂,我不說了 (fin)。」a->fin_wait1
b:「我知道了(ack)。等下,上一句還沒說完。balabala…..(傳輸資料)」b->close_wait | a->fin_wait2
b:」好了,說完了,我也不說了(fin)。」b->last_ack
a:」我知道了(ack)。」a->time_wait | b->closed
a等待2msl,保證b收到了訊息,否則重說一次」我知道了」,a->closed
這樣,通過四次揮手,可以把該說的話都說完,並且a和b都知道自己沒話說了,對方也沒花說了,然後就掛掉**(斷開鏈結)了 。
tcp 四次揮手 TCP的三次握手和四次揮手
三次握手 第一次握手 客戶端傳送syn包 syn x 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack x 1 同時自己也傳送乙個syn包 syn y 即syn ack包,此時伺服器進入syn recv狀態 第三次握手 客戶端收到伺服...
TCP三次握手和四次揮手
一 tcp三次握手 three way handshake 1 tcp三次握手的作用 三次握手的目的是連線伺服器指定埠,建立tcp連線,並同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。在socket程式設計中,客戶端執行connect 時,將觸發三次握手。2 tcp三次握手過程 第一步 ...
TCP三次握手和四次揮手
三次握手 四次揮手 需四次揮手原因 由於tcp的半關閉特性,tcp連線時雙全工 即資料在兩個方向上能同時傳遞 因此,每個方向必須單獨的進行關閉。這個原則就是 當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向上的連線。當一端收到乙個fin後,它必須通知應用層另一端已經終止了那個方向的資料傳...