中科大计网学习记录笔记(十七):拥塞控制原理 | 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 通过其拥塞控制可以实现相对的公平性

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文学习—Model-based Adversarial Meta-Reinforcement Learning

Model-based Adversarial Meta-Reinforcement Learning Abstract1. Introduction2. Related work3 Preliminaries基于模型的强化学习&#xff08;MBRL&#xff09;:区别和联系&#xff1a; 4 Model-based Adversarial Meta-Reinforcement Learning4.1 Formulation 4.2 Computin…

LeetCode 每日一题 Day 88 - 94

2673. 使二叉树所有路径值相等的最小代价 给你一个整数 n 表示一棵 满二叉树 里面节点的数目&#xff0c;节点编号从 1 到 n 。根节点编号为 1 &#xff0c;树中每个非叶子节点 i 都有两个孩子&#xff0c;分别是左孩子 2 * i 和右孩子 2 * i 1 。 树中每个节点都有一个值&a…

好书推荐丨细说PyTorch深度学习:理论、算法、模型与编程实现

文章目录 写在前面深度学习推荐图书内容简介作者简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家推荐一本深度学习的全新正版书籍&#xff0c;感兴趣的小伙伴快来看看吧~ 深度学习 深度学习是机器学习的一个分支&#xff0c;它模仿人脑神经网络的工作原理进行复杂的…

蓝桥杯练习系统(算法训练)ALGO-986 藏匿的刺客

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 强大的kAc建立了强大的帝国&#xff0c;但人民深受其学霸及23文化的压迫&#xff0c;于是勇敢的鹏决心反抗。   kAc帝国防…

linux kernel物理内存概述(二)

目录 物理内存数据结构 设备数物理内存描述 物理内存映射 map_kernel map_mem zone数据结构 zone类型 物理内存数据结构 站在处理器角度&#xff0c;管理物理内存的最小单位是页面。使用page数据结构描述&#xff0c;通常默认大小4kB&#xff0c;采用mem_map[]数组来存…

学习java第一天(下载并配置环境+写第一个java程序)

一.安装 1.下载 直接去官网上选择与你电脑符合的版本下载 官网链接Java Archive Downloads - Java SE 8u211 and later &#xff08;拿我的为例 Windows x64版本&#xff09; ​ 2.然后安装好exe&#xff08;要让自己知道在哪&#xff09; 3.配置环境 大佬链接&#xff1…

“每一次的感应,都是对环境的温柔拥抱。”#STM32项目二 《感应开关盖垃圾桶》【上】

“每一次的感应&#xff0c;都是对环境的温柔拥抱。”#STM32项目二 《感应开关盖垃圾桶》【上】 前言预备知识1.定时器介绍11.1软件延时的优缺点1.2定时器工作原理1.3定时器的分类1.4 STM32F103C8T6定时器资源1.5通用定时器介绍 2.定时器介绍22.1定时器计数模式2.2定时器时钟源…

【VTKExamples::PolyData】第四十六期 Reflection

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例Reflection,并解析接口vtkReflectionFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. Reflection …

Docker容器详解

一、概述 1.1 基本概念&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚…

SpringCloud 各自组件的停更/升级/替换

一、停更不停用 现在 SpringCloud 不再修复 bug&#xff0c;也不再接收合并请求&#xff0c;也不再发布新版本&#xff0c;但是目前还是可以继续使用的。 二、以前的组件 以前 SpringCloud 常用的组件如下图&#xff0c;服务的注册和发现使用 Eureka&#xff0c;服务的负载和调…

深入理解c指针(七)

目录 十、回调函数和qsort函数 1、回调函数 2、简单介绍size_t 数据类型 3、qsort 排序函数 3.1 qsort函数简单举例1&#xff08;升序排序&#xff09; 3.2 qsort函数简单举例2&#xff08;字符串长度排序&#xff09; 3.3 简单讲解 -> 操作符 3.4 常见符号的ASCII…

如何利用会话式AI提升你的工作效率?

会话式AI如何改变我们的生活和工作 在当今时代&#xff0c;内容策略的重要性日渐凸显&#xff0c;良好的内容策略能够与流量及转化率紧密相连&#xff0c;成为企业在内容策略领域不容忽视的营销工具之一。 然而&#xff0c;目前内容同质化现象严重&#xff0c;企业若想在内容营…

iPaas数据传输的方式

一、iPaas平台概述 iPaas&#xff08;Integration Platform as a Service&#xff09;平台&#xff0c;作为一种先进的云计算服务模式&#xff0c;为开发者和企业提供了一种全面且灵活的应用集成解决方案。它构建在PaaS&#xff08;Platform as a Service&#xff09;基础之上…

【C++庖丁解牛】初始化列表 | Static对象 | 友元函数

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1. 再谈构造函数1.1 …

WiFi模块赋能智能手表:拓展功能与提升连接性

随着科技的不断进步&#xff0c;智能手表正逐渐成为现代人生活中不可或缺的智能配饰。其中&#xff0c;WiFi模块的应用为智能手表带来了更多强大的功能和更高的连接性&#xff0c;为用户提供了更为便捷、智能化的使用体验。本文将深入探讨WiFi模块在智能手表中的应用。 远程通信…

RK DVP NVP6158配置 学习

NVP6158简介 NVP6158C是一款4通道通用RX&#xff0c;提供高质量图像的芯片。它接受来自摄像机和其他视频信号的独立4通道通用输入来源。它将4通道通用1M至8M 7.5P视频格式数字化并解码为代表8位ITU-R BT.656/1120 4:2:2格式的数字分量视频&#xff0c;并将单独的BT.601格式与27…

40个Python字符串实例

Python 字符串是 Python 编程语言中最常用的数据类型之一&#xff0c;它可以表示文本或一组字符。Python 中的字符串是不可变的序列&#xff0c;意味着一旦创建&#xff0c;其值就不能被修改。下面是一些关于 Python 字符串的介绍。 概述 创建字符串&#xff1a;可以使用单引…

如何找回删除的文件?5个数据恢复方法

电脑已经成为我们生活和工作不可或缺的一部分。然而随着电脑使用频率的增加&#xff0c;误删文件的情况也时有发生。一旦重要的文件被误删&#xff0c;很多人会感到惊慌失措。实际上只要掌握了一些有效的数据恢复方法&#xff0c;就有可能找回那些被误删的文件。本文将为你介绍…

指针中的回调函数与qsort的深度理解与模拟

今天给大家在更新一下指针类型的知识&#xff0c;这里讲到了一个库函数sqort&#xff0c;以及回调函数的理解。 望喜欢 目录 回调函数 qsort函数 qsort模拟实现 回调函数 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数…

Mac清理电脑垃圾工具CleanMyMac X4.15中文免费版下载

嘿&#xff0c;亲爱的Mac用户们&#xff0c;你们是否曾经想象过你的电脑是一座美丽的城市&#xff0c;而垃圾文件则是那些不速之客&#xff0c;悄悄堆积&#xff0c;影响着城市的整体美观。今天&#xff0c;我们就来聊聊Mac为什么会产生垃圾文件&#xff0c;这些垃圾文件会对你…