TCP/IP三次握手的過程,為什么要3次?

一:過程

第一次(SYN):

客戶端發送一個帶有SYN標志的TCP報文段給服務器,設置SYN=1,并攜帶初始序列號Seq=x(隨機值),進入SYN_SENT狀態。等待服務器相應。

第二次(SYN+ACK):

服務器收到客戶端發送的SYN報文段后,如果同意建立連接,會發送報文段給客戶端:

設置SYN=1,攜帶服務器的初始序列號Seq=y(隨機值)。

設置ACK=1,確認號Ack=x+1,表示已收到客戶端的Seq=x。

服務器進入SYN_RVCD狀態。

第三次(ACK):

客戶端收到服務器發送的SYN+ACK報文段后,會發送報文段給服務器:

設置ACK=1,確認號Ack=y+1,表示已收到服務器的Seq=y。

序列號Seq=x+1,繼續之前的序列。

客戶端進入ESTABLISHED狀態。

收到客戶端的ACK后,服務器也進入ESTABLISHED狀態,連接建立成功,可以開始進行數據傳輸。

二:為什么要3次?

1.確認雙方都能發送和接收數據:

第一次握手確認客戶端的發送能力和服務器的接受能力。

第二次握手確認服務器的發送能力和客戶端的接受能力。

第三次握手確認客戶端的發送能力和服務器的接受能力。

2.防止舊的連接請求誤導對方:

通過三次握手,雙方都能確認對方的狀態是最新的,有效避免了網絡中舊的、延遲的SYN包造成的錯誤連接。

3.防止重復數據包干擾:

三次握手確保雙方都能有效處理重復的數據包,并建立一個唯一的連接。

三:為什么不是2次?

無法確認雙向通信

TCP是全雙工協議,需要確保客戶端和服務器都能發送和接收數據。

兩次握手過程:客戶端->SYN->服務器? 服務器->ACK->客戶端

問題
服務器發送ACK后,認為連接已建立,但客戶端可能未收到ACK(比如網絡丟包)。

服務器無法確認客戶端是否收到ACK。

后果

服務器單方面認為連接成功,可能開始發送數據,而客戶端未準備好,導致數據丟失。

無法同步服務器的序列號

TCP使用序列號確保數據按序傳輸。

兩次握手中,服務器的ACK只確認了客戶端的序列號(x),但未發送自己的序列號(y)。

問題:客戶端無法知道服務器的初始序列號,后續數據傳輸可能因為序列號不同步而混亂。

后果缺乏雙向序列號同步,無法保證可靠傳輸。

無法防止舊連接干擾

網絡中可能存在延遲的舊數據包,比如之前的SYN。

兩次握手時:

客戶端發送舊SYN,服務器收到后返回ACK。

服務器認為連接建立,但客戶端未發送新連接。

問題:兩次握手無法區分新舊連接,服務器可能誤處理舊包。

后果舊數據干擾新連接,導致不可靠性。

四:為什么不是四次握手?

四次也可以,但是多余,效率低。

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

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

相關文章

消息隊列性能比拼: Kafka vs RabbitMQ

本內容是對知名性能評測博主 Anton Putra Kafka vs RabbitMQ Performance 內容的翻譯與整理, 有適當刪減, 相關數據和結論以原作結論為準。 簡介 在本視頻中,我們將首先比較 Apache Kafka 和傳統的 RabbitMQ。然后,在第二輪測試中,會將 Kaf…

打磨和修改:字帖自動生成

功能增加一些。 一個人和大語言模型對話的結果。 不過是重復性勞動,特別需要創意的地方還是不容易做到。

電腦干貨:萬能驅動--EasyDrv8

目錄 萬能驅動EasyDrv8 功能介紹 主程序界面 驅動解壓與安裝 PE環境支持 系統部署環境 桌面環境一鍵解決方案 萬能驅動8電腦版是由IT天空出品的一款智能識別電腦硬件并自動安裝驅動的工具,一般又稱為it天空萬能驅動,萬能驅動vip版,簡稱…

LeetCode熱題100JS(79/100)第十五天|347|295|121|55|45

347. 前 K 個高頻元素 題目鏈接:347. 前 K 個高頻元素 難度:中等 刷題狀態:1刷 新知識: 解題過程 思考 示例 1: 輸入: nums [1,1,1,2,2,3], k 2 輸出: [1,2] 沒思路,看答案 題解分析 參考題解鏈接&#xff1a…

Sentinel 限流利器(功能以及源碼解析)

Sentinel簡介 Sentinel是阿里開源的一款面向分布式、多語言異構化服務架構的流量治理組件。 主要以流量為切入點,從流量路由、流量控制、流量整形、熔斷降級、系統自適應過載保護、熱點流量防護等多個維度來幫助開發者保障微服務的穩定性。 核心概念 資源 資源是…

子數組 之 logTrick算法,求解或,與,LCM,GCD

文章目錄 gcd的問題最大公約數 求解子數組的&,|,lcm,gcd的最值or計數問題,如果采用暴力的做法,那么時間復雜度會來到o(n^2),其實在求解的過程中,會出現很多的結果不變的情況,所以我們就可以提前結束 存在一定的單調性&#x…

How to use pgbench to test performance for PostgreSQL?

pgbench 是一個用于測試 PostgreSQL 數據庫性能的基準測試工具。通過模擬多個客戶端并發執行 SQL 查詢,它可以幫助你評估數據庫的性能。以下是使用 pgbench 的基本步驟: 安裝 pgbench pgbench 是 PostgreSQL 的一部分,因此在安裝 PostgreSQ…

應用服務接口第二次請求一直pending問題

目錄 一、問題背景二、問題排查過程三、解決方案四、總結 一、問題背景 升級內容發布到灰度環境,驗證相關服務,查看接口調用日志,發現第一次請求正常,第二次相同接口請求就一直pending,其他服務也是如此 二、問題排查…

嵌入式八股RTOS與Linux---網絡系統篇

前言 關于計網的什么TCP三次握手 幾層模型啊TCP報文啥的不在這里講,會單獨分成一個計算機網絡模塊 ??這里主要介紹介紹lwip和socket FreeRTOS下的網絡接口–移植LWIP 實際上FreeRTOS并不自帶網絡接口,我們一般會通過移植lwip協議棧讓FreeRTOS可以通過網絡接口收發數據,具體可…

推薦一款好看的 vue3 后臺模板

SoybeanAdmin 項目簡介 SoybeanAdmin 是一個基于最新前端技術棧的清新、優雅、高顏值且功能強大的后臺管理模板。它采用 Vue3, Vite5, TypeScript, Pinia, NaiveUI 和 UnoCSS 構建,為開發者提供了一個現代化、高效且易于擴展的后臺管理系統解決方案。 主要特點&am…

【django】1-1 django構建web程序的基礎知識

文章目錄 1 構建web應用的基礎知識1.1 互聯網相關的概念1.2 互聯網協議DNS(域名系統)IP協議(互聯網絡協議)TCP(傳輸控制協議)HTTP(超文本傳輸協議)SSL(安全套接字層)TLS(傳輸層安全) 1.3 URL 2 web程序2.1 web程序的本質2.2 web框架的設計模式1.2.1 經典的MVC設計模式1.2.2 Dja…

【智能體】從一個聊天工作流了解LangGraph

1. 前言 這篇文章將從如何搭建一個帶網絡搜索功能的聊天機器人工作流,帶你初步了解 LangGraph。 2. 前提條件 已搭建 Python 開發環境,使用 3.11 以上版本。 已熟悉 Python 基礎語法。可參考:【LLM】Python 基礎語法_llm python入門-CSDN博…

JAVA開發:實例成員與靜態成員

判斷Java中的實例成員與靜態成員 在Java中,可以通過以下幾種方式判斷一個成員是實例成員還是靜態成員: 1. 通過聲明方式判斷 靜態成員使用static關鍵字修飾,實例成員不使用: public class MyClass {// 實例成員int instanceVa…

Softmax 回歸 + 損失函數 + 圖片分類數據集

Softmax 回歸 softmax 回歸是機器學習另外一個非常經典且重要的模型,是一個分類問題。 下面先解釋一下分類和回歸的區別: 簡單來說,分類問題從回歸的單輸出變成了多輸出,輸出的個數等于類別的個數。 實際上,對于分…

MySQL-存儲過程

介紹 基本語法 創建 調用 查看 刪除 變量 系統變量 查看 設置 用戶定義變量 賦值 使用 局部變量 聲明 賦值 流程控制 參數 條件結構 IF case 循環結構 while repeat loop 游標 條件處理程序 介紹 舉個簡單的例子,我們先select某數據&…

使用 Go 和 Gin 實現高可用負載均衡代理服務器

前言 在現代分布式系統中,負載均衡是保障服務高可用性和性能的核心技術。本文將基于 Go 語言和 Gin 框架實現一個支持動態路由、健康檢查、會話保持等特性的企業級負載均衡代理服務器,并提供完整的壓力測試方案和優化建議。 通過本方案實現的負載均衡代理具備以下優勢: 單…

在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服務器,并實現遠程聯機,詳細教程

Linux 部署 MineCraft 服務器 詳細教程(丐版,無需云服務器) 一、虛擬機 Ubuntu 部署二、下載 Minecraft 服務端三、安裝 JRE 21四、安裝 MCS manager 面板五、搭建服務器六、本地測試連接七、下載櫻花,實現內網穿透,邀…

批量取消 PDF 文檔中的所有超鏈接

在 PDF 文檔中我們可以插入各種各樣的文本也可以給文本設置字體,顏色等多種樣式,同時還可以給文字或者圖片添加上超鏈接,當我們點擊超鏈接之后,就會跳轉到對應的網頁。有時候這會對我們的閱讀或者使用形成一定的干擾,今…

Ubuntu xinference部署本地模型bge-large-zh-v1.5、bge-reranker-v2-m3

bge-large-zh-v1.5 下載模型到指定路徑: modelscope download --model BAAI/bge-large-zh-v1.5 --local_dir ./bge-large-zh-v1.5自定義 embedding 模型,custom-bge-large-zh-v1.5.json: {"model_name": "custom-bge-large…

Vue的實例

Every Vue application starts with a single Vue component instance as the application root. Any other Vue component created in the same application needs to be nested inside this root component. 每個 Vue 應用都以一個 Vue 組件實例作為應用的根開始。在同一個應…