計算機網絡 - 三次握手相關問題

通過一些問題來討論 TCP 協議中的三次握手機制

  • 說一下三次握手的大致過程?
  • 為什么需要三次握手?2 次不可以嗎?
  • 第三次握手,可以攜帶數據嗎?第二次呢?
  • 三次握手連接階段,最后一次ACK包丟失,會發生什么?

1. 說一下三次握手的大致過程

客戶端在與服務器建立 TCP 連接時首先會進行三次握手。

第一次握手:客戶端給服務端發送一個 SYN 報文,并指明客戶端的初始化序列號 ISN,此時客戶端處于 SYN_SEND 狀態

第二次握手:服務器收到客戶端的 SYN 報文后,會以自己的 SYN 報文作為應答,同時也指定了自己的 ISN,并把客戶端發來的 ISN + 1 作為 ACK 的值,表示自己已經收到了客戶端的 SYN,此時服務器處于 SYN_RCVD 狀態

第三次握手:客戶端收到 SYN 報文后,會將服務器發來的 ISN + 1 作為 ACK 報文發出,表示已經收到了服務端的 SYN 報文,此時客戶端處于 ESTABLISHED 狀態?

最后服務器收到 ACK 報文之后,也會處于 ESTABLISHED 狀態,到這里,雙方的連接就建立好了

第一次客戶端發送 SYN 包,證明自身發送能力正常

第二次服務端發送?SYN + ACK 包,證明自身發送能力和接受能力正常

第三次客戶端發送 ACK 包,證明自身接受能力正常

2.?為什么需要三次握手?2 次不可以嗎?

為什么 2次不可以,主要原因就是不可靠

第一是可能會有已經失效的連接請求報文傳送到服務端,引起連接錯誤

因為路徑堵塞或者其他原因,客戶端發送的請求報文可能要很久才能到服務端。在一定時間內,如果客戶端沒有收到來自服務端的回應報文,就會重新發送一份請求報文。這次報文很順利地到達服務端,不過緊接著,第一次發送的請求報文也來到了服務端,這個請求報文已經失效了。如果是二次握手建立連接的話,服務端接收到這個失效的請求報文后,就會建立連接,從而導致錯誤。

第二是服務端在正確收到客戶端的請求報文后,不能確定自己給客戶端發送的響應報文,對方是否收到(如網絡丟包)

導致服務端在等著客戶端發送數據,而客戶端等著服務端返回響應

那 4 次握手行嗎?

可以但沒必要,三次握手已經確認了建立連接需要的信息了,第四次握手不會帶來新的信息,只能使得這個過程更加冗余。

3.?第三次握手,可以攜帶數據嗎?第二次呢?

這個問題 RFC 文檔中提到過,第三次握手時,客戶端向服務端返回的報文中可以攜帶數據,即使此時服務端是 SYN_REVEIVED 狀態,但由于數據報中也帶有 ACK 的值,服務端接受之后會先確定這個 ACK,然后建立連接,進入 ESTABLISHED 狀態,之后就能正常接受這個數據包了

但需要多注意的是,一般情況下第三次握手的報文中是不會攜帶數據的,大多數情況都是客戶端在發生第三次握手的報文之后,不等服務端先接受,就接著發送正常通信的數據包。服務端先接受到第三次握手包之后建立連接,接著正常接受數據包。但假如由于網絡原因,客戶端發送的第三次握手包丟失了,但接著發送的數據包正常被服務端接收,由于這個數據包也帶有 ACK 的值,服務端就會把這個數據包當作第三次握手包,先建立連接再正常讀取數據。至于真正的第三次握手包,如果是丟失了的話就丟失吧,沒影響。如果由于網絡原因而比數據包后到達,服務端會直接忽略

TCP 的第一二次握手,都是不可以攜帶數據的。第一次握手不能的原因是防止惡意的握手請求。第二次不能是因為此時服務端只確認了客戶端的 “發生能力正常”,卻不知道接受能力是否正常,所以還不能攜帶數據

4.?三次握手連接階段,最后一次ACK包丟失,會發生什么?

這個需要分情況看,第三次握手的 ACK 包丟失后,客戶端有沒有繼續發送帶有 ACK 的數據包,如果有,還是可以建立連接的。

如果沒有,也就是服務端此時遲遲接收不到來自客戶端的 ACK,那么站在服務端的視角,有可能是第二次握手時給客戶端的 SYN + ACK 包丟失,也有可能是客戶端第三次握手的 ACK 包丟失。不管哪種情況,服務端此時只需重新進行第二次握手。也就是發送客戶端一份新的 SYN + ACK 包即可,客戶端收到后也會重新發送一份 ACK 報文,建立連接


誠懇歡迎大家提出意見

......(未完待續

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

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

相關文章

【RabbitMQ】核心概念和工作流程

文章目錄 RabbitMQ 工作流程流程圖 Producer 和 ConsumerConnecting 和 ChannelVirtual hostQueueExchangeRabbitMQ 工作流程 RabbitMQ 工作流程 流程圖 RabbitMQ 就是一個生產者/消費者模型 Producer 就是生產者、Consumer 就是消費者Broker 是 RabbitMQ 服務器生產者和消費…

龍虎榜——20250414

今天縮量上漲有些乏力,壓力位還在~ 2025年4月14日龍虎榜行業方向分析 一、核心主線方向 黃金與貴金屬(避險邏輯強化) ? 驅動邏輯:國際地緣沖突持續升溫(如中東局勢、臺海動態),疊加美國特朗普…

蔚來汽車智能座艙接入通義大模型,并使用通義靈碼全面提效

為加速AI應用在企業市場落地,4月9日,阿里云在北京召開AI勢能大會。阿里云智能集團資深副總裁、公共云事業部總裁劉偉光發表主題演講,大模型的社會價值正在企業市場釋放,阿里云將堅定投入,打造全棧領先的技術&#xff0…

探索 Go 與 Python:性能、適用場景與開發效率對比

1 性能對比:執行速度與資源占用 1.1 Go 的性能優勢 Go 語言被設計為具有高效的執行速度和低資源占用。它編譯后生成的是機器碼,能夠直接在硬件上運行,避免了 Python 解釋執行的開銷。 以下是一個用 Go 實現的簡單循環計算代碼: …

虛幻引擎 Anim To Tex| RVT | RT

本文上篇分為4個部分:動畫驅動材質,虛擬紋理,Rendertarget,以及其他雜項的地編ta干貨整理。(其中RT部分基本為UOD重要截圖摘錄) 本文下篇為:skylight和directional light的區別,未完…

kingbase權限管理

1. kingbase模式權限管理 1.1授予用戶對模式的權限 以具有足夠權限的用戶登錄后,執行以下 SQL 語句來授予用戶對模式的相應權限。假設你要授予用戶 your_user 對模式 your_schema 的使用權限: sql -- 授予用戶使用模式的權限 GRANT USAGE ON SCHEMA …

9.thinkphp的請求

請求對象 當前的請求對象由think\Request類負責,該類不需要單獨實例化調用,通常使用依賴注入即可。在其它場合則可以使用think\facade\Request靜態類操作。 項目里面應該使用app\Request對象,該對象繼承了系統的think\Request對象&#xff…

Java從入門到“放棄”(精通)之旅——方法的使用⑤

Java從入門到“放棄”(精通)之旅🚀——方法的使用⑤ 📖引言: 在編程領域,代碼如同精密的齒輪相互咬合驅動程序運轉。隨著項目規模漸長,重復的代碼片段如同冗余的齒輪,不僅增加負重…

鴻蒙NEXT開發格式化工具類(ArkTs)

import { i18n } from kit.LocalizationKit;/*** 格式化工具類* 提供電話號碼格式化、歸屬地查詢、字符轉換等功能。* author: 鴻蒙布道師* since: 2025/04/14*/ export class FormatUtil {/*** 判斷傳入的電話號碼格式是否正確。* param phone - 待驗證的電話號碼* param coun…

[Python基礎速成]2-模塊與包與OOP

上篇??[Python基礎速成]1-Python規范與核心語法 目錄 Python模塊創建模塊與導入屬性__name__dir()函數標準模塊 Python包類類的專有方法 對象繼承多態 Python模塊 Python 中的模塊(Module)是一個包含 Python 定義和語句的文件,文件名就是模…

OSI參考模型和TCP/IP模型

1.OSI參考模型 OSI模型: OSI參考模型有7層,自下而上依次為物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層。(記憶口訣:物聯網叔會用)。低…

linux Shell編程之循環語句(三)

目錄 一. for 循環語句 1. for語句的結構 2. for 語句應用示例 (1) 根據姓名列表批量添加用戶 (2) 根據 IP 地址列表檢查主機狀態 二. 使用 while 循環語句 1. while 語句的結構 2. while 語句應用示例 (1) 批量添加規律編號的用戶 (2) 猜價格游戲 三. until 循環語…

最新扣子實戰教程,利用扣子平臺通過在線表格記錄,批量生圖,再也不要一條條的粘貼提示詞了

1、功能描述 大家好,我是濤濤。今天我要給大家講解如何在扣子平臺上對接飛書電子表格。由于多維表格相對復雜,而很多業務場景其實只需要電子表格就能滿足,因此今天我們將演示如何在扣子平臺上讀取飛書電子表格并批量生成圖片。 先看效果&am…

java -jar指定類加載

在 Java 中,使用 java -jar 命令運行 JAR 文件時,默認會加載 JAR 文件的 MANIFEST.MF 文件中指定的 Main-Class。如果你想在運行時指定一個類來加載,可以通過以下方式實現: 方法 1:直接指定類路徑和類名 如果你不想使用…

多模態思維鏈(Multimodal Chain of Thought, MCoT)六大技術支柱在醫療領域的應用

多模態思維鏈(Multimodal Chain of Thought, MCoT)通過整合文本、圖像、視頻等多模態數據,結合邏輯推理與深度學習技術,在醫療領域展現出強大的應用潛力。其六大技術支柱在醫療場景中的具體應用如下: 一、推理構建視角:醫學診斷的流程優化 MCoT通過多模態推理鏈生成技術…

從文本到視頻:基于擴散模型的AI生成系統全解析(附PyTorch實現)

當語言遇見動態視覺 "用文字生成電影場景"曾是科幻作品中的幻想,如今借助擴散模型(Diffusion Models)正逐步成為現實。本文將手把手帶你實現一個創新的文本到視頻生成系統,通過深度解析擴散模型原理,結合獨…

科普:如何通過ROC曲線,確定二分類的“理論閾值”

在二分類問題中,已知預測概率(如邏輯回歸、神經網絡輸出的概率值)時,閾值的選擇直接影響分類結果(正/負樣本判定)。 一、實踐中的閾值選擇方法 1. 基于業務目標的調整 最大化準確率:適用于樣…

2025ArkTS基礎UI(一)——Column、Row、Text、Button組件

2025ArkTS基礎UI(一)——Column、Row、Text、Button組件 前言 臭寶們,今天我們來學習ArkTS基礎UI組件的使用,其中包括: Column、Row、Text、Button組件。 知識點 Colum、Row組件用于布局,Text、Image、Button組件用于展示。 …

強化學習:基于價值的方法做的是回歸,基于策略的方法做的是分類,可以這么理解嗎?

在強化學習領域,基于價值的方法(Value-based Methods)和基于策略的方法(Policy-based Methods)是兩種核心范式。本文將從目標函數、優化機制以及與機器學習任務的類比角度,探討這兩種方法是否可以被分別理解為回歸和分類任務,并深入分析其內在邏輯。 一、基于價值的方法…

折疊屏手機:技術進步了,柔性OLED面板測試技術需求跟上了嗎?

全球智能手機市場陷入創新焦慮,折疊屏手機被寄予厚望,2023 年出貨量同比增長 62%。但在供應鏈技術狂歡背后,存在諸多問題。消費端數據顯示,用戶使用頻率低,定價策略反常。產業鏈重構雖讓部分企業獲利,卻推高…