TCP連接為什麼只能是“3次握手”,不是2次,也不是4次?

引言

我們知道客戶端(Client)A 和服務器端(Server)B 的通信方式可分為:全雙工、半雙工、單工

  • 單工:A 可以發給 B ,B 不能發給 A ,叫做單工
  • 半雙工:A 可以發給 B , B 也可以發給 A ,但是兩者的步驟不能同時進行,即 A 給 B 發信息的時候,B 不能給 A 發。
  • 全雙工:即客戶端 A 在給服務器端 B 發信息的同時,服務器端 B 也可以給客戶端 A 發送信息。

TCP 屬於全雙工

TCP 的工作原理

下面小編就帶你們瞭解 TCP 的工作原理是啥?

由前面的知識我們學習到 TCP 有三次握手(前文參考: )。

TCP 的三次握手的示意圖:

TCP連接為什麼只能是“3次握手”,不是2次,也不是4次?

具體的含義理解可以這樣看:

1、第一次握手

客戶端想服務器發送一個 SYN 標誌位為1的包,以及初始序號X,包裝在包的頭的序列號字段裡。

客戶端進入 SYN_SEND 狀態,等待服務器端的確認。

2、第二次握手

服務器發回 ACK(確認包),即將SYN和ACK標誌位都命名為1,同時將序列號修改為X+1。

同時自己也發送了一個包,SYN包,序列號(seq =Y),即 SYN +ACK 包

此時服務器進入

SYN_RECV 狀態

3、第三次握手

客戶端接收到服務器發送過來的(ACK+SYN)包,SYN 標誌位為0。ACK 標誌位為1。

同時把服務器發過來的 ACK 包序列號字段+1並放在包中,發給服務器即 ACK=Y+1


通俗解釋

是不是覺得還是很難懂啊,那下面就給你舉個例子。

首先我們假設 A和B 是本次進行通信的雙方。 而發一次信息就代表著一次握手。

  • 第一次握手: A 給 B 發微信語音聊天,在嗎?能聽到我講話嗎?
  • 第二次握手:B 收到了 A 發來的微信語音通話,然後對A說:嗯,人在的,我能聽見你說的話,你能聽得見我說話嗎,有什麼事情?
  • 第三次握手: A 收到了 B 回覆回來的信息語音,我想問你一件事?

然後就開始愉快的聊天了。


兩次握手是否可以?

那我們接下來探究 兩次握手可不可以?

  • 第一次握手之後: 服務器端B 可以接收到客戶端A發來來的信息,但是對於客戶端A 來說,它並不能確定自己發送的消息有沒有成功。
  • 第二次握手之後: 服務端B 向客戶端A 發送的報文信息,服務器端B可以認為我發送的消息成功了。
  • 如果現在沒有第三次握手的話,服務器端B 在進行第二次握手之後,會認為我們的連接時成功的。

但是對於,客戶端A 呢?並不能保證一定能接收到服務器端B發來的信息吧,如果客戶端A沒接受到服務器端發來的信息呢?

客戶端就會認為我們之間的通信沒有建立起來。 這樣的通信過程顯然是不成功的。

如果存在大量的這種情況發生的話,服務器B 會發生崩潰的

看樣子僅僅兩次握手是不行的,完成不了 TCP 的通信工作原理。

兩次不行,那四次呢?

四次握手行不行?

我們根據上面的 TCP 通信原理可知道,經過三次握手之後,客戶端A 和服務器端B 都可以確認之前他們的所發送的消息,各自都能收到且報文也都成功發送給對方了。

依據上面那個結論可知道,你是四次握手還是五次握手,都是徒勞的。因為經過“三次握手”之後,把該做的事情都做完了。

結論

TCP 的三次握手是經典,計算機上的通信協議也都依據於 TCP 的三次握手和四次揮手。

因為計算機應用直接的通信依據於 HTTP 協議,而 HTTP 實質上是依靠 TCP 協議完成的,這個知識在前面說過。從而形成了:

  • TCP 只能是三次握手,不能是兩次,也不能是四次
  • 少於三次握手,不能保證是否建立了通信連接;
  • 多於三次握手,都是徒勞和浪費的。

我們看出經過三次握手之後,我們可以得出下面的結論:

  • A 可以給B發送消息了,同時A也能接受到B發來的信息;
  • 與此同時對於B而言,B也可以給A發送消息,同時B也能接收到A發來的消息。


分享到:


相關文章: