首先,我們要知道tcp是全雙工的,即客戶端在給伺服器端傳送資訊的同時,伺服器端也可以給客戶端傳送資訊。而半雙工的意思是a可以給b發,b也可以給a發,但是a在給b發的時候,b不能給a發,即不同時,為半雙工。 單工為只能a給b發,b不能給a發; 或者是只能b給a發,不能a給b發。
三次握手的過程:
三次握手的目的是建立可靠的通訊通道,說到通訊,簡單來說就是資料的傳送與接收,而三次握手最主要的目的就是雙方確認自己與對方的傳送與接收機能正常。
我們假設a和b是通訊的雙方。我理解的握手實際上就是通訊,發一次資訊就是進行一次握手。
在三次握手之後,a和b都能確定這麼一件事: 我說的話,你能聽到; 你說的話,我也能聽到。這樣,就可以開始正常通訊了。
第一次握手:client什麼都不能確認;server確認了對方傳送正常
第二次握手:client確認了:自己傳送、接收正常,對方傳送、接收正常;server確認了:自己接收正常,對方傳送正常
第三次握手:client確認了:自己傳送、接收正常,對方傳送、接收正常;server確認了:自己傳送、接收正常,對方傳送接收正常
第一次握手:
客戶端傳送乙個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
即syn就是詢問: 你能聽得到嗎? ack就是回到: 我能聽得到啊。
問:為什麼要傳送特定的資料報,隨便發不行嗎?
答:三次握手的另外乙個目的就是確認雙方都支援tcp,告知對方用tcp傳輸。
第一次握手:server 猜測client可能要建立tcp請求,但不確定,因為也可能是client亂髮了乙個資料報給自己
第二次握手:通過ack=j+1,client知道server是支援tcp的,且理解了自己要建立tcp連線的意圖
第三次握手:通過ack=k+1,server知道client是支援tcp的,且確實是要建立tcp連線
syn是標誌位,syn=1表示請求連線;
ack其實就是ack後面加上的那個數,真正傳送的時候不單獨發ack,只發ack
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後,它必須通知應用層另一端已經終止了那個方向的資料傳...