哈工大计算机网络课程传输层协议之:拥塞控制原理剖析

news2024/10/7 16:22:44

哈工大计算机网络课程传输层协议之:拥塞控制原理剖析

文章目录

  • 哈工大计算机网络课程传输层协议之:拥塞控制原理剖析
    • 拥塞成因和代价:场景1
    • 拥塞成因和代价:场景2
    • 拥塞成因和代价:场景3
    • 如何进行拥塞控制
      • 拥塞控制的方法
      • TCP拥塞控制的基本原理
        • 加性增—乘性减:AIMD
        • 慢启动:SS
        • Loss事件的处理
        • 总结
        • TCP拥塞控制算法

拥塞(Congestion)

  • 非正式定义:“太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理。”
  • 表现:
    • 分组丢失(路由器缓存溢出)
    • 分组延迟过大(在路由器缓存中排队,排队延迟)
  • 拥塞控制 vs. 流量控制
    • 流量控制更多是从个人角度出发,考虑端对端交互时的异常问题处理。而拥塞控制更多是从群体角度出发,考虑的是整体网络的传输问题,控制整个网络的传输负载。
  • A top-10 problem

拥塞成因和代价:场景1

  • 两个senders,两个receivers
  • 一个路由器,无限缓存,链路带宽为C
  • 没有重传

在这里插入图片描述

由于假定的条件是路由器无限缓存,因此链路上不存在路由器的缓存排队延迟,即无论发送方发送多少数据,都可以传输到接收方,且没有丢包的问题,也就没有重传。

在这样的场景下,会得到什么的吞吐率和时延?

在这里插入图片描述

λin表示发送方发送数据速率,λout表示路由器的输出速率。

因此有两个Sender和Receiver,当Sender的发送量在链路带宽C/2时,发送端的发送速率和接收方的接收速率成线性关系。而当超过C/2时,达到了路由器传输数据的最大链路带宽,因此路由器的吞吐率稳定在C/2上。

当输入速率接近C/2时,理论上,时延接近于无限大,因为已经达到了路由器的最大链路带宽。

即便是这样理想的场景下,拥塞带来的网络传输影响也是很大的。

拥塞成因和代价:场景2

一个路由器,有限buffers

Sender重传分组

在这里插入图片描述

在这种场景下,路由器的缓存是有限的,因此也就有了丢包和重传问题。λin’表示原始的发送数据加上重传数据。

  • 情况a:假设Sender能够通过某种机制获知路由器Buffer信息,因此,Sender在路由器有空闲才发数据,也就是不会出现数据在路由器阻塞的情况,因此在发送速率 <= R/2时,一直都是线性的关系,λin = λout。
  • 情况b:丢失后才重发,由于还存在丢失重发的分组,所以可知有:λin’ > λout,意味着有效的吞吐率变低了。
  • 情况c:分组丢失和定时器超时后都重发,相比情况b多了重传的场景,因此λin’变得更大,有效的吞吐率变得更低了。

在这里插入图片描述

拥塞的代价:

  • 为了保证数据的正确传输,需要做更多的工作,比如重传。
  • 造成资源的浪费。

拥塞成因和代价:场景3

场景3引入多跳的路由网络。

  • 四个发送方
  • 多跳路由器,路由器缓存有限。
  • 超时/重传

在这里插入图片描述

问题:随着λin和λin’不断增加,会怎么样?

如上图所示,以路由器R2举例来说,承载着主机A与主机C的信息交互,以及主机B和主机D的信息交互,这两个不同的链路间在R2路由器上存在资源竞争,也同样会导致R2的缓存排队、丢包等问题,导致重发,进一步造成网络拥塞,路由器吞吐率降低,跟场景2、情况c的情况类似。

而这种场景跟上面场景的最大区别在于,当数据到达R2路由器时,说明该数据已经被上一跳的路由器存储转发处理完了。然后,在R2时,由于拥塞导致分组被丢掉了,此时上一跳路由器的对数据的处理也是被浪费掉了。

所以,在多跳网络中,拥塞会造成另一个代价:

  • 当分组被丢弃时,任何用于该分组的“上游”传输能力全都被浪费掉了。
  • 造成了网络性能、吞吐率更差了

在这里插入图片描述

如上图所示,在这样一个多跳网络中,网络吞吐率会变成这样一个趋势。当λin’比较小时,网络的拥塞情况还比较小,重发的情况比较少,所有网络吞吐率和发送率还成线性关系。而当发送速率增大到网络传输最大带宽时,拥塞情况不断加重,吞吐率迅速下降。甚至当发送速率增大到一定值时,吞吐率降低到几乎0。因为这种情况下可能网络中传输的已经全被都是不断重发的分组,而没有数据被正确接收了,说明这个网络已经瘫痪掉了。

如何进行拥塞控制

针对上述的拥塞问题如何解决?

通过上面的分析我们知道,造成拥塞的核心原因是发送端无休止的以太快的速率发送数据,而不关心网络当下的状态。因此要解决拥塞问题,直观的方法就是根据当前网络的传输状态,控制发送端的发送速度。

思考:为什么拥塞控制放在传输层做,而不是放在应用层?

拥塞控制的方法

两种方法:

  1. 端到端的拥塞控制
  • 网络层不需要显示的提供支持
  • 由端系统通过观察loss, delay等网络行为判断是否发生拥塞
  • TCP采取的就是这种方法
  1. 网络辅助的拥塞控制
  • 路由器向发送方显示地反馈网络拥塞信息
  • 基于简单的拥塞指示(1bit):SNA,DECbit,TCP/IP,ATM
  • 指示发送方应该采取何种速率

TCP拥塞控制的基本原理

处理拥塞需要面对三个问题:

  1. 如何控制Sender的发送速率:

在这里插入图片描述

CongWin):

  • 需要动态调整以改变发送速率
  • 反映所感知到的网络拥塞

CongWin表示拥塞窗口的大小,计算发送的最后一个字节的序列号 减去 最后一个接收到的ACK字节的序列号,这个计算的差值即表示当前网络中正在传输的数据大小。 让计算得到的差值小于设置的拥塞窗口大小。

这种拥塞控制的是已发送但还未收到ACK的数据量大小,因此粗略来讲,在一个RTT时间内,会发送CongWin窗口大小的数据量,因此发送速率的计算就是拥塞窗口的大小 除以 RTT的大小。

  1. 如何感知网络拥塞?

    • Loss丢失事件:timeout或3个重复ACK
    • 发送loss时间后,发送方减低速率
  2. 如何合理地调整发送速率?

    • 加性增—乘性减:AIMD(拥塞避免机制)

    • 慢启动:SS

加性增—乘性减:AIMD

原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss

方法:AIMD

  • Additive Increase:每个RTT将CongWin增大一个MSS(指最大段长度)—拥塞避免思想
  • Multiplicative Decrease:发送loss后将CongWin减半

在这里插入图片描述

慢启动:SS

TCP连接建立时,初始化CongWin=1,例如:

  • MSS = 500 byte,RTT = 200ms
  • 初始速率 = 20 kbps

由于初始速率比较小,可用带宽可能远远高于初始速率:

  • 如果开始阶段还是使用线性增长的话,可能需要增长很长一段时间才能增长到可用带宽,存在资源浪费

  • 因此,希望在开始阶段快速增长

原理:

  • 当连接开始时,发送速率成指数增长。

伪代码如下所示:

在这里插入图片描述

在指数型增长阶段:

  • 每个RTT将CongWin范围
  • 收到每个ACK进行操作

采用慢启动这种方式时,即使初始速率很慢,但是可以快速攀升,比如下图所示过程:

在这里插入图片描述

那么对于上述涉及的两种增加方式(线性增长、指数增长),它们之间是什么联系?

何时应该指数型增长切换为线性增长(拥塞避免)?

A:当CongWin达到Loss事件前值的1/2时。

实现方法:

  • 需要定义一个Threshold变量。
  • 当Loss丢失事件发生时,用Threshold这个变量表示Loss事件前CongWin的1/2。
  • 当指数型增长达到Threshold值时,将指数型增长变为线性增长,进入拥塞避免机制。

在这里插入图片描述

初始时,拥塞窗口设置为1,在前4个时刻,是指数型增长,大小变到8。当CongWin到达Threshold时,将指数型增长变更为线性增长,只增加1。到第8个时刻时,拥塞窗口增大到12。此时,检测到网络有拥塞,在TCP早期版本时,会重新把拥塞窗口将为1,再重新执行上述过程(先指数、再线性)。

同时,当网络发送拥塞时,也会更新Threshold得值,把Threshold的值更新为发生拥塞时,拥塞窗口大小的一半,这里也就是Threshold=6。

TCP早期版本对于发生拥塞时的处理过于激进,直接把大小重新变为1。因此,后续的TCP版本进行了改进,将拥塞窗口更新为发送拥塞时的一半大小,跟Threshold大小一致。因此,更新后直接进入线性增长阶段。

Loss事件的处理

我们知道,检测丢失事件有两种方式:收到3个重复ACK和Timeout事件。

拥塞窗口面对这两种事件的处理方式是不一样的:

  1. 3个重复ACKs:
    • CongWin拥塞窗口切到一半(乘性减)
    • 然后再线性增长
  2. Timeout超时事件:
    • CongWin直接设为1个MSS(即减到拥塞窗口的最小值)
    • 然后再指数增长
    • 达到threshold后,再线性增长

为什么这两种事件的处理要不一样?

细想一下,当收到3个重复ACKs,说明这个时候整体网络中还是有传输数据段Segment的能力的(包括传输乱序数据段或是返回的ACK数据),代表可能拥塞的情况相对来说没有那么严重。

而当触发timeout超时事件时,可能是发送的数据拥塞到没能到达接收端,或是返回的ACK甚至都没能到达发送端, 说明拥塞的情况相对来说是更严重的,因此需要使用更激进的策略来减少发送速率。

总结

  1. 当拥塞窗口低于Threshold时,发送端处于慢启动阶段,拥塞窗口呈指数型增加,来探测网络中的拥塞情况。
  2. 当拥塞窗口超过Threshold时,说明发送速率已经超过了一定阈值,需要降低发送速率。此时,发送端处于拥塞避免阶段,拥塞窗口成线性增长。
  3. 当发送端收到3个连续的ACK时,说明当前网络可能已经遇到了拥塞,首先将Threshold参数设置为当前拥塞窗口的一半,并将拥塞窗口降低到Threshold值。
  4. 而当timeout事件发送时,说明网络拥塞的情况可能更严重,此时Threshold参数设置为当前拥塞窗口的一半,并将拥塞窗口直接设置为1个MSS的大小。

拥塞控制原理总结汇总:

在这里插入图片描述

TCP拥塞控制算法

TCP拥塞控制算法过程伪代码如下所示:

在这里插入图片描述

下面我们以一个简单的例题,来检测对上述原理的理解

例题: 一个TCP连接总是以1KB的最大段长发送TCP段,发送方有足够多的数据要发送。当拥塞窗口为16KB时发生了超时,如果接下来的4个RTT(往返时间)时间内的TCP段的传输都是成功的,那么当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是多少?

解答: 因为拥塞窗口为16KB时,发送的是超时事件,所以根据上面的介绍,此时拥塞窗口会直接降为1KB,同时Threshold降为拥塞窗口的一半,即=8KB。而之后会首先进入慢启动阶段,在1个RTT后,CongWin=2, 2个RTT后,CongWin=4,3个RTT后,CongWin=8。此时到达了Threshold的阈值,之后要变成线性增长,因此当第4个RTT后,CongWin=9。

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

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

相关文章

哈工大计算机网络课程网络层协议之:网络层服务概述

哈工大计算机网络课程网络层协议之&#xff1a;网络层服务概述 文章目录 哈工大计算机网络课程网络层协议之&#xff1a;网络层服务概述网络层概述网络层核心功能—转发与路由网络层核心功能—连接建立网络层服务模型虚电路网络与数据报网络虚电路网络虚电路(VC)的具体实现VC转…

Web 渗透测试攻防之浅述信息收集

前言 众所周知渗透测试的本质是信息收集&#xff0c;在渗透测试中信息收集的质量直接关系到渗透测试成果的与否。在对系统进行渗透测试前的信息收集是通过各种方式获取所需要的信息&#xff0c;收集的信息越多对目标进行渗透的优势越有利。通过利用获取到的信息对系统进行渗透…

【前端布局篇】响应式布局 Bootstrap 移动端布局

前言 1. 布局介绍 布局:layout 对事物的全面规划和安排 页面布局&#xff1a;对页面的文字、图形或表格进行格式设置。包括字体、字号、颜色纸张大小和方向以及页边距等。 网页布局&#xff1a;利用html搭建结构与内容&#xff0c;使用CSS添加装饰 网页布局有很多种方式&a…

Flink 学习七 Flink 状态(flink state)

Flink 学习七 Flink 状态(flink state) 1.状态简介 流式计算逻辑中,比如sum,max; 需要记录和后面计算使用到一些历史的累计数据, 状态就是:用户在程序逻辑中用于记录信息的变量 在Flink 中 ,状态state 不仅仅是要记录状态;在程序运行中如果失败,是需要重新恢复,所以这个状态…

基于Django的疫情困扰下的民慧钢材销售分析及纾困策略-计算机毕设 附源码87656

基于Django的疫情困扰下的民慧钢材销售分析及纾困策略 摘 要 疫情之下&#xff0c;实体经济面临下行压力。2019年以来&#xff0c;新冠肺炎疫情卷土而来&#xff0c;各地地疫情防控形势严峻&#xff0c;许多中小微企业经营发展屡次遭受打击。面对疫情常态化的社会现实&#x…

[学习笔记] [机器学习] 13. 集成学习进阶(XGBoost、OTTO案例实现、LightGBM、PUBG玩家排名预测)

视频链接数据集下载地址&#xff1a;无需下载 学习目标&#xff1a; 知道 XGBoost 算法原理知道 otto 案例通过 XGBoost 实现流程知道 LightGBM 算法原理知道 PUBG 案例通过 LightGBM 实现流程知道 Stacking 算法原理知道住房月租金预测通过 Stacking 实现流程 1. XGBoost 算…

SPI协议(嵌入式学习)

SPI协议 概念时序SPI通信模式图四种通信模式 优缺点 概念 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种串行外设接口协议&#xff0c;用于在数字系统之间进行通信。它被广泛应用于嵌入式系统和电子设备中&#xff0c;用于连接微控制器、传感器、存储器、显示…

Linux权限管理(超详解哦)

Linux权限 引言文件访问者的分类文件类型与访问权限文件类型访问权限 文件权限值的表示方法修改权限的指令chmod修改文件权限通过角色/-/权限来修改通过三个八进制数修改 chown修改所有者chgrp修改所属组umask修改或查看文件权限掩码文件创建时的权限 目录的权限粘滞位 总结 引…

【命令参数】SVN - 环境配置及常用命令参数

目录 环境配置 基本语法 参数指令 SVN是一款基于C/S架构的版本控制系统&#xff0c;能够实现对产品项目的版本托管以及对源码库的高效管理。而掌握SVN中的一些命令参数&#xff0c;一定程度上可以使日常效率得到进一步提升。 环境配置 为在调用时更加便捷&#xff0c;通常会…

我们如何实现业务操作日志功能?

1. 需求 我们经常会有这样的需求&#xff0c;需要对关键的业务功能做操作日志记录&#xff0c;也就是用户在指定的时间操作了哪个功能&#xff0c;操作前后的数据记录&#xff0c;必要的时候可以一键回退&#xff0c;今天我就为大家实现这个的功能&#xff0c;让大家可以直接拿…

哈尔滨工业大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 哈尔滨工业大学&#xff08;A&#xff09;考研难度&#xff08;☆☆☆☆☆&#xff09; 哈尔滨工业大学计算机考研招生学院是计算学部、计算学部&#xff08;深圳&#xff09;和计算学部&#xff08;威海&#xff09;…

C++完成烧烤节管理系统

背景&#xff1a; 这次我们结合今年淄博烧烤做一个餐厅管理系统&#xff0c;具体需求如下&#xff0c;我们选择的是餐饮商家信息管理 问题描述&#xff1a; 淄博烧烤今年大火&#xff0c;“进淄赶烤”是大家最想干的事情&#xff0c;淄博烧烤大火特火的原因&#xff0c;火的…

C语言之文件的读写(1)

前面三部分已经给大家介绍过了&#xff0c;网址发给大家方便大家复习 打开方式如下&#xff1a; 文件使用方式 含义 如果指定文件不存在 “r”&#xff08;只读&#xff09; 为了输入数据&#xff0c;打开一个已经存在的文本文件 出错 “w”&#xff08;只写&#xff09; 为了输…

文心一言眼里的Java世界

目录 一、Java基础教程系列二、先听听文心一言怎么说&#xff1f;三、话不多说&#xff0c;开干。1、要有一个正确的Java学习路线&#xff0c;做一个细致的Java学习规划。2、学习资料推荐3、书中自有黄金屋&#xff0c;书中自有颜如玉4、自学周期推荐5、效率为先6、哪吒的学习方…

Redis 数据分布优化:如何应对数据倾斜?

Redis 核心技术与实战 笔记 作者&#xff1a; 蒋德钧 在切片集群中&#xff0c;数据会按照一定的分布规则分散到不同的实例上保存。比如&#xff0c;在使用 Redis Cluster 或 Codis 时&#xff0c;数据都会先按照 CRC 算法的计算值对 Slot&#xff08;逻辑槽&#xff09;取模&a…

Hi3861开发第一节:环境搭建,并顺利完成编译

本次教程在纯Windows下环境搭建&#xff01;&#xff01;! 1.DecEco Device Tool下载和安装 步骤一&#xff1a;下载devicetool-windows-tool-3.1.0.400.zip版&#xff0c;下载网址&#xff1a;https://device.harmonyos.c om/cn/develop/ide#download 步骤二&#xff1a;解压…

Win10连接网络打印机提示0x0000052e?

Win10连接网络打印机提示0x0000052e&#xff1f;Win10电脑中用户连接网络打印机的时候&#xff0c;出现了错误代码0x0000052e&#xff0c;导致用户无法正常使用网络打印机&#xff0c;这时候用户可以通过卸载最新补丁、替换系统文件并修改注册表等方法来解决问题。 方法一&…

Spring6 i18n国际化

随着互联网的发展&#xff0c;越来越多的企业和个人开始关注全球化的需求。在这个背景下&#xff0c;多语言支持成为了一个重要的课题。Spring框架作为一款优秀的Java开发框架&#xff0c;提供了丰富的i18N支持&#xff0c;能帮助搬砖工快速实现多语言应用。 1、i18n概述 国际…

【Android开发基础】计算器逻辑层代码补充

文章目录 一、引言二、设计1、案例2、算法设计 三、编码1、UI界面设计&#xff08;1&#xff09;按钮样式设计&#xff08;2&#xff09;主界面布局设计 2、编码&#xff08;1&#xff09;控件初始化&#xff08;2&#xff09;事件监听器 四、附件 一、引言 描述&#xff1a;关…