TCP為什么握手是三次,而揮手是四次

TCP(傳輸控制協議)使用三次握手(3WHS)來建立一個可靠的連接,并使用四次揮手(4WHS)來終止連接。以下是每個步驟的詳細解釋:

三次握手(3WHS)建立連接:

  1. SYN(同步序列編號)

    • 客戶端選擇一個初始序列號x,并發送一個帶有SYN標志的TCP段給服務器,請求建立連接。此時,TCP段的序列號字段設置為x。
  2. SYN-ACK(同步-確認)

    • 服務器收到客戶端的SYN段后,如果同意建立連接,則會發送一個SYN-ACK段作為響應。服務器選擇自己的初始序列號y,并在ACK(確認)字段中確認客戶端的序列號x+1(期望接收到的第一個字節的序列號)。同時,SYN標志位也被設置。
  3. ACK(確認)

    • 客戶端收到服務器的SYN-ACK段后,發送一個帶有ACK標志的TCP段給服務器,確認服務器的初始序列號。客戶端在ACK字段中填入y+1。

完成這三個步驟后,TCP連接就成功建立,客戶端和服務器可以開始發送數據。

為什么需要三次握手:

  • 防止已失效的連接請求報文段突然傳到服務器,因而產生錯誤:如果使用兩次握手,服務器端收到一個舊的連接請求并響應,可能會導致服務器錯誤地建立一個新連接。
    例子:
  • 允許雙方確認彼此的初始序列號:三次握手確保了客戶端和服務器都能夠確認對方的接收能力和發送能力。

四次揮手(4WHS)終止連接:

  1. FIN(結束)

    • 當一方完成數據傳輸并希望關閉連接時,它發送一個帶有FIN標志的TCP段,表示已經沒有數據要發送了。
  2. ACK(確認)

    • 對方收到FIN段后,發送一個ACK段確認這個FIN。
  3. FIN(結束)

    • 對方完成數據傳輸后,也發送一個帶有FIN標志的TCP段。
  4. ACK(確認)

    • 最初發送FIN的一方收到這個FIN段后,發送最后一個ACK段確認。

完成這四個步驟后,TCP連接被關閉。

為什么需要四次揮手:

  • TCP連接是全雙工的:意味著數據可以在兩個方向上獨立傳輸。因此,每個方向上的連接都需要單獨關閉。
  • 確保數據傳輸完成:四次揮手允許一方在關閉自己的發送部分后,仍然接收來自對方的剩余數據。

上述為什么要三次握手第一個原因的理解

為什么TCP連接建立需要三次握手,而兩次握手可能不足以防止"已失效的連接請求"的問題。

假設場景:

假設客戶端A想要與服務器B建立TCP連接,但是客戶端A發送的第一個連接請求(SYN)在網絡中延遲了,沒有立即到達服務器B。

第一次握手(SYN):
  • 客戶端A發送一個SYN報文(假設序列號為1000)給服務器B,請求建立連接。
網絡延遲:
  • 這個SYN報文在網絡中延遲,沒有立即到達服務器B。
第二次握手(SYN+ACK,如果是兩次握手):
  • 假設我們只使用兩次握手,客戶端A在發送第一個SYN報文后,由于沒有收到響應,會重新發送另一個SYN報文(假設序列號為2000)。
第三次握手(ACK,如果是兩次握手):
  • 服務器B最終收到了第二個SYN報文(序列號2000),并發送了一個SYN+ACK報文作為響應,同意建立連接。
延遲的報文到達:
  • 此時,客戶端A收到了服務器B的SYN+ACK報文,并發送了一個ACK報文確認,完成了兩次握手過程。但是,之前延遲的第一個SYN報文(序列號1000)現在終于到達了服務器B。
問題出現:
  • 如果服務器B在兩次握手后沒有收到客戶端A的最終ACK確認,它可能會認為連接沒有成功建立。因此,當服務器B收到延遲的SYN報文(序列號1000)時,它可能會錯誤地認為客戶端A又發送了一個新的連接請求,并嘗試重新建立一個新的連接。
三次握手的作用:
  • 通過三次握手,即使客戶端A的第一個SYN報文(序列號1000)延遲到達,服務器B也不會錯誤地建立一個新的連接。這是因為:
    • 服務器B在收到第一個SYN(1000)后,會發送一個SYN+ACK(期望收到1000+1=1001),等待客戶端的確認。
    • 客戶端A收到這個SYN+ACK后,會發送一個ACK(確認1001),但由于客戶端A實際上發送的是序列號2000,所以這個ACK不匹配服務器B的期望。
    • 服務器B收到不匹配的ACK后,會知道這不是對它發出的SYN+ACK的響應,因此不會錯誤地建立一個新的連接。

通過這個例子,你可以看到三次握手如何確保即使在網絡延遲或重傳的情況下,連接的建立也是可靠和有序的。它防止了因為舊的或延遲的連接請求而導致的不必要的連接建立,確保了服務器不會對已經失效或過時的連接請求做出響應。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23982.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23982.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23982.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

solidity的modifier修飾符

solidity的modifier修飾符 什么是modifier修飾符 修飾器(modifier)是solidity特有的語法,類似于面向對象編程中的decorator,聲明函數擁有的特性,并減少代碼冗余。 Solidity 中關鍵字 modifier 用于聲明一個函數修改…

electron調用dll時應用程序閃退

electron調用dll時,直接閃退,且用如下方式監聽無任何輸出: window-all-closed 或 will-quit 此時需要檢查傳給dll的參數及參數類型是否正確,特別是使用ffi-napi時調用dll,使用 ref-napi定義類型,經常容易…

go 源碼學習1:scanner學習

scanner所在包是scanner.go type scanner struct {// 步驟是一個函數,用于執行下一個轉換。// 也嘗試使用整數常量和單個函數以及帶有開關的函數,// 但是直接使用函數在64位Mac Mini上快了10%,// 而且閱讀起來更直觀。step func(*scanner, …

域名區分英文大小寫嗎?

在互聯網的早期,域名系統(DNS)的設計并沒有考慮大小寫敏感性。然而,隨著技術的發展和用戶需求的多樣化,域名的大小寫問題逐漸引起了人們的關注。本文將探討域名是否區分英文大小寫,以及這一特性對網站運營和用戶體驗的影響。 一、…

【Android】Git Patch生成的文件怎么合并到項目里面和遇到的一些問題

前言 Git patch是一種描述文件,它記錄了一系列的文件變更(如新增、修改、刪除)以及變更的具體內容。通過使用patch文件,可以將這些變更應用到其他代碼庫中,從而實現代碼的同步和更新。 Git 提供了兩種補丁方案&#…

Java使用OpenCV計算兩張圖片相似度

業務:找出兩個表的重復的圖片。 圖片在表里存的是二進制值,存在大量由于一些特殊情況例如掃描有差異,導致圖片存的二進制值不同,但圖片其實是一樣來的。 所以找出兩個表重復相同的圖片,不可能只是單純的比較二進制值…

flask招聘數據分析及展示平臺-計算機畢業設計源碼39292

目 錄 摘要 1 緒論 1.1研究意義 1.2國內外研究進展 1.3flask框架介紹 2 1.4論文結構與章節安排 3 2 招聘數據分析及展示平臺分析 4 2.1 可行性分析 4 2.2 系統流程分析 4 2.2.1數據增加流程 5 2.3.2數據修改流程 5 2.3.3數據刪除流程 5 2.3 系統功能分析 5 2.3.1 功能性分…

亞馬遜新品如何快速吸引流量?自養號測評助賣家一臂之力

在亞馬遜平臺上每天都會有大量的新品推出,而這些新品中有部分可能并沒有什么流量和訂單,有些可能上架后立馬就能獲得流量了,那么亞馬遜上新品一般幾天出單? 一、亞馬遜上新品一般幾天出單? 亞馬遜上新品出單的時間因…

DispatcherTimer應用

DispatcherTimer 是 WPF 中用于執行定時任務的類,用于在指定的時間間隔內執行任務。它與 UI 線程的 Dispatcher 相關聯,因此可以用來更新 UI 元素,而不必擔心線程安全問題。 關鍵特性: 線程安全:DispatcherTimer 確保…

人工智能時代,想轉型AI產品經理?這篇文章你不應該錯過

前言 在這個日新月異的智能時代,人工智能(AI)已經從未來概念轉變為推動各行各業發展的核心驅動力。作為連接技術與市場的橋梁,AI產品經理的角色愈發關鍵,他們不僅是技術的翻譯者,更是創新的推動者。如果你…

Mintegral解析休閑游戲如何靠創意素材吸引玩家

核心玩法簡單清晰、容易讓人無限上頭的休閑游戲,玩法機制一般比較明確、簡單,如果要在短時間內吸引玩家注意,除了完整展示游戲流程以外,開發者需要在素材中設置更多亮點性的內容,如吸睛的劇情、爆炸性的視聽效果等元素…

組件的注冊和引用

在Vue中,開發者可以將頁面中獨立的、可重用的部分封裝成組件,對組件的結構,樣式和行為進行設置。組件是 Vue 的基本結構單元,組件之間可以相互引用。 一.注冊組件 當在Vue項目中定義了一個新的組件后,要想在其他組件中…

Vue3_對接騰訊云COS_大文件分片上傳和下載

目錄 一、騰訊云后臺配置 二、安裝SDK 1.script 引入方式 2.webpack 引入方式 三、文件上傳 1.new COS 實例 2.上傳文件 四、文件下載 騰訊云官方文檔: 騰訊云官方文檔https://cloud.tencent.com/document/product/436/11459 一、騰訊云后臺配置 1.登錄 對…

[職場] 為什么不能加薪? #學習方法#知識分享#微信

為什么不能加薪? 不能加薪的根本原因,終于被我找到了! 朋友們!職場這個地方是個很神奇的世界,有些規則并不是你想象的那樣。我們都希望能在這個世界里施展自己的才華,獲得升職加薪的榮耀。然而&#xff0c…

seerfar丨OZON運營工具,OZON選品插件

隨著全球電商市場的蓬勃發展,OZON作為俄羅斯及東歐地區的重要電商平臺,吸引了眾多中國商家的目光。然而,如何在OZON平臺上脫穎而出,實現高效的商品運營,成為了眾多商家亟待解決的問題。在這樣的背景下,seer…

tailwindcss的@apply使用

tailwindcss的apply是把在html寫的tailwindcss可以挪到style里面 簡化頁面的可讀性 沒寫之前的 <section class"block-risk absolute flex flex-col items-center p-4 text-center left-0 text-white;" :style"{ top, left: 60px }"> </section…

淺析軟件開發技術的發展歷程與展望

隨著信息技術的飛速發展&#xff0c;軟件開發技術也在不斷演進。本文旨在深入探討軟件開發技術的發展歷程&#xff0c;并分析其未來的發展趨勢和展望。 軟件開發技術的發展歷程 在回顧軟件開發技術的發展歷程時&#xff0c;我們不禁驚嘆于這一領域的飛速進步。從早期的手工編寫…

被拖欠6000萬,代工大廠倒閉了····

6月7日消息&#xff0c;據綜合媒體報道&#xff0c;電子煙代工大廠佳斯特電子&#xff08;東莞&#xff09;發布公告&#xff0c;將自6月3日起停止一切經營活動&#xff0c;開始自行清算工作。根據佳斯特電子科技&#xff08;東莞&#xff09;有限公司的通告&#xff0c;由于公…

pyqt6 任務欄不顯示設置的icon

添加這段代碼即可解決 import ctypes myappid mycompany.myproduct.subproduct.version ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)

TypeScript環境安裝與VScode編輯器的使用

說明大背景環境&#xff0c;我用的是window10系統。 1.安裝node.js 。 去官網下載安裝包。 雖然我去的是官網&#xff0c;但是不知為何下載了個不知名的東西&#xff0c;后來又找了個鏈接才下載正確了。 實際上就是一個.msi的文件。我用的版本&#xff1a;node-v18.19.0-x6…