TCP為什麼需要三次握手?用最通俗的話解釋給你聽
TCP實現原理和為什麼需要三次握手?兩次握手不可以?四次握手不可以?讀者可以帶著疑問,看一遍本篇博客的詳細講解。
TCP實現原理和為什麼需要三次握手?兩次握手不可以?四次握手不可以?讀者可以帶著疑問,看一遍本篇博客的詳細講解
ok,首先解釋原因之前還是要先複習一下TCP的基本知識和三次握手協議:
1、什麼是TCP協議?
TCP:Transmission
Control Protocol翻譯過來就是傳輸控制協議,TCP協議是一個面向連接的、可靠的、基於字節流的傳輸層協議
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的三次握手執行過程是面試中的一個很常見的問題,因為這個問題也是計算機的一個很重要的基礎,所以需要認真學習
關鍵字說明:
ACK:Acknowledge
Character,確認字符
SEQ:Sequence
Number,序列號
TCP三次握手執行過程:
- 首先,服務端和客戶端都是處於CLOSED狀態的,然後服務端啟動,監聽端口,狀態變為LISTEN(監聽)狀態
- 客戶端為了請求資源,發送連接,發送同步序列號SYN,此時客戶端就變成了SYN-SEND狀態
- 服務端接收到客戶端請求之後,發送SYN和ACK,然後服務端狀態就變成SYN-RCVD狀態
- 客戶端接收到信息之後,再次發送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.
翻譯為中文大致意思是主要原因是為了防止舊的重複連接引起連接混亂問題