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

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

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

1、什麼是TCP協議?

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

RFC 793對TCP連接的定義:

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加端口組成的,序列號是用來解決亂序問題的,而窗口大小則是用來做流量控制的。

2、TCP協議的特性

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

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

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

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

3、TCP三次握手執行流程

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

關鍵字說明:

SYN:Synchronize Sequence Numbers,同步序列編號

ACK:Acknowledge Character,確認字符

SEQ:Sequence Number,序列號

TCP三次握手執行過程:

(1)首先,服務端和客戶端都是處於CLOSED狀態的,然後服務端啓動,監聽端口,狀態變爲LISTEN(監聽)狀態

(2)客戶端爲了請求資源,發送連接,發送同步序列號SYN,此時客戶端就變成了SYN-SEND狀態

(3)服務端接收到客戶端請求之後,發送SYN和ACK,然後服務端狀態就變成SYN-RCVD狀態

(4)客戶端接收到信息之後,再次發送ACK,然後變成ESTABLISHED(已確認)狀態,服務端接收到返回信息後,狀態也變成ESTABLISHED(已確認)狀態

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

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設計成三次握手的目的就是爲了避免重複連接。

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章