TCP為什麼需要三次握手?用最通俗的話解釋給你聽

2021.09.09

TCP實現原理和為什麼需要三次握手?兩次握手不可以?四次握手不可以?讀者可以帶著疑問,看一遍本篇博客的詳細講解。


TCP實現原理和為什麼需要三次握手?兩次握手不可以?四次握手不可以?讀者可以帶著疑問,看一遍本篇博客的詳細講解


ok,首先解釋原因之前還是要先複習一下TCP的基本知識和三次握手協議:

 

1、什麼是TCP協議?

TCPTransmission Control Protocol翻譯過來就是傳輸控制協議,TCP協議是一個面向連接的、可靠的、基於字節流的傳輸層協議

 RFC 793TCP連接的定義:

 Connections:

 The reliability and flow control mechanisms described above require that TCPs initialize and maintain certain status information for each data stream.

The combination of this information, including sockets, sequence numbers, and window sizes, is called a connection.

其大致意思是TCP連接是為了用於保證可靠性和流控制機制的,包括 Socket、序列號及窗口大小。

其中Socket是由IP加端口組成的,序列號是用來解決亂序問題的,而窗口大小則是用來做流量控制的。

 

2TCP協議的特性

面向連接:是指TCP是通過服務端和客戶端進行連接的協議

面向字節流:TCP服務端和客戶端之間的數據通訊是通過字節流數據傳輸的

可靠的:是指TCP服務端客戶端之間的數據傳輸是很穩定的,即使網絡很差的情況,TCP都能保證將數據傳輸到接收方。


psTCP傳輸的可靠性得益於TCP會記錄信息的發送狀態,哪些數據收到了,哪些數據沒收到,TCP都是會記錄的,然後哪些丟包的情況,就是發送不成功的情況,TCP會重新發包,所以TCP的可靠性就是這麼保證的

 

3TCP三次握手執行流程

TCP的三次握手執行過程是面試中的一個很常見的問題,因為這個問題也是計算機的一個很重要的基礎,所以需要認真學習


關鍵字說明:

 SYNSynchronize Sequence Numbers,同步序列編號

ACKAcknowledge Character,確認字符

SEQSequence Number,序列號

TCP三次握手執行過程:

  • 首先,服務端和客戶端都是處於CLOSED狀態的,然後服務端啟動,監聽端口,狀態變為LISTEN(監聽)狀態
  • 客戶端為了請求資源,發送連接,發送同步序列號SYN,此時客戶端就變成了SYN-SEND狀態
  • 服務端接收到客戶端請求之後,發送SYNACK,然後服務端狀態就變成SYN-RCVD狀態
  • 客戶端接收到信息之後,再次發送ACK,然後變成ESTABLISHED(已確認)狀態,服務端接收到返回信息後,狀態也變成ESTABLISHED(已確認)狀態


4TCP協議為什麼需要三次握手?

ok,知道了TCP的三次握手的基本工作原理之後,就可以解釋為什麼TCP需要三次握手?為什麼不設計成兩次握手就可以?

 

原因:避免重複連接

其實在RFC 793 Transmission Control Protocol裡就有指出為什麼要三次握手的原因

 

The principle reason for the three-way handshake is to prevent old duplicate connection initiations from causing confusion.

翻譯為中文大致意思是主要原因是為了防止舊的重複連接引起連接混亂問題

 比如在網絡環境比較複雜的情況,客戶端可能會連續發送多次請求。如果只設計成兩次握手的情況,服務端只能一直接收請求,然後返回請求信息,也不知道客戶端是否請求成功。這些過期請求的話就會造成網絡連接的混亂。

 所以設計成三次握手的情況,客戶端在接收到服務端SEQ+1的返回消息之後,就會知道這個連接是歷史連接,所以會發送報文給服務端,告訴服務端。

 所以TCP設計成三次握手的目的就是為了避免重複連接。

 然後可以設計成四次握手?五次握手?不可以?

 答案是也是可以的,不過為了節省資源,三次握手就可以符合實際情況,所以就沒必要設計成四次握手、五次握手等等情況