關於TCP三次握手的意義及其具體實現解釋


首先,最基本的三次操作方的說明如下:

  • 客戶端向服務端發送請求;客戶端 → 服務端
  • 服務端確認客戶端發送到來的請求;服務端 → 客戶端
  • 客戶端確認服務端發送到來的確認。客戶端 → 服務端

最顯淺的目的解釋如下:

  • 第一次握手:“你”是不是在監聽指定端口?
  • 第二次握手:“我”的確在監聽某個端口,“你”可以跟我建立連接。
  • 第三次握手:“我”收到了“你”的回復了,“你”做好准備吧。

要是認真思考過后,還不能理解上面的說法的話,你可能需要知道這些TCP協議實現的基本背景

  1. TCP是建立在IP協議之上的,而IP協議作為網絡層協議,並不保證每個發送的消息,都能到達目的IP;
  2. 網絡層協議不僅不保證每個數據能不能到達目標地址,而且並不保證你發送的順序,會更目標收到的順序相同;
  3. 服務端只是一個提供服務的個體,它跟客戶端的關系是一對多。
  4. TCP是全雙工的,a能到達b未必就是b能到達a。

為什么TCP需要這樣設計呢?

  1. 第一次握手的時候,TCP協議頭中會攜帶它發送的序列號a(以及窗口大小等,不過這是題外話),以確保服務端沒有回復的時候,它發出第二次(或者內容不一樣)請求的時候,能夠區別開;
  2. 第二次握手,服務端確認的同時,會攜帶上客戶端發過來的序列號(准確來說,這個時候已經叫確認號了,值為a+1),以及自己的發送序列號b;(“我”只確認a這個序列號的請求,其他序號的有可能丟失,有可能其他原因沒有收到的,“我”不管)
  3. 第三次,客戶端會攜帶上服務端發過來的序列號(此時也應稱為確認號,值為b+1),並且因為服務端剛才確認收到的是a數據,所以這次自己攜帶的序列號為a+1。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM