当前位置: 首页 > news >正文

中科大计网学习记录笔记(十七):拥塞控制原理 | TCP 拥塞控制

前言:

学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程
该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信息量过大,有太多无法理解的地方,在我第一次点开的时候也有相同的感受,但经过了一段时间项目的学习,对计网有了更多的了解,所以我准备在这次学习的时候做一些记录并且加入一些我的理解,希望能够帮助到大家。
往期笔记可以看专栏中的内容😊😊😊

文章目录

      • 3.6 拥塞控制原理
        • 3.6.1 什么是拥塞?
        • 3.6.2 拥塞的原因 / 代价
          • <1> 场景 1:理想情况 - 无限缓冲区
          • <2> 场景二 - 有限缓冲区
          • <3> 场景三 - 网络死锁的情况
        • 3.6.3 两种拥塞控制的方法
        • 3.6.4 案例 - ATM ABR 拥塞控制
      • 3.7 TCP 拥塞控制
        • 3.7.1 拥塞控制要解决的几个问题
        • 3.7.2 拥塞感知
        • 3.7.3 速率控制方法
        • 3.7.4 TCP 拥塞控制
        • 3.7.5 总结:TCP 拥塞控制
        • 3.7.6 TCP 的公平性

3.6 拥塞控制原理

3.6.1 什么是拥塞?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

💡 当 网络中的流量 超过了网络资源的处理能力时,就会发生拥塞,导致数据包丢失、延迟增加和带宽利用率下降。

  • 拥塞是指网络中出现了过多的数据流量,导致网络设备(如路由器、交换机)无法及时处理所有传入的数据包,进而 导致缓冲队列溢出,丢包等问题。
3.6.2 拥塞的原因 / 代价
<1> 场景 1:理想情况 - 无限缓冲区

👉 这里探讨的是理论化的情况

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

💡 假设有两个发送端和两个接收端,有一个路由器,其输出缓冲区无限大,也就是不会存在丢失的情况,输出链路的带宽为 R,且不考虑输入时处理的情况。

💡 且在 TCP 的情况下会 尽可能的让 每个连接分到的带宽相同,所以这里假设这两个连接 平分 带宽;也就是每个连接能够达到的最大带宽为 R / 2

💡 且发送方 不会重传

有了这些先决条件,来看看连接的吞吐量和延迟:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

💡 吞吐量(Throughput)是指在单位时间内通过网络或系统的数据量或信息量。

当进入的速率总和达到 R 的时候,排队延迟会趋向无穷大,因为带宽是理论上可达到的最大速率,但实际是不可能实现的,所以队列会一直累计,但因为队列是无线大的,分组并不会 丢失 且发送方不会重传,所以有效的泵出和输入是相等的。

<2> 场景二 - 有限缓冲区

👉 这里讨论的是偏向于现实的情况

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

💡 缓冲区不是无限的,分组会丢失

💡 发送方会因为超时而重发分组

当泵入的数据量不断的增大,由于延迟的增大会触发重传机制,这就导致有效的泵入逐渐减少,会包含很多重发的泵入,这也就导致了有效泵出的减少。

最终呈现出来的图像是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这也就导致了发送方需要大量的重发才能保证有效的泵入。比如说为了达到 1.0 的泵出量,有可能需要 1.2 的泵入量,如果不加以控制的话会导致重发越来越多,拥塞的程度也越来越大,是一个 正反馈的情况。

<3> 场景三 - 网络死锁的情况

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

💡 四个发送端 且 存在超时重传机制

💡 多重路径

当红色的泵入增加的时候,蓝色的泵入在最上方的路由中被抛弃了,因为它到该路由多一跳,到达的更慢;同理,其他的各个路由器都会由于这种情况而形成阻塞。最终导致网络的整体泵出量为 0,达到一个死锁的情况。

3.6.3 两种拥塞控制的方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

🍀 端到端的拥塞控制:没有来自网络的直接显示其拥塞状况的信息,系统根据延迟和丢失的时间来判断网络的拥塞程度,比如 TCP 的快速重发,当 TCP 收到三个冗余 ACK 的时候就说明分组可能丢失了,这时候就可以降低发送速率,这也是 TCP 采用的拥塞控制方法。

🍀 网络辅助的拥塞控制:即发送端可以接收到网络关于其拥塞程度的反馈,这样做拥塞控制就会简单很多,比如下面提到的 ATM 网络。

3.6.4 案例 - ATM ABR 拥塞控制

💡 ATM(Asynchronous Transfer Mode)异步传输模式,不是取款机(大悲)

💡 ABR(Available Bit Rate),可用比特率,是一种ATM(异步传输模式)网络中的一种拥塞控制服务类型。这种服务会根据网络的拥塞程度动态调整数据传输速率,以确保网络中的可用带宽得到最佳利用,同时避免网络拥塞和数据丢失。

在这种网络结构上传输的数据称为 信元,信元中有一种特殊的信源为 RM(资源管理)信元,其由发送端发送,在数据信元中间隔插入。

当经过交换机时,交换机会根据自己目前的状况来调整资源管理信元的信息

  • NI bit:no increase in rate 轻微拥塞的时候请求速率不要再增加
  • CI bit:congestion indication 拥塞指示,表示该路由器出现拥塞,应该减小到最小速率。

接收端接收到数据信元后将 RM 信元直接返回 不做任何改变;接收端收到后就可以知道这条通路中的拥塞情况。

3.7 TCP 拥塞控制

3.7.1 拥塞控制要解决的几个问题

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

🍀 端到端的拥塞控制机制:路由器不会向端主机提供拥塞的相关信息

  • 这样的好处是会降低路由器的负担,符合是网络核心简单的 TCP/IP 架构原则
  • 端系统根据自己得到的信息来判断是否发生拥塞从而采取动作

❓ 拥塞控制需要解决的问题

  • 如何检测是否出现拥塞和拥塞的程度如何?
  • 在拥塞的时候发送应该采取什么策略来降低?
  • 在拥塞缓解的时候如何增加速率来保证信息交换的速度?
3.7.2 拥塞感知

💡 既然路由器不提供拥塞情况,那发送端如何得知是否产生拥塞呢?

🍀 当某个段超时的时候,说明网络在传输过程中丢失了

  • 原因一:由于路由器队列已满,出现丢弃的情况
  • 原因二:传输过程中出现了乱序的情况,导致信息没有通过校验而被丢失
  • 由于第二种情况相较于第一种情况出现频率低很多,所以对拥塞控制产生的影响不大

🍀 当出现三个冗余的 ACK 的时候,也可以说明分组被丢失

3.7.3 速率控制方法

💡 拥塞窗口(Congestion Window,简称CongWin)是TCP拥塞控制算法中的一个重要概念,用于控制发送方发送数据的速率,以便避免网络拥塞和提高网络性能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

👉 拥塞窗口的大小是由 TCP 拥塞控制算法 动态 调整的。

👉 超时的时候拥塞窗口变为 1MSS,进入 SS 阶段,然后倍增到拥塞窗口的一半后进入 CA 阶段

  • 当收到三个冗余的 ACK,拥塞窗口变为一半再次进入 CA 阶段

👉 当正常收到 ACK 没有发生以上两种情况的时候

  • SS 阶段(Slow Start,慢启动阶段):每个往返延迟(RTT)成倍增加发送报文量
  • CA 阶段(Congestion Avoidance,拥塞避免阶段):每个 RTT 只会增加一个单位

💡 在这里有一个基本的概念即可,后面会详细讲述 TCP 拥塞控制的整个流程。

💡 TCP 流量控制和拥塞控制是一个 联合的动作,即发送时要同时满足这两个的要求

3.7.4 TCP 拥塞控制

🍀 慢启动(Slow Start)阶段

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 当连接建立或者网络从拥塞中恢复时,拥塞窗口被初始化为一个较小的值,通常为一个 MSS。
  • 在慢启动阶段,发送方逐渐增加拥塞窗口的大小。每当收到一个确认 ACK 时,拥塞窗口大小就会加倍,这样拥塞窗口呈指数增长。

💡 这样做的目的是快速 探测 网络的可用带宽,以便尽快利用网络资源。

🍀 拥塞避免阶段

  • 当拥塞窗口大小大于阈值的时候,就会进入拥塞避免的阶段,此时每一个 RTT 拥塞窗口加 1,而不是像慢启动一样成倍的增加的增加
  • 拥塞避免阶段就是在临界值上进行试探直到出现了冗余 ACK 或者丢失的情况

🍀 快速重传和超时重传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 当出现快速重传的时可以推断出网络出现了轻微的拥塞,此时将拥塞窗口减半,继续进行 CA 阶段
  • 如果出现超时则说明拥塞情况较差,此时将阈值设定为发生拥塞时窗口值的一半,同时拥塞窗口被设定为 1 MSS,进行 SS 阶段。
  • 如上图中的红色部分就代表了发生超时进行慢启动,其余部分均为冗余 ACK 导致的拥塞窗口减半。

💡 在这个流程中影响的因素主要是阈值和超时以及冗余 ACK,搞清楚对于这三种情况如何处理即可梳理好整个流程:

  • 阈值是慢启动和拥塞避免的分水岭
  • 超时会导致从慢启动开始且会导致阈值的调整
  • 冗余 ACK 会导致拥塞窗口的减少

💡 由于慢启动在整个流程中所占的时间较短,所以整体是呈现锯齿状的,即由于冗余 ACK 的作用导致的拥塞窗口减半。

3.7.5 总结:TCP 拥塞控制

💡 名词解释:

  • CongWin:Congestion Window,拥塞窗口
  • Threshold:阈值

🍀 当 CongWin < CongWin ,发送端处于 慢启动 阶段,窗口指数增长

🍀 当 CongWin > CongWin,发送端处于 拥塞避免 阶段,窗口线性增长

🍀 当收到三个重复 ACK的时候,Threshold 设置成 CongWin / 2CongWin = Threshold + 3

🍀 当超时时间发生的时候,Threshold = CongWin / 2CongWin = 1 MSS,进入 SS 阶段

💡 补充:TCP 的吞吐量:TCP 的平均吞吐量可以用窗口尺寸和 RTT 来近似的描述

  • 假设发生丢失的时候窗口尺寸是固定的

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 平均窗口尺寸 = 1 / 2 W + W = 3 / 4 W 平均窗口尺寸 = 1 / 2 W + W = 3 / 4 W 平均窗口尺寸=1/2W+W=3/4W

  • 吞吐量等于上述值除以 RTT

3.7.6 TCP 的公平性

💡 公平性目标:如果 K 个 TCP 绘画共享一个链路带宽为 R 的瓶颈,每个会话分到的有效带宽均为 R / K。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TCP 通过其拥塞控制可以实现相对的公平性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图中紫色的线代表带宽,即链接一所占的带宽加上链接二所占的带宽等于总带宽,也即出现拥塞的时候。

  • 左下角的红色线很明显可以看出来当到达拥塞的时候 链接一 所占有的资源多
  • 因为拥塞窗口为对半减少,这样就代表 占有资源多的一方减半时候损失的也就越多
  • 这样会逐渐靠近虚线,也就是连接一所占的带宽等于连接二所占的带宽的情况,这样就达到了公平性

相关文章:

中科大计网学习记录笔记(十七):拥塞控制原理 | TCP 拥塞控制

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…...

老隋蓝海项目有人盈利的吗?怎么做比较好些呢?

在互联网创业的浪潮中&#xff0c;蓝海项目总是令人心动。老隋&#xff0c;作为一位经验丰富的创业者&#xff0c;近期分享了他所发现的蓝海项目。但不少人可能会有疑问&#xff1a;老隋分享的蓝海项目真的有人盈利了吗?如果真的盈利了&#xff0c;又该怎么做才能确保成功呢?…...

递归与递推(蓝桥杯 c++)

目录 题目一&#xff1a; 代码&#xff1a; 题目二: 代码&#xff1a; 题目三&#xff1a; 代码&#xff1a; 题目四&#xff1a; 代码&#xff1a; 题目一&#xff1a; 代码&#xff1a; #include<iostream> #include<cstring> using namespace std; int …...

ArduinoTFTLCD应用

ArduinoTFTLCD应用 ArduinoTFTLCD应用硬件连接软件导入库显示数字、字符显示汉字方案1方案2 显示图片 总结 ArduinoTFTLCD应用 对于手工喜欢DIY的人来说&#xff0c;Arduino驱动的TFTLCD被很多人使用&#xff0c;此处就总结一下&#xff0c;使用的是VScode的PlatformIO插件驱动…...

《秦时明月》IP新高度:与陕西历史博物馆共同书写文化传承新篇章!

在IP产业风起云涌的今天&#xff0c;如何以创意和匠心为传统文化注入新的活力&#xff0c;成为了摆在每一位文化工作者面前的重要课题。近日&#xff0c;《秦时明月》作为一部深受观众喜爱的国产动画IP&#xff0c;在迎来其十七周年之际&#xff0c;联手陕西历史博物馆&#xf…...

2、事件机制、DOM操作、jquery对尺寸操作、jquery添加和删除

一、事件机制 1、事件源.事件类型(事件处理程序) $(this)中的this不能加引号 $(#box).click(function () {$(this).css(background-color,blue)//点击颜色变为蓝色 })2、事件源.on/bind(事件类型&#xff0c;事件处理程序) $("#box").on(dbclick,function () {$(…...

YOLOv6-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…...

C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)

和黛玉学编程呀&#xff0c;大家一起努力呀............. 结构体类型的声明 回顾一下 struct tag { member-list; }variable-list; 创建和初始化 我们知道&#xff0c;在C语言中&#xff0c;对于一些数据是必须初始化的&#xff0c;但是结构体怎么创建并且初始化呢&#xff1…...

springboot240基于Spring boot的名城小区物业管理系统

基于Spring boot的名城小区物业管理系统的设计与实现 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于物业信息的管理和控制&#xff0c;采用人工登记的方式保存相关数…...

Day13:信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

目录 JS前端架构-识别&分析 JS前端架构-开发框架分析 前端架构-半自动Burp分析 前端架构-自动化项目分析 思维导图 章节知识点 Web&#xff1a;语言/CMS/中间件/数据库/系统/WAF等 系统&#xff1a;操作系统/端口服务/网络环境/防火墙等 应用&#xff1a;APP对象/API接…...

AJAX 学习笔记(Day1)

「写在前面」 本文为黑马程序员 AJAX 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。 目录 0 课程介绍 1 AJAX 入门 1.1 AJAX 概念和 axios 使用 1.2 认识 URL 1.3 URL 查询参数 1.4 常用请求方法和数据提交 1.5 HT…...

leetcode 740.删除并活得点数

这道题和打家劫舍得思路很像。 思路&#xff1a;首先我们看到题目的意思&#xff0c;就是说我们如果选择了一个数&#xff0c;那么它相邻的数就会不得选入&#xff0c;也就是删除。这就是上一个题那个相邻的家不能偷的问题呗&#xff01; 我们从那个地方转换一下&#xff0c;…...

寻找峰值[中等]

优质博文IT-BLOG-CN 一、题目 峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可以假设nums[-1] nums[n] -∞。 你…...

【ESP32 IDF】key按键与EXTI中断

文章目录 前言一、按键的使用1.1 按键的简介1.2 读取按键的高低电平1.3 读取按键具体代码 二、中断二、EXIT外部中断2.1 EXIT外部中断简介2.2 外部中断基础知识2.3 设置外部中断注册外部中断服务函数设置触发方式添加中断函数 2.4 示例代码 总结 前言 在嵌入式系统开发中&…...

Find My运动相机|苹果Find My技术与相机结合,智能防丢,全球定位

运动相机设计用于在各种运动和极限环境中使用&#xff0c;如徒步、登山、攀岩、骑行、滑翔、滑雪、游泳和潜水等&#xff0c;它们通常具有防抖防震、深度防水和高清画质的特点&#xff0c;能够适应颠簸剧烈的环境&#xff0c;甚至可以承受一定程度的摔落&#xff0c;一些运动相…...

零拷贝技术深入分析

一、零拷贝 在前面的文章“深浅拷贝、COW及零拷贝”中对零拷贝进行过分析&#xff0c;但没有举例子&#xff0c;也没有深入进行展开分析。本文将结合实际的例程对零拷贝进行更深入的分析和说明。 在传统的IO操作中&#xff0c;以文件通过网络传输为例 &#xff0c;一般会经历以…...

Android 基础入门 基础简介

1. 观察App运行日志 2.Android 开发设计的编程语言 koltin Java c c 3.工程目录结构 4.Gradle 5.build.gradle 文件解析 plugins {id("com.android.application")//用了哪些插件 主配置文件版本控制 所以这里不用写版本 }android {namespace "com.tiger.myap…...

HUAWEI 华为交换机 配置基于VLAN的MAC地址学习限制接入用户数量 配置示例

组网需求 如 图 2-15 所示&#xff0c;用户网络 1 通过 LSW1 与 Switch 相连&#xff0c; Switch 的接口为 GE0/0/1 。用户网络2通过 LSW2 与 Switch 相连&#xff0c; Switch 的接口为 GE0/0/2 。 GE0/0/1 、 GE0/0/2 同属于 VLAN2。为控制接入用户数&#xff0c;对 VLAN2 进…...

编程笔记 Golang基础 042 文件处理

编程笔记 Golang基础 042 文件处理 一、文件处理二、Go语言文件处理创建文件和写入内容打开文件并按模式读写读取文件内容更高级的文件和IO操作改变文件权限目录操作 小结 一、文件处理 文件处理是指在计算机科学中&#xff0c;对存储在磁盘或其他持久性存储介质上的文件进行的…...

linuxlsof详解

lsof 是 List Open File 的缩写, 它主要用来获取被进程打开文件的信息&#xff0c;我们都知道&#xff0c;在Linux中&#xff0c;一切皆文件&#xff0c;lsof命令可以查看所有已经打开了的文件&#xff0c;比如: 普通文件&#xff0c;目录&#xff0c;特殊的块文件&#xff0c;…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)

这是系统中断服务程序的默认处理汇编函数&#xff0c;如果我们没有定义实现某个中断函数&#xff0c;那么当stm32产生了该中断时&#xff0c;就会默认跑这里来了&#xff0c;所以我们打开了什么中断&#xff0c;一定要记得实现对应的系统中断函数&#xff0c;否则会进来一直循环…...

react更新页面数据,操作页面,双向数据绑定

// 路由不是组件的直接跳转use client&#xff0c;useEffect&#xff0c;useRouter&#xff0c;需3个结合&#xff0c; use client表示客户端 use client; import { Button,Card, Space,Tag,Table,message,Input } from antd; import { useEffect,useState } from react; impor…...

CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found

Nginx1.24编译时&#xff0c;报LuaJIT2.x错误&#xff0c; configuring additional modules adding module in /www/server/nginx/src/ngx_devel_kit ngx_devel_kit was configured adding module in /www/server/nginx/src/lua_nginx_module checking for LuaJIT 2.x ... not…...