TCP 拥塞控制

news2024/11/13 23:22:21

概念详解

TCP拥塞控制是网络通信中的一个关键机制,它通过动态调整发送数据的速率来避免网络拥塞。以下是TCP拥塞控制的详细概念解释:

  1. 拥塞窗口(CWND, Congestion Window):

    • 定义:发送方在收到接收方的确认(ACK)之前,可以发送的数据量。
    • 作用:控制发送方的发送速率,是TCP拥塞控制的核心参数。
  2. 慢启动阈值(ssthresh, Slow Start Threshold):

    • 定义:CWND的一个阈值,用于决定何时从慢启动阶段转换到拥塞避免阶段。
    • 作用:平衡网络探测速度和稳定性。
  3. 往返时间(RTT, Round-Trip Time):

    • 定义:数据包从发送到接收到确认的时间。
    • 作用:用于估算网络延迟,影响重传超时时间的计算。
  4. 最大报文段大小(MSS, Maximum Segment Size):

    • 定义:TCP可以发送的最大数据段的大小。
    • 作用:影响CWND的增长和网络效率。
  5. 慢启动(Slow Start):

    • 概念:TCP连接初始阶段,CWND从1个MSS开始,每收到一个ACK就翻倍。
    • 目的:快速探测可用带宽,但避免一开始就发送大量数据。
  6. 拥塞避免(Congestion Avoidance):

    • 概念:CWND达到ssthresh后,每个RTT只增加1个MSS。
    • 目的:在接近网络容量时,缓慢增加发送速率,避免突然的大幅增加导致拥塞。
  7. 快速重传(Fast Retransmit):

    • 概念:收到3个重复ACK时,立即重传丢失的数据包。
    • 目的:快速响应丢包,不等待重传计时器超时。

“3个重复ACK”解释

在TCP(传输控制协议)中,当发送方发送数据给接收方后,接收方会对收到的数据包发送确认(ACK)回给发送方。三个重复的ACK(Acknowledgement),也称为三个冗余ACK或三个重复确认,是指发送方连续收到三个具有相同确认号的ACK。这种情况通常表明在数据传输过程中发生了数据包丢失。
为什么会收到三个重复的ACK?
当接收方收到一个失序的数据包时(即接收到的数据包的序号不是预期的下一个序号),它会立即重复发送上一个连续序列的ACK,以通知发送方某个数据包可能已经丢失。由于TCP是基于累积确认的,这个重复的ACK会确认接收方最后一个按序接收的数据包。如果发送方连续收到三个这样的重复ACK,这通常意味着接收方在期待的数据包之后已经收到了后续的数据包,但期待的那个数据包却没有到达。
三个重复的ACK的作用
在TCP的拥塞控制机制中,收到三个重复的ACK是一个重要的信号,它触发了快速重传(Fast Retransmit)和快速恢复(Fast Recovery)机制:

  • 快速重传:发送方不需要等待重传计时器超时,而是立即重传那个被认为丢失的数据包。
  • 快速恢复:发送方调整拥塞窗口(CWND)和慢启动阈值(ssthresh),然后继续数据传输,而不是重新开始慢启动过程。

这种机制使TCP能够更快地响应丢包事件,减少等待时间,提高数据传输的效率。
三个重复的ACK的作用

在TCP的拥塞控制机制中,收到三个重复的ACK是一个重要的信号,它触发了快速重传(Fast Retransmit)和快速恢复(Fast Recovery)机制:

  • 快速重传:发送方不需要等待重传计时器超时,而是立即重传那个被认为丢失的数据包。
  • 快速恢复:发送方调整拥塞窗口(CWND)和慢启动阈值(ssthresh),然后继续数据传输,而不是重新开始慢启动过程。

这种机制使TCP能够更快地响应丢包事件,减少等待时间,提高数据传输的效率。

  1. 快速恢复(Fast Recovery):

    • 概念:快速重传后,设置ssthresh为CWND的一半,CWND为ssthresh加3个MSS。
    • 目的:在轻微拥塞时保持较高的传输速率。
  2. 加法增大乘法减小(AIMD, Additive Increase Multiplicative Decrease):

    • 概念:拥塞避免阶段线性增加CWND,拥塞时将CWND减半。
    • 目的:在保持高效率的同时,快速响应网络拥塞。
  3. 超时重传(Timeout Retransmission):

    • 概念:当重传计时器超时时,重新发送未确认的数据包。
    • 作用:处理严重的网络拥塞或大量丢包情况。
  4. 接收窗口(RWND, Receive Window):

    • 定义:接收方能够接收的数据量。
    • 作用:与CWND一起决定发送方的发送窗口大小。
  5. 发送窗口(Send Window):

    • 定义:实际可以发送的数据量,是CWND和RWND的最小值。
    • 作用:综合考虑网络拥塞和接收方处理能力。

这些概念共同构成了TCP的拥塞控制机制,使TCP能够适应不同的网络条件,在保证可靠传输的同时,尽可能高效地利用网络资源。

拥塞控制阶段

TCP拥塞控制主要包括四个阶段:慢启动、拥塞避免、快速重传和快速恢复。以下是这些阶段的详细解释:

  1. 慢启动(Slow Start):

    • 目的:快速探测网络可用带宽,但避免一开始就发送大量数据。
    • 过程:
      • 连接建立时,CWND初始化为1个MSS。
      • 每收到一个ACK,CWND增加2n个MSS。
      • CWND呈指数增长(n):1, 2, 4, 8, 16, …
    • 结束条件:
      • CWND达到慢启动阈值(ssthresh)
      • 出现丢包(超时或收到重复ACK)
    • 转换:
      • 如果达到ssthresh,进入拥塞避免阶段
      • 如果出现丢包,进入快速重传/快速恢复或重新开始慢启动
  2. 拥塞避免(Congestion Avoidance):

    • 目的:在接近网络容量时,缓慢增加发送速率,避免突然的大幅增加导致拥塞。
    • 过程:
      • 每个RTT,CWND增加1个MSS
      • CWND线性增长
    • 结束条件:
      • 出现丢包(超时或收到重复ACK)
    • 转换:
      • 如果收到3个重复ACK,进入快速重传/快速恢复
      • 如果发生超时,重新进入慢启动
  3. 快速重传(Fast Retransmit):

    • 目的:快速响应丢包,不等待重传计时器超时。
    • 触发条件:收到3个重复的ACK
    • 过程:
      • 立即重传丢失的数据包
      • 不等待重传计时器超时
    • 转换:直接进入快速恢复阶段
  4. 快速恢复(Fast Recovery):

    • 目的:在轻微拥塞时保持较高的传输速率。
    • 过程:
      • 将ssthresh设置为当前CWND的一半
      • 将CWND设置为新的ssthresh加上3个MSS(对应3个重复ACK)
      • 每收到一个重复的ACK,CWND增加1个MSS
      • 当收到新的ACK(确认新数据)时,将CWND设置为ssthresh
    • 结束条件:
      • 收到新的ACK,确认所有未确认的数据
      • 发生超时
    • 转换:
      • 如果收到新的ACK,进入拥塞避免阶段
      • 如果发生超时,重新进入慢启动
  5. 超时处理:

    • 当发生超时时(可能在任何阶段):
      • 将ssthresh设置为当前CWND的一半
      • 将CWND重置为1个MSS
      • 重新进入慢启动阶段

这些阶段共同构成了TCP的拥塞控制机制,使TCP能够适应不同的网络条件。通过动态调整CWND,TCP在保证可靠传输的同时,尽可能高效地利用网络资源,避免网络拥塞。

图引用自《计算机网络自顶向下方法 》图3-52 拥塞窗口的演化

  • 在该图中,阈值初始等于8个MSS。在前8个传输回合, Tahoe和Reno采取了相同的动作。拥塞窗口在慢启动阶段以指数速度快速爬升,在第4轮传输时到达了阈值。然后拥塞窗口以线性速度爬升,直到在第8轮传输后出现3个冗余ACK。注意到当该丢包事件发生时,拥塞窗口值为12×MSS。于是 ssthresh的值被设置为0.5 x cwnd=6MSS。在 TCP Reno下,拥塞窗口被设置为cwnd=0.5 x cwnd+3=9MSS,然后线性地增长。在 TCP Tahoe下,拥塞窗口被设置为1个MSS,然后呈指数增长,直至到达 ssthresh值为止,在这个点它开始线性增长。
    ———————————————————————————————

注:Tahoe和Reno都是TCP拥塞控制算法

图引用自《计算机网络自顶向下方法 》图3-52 拥塞窗口的演化

拥塞控制算法

TCP拥塞控制算法是为了解决网络中的数据传输拥塞问题而设计的一系列算法。它们通过动态调整数据的发送速率来避免网络过载,确保数据传输的高效和稳定。不同的拥塞控制算法在处理网络拥塞的策略和效率上有所不同。以下是几种主要的TCP拥塞控制算法及其区别:

1. TCP Tahoe

  • 特点:引入了慢启动、拥塞避免和快速重传机制。
  • 缺点:没有快速恢复机制。当发生丢包时,Tahoe会将拥塞窗口(CWND)减少到1个MSS,并重新开始慢启动过程,这可能导致性能下降。

2. TCP Reno

  • 特点:在Tahoe的基础上增加了快速恢复机制。
  • 优势:当检测到三个重复的ACK时,除了立即重传丢失的数据包外,还会进入快速恢复阶段,减少了超时重传对性能的影响。
  • 缺点:在多个数据包丢失的情况下,Reno的性能可能不理想。

3. TCP NewReno

  • 特点:改进了Reno的快速恢复机制。
  • 优势:能够更好地处理一个RTT内多个数据包丢失的情况。
  • 工作方式:在快速恢复阶段,只有当所有丢失的数据包都被确认后,才会退出快速恢复阶段。

4. TCP Vegas

  • 特点:基于预测的拥塞避免算法,通过监测数据包的往返时间(RTT)来预测和避免拥塞。
  • 优势:能够在拥塞发生之前调整发送速率,从而避免丢包,提高网络利用率。
  • 缺点:在高带宽延迟积(BDP)网络中,Vegas的性能可能不如基于丢包的算法。

5. TCP BBR (Bottleneck Bandwidth and RTT)

  • 特点:基于带宽和RTT的拥塞控制算法,旨在最大化网络的吞吐量同时最小化延迟。
  • 优势:不依赖于丢包作为拥塞的信号,能够更有效地利用可用带宽,减少排队延迟。
  • 工作方式:周期性地测量最小RTT和最大带宽,据此调整发送速率。

总结

不同的TCP拥塞控制算法在设计理念、性能优化方面有所不同。Tahoe和Reno侧重于通过丢包信号来调整拥塞窗口大小,而Vegas和BBR则试图通过预测和测量网络状态来避免拥塞的发生。随着网络环境的不断变化和发展,新的拥塞控制算法不断被提出,以适应不同的网络条件和应用需求。

Reno 图示

+----------------+  超时  +----------------+  CWND>=ssthresh  +-------------------+  3个重复ACK  +-------------------+
|                |------->|                |----------------->|                   |------------>|                   |
|   慢启动        |        |   慢启动        |                  |   拥塞避免         |             |   快速重传          |
|  (Slow Start)  |<-------|  (Slow Start)  |<-----------------| (Congestion       |             | (Fast Retransmit) |
|                | 收到新ACK |                |  超时/收到新ACK  |  Avoidance)      |              |                   |
+----------------+        +----------------+                  +--------+----------+              +--------+----------+
       ^                                                                 |                                   |
       |                                                                 |                                   |
       +-----------------------------------------------------------------+                                   |
                                      收到新的ACK/超时                                                         |
                                                                                                             |
                                                                                                             |
                                                                                                             v
                                                                                                   +-------------------+
                                                                                                   |                   |
                                                                                                   |   快速恢复         |
                                                                                                   | (Fast Recovery)   |
                                                                                                   |                   |
                                                                                                   +-------------------+
                                                                                                           |
                                                                                                           | 收到新的ACK
                                                                                                           v
                                                                                                   +-------------------+
                                                                                                   |                   |
                                                                                                   |   拥塞避免         |
                                                                                                   | (Congestion       |
                                                                                                   |  Avoidance)       |
                                                                                                   |                   |
                                                                                                   +-------------------+

状态流转条件详解:

  1. 慢启动(Slow Start):

    • 超时:如果在慢启动阶段发生超时,TCP将ssthresh设置为当前CWND的一半,并将CWND重置为1 MSS,继续留在慢启动阶段。
    • CWND>=ssthresh:当CWND达到或超过慢启动阈值(ssthresh)时,进入拥塞避免阶段。
  2. 拥塞避免(Congestion Avoidance):

    • 超时/收到新ACK:如果在拥塞避免阶段发生超时,或者收到新的ACK,TCP将ssthresh设置为当前CWND的一半,并将CWND重置为1 MSS,回到慢启动阶段。
    • 3个重复ACK:如果收到三个重复的ACK,进入快速重传阶段。
  3. 快速重传(Fast Retransmit):

    • 触发条件:收到三个重复的ACK时,立即重传丢失的数据包,然后进入快速恢复阶段。
  4. 快速恢复(Fast Recovery):

    • 收到新的ACK:在快速恢复阶段,当收到新的ACK确认新的数据传输成功时,TCP将CWND设置为ssthresh的大小,然后进入拥塞避免阶段。
    • 超时或继续收到重复ACK:如果在快速恢复阶段再次发生超时,或者继续收到重复的ACK,TCP将根据具体实现可能重新进入慢启动或继续快速恢复的调整逻辑。

这个图示和说明提供了TCP拥塞控制机制中各个阶段的全量视图,包括快速重传和快速恢复阶段的正确位置及其与其他状态之间的流转条件。希望这次的解释能够清晰地展示TCP拥塞控制的完整流程。

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

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

相关文章

华为网络工程师证书等级有哪些?怎么备考?

华为网络工程师是由华为技术厂商推出的一系列网络工程师认证&#xff0c;其主要目的就是为了培养了验证网络工程师在华为技术以及解决方案方面的拥有一定的专业知识及技能&#xff0c;该证书分为多个等级&#xff0c;涵盖了不同网络领域及技术&#xff0c;也为众多的网络工程师…

SqlServer: 安装或升级到SqlServer2022

一、下载安装包。 https://info.microsoft.com/ww-landing-sql-server-2022.html?lcidzh-CN 简单注册一下之后&#xff0c;就可以下载安装包了。 或者在我的资源中下载&#xff1a; https://download.csdn.net/download/yenange/89709660 系统要求&#xff1a; https://…

暴力破解和撞库攻击有什么区别,怎么防御暴力破解和撞库攻击

在网络世界中&#xff0c;我们的账户安全时刻面临着各种威胁。其中&#xff0c;暴力破解和撞库攻击就是常见的两种危险手段。今天&#xff0c;就让我们深入了解这两种攻击方式的含义&#xff0c;并学习如何有效地进行防护。 暴力破解的含义 暴力破解&#xff0c;就如同一个不…

java【day03】---(Vue-Element)

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xf…

星闪NearLink短距无线连接技术

星闪NearLink短距无线连接技术&#xff0c;作为华为主导的新一代无线短距通信标准技术&#xff0c;自2020年起由中国工信部牵头制定标准&#xff0c;旨在为万物互联时代提供更高效、更稳定的连接方式。 类似技术介绍 AirDrop&#xff08;苹果&#xff09; AirDrop是苹果公司开发…

Apifox使用学习

Apifox是API文档、API调试、API Mock、API自动测试一体化协作平台&#xff0c;定位SwaggerPostmanMockJMeter。 只需要定义好API文档&#xff0c;API调试、API数据Mock、API自动化测试就可以直接使用。 API文档和API开发测试使用同一个工具&#xff0c;API调试完成后即可保证…

PPT图表制作不再难!这款在线PPT软件让办公更简单!

ppt图表怎么制作&#xff1f; 在当下注重视觉呈现的数字化时代&#xff0c;有效的信息传递和数据可视化变得越来越重要。不管是商业演示、学术报告还是项目汇报&#xff0c;一份精心制作的PPT演示文稿&#xff0c;往往能够起到事半功倍的效果。其中&#xff0c;图表作为PPT中不…

n*n矩阵,输出矩阵中任意两点之间所有路径

题目1&#xff1a;给你一个正整数n&#xff0c; 构造一个n*n的四项链表矩阵。 要求&#xff1a; 1.使用四项链表 2.矩阵从左到右&#xff0c;从上到下值依次为1,2,3,4,......n*n 题目2&#xff1a;基于题目1&#xff0c; 在n*n链表矩阵中&#xff0c;输出矩阵中任意两点之间所有…

5款文案自动生成器,高质量创意文案一键为你生成

在当今竞争激烈的内容创作领域&#xff0c;每一个字、每一句话都承载着巨大的价值。对于创作者而言&#xff0c;文案自动生成器的出现&#xff0c;犹如在茫茫大海中点亮了一座指引方向的灯塔。它们不仅为创作者节省了宝贵的时间和精力&#xff0c;更像是一把神奇的钥匙&#xf…

5.4树,森林

5.4.1树的存储结构 可采用顺序存储结构or链式存储结构 要求能唯一的反映树中各节点之间的逻辑 1.双亲表示法 采用一端连续的空间来存储,同时在每个节点中增设一个伪指针,指示双亲节点在数组中的下标 优点:找双亲节点方便,找孩子不方便 attention:由于根节点无双亲节点,所以…

C++:关于反向迭代器的学习分享

前言&#xff1a; 小编仅是一位初学者&#xff0c;所以对于C的理解有限&#xff0c;文章大概率会出现表达不清楚可能也只是因为小编不知道如何更好表达&#xff0c;本文章仅作为一个学习的总结分享。 反向迭代器的概念 反向迭代器故名思意解释反向的迭代器&#xff0c;与正向迭…

地铁X光危险品检测数据集

地铁X光危险品检测数据集介绍 数据集概览 本数据集旨在为地铁X光安检系统提供高质量的危险品检测训练素材。数据集包含18类常见危险品&#xff0c;总共6265张图像&#xff0c;每张图像均经过精心标注&#xff0c;确保了数据的质量和一致性。数据集适用于多种格式&#xff08;Y…

Spring优缺点和SpringBoot基础和搭建

前言 Spring框架是一个流行的Java企业级开发框架&#xff0c;旨在简化应用程序开发。它的核心特性包括依赖注入和面向切面编程&#xff0c;提供了灵活性和强大的社区支持。然而&#xff0c;Spring也存在学习曲线陡峭和配置复杂等缺点。 Spring Boot是基于Spring的项目&#x…

2024年高教社杯数学建模竞赛须知——三大注意事项

为了让大家在最后一天更好的备注国赛&#xff0c;我们今日将结合2024年国赛的新规给大家讲解国赛中三大主要的事项&#xff1a; 论文模版问题——国赛乃至大部分数模竞赛从来没有给出任何的论文模版&#xff0c;大部分的模版均为一次又一次学生、老师内部传播形成。资料使用问…

文件包含PHP伪协议利用方法

首先我们需要把配置文件php.ini 在 php.ini ⾥有两个重要的参数 allow_url_fopen 、allow_url_include&#xff1b; allow_url_fopen:默认值是 ON。允许 url ⾥的封装协议访问⽂件&#xff1b; allow_url_include:默认值是 OFF。不允许包含 url ⾥的封装协议包含⽂件&#x…

深度学习-VGG16原理和代码详解

VGG16 原理和代码详解 VGG16 是由牛津大学的 Visual Geometry Group (VGG) 提出的深度卷积神经网络&#xff0c;发表于 2014 年的论文 “Very Deep Convolutional Networks for Large-Scale Image Recognition”。VGG16 是其中的一种结构&#xff0c;由 16 层网络组成&#xf…

win系统安装mysql,使用mysqldump,pycharm使用mysqldump,避坑

文章目录 下载mysql的win客户端设置系统环境变量验证是否可用pycharm使用mysqldump异常问题排查 下载mysql的win客户端 官网下载地址如果下载旧版本&#xff0c;需自行到Archives里面找 本人使用的是mysql5.7&#xff0c;找到相应版本后&#xff0c;点击Download下载 设置系统…

Docker入门笔记

Docker 文章目录 Docker1. 下载 &#xff08;centos&#xff09;2. 部署 MySQL3. 常用命令4. 数据卷5. 自定义镜像6. Java 项目部署 1. 下载 &#xff08;centos&#xff09; 卸载旧版 yum remove docker \docker-client \docker-client-latest \docker-common \docker-lates…

个人旅游网(3)——功能详解——旅游路线功能

文章目录 一、旅游路线分类功能1.1、接口详解1.1.1、findAll 二、路线分类下的旅游路线功能2.2、接口详解2.2.1、findRouteListByCid 三、点击单条旅游路线查看其详情功能3.1、接口详解3.1.1、findRouteListByRid 四、分页功能4.1、导入依赖4.2、配置项的配置4.3、实现分页 一、…

Zotero tags(action and tags for zotero)怎么使用

先在下面的网址安装action and tags for zotero&#xff1a; https://github.com/windingwind/zotero-actions-tags 视频讲解&#xff1a; Zotero Tag -> Actions and Tags for Zotero - 远不止标签管理&#xff01;_哔哩哔哩_bilibili 使用方法&#xff1a; 找到一些表情…