TCP的拥塞控制

news2025/1/20 1:52:12

为了避免发送方无节制地发送数据,从而造成网络拥堵,所以 TCP 有一个拥塞控制。

  • 流量控制:作用于接收方控制发送者发送速度,从而使接收者来得及接收,防止分组丢失。

  • 拥塞控制:作用于网络防止过多数据发送到网络,避免网络负载过大。

TCP的拥塞控制

关于拥塞

拥塞窗口:大小根据网络拥堵程度动态变化。本质:使用算法控制拥塞窗口,避免过多的数据注入到网络。

拥塞窗口cwnd:网络没有出现拥塞,拥塞窗口增大一些,以便把更多的分组发送出去。网络出现拥塞或有可能出现拥塞,拥塞窗口减小一些,以减少注入到网络中的分组数,缓解网络出现的拥塞。

发送方如何知道是否拥塞:是否出现超时。

网络拥塞的时候,路由器会丢弃分组。如果没有收到确认报文,说明出现了丢弃分组的现象,也就是拥塞超时了。

如何控制拥塞:

TCP拥塞控制算法:慢开始拥塞避免快重传和快恢复

慢开始:先试探一下网络的负荷,由小到大逐渐增大发送窗口,也就是说,由小到达逐渐增大拥塞窗口值。指数增长。设立慢启动门限 ssthresh(slow start threshold)初始值。

拥塞避免:从指数增长变为线性增长

TCP重传:超时重传和快重传

超时重传:网络拥塞,导致规定时间未收到ACK确认包,此时超时重传。时间设置为之前的2倍,2次超时就说明网络差,不适合频繁反复发送,重新慢启动。ssthresh=cwnd/2。cwnd 重置为初始值。

快重传:个别报文丢失,但是网络没有拥塞。此时接收方对上一个报文一直发送确认包,发送了3次重复的确认包,接收方立即重传丢失的报文。

快恢复:调整门限值为ssthresh/2,然后执行拥塞避免算法。

实例1(出现网络拥塞导致报文丢失):

1.TCP连接进行初始化的时候,cwnd=1,ssthresh=16。

2.慢启动算法开始:cwnd初始值是1,每次发送方收到一个ACK拥塞窗口按照指数增长,2的指数倍。如下图1-2-4-8-16。

3.当ssthresh=cwnd时,启动拥塞控制算法,拥塞窗口按照规律线性增长,每收到一个确认包,cwnd加1。

4.当cwnd=24时,假设网络出现超时,发送方收不到确认ACK,网络拥塞了。此时设置ssthresh=12,(cwnd/2)

5.设置cwnd=1,开始慢启动算法,当cwnd=ssthresh=12,慢启动算法变为拥塞控制算法。

实例2(非网络拥塞产生的丢包):

1.接收方成功的接受了发送方发送来的M1、M2并且分别给发送了ACK。

2.接收方没有收到M3,而接收到了M4,显然,M4是失序报文段,接收方不能确认M4。

3.实行快重传算法,收到M4、M5等报文段时,不断重复的向发送方发送M2的ACK。

4.接收方收到3个重复的ACK,那么发送方不等重传计时器到期,由发送方尽早重传未被确认的报文段。

 

网络未拥塞,但个别报文在网络中丢失,发送方迟迟收不到确认,就会超时。误认为拥塞。重新满开始算法,拥塞窗口设为1,降低传输效率。

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

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

相关文章

【星戈瑞】Sulfo-Cyanine5 mal红色荧光Cy5-maleimide

Sulfo-Cyanine5 mal是一种具有强荧光信号的染料,主要应用于生物荧光成像领域。它的化学式为C38H43KN4O9S2,分子量为803.00。这种染料具有良好的水溶性,可在水溶液中稳定存在。它的光学特性包括吸收峰位于646 nm和发射峰位于662 nm&#xff0c…

公司新来了个00后软件测试工程师,一副毛头小子的样儿,哪想到是新一代的卷王...

内卷,是现在热度非常高的一个词汇,随着热度不断攀升,隐隐到了“万物皆可卷”的程度。 在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是…

计算机组成简答题整理

作者:爱塔居 多模块交叉存储器是如何加速CPU与存储器之间有效传输? 解:CPU同时访问多个模块,由存储器控制部件控制它们分别使用数据总线进行信息传递。对每一个存储模块来说,从CPU给出访存命令直到读出信息仍然使用了…

同惠 LCR数字电桥测试仪 TH2830

TH283X系列是新一代低成本,高性能紧凑型LCR数字电桥,采用最新工艺和高密度电路设计,浓缩大型LCR测试仪的精华,紧凑,小巧.取消传统机械电源开关,采用软件控制电源开关.0.05%的基本精度和良好的测试稳定性可与高端机型媲美.配备4.3寸LCD显示屏和全新升级的界面系统.美观大方,操作…

EXCEL: 查找符合多个条件,并且不重复的数据的个数的3种方法:公式,数据透视表,数组公式

1 目标问题:想筛选出(在a列月份为5)且不重复的b列数据有几个 有2个条件 查找第1列月份为5月的并且第2列不重复的数据个数 方法1:用加辅助列简单公式的办法 其实逻辑是更清晰的,就是显得步骤繁琐 第1个辅助列1,查找日期中的月份…

vps赚钱的小项目,通过售卖流量赚钱

文章目录 vps赚钱的小项目,通过售卖流量赚钱问题来源为什么能赚钱?赚钱速度呢?注册流程注册复制token 设置vps更新系统组件安装docker通过docker启动项目设置开机自启删掉容器 windows使用方法 查看网页端提现操作总结 vps赚钱的小项目&#…

Arc 打断拆分成多个线段

公司插件的梁齐斜板功能更新,设计师提出需求可以拆分弧梁,并能对齐到板顶。 本文只讨论拆分弧梁,椭圆再后续更新。 首先看以下弧形的创建api API中提供了三种方法 第一种时指定起点与终点,最后选择顶点形成的弧形 第二种是指定面…

MyBatis Plus 插件 动态数据源实现原理与源码讲解 (dynamic-datasource-spring-boot-starter-master)

目录 1. 介绍 2. 基本原理 3. 源码介绍 3.1 使用 AOP 拦截,方法执行前获取到当前方法要用的数据源 3.2 实现自定义 DataSource 接口,实现 DataSource 接口的 getConnect 方法做动态处理 1. 介绍 多数据源即一个项目中同时存在多个不同的数据库连接…

Win11的两个实用技巧系列之关闭分屏模式方法

怎么关闭Win11电脑分屏模式?Win11关闭分屏模式方法 有用户在使用电脑的时候不小心开启了电脑的分屏模式,导致自己无法正常的进行电脑操作了,本文就为大家带来了Win11关闭分屏模式方法,一起看看吧 Win11电脑分屏模式怎么关闭?有用…

oracle杂记

rlwrap…rpm 可以在sqlplus上翻下翻 然后alias sqlplus‘rlwrap sqlplus’ alias rmanrlwrap rman 数据库是由存储部分*.dbf 和运行的process和所使用的内存区域构成 远程安装前确认是否图形化能打开 yum -y install xorg-x11-apps xclock 启动顺序: nomount 启…

Unity VR开发教程 OpenXR+XR Interaction Toolkit 番外(一)用 Grip 键, Trigger 键和摇杆控制手部动画

文章目录 📕制作手部动画📕设置 Animation Controller📕添加触摸摇杆的 Input Action📕代码部分 在大部分 VR 游戏中,手部的动画通常是由手柄的三个按键来控制的。比如 Grip 键控制中指、无名指、小拇指的弯曲&#xf…

城际铁路列车控制系统

城际铁路列控系统在CTCS-2级列控系统基础上,应具备站间自动运行、车站定点停车及车站通过、折返作业、列车运行自动调整、车门/站台门(安全门或屏蔽门)防护及联动控制、列车运行节能控制等自动运行相关功能。 1、车载设备工作模式 城际铁路…

Access Specifier Manipulation解决方案

解释:AccessibleObject API 允许程序员绕过由 Java 访问说明符提供的 access control 检查。特别是它让程序员能够允许反映对象绕过 Java access control,并反过来更改私有字段或调用私有方法、行为,这些通常情况下都是不允许的 在面向对象编…

【微信小程序】微信支付接入全流程

一. 前置条件 接入支付首先得需要有企业资质&#xff0c;并开通企业对公户注册微信支付并进行对公户打款认证 二. 开始接入 1. 下载微信支付的AP证书 2. 服务端接入微信支付 2.1 引入相关maven配置 <dependency><groupId>com.github.binarywang</groupId&…

Nginx内存池(二)——小块内存分配

内存分配源代码&#xff1a; void * ngx_palloc(ngx_pool_t *pool, size_t size) { #if !(NGX_DEBUG_PALLOC)if (size < pool->max) { // 用内存池分配内存return ngx_palloc_small(pool, size, 1);} #endif// mallocreturn ngx_palloc_large(pool, size); }static ngx_…

对话风变科技 CTO|从线上教育服务商到教育资源供给平台,风变背后的第二增长曲线思维

Authing 是用户中心团队&#xff0c;我们是业务系统&#xff0c;大家冲刺一个目标、再做合并&#xff0c;然后让基于多租户的 B 端产品成功上线。那个阶段刚好有个客户卡在当时的时间点&#xff0c;一定要赶着上线&#xff0c;最后 Authing 的协作让我们赢得了客户信任&#xf…

基于scrapy+mongodb的校园数据获取

Scrapy以及MongoDB介绍&#xff1a; Scrapy: Scrapy是一个Python编写的开源网络爬虫框架&#xff0c;可以帮助开发人员高效、快速地从互联网上抓取、提取和处理数据。Scrapy拥有强大的可扩展性&#xff0c;可以通过定制管道、中间件和Spider来自定义爬虫行为&#xff0c;同时它…

( 位运算 ) 371. 两整数之和 ——【Leetcode每日一题】

❓371. 两整数之和 难度&#xff1a;中等 给你两个整数 a 和 b &#xff0c;不使用 运算符 和 - ​​​​​​​&#xff0c;计算并返回两整数之和。 示例 1&#xff1a; 输入&#xff1a;a 1, b 2 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;a 2, b 3 输出…

源码解读guava cache get接口的秘密

guava cache是谷歌开源的一种本地缓存&#xff0c;实现原理类似于ConcurrentHashMap&#xff0c;使用segments分段锁&#xff0c;保证线程安全&#xff0c;支持高并发场景。同时支持多种类型的缓存清理策略&#xff0c;包括基于容量的清理、基于时间的清理、基于引用的清理等。…

WPF基础使用

wpfwindows presentation foundation 官方文档 https://learn.microsoft.com/zh-cn/dotnet/api/?viewnet-7.0 一&#xff1a;WPF窗口设置为透明 在wpf中要将窗口设置为透明&#xff0c;除了将窗口背景色的Alpha分量设置为0以外&#xff0c;你还必须将窗口的AllowsTransparency…