計算機網絡——22TCP擁塞

TCP擁塞

TCP擁塞控制機制

端到端的擁塞控制機制

  • 路由器不向主機有關擁塞的反饋信息
    • 路由器的負擔較輕
    • 符合網絡核心簡單的TCP/IP架構原則
  • 端系統根據自身得到的信息,判斷是否發生擁塞,從而采取動作

擁塞控制的幾個問題

  • 如何檢測擁塞
    • 輕微擁塞
    • 擁塞
  • 控制策略
    • 在擁塞發送時如何動作,降低速率
      • 輕微擁塞,如何降低
      • 擁塞時,如何降低
    • 在擁塞緩解時如何動作,增加速率

TCP擁塞感知

發送端如何探測到擁塞

  • 某個段超時了(丟失事件 ):擁塞
    • 超時時間到,某個段的確認沒有來
    • 原因1:網絡擁塞(某個路由器緩沖區沒空間了,被丟棄)概率大
    • 原因2:出錯被丟棄了(各級錯誤,沒有通過校驗,被丟棄)概率小
    • 一旦超時,就認為擁塞了,有一定誤判,但是總體控制方向是對的

在這里插入圖片描述

  • 有關某個段的3次重復ACK:輕微擁塞
    • 段的第1個ack,正常,確認綠段,期待紅段
    • 段的第2個重復ack,意味著紅段的后一段收到了,藍段亂序到達
    • 段的第2、3、4個ack重復,意味著紅段的后第2、3、4個段收到了 ,橙段亂序到達,同時紅段丟失的可能性很大(后面3個段都到了, 紅段都沒到)
    • 網絡這時還能夠進行一定程度的傳輸,擁塞但情況要比上面好

TCP速率控制方法

如何控制發送端發送的速率

  • 維持一個擁塞窗口的值(主要手段) :CongWin (表示發送方往網絡中的注入字節數)
  • 發送端限制 已發送但是未確認 的數據量(的上限): LastByteSent - LastByteAcked ≤ CongWin
  • 從而粗略地控制發送方的往網絡中注入的速率

在這里插入圖片描述

  • CongWin是動態的,是感知到的網絡擁塞程度的函數
    • 超時或者3個重復ack,CongWin下降
      • 超時時:CongWin降為1MSS,進入SS階段然后再倍增到 CongWin(原) / 2(每個RTT),從而進入CA階段
      • 3個重復ack :CongWin降為CongWin/2,CA階段
    • 否則(正常收到Ack,沒有發送以上情況):CongWin躍躍欲試上升(這是為了滿足“在不發生擁塞的情況下提高吞吐率”的目的)

TCP擁塞控制和流量控制的聯合動作

聯合控制的方法

  • 發送端控制發送但是未確認的量同時也不能超過接收窗口,滿足流量控制要求
    • SendWin = min { CongWin , RecvWin }
    • 同時滿足 擁塞控制和流量控制要求

TCP慢啟動

  • 連接剛建立, CongWin = 1 MSS
    • 如: MSS = 1460bytes & RTT = 200 msec
    • 初始速率 = 58.4kbps
  • 可用帶寬可能 >> MSS/RTT
    • 應該盡快加速,到達希望的速率
  • 當連接開始時,指數性增加發送速率,直到發生丟失的事件
    • 啟動初值很低
    • 但是速度很快
  • 當連接開始時,指數性增 加(每個RTT)發送速率 直到發生丟失事件
    • 每一個RTT, CongWin加倍
    • 每收到一個ACK時, CongWin加1(相當于每個RTT,CongWin加倍)
    • 慢啟動階段:只要不超時或 3個重復ack,一個RTT, CongWin加倍

在這里插入圖片描述

  • 總結:
    • 初始速率很慢,但是加速卻是指數性的
    • 指數增加,SS時間很短,長期來看可以忽略

AIMD

  • 乘性減: 丟失事件后將CongWin降為1(ss階段通常可忽略,故相當于直接減少到 CongWin/2 ),將CongWin/2作為閾值,進入慢啟動階段(倍增直到 CongWin/2)
  • 加性增: 當 CongWin >閾值時,一個 RTT 如沒有發生丟失事件,將 CongWin 加1MSS : 探測(也就是主鍵添加,探測是否到達閾值)

在這里插入圖片描述

改進

  • Q:什么時候應該將指數性增長變成線性?
  • A:在超時之前,當CongWin變成上次發生超時的窗口的一半

在這里插入圖片描述

實現:

  • 變量:Threshold
  • 出現丟失(超時或者3個ACK),Threshold設置成CongWin的1/2

總結:TCP擁塞控制

  • 當CongWin<Threshold, 發送端處于慢啟動階段( slow-start), 窗口指數性增長.
  • 當CongWin > Threshold, 發送端處于擁塞避免階段 (congestion-avoidance), 窗口線性增長.
  • 當收到三個重復的ACKs (triple duplicate ACK), Threshold設置成 CongWin/2, CongWin=Threshold+3.
  • 當超時事件發生時timeout, Threshold=CongWin/2 CongWin=1 MSS,進入SS階段

TCP發送端擁塞控制

事件狀態TCP發送端行為解釋
以前沒有收到ACK的data,被ACKed慢啟動(SS)CongWin = CongWin + MSS,If (CongWin > Threshold),狀態變成“CA”每一個RTT CongWin 加倍
以前沒有收到ACK的data,被ACKed 擁塞避免(CA)CongWin = CongWin+MSS * (MSS/CongWin)線性增加, 每一個RTT對CongWin 加一個1 MSS
通過收到3個重復的ACK,發現丟失的事件SS or CAThreshold = CongWin/2, CongWin = Threshold+3, 狀態變成“CA”快速重傳, 實現乘性的減,CongWin 沒有變成1MSS.
超時SS or CAThreshold = CongWin/2,CongWin = 1 MSS,狀態變成“SS”進入slow start
重復的ACKSS or CA對被ACKed 的segment, 增加重復ACK的計數CongWin and Threshold不變

TCP擁塞控制FSM

在這里插入圖片描述

TCP吞吐量

TCP的平均吞吐量是多少,使用窗口window尺寸W和RTT來 描述?
(忽略慢啟動階段,假設發送端總有數據傳輸)

  • W:發生丟失事件時的窗口尺寸(單位:字節)
    • 平均窗口尺寸(#in-flight字節):3/4W
    • 平均吞吐量:一個RTT時間吞吐3/4W, avg TCP thruput = 3/4 * (W/RTT) bytes/sec
      由下圖所示,w/2→w所需要的時間是2RTT

在這里插入圖片描述

因此 T = (w/2 + w) / (2*RTT) = 3w/4RTT

在這里插入圖片描述

TCP 公平性

公平性目標: 如果 K個TCP會話分享一個鏈路帶寬為R的 瓶頸,每一個會話的有效帶寬為 R/K

2個競爭的TCP會話:

在這里插入圖片描述
在這里插入圖片描述

公平性和 UDP

  • 多媒體應用通常不是用 TCP
    • 應用發送的數據速率希望 不受擁塞控制的節制
  • 使用UDP:
    • 音視頻應用泵出數據的速率是恒定的, 忽略數據的丟失
      也就是UDP會搶占TCP的資源

公平性和并行TCP連接

  • 2個主機間可以打開多個并行的TCP連接
  • 例如: 帶寬為R的鏈路支持了 9個連接;
    • 如果新的應用要求建1個TCP連接,獲得帶寬R/10
    • 如果新的應用要求建11個TCP連接,獲得帶寬R/2

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

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

相關文章

javascript在現實中的應用

JavaScript是一種非常強大的編程語言,在現實世界中有廣泛的應用。它最初被設計用于網頁交互,但隨著時間的發展,其用途已經大大擴展。以下是JavaScript在現實中的一些主要應用: 1. **網頁開發**: - **前端開發**: JavaScript是…

Http基礎之http協議、無狀態協議、狀態碼、http報文、跨域-cors

Http基礎 HTTP基礎HTTP協議請求方法持久連接管線化 無狀態協議使用Cookie狀態管理 狀態碼1XX2XX OK200 OK204 NO Content206 Content-Range 3XX 重定向301302304307 4XX400401403404 5XX500503 HTTP報文請求報文響應報文通用首部字段Cache-ControlConnectionDate請求首部字段Ac…

智能時代的領航者:人工智能的前沿探索

智能時代的領航者:人工智能的前沿探索 人工智能的定義與發展歷程 人工智能(Artificial Intelligence,AI)是指通過模擬、延伸人類智能的理論、方法、技術及應用系統,以實現智能化的機器或軟件。人工智能的發展經歷了符…

Linux系統中已經可用的重要的網絡和故障排除命令

在Linux系統中,網絡設置、問題查找和故障修復是系統管理的重要技能,對于開發人員來說,了解Linux故障排除命令對于日常任務十分有幫助。 本文將介紹在Linux系統中已經可用的重要的網絡和故障排除命令。 以下是已經存在于Linux機器上的故障排…

2024可以實現月入過萬的抖店,適合新手做嗎?

我是電商珠珠 過完年了,一些新手都在找項目,覺得自己能做的項目很少。每個人身邊或多或少都有做電商的人,都說做電商可以年入百萬什么的,于是找到了抖店,但是對于抖店并不了解,不知道抖店適不適合自己。 …

JVM 第四部分—垃圾回收相關概念 2

System.gc() 在默認情況下,通過System.gc()或者Runtime.getRuntime().gc()的調用,會顯式觸發Full GC,同時對老年代和新生代進行回收,嘗試釋放被丟棄對象占用的內存 然而System.gc()調用附帶一個免責聲明,無法保證對垃…

博途PLC 面向對象系列之“雙通氣缸功能塊“(SCL代碼)

1、面向對象系列之找對象 https://rxxw-control.blog.csdn.net/article/details/136150027https://rxxw-control.blog.csdn.net/article/details/1361500272、博途PLC 面向對象系列之"單通氣缸功能塊" https://rxxw-control.blog.csdn.net/article/details/1363399…

如何使用pip安裝和生成requirements.txt

使用 pip freeze 命令可以列出當前環境中已安裝的所有 Python 包及其版本信息,并將其輸出保存到 requirements.txt 文件中。可以使用重定向 (>) 將命令的輸出寫入文件中 pip freeze > requirements.txt使用 pip install 命令可以從 requirements.txt 文件中安…

Spark(1)-wordCount入門

1. 創建Maven項目 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

JavaScript繼承 寄生組合式繼承 extends

JavaScript繼承 1、JS 的繼承到底有多少種實現方式呢? 2、ES6 的 extends 關鍵字是用哪種繼承方式實現的呢? 繼承種類 原型鏈繼承 function Parent1() {this.name parentlthis.play [1, 2, 3] }function Child1() {this.type child2 }Child1.prototype new Parent1(…

三天學會阿里分布式事務框架Seata-seata事務日志mysql持久化配置

鋒哥原創的分布式事務框架Seata視頻教程&#xff1a; 實戰阿里分布式事務框架Seata視頻教程&#xff08;無廢話&#xff0c;通俗易懂版&#xff09;_嗶哩嗶哩_bilibili實戰阿里分布式事務框架Seata視頻教程&#xff08;無廢話&#xff0c;通俗易懂版&#xff09;共計10條視頻&…

navicat16

Navicat16: 鏈接: https://pan.baidu.com/s/1vIfX0qEEL4mhBrsEzD_-lw?pwdy3fi 提取碼: y3fi 破解教程視頻&#xff1a;2023年Navicat16破解教程(小白教程)_嗶哩嗶哩_bilibili

1、云原生安全之K8S的部署與常用命令

文章目錄 1、常用命令1.1、基本信息查看1.2、日志查看與問題排查1.3、進入pod與pod內部文件導出1.4、環境搭建相關1.5、鏡像相關1.6、電腦重啟后,重啟k8s服務1.7、關于k8s的持久卷二、k8s的部署2.1、配置環境2.1.1、安裝所需工具2.1.2、修改主機名2.1.3、編輯hosts2.1.4、其他…

第13集《靈峰宗論導讀》

《靈峰宗論》導讀。諸位法師&#xff0c;諸位同學&#xff0c;阿彌陀佛&#xff01;&#xff08;阿彌陀佛&#xff01;&#xff09; 請大家打開講義第38面。 丙三、結示 這一科是《正見篇》的結示。《正見篇》主要的是要引導我們能夠正確地觀察生命的真相。生命的真相就是說…

【RISC-V 指令集】RISC-V DSP 擴展指令集介紹(二)

前言&#xff1a; 本筆記是基于對RISC-V DSP擴展指令集文檔總結的&#xff0c;《P-ext-proposal.pdf》文檔的關鍵內容如下&#xff1a; 主要介紹了RISC-V的P擴展指令集及其相關細節。 首先&#xff0c;對P擴展指令進行了概述&#xff0c;并列出了其與其他擴展重復的指令。 …

Java 的notify 可能導致死鎖原因詳解

假設有一個共享資源庫 ResourcePool&#xff0c;它內部維護了兩類資源&#xff1a;ResourceTypeA 和 ResourceTypeB。現在有兩個線程 Thread1 和 Thread2&#xff0c;它們都需要從資源庫中分別獲取一種資源才能繼續執行。Thread1 需要 ResourceTypeA 而 Thread2 需要 ResourceT…

上位機圖像處理和嵌入式模塊部署(當前機器視覺新形態)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】 過去的機器視覺處理&#xff0c;大部分都是集中在上位機、或者是服務器領域&#xff0c;這種形式維持了很長的時間。這種業務形態下&#xff0c;無…

windows 11 藍牙突然消失

解決方法&#xff1a; 1.WinX&#xff0c;點擊設備管理器 2.選中藍牙&#xff0c;右鍵更新驅動。 3.然后就可以出現了&#xff0c;如下圖

Django多個app配置多個域名訪問

環境&#xff1a;Python 3.8.1 Django 2.2.12 項目目錄結構&#xff1a; CellMiddle -- 項目根目錄 ├─task --- 需求系統 │ ├─migrations │ ├─static │ └─templates ├─logs --- 日志目錄 ├─doc --- 文檔系統 │ ├─data │ ├─migrations │ ├─st…

程序員是如何看待“祖傳代碼”的?

目錄 ?編輯 程序員是如何看待“祖傳代碼”的&#xff1f; 一、什么是“祖傳代碼”&#xff1f; 二、“祖傳代碼”的利弊 1. 可以節省開發成本 2. 可能引入安全隱患 3. 可能增加系統的維護難度 三、祖傳代對程序員的影響 1. 豐富程序員的技能和知識 2. 提高程序員的創…