計網-TCP擁塞控制

TCP的擁塞控制(Congestion Control)是核心機制之一,用于動態調整發送方的數據傳輸速率,避免網絡因過載而出現性能急劇下降(如丟包、延遲激增)。其核心思想是探測網絡可用帶寬,并在擁塞發生時主動降低速率。以下是TCP擁塞控制的詳細解析:


一、擁塞控制的目標

  1. 避免擁塞:預防網絡進入過載狀態。

  2. 公平性:多個TCP連接共享帶寬時,應公平競爭。

  3. 高效性:盡可能利用可用帶寬。


二、核心機制

TCP擁塞控制通過擁塞窗口(Congestion Window, cwnd)實現,它限制了發送方未確認數據的最大量(與接收方的滑動窗口共同決定實際發送窗口)。擁塞控制分為四個階段:

1. 慢啟動(Slow Start)
  • 目的:快速探測網絡可用帶寬。

  • 規則

    • 初始cwnd = 1 MSS(最大報文段大小,如1460字節)。

    • 每收到一個ACK,cwnd?指數增長(即每RTT翻倍:1 → 2 → 4 → 8...)。

  • 終止條件

    • 達到慢啟動閾值(ssthresh)時,進入擁塞避免階段。

    • 檢測到擁塞(如丟包)時,重置ssthresh = cwnd/2,cwnd = 1,重新慢啟動。

2. 擁塞避免(Congestion Avoidance)
  • 目的:線性增長避免觸發擁塞。

  • 規則

    • 每RTT(往返時間)cwnd?增加1 MSS(線性增長,如8 → 9 → 10...)。

  • 終止條件

    • 發生擁塞(超時或重復ACK)時,調整ssthresh和cwnd。

3. 快速重傳(Fast Retransmit)
  • 觸發條件:收到3個重復ACK(表明報文段丟失,但后續數據仍能到達)。

  • 動作

    • 立即重傳丟失的報文段(無需等待超時)。

    • 進入快速恢復階段。

4. 快速恢復(Fast Recovery)
  • 目的:在快速重傳后平滑恢復,避免突然降速。

  • 規則

    • 設置?ssthresh = cwnd/2cwnd = ssthresh + 3 MSS(補償已確認的3個重復ACK)。

    • 每收到一個重復ACK,cwnd增加1 MSS。

    • 收到新數據的ACK時,退出快速恢復,進入擁塞避免階段。


三、擁塞控制的觸發事件

  1. 超時重傳(Timeout)

    • 視為嚴重擁塞,直接重置?cwnd = 1,重新慢啟動。

  2. 重復ACK(DupACK)

    • 觸發快速重傳和快速恢復,對擁塞響應更溫和。


四、擁塞控制算法演進

1. Tahoe(早期版本)
  • 發生任何擁塞(超時或重復ACK)均重置cwnd=1,效率較低。

2. Reno(改進版)
  • 引入快速恢復,區分超時和重復ACK,減少激進降速。

3. NewReno(優化版)
  • 改進快速恢復,避免多次丟包時頻繁退出恢復階段。

4. CUBIC(Linux默認)
  • 使用立方函數替代線性增長,更適合高帶寬延遲網絡(BDP)。


五、實例分析

假設初始參數:cwnd=1 MSS,ssthresh=16 MSS,MSS=1460字節。

  1. 慢啟動階段

    • 發送1個報文 → ACK → cwnd=2 → 發送2個報文 → ACKs → cwnd=4 → ...(指數增長)。

  2. 擁塞避免階段(cwnd≥16):

    • 每RTT cwnd增加1 MSS(如16 → 17 → 18...)。

  3. 快速重傳與恢復

    • 若收到3個重復ACK,重傳丟失報文,設置cwnd=10(假設原cwnd=20),繼續線性增長。


六、擁塞控制 vs. 流量控制

對比項擁塞控制流量控制
目標避免網絡過載防止接收方緩沖區溢出
控制對象網絡鏈路接收方窗口(rwnd)
實現機制擁塞窗口(cwnd)滑動窗口(Window字段)
觸發信號丟包、延遲增加接收方通告的窗口大小

七、關鍵參數與公式

  1. 實際發送窗口
    Window=min?(cwnd,rwnd)Window=min(cwnd,rwnd)

  2. RTT估算
    SRTT=α×SRTT+(1?α)×NewRTTSRTT=α×SRTT+(1?α)×NewRTT
    (α通常為0.875,平滑波動)


八、現代改進方向

  1. BBR(Bottleneck Bandwidth and RTT)

    • Google提出的算法,基于帶寬和延遲探測,替代基于丟包的擁塞控制。

  2. AQM(主動隊列管理)

    • 路由器主動丟棄/標記報文(如RED算法),提前避免擁塞。


總結

TCP擁塞控制通過慢啟動、擁塞避免、快速重傳/恢復的動態調整,在公平性與高效性之間取得平衡。其核心是通過cwnd的增減響應網絡狀態,確保網絡在高負載下仍能穩定運行。

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

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

相關文章

依賴倒置原則 Dependency Inversion Principle - DIP

基本知識 1.依賴倒置原則(DIP)是面向對象設計(OOD)中的五個基本原則之一,通常被稱為 SOLID 原則中的 D 2.核心思想: 高層模塊不應該依賴低層模塊,兩者都應該依賴抽象。 (High-level modules sho…

原生input添加刪除圖標類似vue里面移入顯示刪除[jquery]

<input type"text" id"servicer-search" class"form-control" autocomplete"off" />上面是剛開始的input <div class"servicer-search-box"><input type"text" id"servicer-search" cla…

整理分享 | Photoshop 2025 (v26.5) 安裝記錄

導語&#xff1a; 最近整理資源時&#xff0c;發現有朋友在找新版 Photoshop。正好手邊有 Photoshop 2025年7月的版本&#xff08;v26.5&#xff09;&#xff0c;就記錄下來分享給大家&#xff0c;供有需要的朋友參考。關于這個版本&#xff1a;這個 Photoshop v26.5 安裝包&am…

【Redis】Redis 數據存儲原理和結構

一、Redis 存儲結構 1.1 KV結構 Redis 本質上是一個 Key-Value&#xff08;鍵值對&#xff0c;KV&#xff09;數據庫&#xff0c;在它豐富多樣的數據結構底層&#xff0c;都基于一種統一的鍵值對存儲結構來進行數據的管理和操作 Redis 使用一個全局的哈希表來管理所有的鍵值對…

【RAG優化】深度剖析OCR錯誤,從根源修復RAG應用的識別問題

1. 引言:OCR——RAG系統中的關鍵問題 當我們將一個包含掃描頁面的PDF或一張報告截圖扔給RAG系統時,我們期望它能“讀懂”里面的內容。這個“讀懂”的第一步,就是OCR。然而,OCR過程并非100%準確,它受到圖像質量、文字布局、字體、語言等多種因素的影響。 一個看似微不足道…

【第六節】方法與事件處理器

方法與事件處理器 方法處理器 可以用 v-on 指令監聽 DOM 事件: <div id="example"> <button v-on:click="greet">Greet</button></div>綁定一個單擊事件處理器到一個方法 greet 。下面在 Vue 實例中定義這個方法 var vm=new V…

大語言模型Claude 4簡介

Anthropic公司成立于2021年&#xff0c;由一群OpenAI前員工組成。他們最新發布的大語言模型(Large Language Model, LLM) Claude 4系列包括兩個版本&#xff1a;Claude Opus 4和Claude Sonnet 4&#xff1a;(1).Claude Sonnet 4&#xff1a;是Claude Sonnet 3.7的升級&#xff…

國產化PDF處理控件Spire.PDF教程:Python 將 PDF 轉換為 Markdown (含批量轉換示例)

PDF 是數字文檔管理的普遍格式&#xff0c;但其固定布局特性限制了在需要靈活編輯、更新或現代工作流集成場景下的應用。相比之下&#xff0c;Markdown&#xff08;.md&#xff09;語法輕量、易讀&#xff0c;非常適合網頁發布、文檔編寫和版本控制。 E-iceblue旗下Spire系列產…

PDF轉Markdown - Python 實現方案與代碼

PDF作為廣泛使用的文檔格式&#xff0c;轉換為輕量級標記語言Markdown后&#xff0c;可無縫集成到技術文檔、博客平臺和版本控制系統中&#xff0c;提高內容的可編輯性和可訪問性。本文將詳細介紹如何使用國產Spire.PDF for Python 庫將 PDF 文檔轉換為 Markdown 格式。 技術優…

深度解析 inaSpeechSegmenter:高效音頻語音分割與檢測開源工具

項目簡介 inaSpeechSegmenter 是法國國家視聽研究院(INA)開源的音頻分割與檢測工具,專為廣播、播客、采訪、影視等多媒體內容的自動化處理設計。它能夠高效地將長音頻自動分割為語音、音樂、噪聲、靜音等片段,并支持性別檢測(男聲/女聲),為后續的語音識別、內容檢索、轉…

VirtualBox安裝Ubuntu 22.04后終端無法打開的解決方案

問題現象在VirtualBox中使用"快速安裝"模式安裝Ubuntu 22.04后圖形終端&#xff08;gnome-terminal&#xff09;無法通過圖標或快捷鍵(CtrlAltT)啟動系統其他功能正常根本原因語言環境(Locale)配置異常導致&#xff1a;快速安裝模式可能跳過Locale生成步驟gnome-term…

java磁盤操作與IO流(序列化、Properties類)

目錄 一、磁盤操作 1、File類&#xff1a; &#xff08;1&#xff09;創建File對象&#xff1a; &#xff08;2&#xff09;獲取文件信息&#xff1a; &#xff08;3&#xff09;判斷文件 &#xff08;4&#xff09;刪除文件 &#xff08;5&#xff09;創建文件&#xff…

【WPF】WPF Prism 開發經驗總結:菜單命令刪除項時報 InvalidCastException 的問題分析與解決

WPF Prism 開發經驗總結&#xff1a;菜單命令刪除項時報 InvalidCastException 的問題分析與解決 在 WPF Prism 項目中使用 ContextMenu 執行刪除操作時&#xff0c;遇到一個令人疑惑的問題&#xff1a;命令綁定本身沒有問題&#xff0c;但點擊“刪除”菜單后&#xff0c;程序拋…

《WebGL打造高性能3D粒子特效系統:從0到1的技術探秘》

在游戲里,爆炸時四濺的火花、魔法釋放時閃爍的光暈;在可視化項目中,數據流動時呈現的璀璨光河,這些令人驚嘆的效果,背后離不開強大的技術支撐。而WebGL,作為在瀏覽器端實現硬件加速3D圖形渲染的技術,為我們開啟了構建高性能3D粒子特效系統的大門。 WebGL的渲染管線是整…

全國計算機等級考試二級題庫【C語言】:程序填空題型——結構體 自制答案詳解合輯

二級C語言程序填空題型簡介 1、/**********found**********/緊跟的下面一行的程序設空,一般為3個空; 2、常見錯誤: (1) (2) 3、做題推薦步驟: (1) (2) ---------------一、結構體--------------- 2、題目要求【結構體】 程序通過定義學生結構體變量,存儲了學生…

人工智能與城市:城市生活的集成智能

1. 智慧城市的核心價值&#xff1a;從 “硬件堆砌” 到 “智能協同”1.1 傳統城市的治理困境全球 55% 的人口居住在城市&#xff0c;到 2050 年這一比例將升至 68%。傳統城市管理面臨多重挑戰&#xff1a;資源分配失衡&#xff1a;早晚高峰主干道擁堵率達 80%&#xff0c;而支線…

Linux下掛載磁盤報superblock錯誤

Linux下掛載磁盤報superblock錯誤背景問題現象1、使用fdisk查詢設備文件信息2、掛載磁盤&#xff0c;報出fs type錯誤解決辦法1、使用e2fsk命令檢查整個磁盤2、resize2fs 命令調整文件系統塊大小和物理磁盤塊大小3、掛載磁盤&#xff0c;確認修復結果問題思考1、rclone命令做數…

Http證書體系及證書加密流程(通信流程)

一、HTTPS 證書體系&#xff1a;信任的基石 HTTPS 證書體系是保障網絡通信安全的核心機制&#xff0c;其本質是一套基于公鑰基礎設施&#xff08;PKI&#xff0c;Public Key Infrastructure&#xff09; 的信任體系&#xff0c;通過數字證書實現通信雙方的身份驗證和數據加密&…

【分布式架構】學習路徑概述:了解分布式系統的核心問題、解決方案與實戰說明

文章目錄零、前言一、分布式系統理論1、 分布式系統的一致性問題1.1、一致性問題理論&#xff08;CAP/BASE&#xff09;1.2、 一致性協議與算法&#xff08;Paxos/Raft&#xff09;&#xff1a;選主、分布式鎖1.3、 分布式事務(2PC\3PC\TCC)&#xff1a;服務一致性保障與性能2、…

C# 密封類_密封方法 (seadled 關鍵字)

C#允許將類聲明為密封類&#xff0c;密封類不能被繼承在什么場景用&#xff1f;答&#xff1a;防止重寫某些類導致代碼混亂密封類seadled 聲明密封類的關鍵字//seadled 聲明密封類的關鍵字 //密封類不能被繼承 sealed class Class1 {public int age;public string name;publi…