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設計成三次握手的目的就是為了避免重複連線。
然後可以設計成四次握手?五次握手?不可以?
答案是也是可以的,不過為了節省資源,三次握手就可以符合實際情況,所以就沒必要設計成四次握手、五次握手等等情況
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21472864/viewspace-2790798/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 白話TCP為什麼需要進行三次握手TCP
- 綜合解讀TCP為什麼三次握手TCP
- TCP/IP 為什麼要三次握手TCP
- 動畫:用動畫給面試官解釋 TCP 三次握手過程動畫面試TCP
- 說說TCP為什麼需要三次握手和四次揮手?TCP
- 用 Wireshark 圖解 TCP 三次握手圖解TCP
- 【Java面試】TCP協議為什麼要設計三次握手?Java面試TCP協議
- CCNA-Part5 - 傳輸層 ,TCP 為什麼是三次握手?TCP
- TCP連線為什麼三次握手和四次揮手TCP
- 通俗易懂的TCP“三次握手”與“四次揮手”TCP
- 為什麼必須使用三次握手?
- TCP 的 三次握手 四次握手TCP
- TCP三次握手原理TCP
- 可靠的TCP連線為何是三次握手TCP
- TCP的三次握手過程TCP
- 自己理解的TCP三次握手TCP
- TCP建立連線三次握手和釋放連線四次握手TCP
- 圖解TCP三次握手與四次分手圖解TCP
- 面試最常問的tcp三次握手策略面試TCP
- 圖解TCP的三次握手和四次揮手圖解TCP
- TCP的三次握手與四次揮手詳解TCP
- tcp三次握手和SYN攻擊TCP
- TCP三次握手四次分手TCP
- Wireshark除錯TCP三次握手流程除錯TCP
- TCP協議 連線三次握手TCP協議
- TCP:三次握手、四次握手、backlog及其他TCP
- 用最簡單的話告訴你什麼是ElasticSearchElasticsearch
- 最通俗的解釋下雲端計算,雲端計算的核心是什麼?
- 詳解TCP一:三次握手、四次揮手TCP
- 通俗易懂的解釋:什麼是APIAPI
- 在TCP三次握手後插入偽造的TCP包(轉)TCP
- 小白都能看懂的tcp三次握手TCP
- TCP的三次握手四次揮手TCP
- TCP的三次握手與四次分手TCP
- TCP三次握手的正確使用姿勢TCP
- 漫話:如何給女朋友解釋什麼是HTTPHTTP
- TCP/IP的三次握手與四次揮手詳解TCP
- TCP 的三次握手和四次揮手,瞭解泛洪攻擊麼TCP