【網絡】TCP常考知識點詳解

TCP報文結構

? ?

TCP報文由**首部(Header)數據(Data)**兩部分組成。首部包括固定部分(20字節)和可選選項(最多40字節),總長度最大為60字節。

1. 首部固定部分
  1. 源端口(16位)目的端口(16位)

    • 標識發送和接收的應用程序(如HTTP默認端口80)。

  2. 序列號(32位)

    • 表示當前報文段數據部分的第一個字節的序號,確保數據按序傳輸。

  3. 確認號(32位)

    • 期望收到的下一個字節的序號,表示接收方已正確接收之前的所有數據。

  4. 數據偏移(4位)

    • 指示首部長度(以4字節為單位)。例如,值為5表示首部長度20字節。

  5. 保留字段(6位)

    • 未使用,必須置0。

  6. 控制位(6位)

    • URG:緊急指針有效,優先處理緊急數據。

    • ACK:確認號有效(連接建立后通常為1)。

    • PSH:接收方應立即將數據推送給應用層。

    • RST:強制重置異常連接。

    • SYN:建立連接時同步序列號。

    • FIN:正常關閉連接。

  7. 窗口大小(16位)

    • 接收方的可用緩沖區大小,用于流量控制(滑動窗口機制)。

  8. 校驗和(16位)

    • 計算包括偽首部(源/目的IP、協議類型、TCP長度)、TCP首部和數據,確保數據完整性。

  9. 緊急指針(16位)

    • 當URG=1時有效,指向緊急數據的結束位置。

2. 選項部分(可變長度,最多40字節)
  • MSS(最大報文段長度):在三次握手時協商,避免IP分片。

  • 窗口擴大因子:擴展窗口大小(原16位窗口最大為65535)。

  • 時間戳:計算往返時間(RTT)和防止序列號回繞(PAWS機制)。

  • SACK(選擇性確認):允許接收方報告非連續接收的數據塊,提升重傳效率。

3. 填充字段
  • 確保首部長度是4字節的倍數。

4. 數據部分
  • 上層協議(如HTTP、FTP)傳遞的數據,長度由MSS和窗口大小共同決定。

TCP的特點

  1. 面向連接:TCP發送數據前需要通過三次握手建立全雙工通信,結束數據發送后通過四次揮手關閉連接
  2. 可靠性:TCP通過確認和重傳、快速重傳、擁塞控制、流量控制、有序性、超時重傳等機制確保數據可靠傳輸
    1. 確認和重傳:接收方收到數據后會發送確認ACK給發送方,若發送方經過超時時間未收到ACK,則會重傳
    2. 流量控制:接收方會通過滑動窗口(循環數組,用三個指針給他分區)的機制告訴發送方可接收數據的大小,避免發送方發送大量數據擁塞在接收方的緩沖區
    3. 擁塞控制:發送方根據網絡的擁塞情況動態調整發送速率,避免造成網絡擁塞
    4. 有序性:接收方根據TCP頭部的序列號重新對數據進行排序
  3. 頭部開銷大:TCP報文頭部(源/目的端口+**序列號/確認號**+首部長度+**標志位(SYN/ACK/FIN/RST)**+**窗口大小(RWND)**+校驗和),增加傳輸開銷
    • 源/目的端口 標識了應用進程;序列號和確認號可以進行確認和重傳,同時保證數據有序;
    • 標志位(指示TCP會話期間的特定狀態):**SYN-同步,ACK-確認數據包接收,FIN-結束**,RST-重置TCP連接,URG-緊急數據,PSH-立即推送數據,
  4. 全雙工通信:TCP協議允許通信雙方同時進行數據的發送和接收

TCP超時重傳

  • RTT(Round-Trip Time)往返時延:數據包在網絡中的往返時延(網絡波動造成RTT**動態變化**)
  • ?RTO(Retransmission Timeout)超時重傳時間:RTO應略大于RTT。太大會降低網絡的傳輸效率;小于RTT則會造成不必要的超時重傳,增大網絡負荷
  • 發送方在RTO內未收到ACK,說明網絡嚴重擁塞,發送方重置CWND(擁塞窗口)進行**慢啟動**,逐步增加發送量,降低網絡過載風險
  • 擁塞窗口CWND :發送方維護的變量,初始值默認為1 MSS(1460 Byte)
  • 慢啟動閾值_ssthresh:窗口增長模式的切換點;初始值較高(如接收方通告窗口大小)發生擁塞時動態調整
  • 慢啟動算法流程
    1. 初始化階段:TCP連接建立后/超時重傳后,set CWND= 1 MSS,ssthresh初始為較大值
    2. 指數增長階段:每收到一個和ack,cwnd增加1MSS(每個RTT內,CWND翻倍):
      1. 假設RTT固定100ms,初始CWND= 1 MSS
      2. 第0ms,發送一個報文 cwnd =1
      3. 第100ms:收到ack,cwnd=2(第100-200ms 發送2個報文)
      4. 第200ms:收到2個ack,每個ack觸發cwnd+1, cwnd=4(第200-300ms 發送四個報文)
      5. 第300ms:收到4個ack,cwnd=8;
    3. 切換至**擁塞避免**:<u>*cwnd >= ssthresh*</u> 時,結束慢啟動進入**線性增長**的擁塞避免階段(每RTT,CWND增長1 MSS)
    4. 擁塞處理**:
      1. 超時丟包:嚴重擁塞,重置ssthresh=MAX(CWND/2,2 MSS),CWND = 1 MSS,重新***慢啟動***
      2. 快速重傳/恢復:(重復ACK觸發)調整ssthresh= CWND/2 ,CWND=ssthresh+3(3個重復的ACK),直接進入***擁塞避免***

TCP快速重傳

????????發送方連續收到**三個重復ACK**(RFC經驗)時,說明網絡單包丟失,發送方CWND減半,進行快速重傳

TCP擁塞控制與流量控制

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

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

相關文章

算法1-6 一元三次方程求解

題目描述 有形如&#xff1a;ax3bx2cxd0 這樣的一個一元三次方程。給出該方程中各項的系數&#xff08;a,b,c,d 均為實數&#xff09;&#xff0c;并約定該方程存在三個不同實根&#xff08;根的范圍在 ?100 至 100 之間&#xff09;&#xff0c;且根與根之差的絕對值 ≥1。要…

05.基于 TCP 的遠程計算器:從協議設計到高并發實現

&#x1f4d6; 目錄 &#x1f4cc; 前言&#x1f50d; 需求分析 &#x1f914; 我們需要解決哪些問題&#xff1f; &#x1f3af; 方案設計 &#x1f4a1; 服務器架構 &#x1f680; 什么是協議&#xff1f;為什么要設計協議&#xff1f; &#x1f4cc; 結構化數據的傳輸問題 …

大數據面試之路 (一) 數據傾斜

記錄大數據面試歷程 數據傾斜 大數據崗位 &#xff0c;數據傾斜面試必問的一個問題。 一、數據傾斜的表現與原因 表現 某個或某幾個Task執行時間過長&#xff0c;其他Task快速完成。 Spark/MapReduce作業卡在某個階段&#xff08;如reduce階段&#xff09;&#xff0c;日志顯…

僅僅使用pytorch來手撕transformer架構(3):編碼器模塊和編碼器類的實現和向前傳播

僅僅使用pytorch來手撕transformer架構(2)&#xff1a;編碼器模塊和編碼器類的實現和向前傳播 往期文章&#xff1a; 僅僅使用pytorch來手撕transformer架構(1)&#xff1a;位置編碼的類的實現和向前傳播 最適合小白入門的Transformer介紹 僅僅使用pytorch來手撕transformer…

《OpenCV》—— dlib(換臉操作)

文章目錄 dlib換臉介紹仿射變換在 dlib 換臉中的應用 換臉操作 dlib換臉介紹 dlib 換臉是基于 dlib 庫實現的一種人臉替換技術&#xff0c;以下是關于它的詳細介紹&#xff1a; 原理 人臉檢測&#xff1a;dlib 庫中包含先進的人臉檢測器&#xff0c;如基于 HOG&#xff08;方向…

機器學習中的梯度下降是什么意思?

梯度下降&#xff08;Gradient Descent&#xff09;是機器學習中一種常用的優化算法&#xff0c;用于最小化損失函數&#xff08;Loss Function&#xff09;。通過迭代調整模型參數&#xff0c;梯度下降幫助模型逐步逼近最優解&#xff0c;從而提升模型的性能。 1.核心思想 梯…

三、Docker 集群管理與應用

&#xff08;一&#xff09;項目案例 1、準備主機 &#xff08;1&#xff09;關閉防火墻&#xff0c;或者開放TCP端口2377&#xff08;用于集群管理通信&#xff09;、TCP/UPD端口7946&#xff08;用于節點之間的通信&#xff09;、UDP端口4789&#xff08;用于overlay網絡流…

網絡DNS怎么更改?

訪問速度慢或某些網站無法打開?改變網絡DNS設置可能會幫助解決這些問題。本文將詳細介紹如何更改網絡DNS&#xff0c;包括更改的原因、具體步驟。 一、為什么要更改DNS? 更改DNS的原因有很多&#xff0c;以下是一些主要的考慮因素&#xff1a;某些公共DNS服務器的響應速度比…

江科大51單片機筆記【12】DS18B20溫度傳感器(上)

寫在前言 此為博主自學江科大51單片機&#xff08;B站&#xff09;的筆記&#xff0c;方便后續重溫知識 在后面的章節中&#xff0c;為了防止篇幅過長和易于查找&#xff0c;我把一個小節分成兩部分來發&#xff0c;上章節主要是關于本節課的硬件介紹、電路圖、原理圖等理論…

基于springboot+vue的佳途旅行分享預約平臺

一、系統架構 前端&#xff1a;vue2 | element-ui | html 后端&#xff1a;springboot | mybatis-plus 環境&#xff1a;jdk1.8 | mysql | maven | node 二、代碼及數據庫 三、功能介紹 01. web端-注冊 02. web端-登錄 03. web端-系統主頁1 04. web端-系統主頁2 05. we…

【數據結構】2算法及分析

0 章節 &#xff11;&#xff0e;&#xff14;到1&#xff0e;&#xff15;小節。 掌握算法概念、特性、描述、算法性能時間復雜度和空間復雜度&#xff1b; 理解遞歸含義&#xff1f; 掌握實現遞歸的條件和時機&#xff1b; 應用簡單遞歸問題的算法設計&#xff1b; 重點 算法…

【一起學Rust | Tauri2.0框架】基于 Rust 與 Tauri 2.0 框架實現軟件開機自啟

文章目錄 前言 一、準備工作1.1 環境搭建1.2 創建 Tauri 項目1.3 添加依賴 二、實現開機自啟的基本原理2.1 開機自啟的基本概念2.2 Tauri 應用的生命周期 三、Windows 平臺實現3.1 Windows 注冊表機制3.2 實現步驟3.3 注意事項 四、Linux 平臺實現4.1 Linux systemd 服務4.2 實…

一周熱點-OpenAI 推出了 GPT-4.5,這可能是其最后一個非推理模型

在人工智能領域,大型語言模型一直是研究的熱點。OpenAI 的 GPT 系列模型在自然語言處理方面取得了顯著成就。GPT-4.5 是 OpenAI 在這一領域的又一力作,它在多個方面進行了升級和優化。 1 新模型的出現 GPT-4.5 目前作為研究預覽版發布。與 OpenAI 最近的 o1 和 o3 模型不同,…

css中的浮動

在 CSS 中&#xff0c;浮動&#xff08;float&#xff09;是一種定位元素的方式&#xff0c;它允許元素脫離正常的文檔流&#xff0c;并向左或向右移動&#xff0c;直到其邊緣碰到包含塊或者另一個浮動元素的邊緣。下面從多個方面詳細介紹 CSS 浮動&#xff1a; 一&#xff0c…

element-plus中form表單組件的使用

1.如何讓每個表單項對齊&#xff1f; 問題描述&#xff1a;如下圖&#xff0c;每個表單項的輸入框/下拉框/日期選擇器是沒有對齊的&#xff0c;我們希望它們縱向是對齊的。 解決方案&#xff1a;給el-form標簽&#xff0c;加上label-width"100px"即可。意思就是給每個…

線性搜索算法

何時使用線性搜索算法&#xff1f; 當處理一個小數據集時。當搜索存儲在連續內存中的數據集時。 線性搜索算法在什么情況下優于其他搜索算法&#xff1f; 當列表或數組未排序時&#xff0c;或者當輸入的大小相對較小時&#xff0c;首選線性搜索算法。它易于實現&#xff0c;并…

踩坑記錄:yolov5環境版本要求比較嚴苛?

在安裝yolov5環境時&#xff0c;numpy安裝失敗報錯metadata-generation-failed 報錯如下&#xff1a; Collecting numpy1.18.5 (from -r /*****/yolov5-5.0/requirements.txt (line 5))Using cached https://pypi.tuna.tsinghua.edu.cn/packages/01/1b/d3ddcabd5817be02df0e6…

Java設計模式系列:單例模式的7種實現與適用場景

一、單例模式核心價值與實現原則 1. 使用場景 全局配置類(如數據庫連接池)日志記錄器Spring默認Bean作用域硬件設備訪問(如打印機)2. 設計三原則 私有構造器:禁止外部實例化靜態實例持有:全局唯一訪問點延遲加載(可選):避免資源浪費二、七種單例實現方式深度解析 1.…

OpenManus-通過源碼方式本地運行OpenManus,含踩坑及處理方案,chrome.exe位置修改

前言&#xff1a;最近 Manus 火得一塌糊涂啊&#xff0c;OpenManus 也一夜之間爆火&#xff0c;那么作為程序員應該來嘗嘗鮮 1、前期準備 FastGithub&#xff1a;如果有科學上網且能正常訪問 github 則不需要下載此軟件&#xff0c;此軟件是提供國內直接訪問 githubGit&#…

【最新】DeepSeek 實用集成工具有那些?

deepseek 系列github倉庫地址 【主頁】deepseek-aiDeepSeek-R1DeepSeek-V3DeepSeek-VL2【本文重點介紹】awesome-deepseek-integration 注意&#xff1a;以下內容來自awesome-deepseek-integration DeepSeek 實用集成&#xff08;awesome-deepseek-integration&#xff09; 將…