5.8.9 TCP拥塞控制

news2025/1/10 13:16:39

5.8.9 TCP拥塞控制

我们先来说一个生活中的例子,在节假日到来的时候,由于高速公路免费通行,大量汽车涌上高速公路,最终造成交通拥堵,类似的情况也有可能出现在网络中,由于核心的交换设备在存储、带宽、速率等方面限制,如果数据量过大,就有可能造成核心设备的拥塞,所以我们知道拥塞控制的基本功能是避免网络发生拥塞,或者缓解已经发生的拥塞,TCP/IP拥塞控制机制主要在传输层TCP实现,TCP为了能够进行有效的拥塞控制需要通过拥塞窗口cwnd(congestion window)来衡量网络的拥塞程度,这里需要注意的是发送窗口的取值要依据拥塞窗口和接收窗口中取小的一个。鉴于**接收窗口rwnd(receive window)**在流量控制我们已然了解(5.8.8 TCP流量控制),所以这里我们只关注拥塞窗口。这里我们家庭接收窗口足够大。

为了更好的进行拥塞控制,在Internet标准中推荐使用以下四种技术。

  1. 慢启动(Slow start)
  2. 拥塞避免(Congestion avoidance)
  3. 快速重传(Fast retransmit)
  4. 快速恢复(Fast Recovery)

一、慢启动算法

指在TCP刚建立连接或者当网络发生拥塞超时的时候,将拥塞窗口cwnd设置成一个报文段大小,并且当cwnd ≤ \leq **ssthresh(门限值)**时,指数方式增大cwnd(即每经过一个传输轮次,cwnd加倍)

慢启动算法在两种情况下使用

  1. TCP刚建立连接的情况下
  2. 当网络发生拥塞超时的时候

二、拥塞避免算法

当cwnd ≥ \geq ssthresh时,为避免网络发生拥塞,进入拥塞避免算法,这时以线性方式增大cwnd(即每经过一个传输轮次,cwnd只增大一个报文段)

三、快速重传算法

指发送方如果连续收到三个重复确认的ACK(即对同一个报文段的重复的确认ACK),则立即重传该报文段,而不必等待重传定时器超时后再重传。

四、快速恢复算法

它是与快速重传拥塞控制算法配合使用的,是指当采用快速重传算法的时候,直接执行拥塞避免算法。这样可以提高传输效率。

在四个算法中我们看到门限值(ssthresh)是为了防止因数据发送过大而引起的网络拥塞,它是在几种拥塞控制算法之间切换的一个阈值,它的值设置为出现拥塞时的发送窗口值的一半,当然它必须要大于等于2,不管是慢启动还是在拥塞避免的阶段,只要网络发生超时的现象就必须退回到慢启动阶段,拥塞窗口从一个报文段大小重新开始,如果采用的是快速重传算法,则拥塞窗口就是调整之后的门限值,如此以来就可以提高网络的吞吐量。

五、四种算法的关系

如图

四者关系

在TCP刚建立连接使用慢启动拥塞控制算法,同时设定好初始的门限值,当拥塞窗口cwnd ≥ \geq 门限值ssthresh时则进入拥塞避免算法,图中我们可以看到,有两种情况发生

  1. 收到三个对同一报文段重复的确认ACK,那就说明网络中出现了丢包的情况,但情况不是很严重,因为确认报文段能够回复给发送方,此时的门限值设置成当前发送窗口值的一半,当然必须要大于等于2,直接进入到快速重传和快速恢复阶段。
  2. 如果出现了网络拥塞,出现网络拥塞的标志就是发送方发送了数据之后没有能够在重传时间RTO之内收到来自接收方的确认报文段,此时发送方就将缓存中的数据重新发送,此时就认为是网络因为发生了拥塞而丢包,此时就要减少进入到网络的报文段,重新执行慢启动拥塞控制算法。

这里我们应重点理解TCP拥塞控制中的慢启动、拥塞避免算法的背景、工作条件、算法的原理和算法的切换过程,对于慢启动我们应该知道它在开始的时候数值比较小,是一个报文段的长度,但是它是以指数的方式来增大拥塞窗口的过程所以这里就会出现一个问题,即网络进入饱和的状态非常容易,但是让网络从饱和状态恢复过来却很难,所以这里就需要给定一个门限值,当超过门限值之后我们就要执行拥塞避免的控制算法,它是以线性的方式来增大窗口,同时我们也知道发送窗口的取值是拥塞窗口和接收窗口之间的较小的那一个。

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

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

相关文章

ReentrantReadWriteLock读写锁

1、锁的分类 2、读写锁 读锁&#xff1a;共享锁 写锁&#xff1a;独占锁 3、代码01 class MyCache{private volatile Map<String,Object> map new HashMap<>();private ReadWriteLock rwLock new ReentrantReadWriteLock();public void put(String key,Obje…

Windows 如何打开和编辑.lnk文件

文章目录 一、背景二、查看/修改.lnk文件内容方案1&#xff1a;用type命令查看方案2&#xff1a;更改.lnk文件后缀为.txt再查看方案3&#xff1a;用记事本或NodePad打开方案4&#xff1a;使用HxD hex editor十六进制编辑器方案5&#xff1a;使用第三方库查看或编辑1. Matmaus/L…

GO语言中Protocol buffer简介

Protocol buffer 一、Protobuf简介 1.1、RPC 通信 对于单独部署&#xff0c;独立运行的微服务实例而言&#xff0c;在业务需要时&#xff0c;需要与其他服务进行通信&#xff0c;这种通信方式是进程之间的通讯方式&#xff08;inter-process communication&#xff0c;简称I…

机器学习 day23(激活函数的作用,线性激活函数的不足)

线性激活函数的局限性 如果我们将神经网络模型中的所有激活函数都设为线性激活函数&#xff0c;那整个神经网络模型就跟线性回归模型极其相似&#xff0c;且它无法拟合比线性回归模型更复杂的关系 激活函数全设为线性回归激活函数的例子 若把a带入a&#xff0c;则a可简化为…

Unity包体积优化实践

目录 简述优化前优化中assets目录资源ab包动态下发资源大小优化dll大小优化场景模型动态下载和加载优化assets目录后大小 lib目录优化目标架构裁剪代码优化代码和引用 其他优化项Shader优化Release模式编译选项 优化后 简述 在移动端App混合Unity开发的项目中&#xff0c;Unit…

VSCode配置C/C++环境(极简版)

预期结果&#xff1a; 首先安装扩展&#xff1a; 然后按照下面readme.txt中即可 链接&#xff1a;https://pan.baidu.com/s/16OV5Kr82i0gWCc4bvKs42g 提取码&#xff1a;zxcv

【模式识别目标检测】——模式识别技术车牌检测应用

目录 引入 一、模式识别主要方法 1、统计模式识别 2、基于隐马尔可夫模型识别 3、模糊模式识别 4、人工神经网络模式识别 总结 二、模式识别应用 1、车牌定位 2、车牌识别 参考文献&#xff1a; 引入 人在观察事物或现象时&#xff0c;常寻找它与其他事物或现象不同…

江苏某农商行稳健发展,软件安全推动金融服务新气象

​江苏某农商银行是全国最早成立的农商行之一。面对复杂严峻的内外部形势&#xff0c;该农商行在坚守服务“三农”与小微市场的同时&#xff0c;紧跟改革脚步&#xff0c;不断探索业务创新与数字化转型&#xff0c;实现经营稳健发展。 打造多维度数字化体系 驱动农商行创新发展…

QT之一种notifiation使用

简介 使用Qt5实现的消息提醒功能。 本文借助消息通知开源框架实现消息通知功能&#xff0c;软件包在上面。 使用说明 在pro工程中包含qtnotify2.pri 使用举例 include($$PWD/../src/qtnotify2.pri)// 包含头文件 #include "notifymanager.h"// 可建立全局实例 N…

深入理解MySQL数据库存储引擎及数据授权

深入理解MySQL数据库存储引擎及数据授权 一、MySQL数据库存储引擎的概述1.InnoDB引擎2.MyISAM引擎3.Memory引擎 二、MySQL数据授权问题1.用户管理2.数据库级授权3.表级授权4.列级授权5.收回权限 引言&#xff1a; MySQL是一款广泛应用的关系型数据库管理系统&#xff0c;为了满…

Linux常用命令——exportfs命令

在线Linux命令查询工具 exportfs 管理NFS共享文件系统列表 补充说明 exportfs 命令用来管理当前NFS共享的文件系统列表。 参数&#xff1a; -a 打开或取消所有目录共享。 -o options,...指定一列共享选项&#xff0c;与 exports(5) 中讲到的类似。 -i 忽略 /etc/exports 文…

IMX6ULL 移植篇-uboot网络命令NFS下载的文件的验证

一. 简介 本文承接以下文章&#xff1a; IMX6ULL 移植篇-uboot 网络命令NFS_凌肖战的博客-CSDN博客 之前学习了&#xff0c;如何通过NFS服务&#xff0c;向开发板下载 zImage文件&#xff08;内核镜像文件&#xff09;。 本文主要学习对 下载到开发板的 zImage文件内容进行验…

基于深度学习的高精度刀具检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度刀具检测识别系统可用于日常生活中或野外来检测与定位刀具目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的刀具目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

《MySQL》数据类型

文章目录 一&#xff0c;数值类型int类型bit类型小数类型float 和 decimal 二&#xff0c;字符串类型char和varchar日期和时间类型enum和set 一&#xff0c;数值类型 MySQL数据库里面的数据类型 int类型 int类型是一个大类 类型大小tinyint1字节 &#xff08;-27 ~ 27-1&a…

[NISACTF 2022]babyserialize(pop链构造与脚本编写详细教学)

目录 一、理清pop链并进行标注 二、如何编写相关脚本 三、过滤与绕过 1、waf的绕过 2、preg_match的绕过 做这道题作为pop链的构造很典型&#xff0c;也很有意思&#xff0c;因为还存在一些其他东西。 打开链接&#xff0c;这种很多类的PHP代码多半是需要构造pop链 一、理…

Excel如何排序?掌握3种排序方法!

我是个刚开始学习Excel的新手&#xff0c;对很多Excel的知识都不太熟悉。今天使用Excel进行表格排序时我又遇到了一些问题。请问Excel如何排序呢&#xff1f;希望给我一些建议。 在Excel中&#xff0c;排序是一种常见且有用的数据处理操作&#xff0c;它可以帮助您按照特定的规…

Java编译器IDE-Java学习帮手(移动端)

应用商店搜索"java" 编码测试 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List;public class SplitTime {private static List<Date> dateSplit(Date start…

【回溯算法part02】| 216.组合总和III、17.电话号码的字母组合

目录 &#x1f388;LeetCode216.组合总和||| ✨剪枝优化 &#x1f388;LeetCode17.电话号码的字母组合 &#x1f388;LeetCode216.组合总和||| 链接&#xff1a;216.组合总和||| 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数…

SONY索尼MP4视频变RSV文件修复方法

索尼MP4变RSV的原因分析 索尼新型号相机或者摄像机&#xff0c;如SONY A7S3&#xff0c;A7M4&#xff0c;FX3, FX6, FX9等&#xff0c;如果录像过程中有发生如下异常情况&#xff0c;如断电&#xff0c;死机&#xff0c;电量不足&#xff0c;机器摔倒&#xff0c;非常规操作&a…

confluence_table数据爬取

需求场景&#xff1a; 获取指定confluence文档中的表格数据&#xff0c;同时将页面中的附件下载在指定的文件夹中。 实现步骤&#xff1a; 开启confluence的远程api端口 选择使用的接口。 可以参考 官方接口文档 。 当前示例用到的接口为&#xff1a; Get content /rest/a…