【网络】TCP拥塞窗口(第六篇)

news2024/11/27 12:52:09

拥塞窗口(Congestion Window,简称cwnd)是TCP协议中用于防止网络拥塞的一种重要机制。它是在发送端采用的一种“拥塞避免”算法和“慢速启动”算法相结合的机制,用于控制发送端向网络中注入的数据量,从而避免网络拥塞。以下是关于拥塞窗口的详细解释:

定义与作用

  • 定义:拥塞窗口是TCP发送端维护的一个可滑动窗口,用于控制发送端在任何时候可以发送的最大字节数。它的大小取决于网络的拥塞程度,并动态变化。
  • 作用:防止网络拥塞,通过调整发送速率来适应网络状况,确保网络的平稳运行。

工作原理

拥塞窗口的工作原理主要基于“慢速启动”和“拥塞避免”两种算法:

  1. 慢速启动(Slow Start)
    • 在TCP连接建立后,拥塞窗口初始化为一个较小的值(通常为1个报文段的大小)。
    • 每收到一个来自接收端的确认(ACK),拥塞窗口的大小就增加一个报文段的大小。
    • 当拥塞窗口的大小达到某个阈值(slow start threshold,简称ssthresh)时,慢速启动阶段结束,进入拥塞避免阶段。
  2. 拥塞避免(Congestion Avoidance)
    • 在拥塞避免阶段,拥塞窗口的大小不再以指数方式增长,而是改为线性增长。
    • 具体来说,每经过一个往返时间(RTT),拥塞窗口的大小就增加1个报文段的大小。
    • 如果在传输过程中出现丢包(即未收到确认),则认为网络发生拥塞,此时会将ssthresh设置为当前拥塞窗口大小的一半(但不小于2),并将拥塞窗口重置为1,重新开始慢速启动过程。

相关算法

除了慢速启动和拥塞避免算法外,TCP还采用了快速重传(Fast Retransmit)和快速恢复(Fast Recovery)算法来进一步优化拥塞控制:

  • 快速重传:当接收端收到一个失序的报文段时,会立即发送重复确认(duplicate ACK)给发送端。如果发送端连续收到三个重复确认,就认为有报文段丢失,并立即重传该报文段,而无需等待超时定时器到期。
  • 快速恢复:在快速重传后,发送端将ssthresh设置为当前拥塞窗口大小的一半,并将拥塞窗口设置为ssthresh加上3个报文段的大小。然后,每收到一个重复的确认,拥塞窗口就增加1个报文段的大小,并发送一个新的报文段。当下一个确认新数据的ACK到达时,拥塞窗口被设置为ssthresh,进入拥塞避免阶段。

网络中的链路容量和交换结点中的缓存和处理机都有着工作的极限,当网络的需求超过它们的工作极限时,就出现了拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。常用的方法就是:

  1. 慢开始、拥塞控制

  2. 快重传、快恢复

  3. 一切的基础还是慢开始,这种方法的思路是这样的:

    1.  发送方维持一个叫做“拥塞窗口”的变量,该变量和接收端口共同决定了发送者的发送窗口;

    2.  当主机开始发送数据时,避免一下子将大量字节注入到网络,造成或者增加拥塞,选择发送一个1字节的试探报文;

    3.  当收到第一个字节的数据的确认后,就发送2个字节的报文;

    4.  若再次收到2个字节的确认,则发送4个字节,依次递增2的指数级;

    5.  最后会达到一个提前预设的“慢开始门限”,比如24,即一次发送了24个分组,此时遵循下面的条件判定:

上述方法的目的是在拥塞发生时循序减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够的时间把队列中积压的分组处理完毕。慢开始和拥塞控制算法常常作为一个整体使用,而快重传和快恢复则是为了减少因为拥塞导致的数据包丢失带来的重传时间,从而避免传递无用的数据到网络。快重传的机制是:

-1. 接收方建立这样的机制,如果一个包丢失,则对后续的包继续发送针对该包的重传请求;

-2. 一旦发送方接收到三个一样的确认,就知道该包之后出现了错误,立刻重传该包;

-3. 此时发送方开始执行“快恢复”算法:

       *1. 慢开始门限减半;

       *2. cwnd设为慢开始门限减半后的数值;

       *3. 执行拥塞避免算法(高起点,线性增长);  

总结

拥塞窗口是TCP协议中用于防止网络拥塞的重要机制。通过慢速启动和拥塞避免算法,TCP能够动态地调整发送速率以适应网络状况。同时,快速重传和快速恢复算法进一步提高了TCP的拥塞控制性能。这些算法共同确保了TCP网络的高效、稳定运行。

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

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

相关文章

MySQL数据库介绍及基础操作

目录: 一.数据库介绍 二.数据库分类 三. 数据库的操作 四. 常用数据类型 五. 表的操作 一.数据库介绍 1.文件保存数据有以下几个缺点: 1.1文件的安全性问题 1.2文件不利于数据查询和管理 1.3文件不利于存储海量数据 1.4文件在程序中控制不方便 为了解决上述问题&…

python爬取B站视频实验

实验17:爬虫2 文章目录 实验17:爬虫21.实验目标及要求2. 实验主要内容3.实验小结 1.实验目标及要求 (1)掌握有关爬虫的包 (2)掌握爬虫方法 (3)爬取B站卡塔尔世界杯若干视频 2. 实验…

css实现水滴效果图

效果图&#xff1a; <template><div style"width: 100%;height:500px;padding:20px;"><div class"water"></div></div> </template> <script> export default {data() {return {};},watch: {},created() {},me…

【开端】一个看的奇奇怪怪类的解析

一、绪论 Java中正常的类语法如下&#xff1a; public class TmpMUser implements Serializable{ Data public class TmpMUser implements Serializable{/*** 序列*/private static final long serialVersionUID 1L;/*** */private String rowId;/*** */private String …

贪心算法篇--代码随想录算法训练营第二十七天| 134. 加油站,135. 分发糖果,860.柠檬水找零

134. 加油站 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 讲解视频&#xff1a; 贪心算法&#xff0c;得这么加油才能跑完全程&#xff01;LeetCode &#xff1a;134.加油站 题目描述&#xff1a; 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加…

如何设置 Visual Studio Code 的滚轮缩放功能

Visual Studio Code (VSCode) 是一个强大的代码编辑器&#xff0c;提供了许多便捷的功能来提高开发效率。其中之一就是通过滚轮缩放字体大小。以下是详细的设置步骤&#xff1a; 步骤 1&#xff1a;打开设置页面 首先&#xff0c;启动 Visual Studio Code。在左上角点击 “文…

【网红时代】揭秘网红IP分析与打造,专业自媒体运营攻略

在这个互联网高速发展的时代&#xff0c;网红IP和自媒体的影响力日益凸显&#xff0c;成为品牌传播和市场营销的重要力量。如何分析和打造网红IP&#xff0c;进行专业的自媒体运营&#xff0c;成为许多企业和个人关注的焦点。今天&#xff0c;让我们一起探索网红IP的奥秘&#…

2024高端网站制作公司推荐TOP3

2024这个数字化高度发达的时间段&#xff0c;一个专业、高端的网站不仅是企业形象的展示窗口&#xff0c;更是连接用户与品牌的重要桥梁。 随着技术的不断进步和设计理念的不断创新&#xff0c;许多高端网站制作公司凭借其卓越的技术实力、创新的设计理念和丰富的项目经验&…

逻辑判断1-逻辑基础知识

目录 一、命题1.命题介绍2.复合命题1. 联合命题(且)2. 选言命题(或者、要么)3. 假言命题(如果、才、否则)3.模态命题(可能必然)4.直言命题(所有有些)5.充分必要条件二、推理方式一、命题 1.命题介绍 命题的四种形式和关系 命题传递规则 A→B,B→C,可联立,得出A→…

视频汇聚/安防综合管理系统EasyCVR非管理员账户能调用分配给其他用户的通道是什么原因?

视频汇聚/安防综合管理系统EasyCVR视频监控平台&#xff0c;作为一款智能视频监控综合管理平台&#xff0c;凭借其强大的视频融合汇聚能力和灵活的视频能力&#xff0c;在各行各业的应用中发挥着越来越重要的作用。平台不仅具备视频资源管理、设备管理、用户管理、网络管理和安…

请求转发与重定向

一、介绍 设想这样一种情况&#xff0c;在我们登录某个网站时&#xff0c;登录页面会要求我们输入账号密码以及其他信息&#xff0c;当我们点击登录按钮时&#xff0c;浏览器会将我们的信息以及请求的一些信息发送到服务器端&#xff0c;在服务器端&#xff0c;我们可以从requ…

haralyzer 半自动,一次性少量数据采集快捷方法

使用场景&#xff1a;半自动&#xff0c;一次性少量数据采集需求在工作中还是不少遇到的&#xff0c;无论使用模拟的方式&#xff0c;或者破解都不太划算。其实这种需求&#xff0c;使用半自动爬虫是最简单的。不需要考虑网站反爬虫的问题&#xff0c;因为你使用的就是真实的浏…

【MySQL】用户管理——用户、用户信息、创建用户、删除用户、修改用户密码、数据库的权限、给用户权限、回收权限

文章目录 MySQL1. 用户管理1.1 用户1.1.1 用户信息1.1.2 创建用户1.1.3 删除用户1.1.4 修改用户密码 1.2 数据库的权限1.2.1 给用户权限1.2.2 回收权限 MySQL 1. 用户管理 为什么MySQL要引入用户管理&#xff1f; 如果我们只能使用root用户&#xff0c;这样存在安全隐患。因为r…

【JavaEE初阶】文件内容的读写—数据流

目录 &#x1f4d5; 引言 &#x1f334; 数据流的概念 &#x1f6a9; 数据流分类 &#x1f333; 字节流的读写 &#x1f6a9; InputStream&#xff08;从文件中读取字节内容) &#x1f6a9; OutputStream&#xff08;向文件中写内容&#xff09; &#x1f384; 字符流的…

Java、python、php版的邮件发送与过滤系统的设计与实现 (源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

iMES工厂管家:强大的工厂管理系统

iMES工厂管家&#xff1a;强大的工厂管理系统 在现代工厂管理中&#xff0c;iMES工厂管家作为一款功能强大的MES系统&#xff0c;为用户提供了全面的管理解决方案。本文将介绍iMES工厂管家的基本信息、特点、以及如何快速部署和使用。 软件简介 iMES工厂管家是一款基于.NetCor…

Android Studio设置 offline 模式

gradle3.6之前版本 在setting中选中Offline Work选项 gradle3.6之后的版本

Tied and Anchored Stereo Attention Network for Cloud Removal in Optical

论文名称 基于固定锚定立体注意力网络的光学遥感图像去云方法代码运行 论文代码 https://github.com/ningjin00/TASANet?tabreadme-ov-file 论文地址 1环境创建 模型环境给了这几个包&#xff0c;如果你自带环境 那就运行代码 提示缺哪个装哪个 python 3.12rasterio 1.3.10…

330进口高强度螺丝产品优势

330进口高强度螺丝是一种高性能紧固件&#xff0c;广泛应用于汽车、航空航天、重型机械、能源、基础设施建设等多个领域。这些螺丝之所以受到青睐&#xff0c;是因为它们在设计、材料选择、制造工艺等方面都达到了非常高的标准&#xff0c;确保了产品的卓越性能。以下是330进口…

四款录屏大师,一键搞定!新手也能快速上手?

现在随着新媒体的记录设备的不断更新迭代之下&#xff0c;我们记录生活的工具也愈来愈强大&#xff0c;不过如果需要记录电脑中的重要信息时&#xff0c;我们就需要借助录屏工具来实现了&#xff0c;所以今天整理了四款实用靠谱的录屏大师&#xff0c;有需要的朋友可以试试&…