DJ3-7 TCP:拥塞控制

news2024/11/18 3:35:31

目录

一、拥塞控制概述

二、TCP 拥塞控制算法

1. 慢启动

2. 拥塞避免

3. 快速恢复

4. 状态转换图

5. 拥塞窗口的变化举例


一、拥塞控制概述

1. 如何限制发送方发送速率

TCP 拥塞控制设置 拥塞窗口 变量,表示为 cwnd:

  • 它对发送方向网络中发送流量的速率进行了限制
  • 发送方中未被确认的数据量不会超过 cwnd 和 rwnd 中的最小值

LastByteSent - LastByteAcked < min{CongWin, RcvWindow}

我们后面假设接收缓冲区足够大,以至可以忽略接收窗口 rwnd 的限制,因此在发送方中未被确认的数据量仅受限于拥塞窗口 cwnd 。

2. 发送方如何感知到拥塞

定义 丢包事件 为:

  • 超时
  • 三个重复的 ACK

一旦发生丢包事件,发送方就认为在发送方到接收方的路径上出现了拥塞。

3. 发送发如何选择发送速率

① 一个丢失的报文段意味着拥塞,因此当丢失报文段时应当降低 TCP 发送方的速率。

② 一个确认报文段指示该网络正在向接收方交付发送方的报文段,因此,当对先前未确认报文段的确认到达时,能够增加发送方的速率。

二、TCP 拥塞控制算法

1. 慢启动

① 增长方式

初始速率慢但以指数增长

连接开始时,设置 cwnd = 1MSS,则发送速率为 1MSS/RTT;假设 MSS=500B 且 RTT=200ms,则初始发送速率为 20Kbps,远远小于有效带宽。因此,希望尽快达到期待的速率,故将以二的指数方式增加速率。

工作方式:cwnd 的值以 1 个 MSS 开始并且每当传输的报文段首次被确认就增加 1 个 MSS 。

② 停止增长

(Tahoe 版) 检测到丢包事件时:

  1. 将慢启动阈值 ssthresh 设置为 cwnd/2
  2. 将 cwnd 重置为 1 并重新开始慢启动

为什么分开处理?因为三次重复确认表示网络还具有一定的数据传输能力

③ 加性递增,乘性递减

  • 加性递增:每个 RTT 内收到一个确认,拥塞窗口就增加一个 MSS
  • 乘性递减:发生丢包事件后将慢启动阈值 ssthresh 减半

④ 由指数增长到线性增长

当检测到拥塞时 ssthresh 被设置为 cwnd/2,当 cwnd 从头开始重新增加并达到 ssthresh 时,继续让 cwnd 指数增长是很危险的,因为一个 RTT 就会使 cwnd 达到之前拥塞时的值。因此,我们需要结束慢启动并转移到拥塞避免模式。

2. 拥塞避免

  • 当 cwnd 低于阀值,发送方处于慢启动阶段,窗口指数增长;
  • 当 cwnd 高于阀值,发送方处于拥塞避免阶段,窗口线性增长。

① 增长方式

工作方式:每个 RTT 只将 cwnd 的值增加一个 MSS,即发送 N 个报文段,每到达一个 ACK 就增加 1/N 个 MSS 的拥塞窗口长度。

② 停止增长

(Reno 版) 检测到超时时:

  1. 将慢启动阈值 ssthresh 设置为 cwnd/2
  2. 将 cwnd 重置为 1 并进入快速恢复

(Reno 版) 检测到三次重复确认时:

  1. 将慢启动阈值 ssthresh 设置为 cwnd/2
  2. 将 cwnd 设置为 cwnd/2+3 并进入快速恢复

3. 快速恢复

专门针对慢启动和拥塞控制状态中的三个重复确认事件

① 丢失报文段的 ACK 到达之前:

每当收到一个冗余的 ACK,cwnd 的值增加一个 MSS

居然是指数增长

② 丢失报文段的 ACK 到达之前出现丢包事件:

重传之后又超时了或者新报文段的 ACK 超时了

  1. 将慢启动阈值 ssthresh 设置为 cwnd/2
  2. 将 cwnd 重置为 1 并进入慢启动

③ 丢失报文段的 ACK 到达之后:

降低 cwnd 后进入拥塞避免状态

4. 状态转换图

5. 拥塞窗口的变化举例

第八轮发生的是三个重复确认事件

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

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

相关文章

A+CLUB管理人支持计划第五期 | 鸣熙资产

免责声明 本文内容仅对合格投资者开放&#xff01; 私募基金的合格投资者是指具备相应风险识别能力和风险承担能力&#xff0c;投资于单只私募基金的金额不低于100 万元且符合下列相关标准的单位和个人&#xff1a; &#xff08;一&#xff09;净资产不低于1000 万元的单位&a…

init与zygote的启动流程

文章目录 1.init进程启动过程1.1init进程的入口函数1.1.1创建和启动所需要的文件目录1.1.2对属性进行初始化与启动属性服务1.1.3子进程信号处理函数1.1.4.重启死去的进程1.1.5.解析init.rc配置文件 1.2解析init.rc配置文件1.3解析Service语句1.4init启动Zygote1.4.1start方法 1…

Android kotlin 实现仿淘宝RecyclerView和对应下的指示器功能

文章目录 一、实现效果二、引入依赖三、源码实现1、指示器样式(自定义类)2、RecyclerView适配器3、主视图实现一、实现效果 指示器样式,第二个gif是用模拟器的,gif有小问题,第三个截图没问题 二、引入依赖 在app的build.gradle在添加以下代码 1、implementation com.githu…

数字电路基础---组合逻辑

目录 数字电路基础---组合逻辑 1、简介 2、实验任务 3、程序设计 4、仿真验证 数字电路基础---组合逻辑 FPGA 或者 IC 内部的逻辑一般包括组合逻辑和时序逻辑&#xff0c;组合逻辑一般指的是一些门电路或者选择器、比较器一起组成的逻辑。 1、简介 数字电路根据逻辑功能的…

程序员必备超好用下载器IDM(Windows下载)

程序员必备现役最强下载器IDM&#xff08;Windows下载&#xff09; 1 介绍 IDM&#xff0c;全称Internet Download Maneger&#xff0c;在下载界可谓是大名鼎鼎&#xff0c;不仅仅是其强大的32线程下载&#xff0c;还因为其无与伦比的资源嗅探功能&#xff0c;Internet Downlo…

监听关闭浏览器触发事件

关闭和刷新页面都会触发&#xff0c;一般都不用来做弹窗提示&#xff0c;一般用来做数据操作 // 监听页面关闭 清除本地缓存 window.onbeforeunload function (e) { localStorage.removeItem("statement"); }; // 监听页面关闭 提醒是否关闭 现在不允许自定义内容了…

生命周期监听的使用和源码解析

定义SpringApplicationRunListener来监听springApplication的启动 1.通过实现springApplicationRunListener来实现监听。 2.在 META-INF/spring.factories 中配置 org.springframework.boot.SpringApplicationRunListener自己的Listener。 在默认的springboot配置中就有给我…

主数据概念过时了吗,在这些大数据技术背景下,数据平台等新技术的出现,我们还需要主数据吗?

当企业信息化发展到一定程度时, 数据管理必然会被提升为企业的一个重要管理领域。数据管理的好坏程度, 很大程度上影响着企业信息化进程, 决定着企业信息化最终的成效。 企业信息化建设基本上都是从部门级开始的, 从部门的实际业务需要出发独立建设信息系统, 随着这些信息系统…

2023年地图产业研究报告

第一章 行业概况 地图行业是一个快速发展且关键的信息技术领域&#xff0c;通过收集、处理和可视化地理信息&#xff0c;为用户提供导航、位置服务、地理信息系统和地图数据分析等应用。地图行业的发展受益于全球定位系统&#xff08;GPS&#xff09;技术的进步和移动设备的普…

K-verse 合作伙伴访谈|Dalgomz 将韩国旅游体验带入元宇宙

■ 请向我们介绍 Dalgomz 。 你好&#xff01;我是 Yong-Min Park&#xff0c;Dalgomz 项目的首席执行官。我们的项目专注于通过使用区块链技术创建旅游福利会员计划来促进韩国江原道雪岳地区的旅游业。从雪岳地区开始&#xff0c;Dalgomz NFT 持有者在韩国各地旅行时可以获得现…

基于局部自适应滤波器的双边滤波器matlab完整代码分享

双边滤波(Bilateral filter)是一种可以保边去噪的滤波器。其输出像素的值依赖于邻域像素的值的加权组合。从效果来说,双边滤波可产生类似美肤的效果。皮肤上的皱纹和斑,与正常皮肤的差异,远小于黑白眼珠之间的差异,因此前者被平滑,而后者被保留。如图所示(右图为经过处…

Oracle 查询优化改写(第五章)

第五章 使用字符串 1.遍历字符串 SELECT 天天向上 内容&#xff0c;level&#xff0c;substr(天天向上, LEVEL, 1) 汉字拆分FROM Dual CONNECT BY LEVEL < Length(天天向上);2.计算字符在字符串中出现的次数 3.从字符中删除不需要的字符 若员工姓名有元音字母AEIOU&#x…

pikachu靶场-敏感信息泄露

敏感信息泄漏简述 攻击方式 常见的攻击方式主要是扫描应用程序获取到敏感数据 漏洞原因 应用维护或者开发人员无意间上传敏感数据&#xff0c;如 github 文件泄露 敏感数据文件的权限设置错误&#xff0c;如网站目录下的数据库备份文件泄露 网络协议、算法本身的弱点&#xff…

阿里云ACK worker节点硬盘扩盘

1、在控制台选择要扩盘的服务器&#xff0c;进入硬盘并选择扩盘 2、进入盘后点击已备份扩盘 3、选择扩盘方式以及要扩盘的最后大小 4、确认是否按我们的要求扩盘的 5、扩盘分区和文件系统 6、手动扩盘操作 ACK扩盘文档 查看分区情况 [rootiZj6caed975ouwzuyu564vZ ~]# ls…

C++技能 ( 1 ) - 使用Lambda表达式【详解】

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 C技能系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream w…

SpringBoot项目启动成功但接口访问404

问题描述&#xff1a;SpringBoot项目启动成功&#xff0c;但使用postman调接口时报404 分析&#xff1a;找不到路径&#xff0c;controller未生效。 解决&#xff1a;将com.local.coupon.template.templateimpl改为com.local.coupon.template。SpringBoot会扫描到com.local.co…

2023-6-16-第七式桥接模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

外包能转正吗?外包员工能变正式员工吗?

外包员工能变正式员工吗&#xff1f;这里辟谣一波&#xff0c;许多外包都说有转正机会。实际情况是几乎等于零。其中&#xff0c;三方外包更是可以直接和零划等号。三方外包的转正&#xff0c;往往就是给个内推机会&#xff0c;然后和面试官会熟悉一些。 然而这些都没什么价值…

【SpringCloud入门】-- 初识Eureka注册中心

目录 1.SpringCloudEureka简介 2.什么是CAP原则&#xff1f; 3.注册中心的概念&#xff1f; 4.SpringCloud其他注册中心 5.搭建Eureka注册中心 6.eureka的配置(主要是server&#xff0c;instance&#xff0c;client) 7.eureka集群概念 8.eureka集群搭建 1.SpringCloudE…

Unity 之 使用后处理的方式实现暗角效果

Unity 之 后处理URP工程实现边角压暗效果 一&#xff0c;URP工程配置二&#xff0c;代码调用三&#xff0c;实现原理 一&#xff0c;URP工程配置 在Hierarchy界面&#xff0c;创建空物体 GameObject&#xff0c;右键选择Volume菜单下的Global Volume。 创建后的结果&#xff1…