TCP 連接管理 之 三次握手詳解

TCP 連接管理 之 三次握手詳解

(一)TCP三次握手詳細過程及狀態變化

1. 第一次握手(客戶端 → 服務器)
  • 報文標志位SYN=1(同步序列號),ACK=0(首次握手無確認)
  • 序列號:客戶端隨機生成初始序列號(例如 seq=x
  • 過程:客戶端發送SYN報文,進入SYN_SENT狀態
  • 狀態變化
    • 客戶端:CLOSEDSYN_SENT
    • 服務器:LISTEN(等待連接)
2. 第二次握手(服務器 → 客戶端)
  • 報文標志位SYN=1ACK=1(確認客戶端的SYN)
  • 序列號:服務器隨機生成初始序列號(例如 seq=y),確認號為 ack=x+1(第一次握手不攜帶數據,但SYN=1會消耗一個序列號)
  • 過程:服務器發送SYN+ACK報文,進入SYN_RCVD狀態
  • 狀態變化
    • 服務器:LISTENSYN_RCVD
    • 客戶端:保持SYN_SENT
3. 第三次握手(客戶端 → 服務器)
  • 報文標志位ACK=1SYN=0(非同步)
  • 序列號seq=x+1(收到的確認號),確認號為 ack=y+1(第二次握手不攜帶數據,但SYN=1會消耗一個序列號)
  • 過程:客戶端發送ACK報文,雙方進入ESTABLISHED狀態
  • 狀態變化
    • 客戶端:SYN_SENTESTABLISHED
    • 服務器:SYN_RCVDESTABLISHED

(二)連接建立后數據傳輸的序列號規則

1. 客戶端先發送數據
  • 客戶端發送數據
    • seq=x+1(第三次握手沒有數據部分,沿用第三次握手的序列號)
    • ack=y+1(保持對服務器序列號的確認)
  • 服務器響應ACK
    • seq=y+1(服務器初始序列號+1)
    • ack=x+1+數據長度(確認客戶端數據)
2. 服務器先推送數據
  • 服務器發送數據
    • seq=y+1(握手最后使用的序列號)
    • ack=x+1(第三次握手沒有數據部分,保持對客戶端序列號的確認)
  • 客戶端響應ACK
    • seq=x+1(客戶端初始序列號+1)
    • ack=y+1+數據長度(確認服務器數據)
3. 關鍵點總結
  1. 初始序列號:雙方隨機生成,防止歷史連接沖突。
  2. ACK確認機制:總是對已接收數據長度+1進行確認(期待下一個字節的序列號)。
  3. 數據傳輸:先發送數據的一方使用自己最后一次ACK的序列號作為起始值。

(三)TCP三次握手服務端資源建立的詳細過程

1. 服務端內核在第一次握手(收到客戶端的SYN報文)時為客戶端生成套接字
2. 詳細過程分析

① 第一次握手前(服務端狀態:LISTEN

  • 服務端調用listen()后,進入LISTEN狀態,此時僅有一個監聽套接字(Listening Socket),用于接收所有客戶端的連接請求。
  • 監聽套接字不直接關聯具體客戶端,而是等待SYN報文觸發新連接。

② 第一次握手(客戶端發送SYN,服務端收到)

  • 內核動作
    當服務端內核收到客戶端的SYN報文(標志位SYN=1)時,會立即創建一個普通套接字(Socket),稱為未完成連接套接字(Incomplete Connection Socket),并進入SYN_RCVD狀態。

    該套接字記錄客戶端的IP、端口、初始序列號(client_isn)等信息。
    此時套接字尚未完全建立(未通過第三次握手),但已占用資源(進入了半連接隊列)。

  • 為什么此時生成?

    資源預留:為防止SYN Flood攻擊,內核需要限制半連接隊列大小(net.ipv4.tcp_max_syn_backlog)。
    狀態跟蹤:服務端需維護客戶端的seq和連接狀態,以完成后續握手。

③ 第二次握手(服務端發送SYN+ACK

  • 服務端使用新生成的套接字發送SYN+ACKseq=server_isn, ack=client_isn+1),但仍處于SYN_RCVD狀態。
  • 此時套接字仍在半連接隊列中,等待客戶端的最終ACK

④ 第三次握手(客戶端發送ACK,連接完成)

  • 服務端收到ACK后,將套接字從半連接隊列移到全連接隊列(Accept Queue),狀態變為ESTABLISHED
  • 當服務端應用調用accept()時,從全連接隊列中取出該套接字,交給應用程序使用。
3. 總結
階段服務端動作套接字狀態
第一次握手前僅有監聽套接字(LISTEN無客戶端套接字
第一次握手收到SYN后,內核生成新套接字半連接隊列(SYN_RCVD
第三次握手后套接字移至全連接隊列,等待accept()可用的ESTABLISHED套接字

① 為什么不在第三次握手后再生成套接字?

  • 如果在第三次握手后才生成,服務端無法在第二次握手時發送SYN+ACK(需要記錄客戶端信息)。
  • 提前生成可確保資源分配和狀態跟蹤,但需防范SYN Flood攻擊(通過半連接隊列限制)。

② 半連接隊列 vs 全連接隊列

  • 半連接隊列(SYN Queue):存儲未完成三次握手的套接字(SYN_RCVD狀態),隊列大小由net.ipv4.tcp_max_syn_backlog參數決定。
  • 全連接隊列(Accept Queue):存儲已完成握手但未被accept()的套接字(ESTABLISHED狀態),隊列大小由backlog參數和net.core.somaxconn決定。

③ 如果第三次握手的ACK丟失怎么辦?

  • 服務端會重傳SYN+ACK(次數由net.ipv4.tcp_synack_retries控制),超時后刪除半連接套接字。

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

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

相關文章

day066-內容分發網絡(CDN)與web應用防火墻(WAF)

文章目錄0. 老男孩思想-老男孩名言警句1. 云產品日常管理2. 創建快照策略3. CDN 內容分發網絡3.1 添加域名3.2 配置CNAME3.3 測試3.4 CDN刷新/預熱3.5 命中率3.5.1 查看命中率3.5.2 CDN命中率低怎么辦?3.6 訪問控制3.7 流量限制4. WAF web應用防火墻4.1 使用WAF4.2 …

Redis高頻問題全解析

Q1: Redis為什么這么快? Redis速度快主要有四個核心原因。首先是基于內存操作,所有數據都存儲在內存中,避免了磁盤I/O的開銷,內存讀寫速度比磁盤快幾萬倍。其次采用單線程模型,避免了多線程環境下的線程切換和鎖競爭帶…

【MATLAB】(三)數據類型與運算符

一.MATLAB的數據存儲類型一般而言,在 MATLAB 中數據的存儲與計算都是以雙精度進行的,但有多種顯示形式。在默認情況下,若數據為整數,就以整數表示;若數據為實數,則以保留小數點后4位的精度近似表示。用戶可以改變數字顯…

智能客服 VS 人工客服:電商企業該選哪種服務模式?

在數字化浪潮的推動下,電商企業對客戶服務的效率和質量提出了更高要求。智能客服與人工客服作為兩種主流服務模式,各有優劣。本文將從服務效率、成本投入、客戶體驗等維度,客觀分析兩者的特點,幫助電商企業做出合理選擇。一、服務…

前端基礎之《Vue(28)—Vue3 ref相關API》

ref相關API介紹1、ref()(1)ref介紹 ref用于定義基本數據類型,比如:string / boolean / number等(因為這幾個沒辦法代理)。 ref的背后是使用reactive來實現的響應式。 使用.value來訪問變量的值。&#xff0…

項目管理中如何避免延期?核心策略分析

在項目管理中避免延期,并非依賴于單一技巧,而是要構筑一個系統性的、多維度的防御體系。其核心策略涵蓋了:進行全面細致的前期規劃與估算、實施嚴格的范圍管理與變更控制、建立主動式全過程風險管理機制、維持高透明度的持續溝通、以及采用數…

【計算機視覺與代碼大模型全景解析:從理論基礎到學習路線】

📘計算機視覺與代碼大模型全景解析:從理論基礎到學習路線📑 目錄1?? 摘要2?? 計算機視覺與大模型基礎理論??2.1 🧠 深度卷積神經網絡基礎原理??2.2 👁??🗨? 計算機視覺的技術發展與視覺圖靈概念…

力扣-104. 二叉樹的最大深度

題目鏈接 104. 二叉樹的最大深度 class Solution {public int maxDepth(TreeNode root) {if (root null)return 0;return Math.max(maxDepth(root.left), maxDepth(root.right)) 1;} }小結:秒了!!!

在超算平臺異構加速卡AI * 1卡的Ubuntu20.04環境下安裝docker服務(未成功)

為了使用dify,需要安裝docker服務,于是在超算平臺異構加速卡AI * 1卡的Ubuntu20.04環境下嘗試安裝docker服務 首先要看下系統是Ubuntu的哪個版本: cat /etc/os-release NAME"Ubuntu" VERSION"20.04.1 LTS (Focal Fossa)"…

[特殊字符] 深入解析String的不可變性:Java字符串設計的精妙之處

一、什么是String的不可變性? String的不可變性是Java語言中一個基礎但極其重要的概念。簡單來說:一旦一個String對象被創建,它的值就永遠不能被改變。任何看似"修改"字符串的操作,實際上都是創建了一個全新的String對象。 生活中的類比 想象一個刻在石頭上的文字…

基于FRP + ttyd 的遠程Web終端控制:無SSH環境下的救急方案

基于FRP ttyd 的遠程Web終端控制:無SSH環境下的救急方案一、背景:當遠程訪問陷入困境時二、方案:FRP內網穿透 ttyd Web終端三、操作步驟詳解(Linux環境)0. 前提條件1. 在被控服務器上創建工作目錄2. 下載必要的軟件3…

用 AI 自動生成口型同步視頻,短視頻內容也能一人完成

近幾年做跨境電商或內容運營的同學,應該都能感受到視頻內容正逐漸從“錦上添花”變成了“必選項”。尤其是 TikTok、Instagram Reels、Facebook 短視頻、甚至一些獨立站內嵌視頻講解頁,對帶講解、有人臉、自然語音的視頻內容都有顯著的轉化提升作用。但實…

全基因組關聯分析(GWAS)中模型參數選擇:MLM、GLM與FarmCPU的深度解析

全基因組關聯分析(GWAS)是識別與復雜性狀相關的遺傳變異的重要工具。然而,模型選擇不當會導致假陽性率升高或統計功效降低。本文將為大家介紹GWAS中如何選擇合適的模型參數,重點解析廣義線性模型(GLM)、混合線性模型(MLM)和FarmCPU三種主流模型的原理、區…

6.蘋果ios逆向-過ssl證書檢測-安裝SSL Kill Switch 3

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 內容參考于:圖靈Python學院 工具下載: 鏈接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

Tomcat,WebLogic等中間件漏洞實戰解析

1.tomactCVE-2017-12615首先啟動環境,這里所有的漏洞都是在vulhub中的然后去訪問我們的網站點擊打開哥斯拉去生成一個jsp木馬然后打開抓包,刷新一下頁面,修改put方法將我們的木馬上傳一下,這里需要在jsp后加一個/,來繞…

15、點云<—>深度圖轉換原理

* 定義虛擬相機分辨率. Width := 800 Height := 800* 定義一個系數用于在3D模型中計算圖像的邊緣 BorderFact := 1.5* 是否選擇鏡頭. IsTelecentric := false GenParamName := [lut,intensity,disp_pose_0,alpha_0,disp_background] GenParamValue := [hsi,coord_z,true,0.3,tr…

大疆無人機開發:MQTT 賦能機場系統集成的Java實戰之旅

目錄 集成實現步驟? 項目初始化? MQTT 連接配置? 大疆無人機與 MQTT 集成? 機場系統功能實現? 代碼實戰與案例分析? 示例代碼展示? 案例分析? 數據格式不匹配問題? 指令沖突問題? 性能優化與安全保障? 性能優化策略? 安全保障措施? 集成實現步驟? …

邏輯回歸詳解:從數學原理到實際應用

文章目錄一、邏輯回歸的核心思想:從線性到概率1. 線性回歸的局限與突破Sigmoid函數特性(代碼可視化):2. 邏輯回歸的預測公式二、損失函數:如何學習最優參數?1. 對數損失函數的數學定義損失函數解析&#xf…

粒子群優化算法(Particle Swarm Optimization, PSO) 求解二維 Rastrigin 函數最小值問題

前言 提醒: 文章內容為方便作者自己后日復習與查閱而進行的書寫與發布,其中引用內容都會使用鏈接表明出處(如有侵權問題,請及時聯系)。 其中內容多為一次書寫,缺少檢查與訂正,如有問題或其他拓展…

【GitHub Workflows 基礎(二)】深入理解 on、jobs、steps 的核心語法與執行邏輯

📘 GitHub Workflows 基礎(二):深入理解 on、jobs、steps 的核心語法與執行邏輯繼第一篇講完 .github/workflows/ 中多個工作流的結構后,本篇將深入 GitHub Actions 的核心三要素:on(觸發器&…