首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >慢启动 && 拥塞避免 | 快速重传 && 快速恢复

慢启动 && 拥塞避免 | 快速重传 && 快速恢复

作者头像
看、未来
发布于 2021-10-09 03:52:29
发布于 2021-10-09 03:52:29
76400
代码可运行
举报
运行总次数:0
代码可运行

愿打开这篇对你有帮助。

之前在 《再探TCP/IP》那篇里面写过,但是写的我自己的都看不懂了,重新整理一下。


文章目录

概念清晰

拥塞控制:为了防止过多的数据注入到网络中。拥塞控制要做的都有一个前提:就是网络能够承受现有的网络负荷。对比流量控制:拥塞控制是一个全局的过程,涉及到所有的主机、路由器、以及降低网络相关的所有因素。流量控制往往指点对点通信量的控制。是端对端的问题。

拥塞窗口:发送方为一个动态变化的窗口叫做拥塞窗口,拥塞窗口的大小取决于网络的拥塞程度。发送方让自己的发送窗口=拥塞窗口,但是发送窗口不是一直等于拥塞窗口的,在网络情况好的时候,拥塞窗口不断的增加,发送方的窗口自然也随着增加,但是接受方的接受能力有限,在发送方的窗口达到某个大小时就不在发生变化了。

网络拥塞:发送方发送一些报文段时,如果发送方没有在时间间隔内收到接收方的确认报文段,则网络拥塞。

慢启动:主机开发发送数据报时,如果立即将大量的数据注入到网络中,可能会出现网络的拥塞。慢启动算法就是在主机刚开始发送数据报的时候先探测一下网络的状况,如果网络状况良好,发送方每发送一次文段都能正确的接受确认报文段。那么就从小到大的增加拥塞窗口的大小,即增加发送窗口的大小。

文字看的麻烦的话,直接看图(理想状态下的图):

前期指数增长,到达阈值之后,就以一个一个线性的速度来增长。我们也把指数增长阶段称之为慢启动,线性增长阶段称之为拥塞避免。


图解

图在上面。

如果立即将大量的数据注入到网络可能会出现网络的拥塞。慢启动算法就是在刚开始发送数据报的时候先探测一下网络的状况,如果网络状况良好,发送方每发送一次报文都能正确的接受确认报文段。那么就从小到大的增加拥塞窗口的大小,即增加发送窗口的大小。发送方先设置拥塞窗口cwnd=1, 发送第一个报文段M1,接收方接收到M1后,发送方接收到接收方的确认后,把cwnd增加到2,接着发送方发送M2、M3,发送方接收到接收方发送的确认后cwnd增加到4,慢启动算法每经过一个传输轮次(认为发送方都成功接收接收方的确认),拥塞窗口cwnd就加倍。

为了防止拥塞窗口cwnd增加过快而导致网络拥塞,所以需要设置一个慢开始门限ssthresh状态变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. 当cwnd < ssthresh,使用慢启动算法,

2. 当cwnd > ssthresh,使用拥塞避免算法,停用慢启动算法。

3. 当cwnd = ssthresh,这两个算法都可以。

拥塞避免的思路:是让cwnd缓慢的增加而不是加倍的增长,每经历过一次往返时间就使cwnd增加1,而不是加倍,这样使cwnd缓慢的增长,比慢启动要慢的多。


上面这是理想状态,出现网络拥塞又是另一种情况了。

出现变故

无论是慢启动算法还是拥塞避免算法,只要判断网络出现拥塞,就要把慢启动开始门限ssthresh为设置为发送窗口的一半,cwnd设置为1,然后在使用慢启动算法,这样做的目的能迅速的减少主机向网络中传输数据,使发生拥塞的路由器能够把队列中堆积的分组处理完毕。


快速重传

我们都知道,数据包是有序号的,如果A给B发送M1, M2, M3, M4, M5…N个数据包,如果B收到了M1, M2, M4…却始终没有收到M3,这个时候就会重复确认M2,意在告诉A,M3还没收到,可能是丢失。这时候就需要立即重传丢失的数据段,这个地方不用等待定时器溢出。


快速恢复

快速重传和快速恢复算法一般同时使用。快速恢复算法是认为,你还有3个Duplicated Acks说明网络也不那么糟糕,所以没有必要像RTO超时那么强烈,并不需要重新回到慢启动进行,这样可能降低效率。所以协议栈会做如下工作

  1. cwnd = cwnd/2
  2. sshthresh = cwnd

然后启动快速恢复算法:

  1. 设置cwnd = ssthresh+ACK个数*MSS(一般情况下会是3个dup ACK)
  2. 重传丢失的数据包(对于重传丢失的那个数据包,可以参考TCP-IP详解:SACK选项)
  3. 如果只收到Dup ACK,那么cwnd = cwnd + 1, 并且在允许的条件下发送一个报文段
  4. 如果收到新的ACK, 设置cwnd = ssthresh, 进入拥塞避免阶段

对于Reno、AIMD 这些算法,我看到有一个大佬(目前CSDN总排前十的某位很有个性的大佬)提出了自己的想法,说是这些算法只是数学层面的收敛算法,正好TCP就需要收敛罢了,根本不能对网络拥塞做出判断。

这个我得再去研究研究,所以这篇先到这里。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
快速了解TCP的流量控制与拥塞控制
数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失。利用滑动窗口机制可以很方便地在TCP连接上对发送方的流量进行控制。TCP的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数值。
全菜工程师小辉
2019/08/16
1.3K0
tcp拥塞控制机制
TCP的拥塞控制主要原理依赖于一个拥塞窗口(cwnd)来控制,TCP还有一个对端通告的接收窗口(rwnd)用于流量控制. 由于需要考虑拥塞控制和流量控制两个方面的内容,因此TCP的真正的发送窗口=min(rwnd, cwnd)。但是rwnd是由对端确定的,网络环境对其没有影响,所以在考虑拥塞的时候我们一般不考虑rwnd的值,我们暂时只讨论如何确定cwnd值的大小.
全栈程序员站长
2022/09/12
1.4K0
tcp拥塞控制机制
TCP之拥塞窗口
一个连接的TCP双端只是网络最边缘的两台主机,他们不知道整个网络是如何工作的,因此他们不知道彼此之间的有效吞吐量。因此,他们必须找到一种方法来确定它。我们称之为拥塞窗口 (CWND)。这是在我们必须停止并等待确认之前可以发送的字节数。
高性能架构探索
2021/08/06
4.2K0
TCP 和 UDP 的区别及流量控制,拥塞控制,快重传,快恢复算法详解
在上一则文章中,对 TCP 的三次握手建立连接和四次挥手释放连接进行了详细地阐述,本节教程针对于 TCP 的其他内容进行讲解,首先是同处于传输层协议的UDP协议,这两者有什么区别与联系呢?
wenzid
2021/08/13
2.1K0
TCP 和 UDP 的区别及流量控制,拥塞控制,快重传,快恢复算法详解
TCP拥塞控制机制(附面试题)
∑对资源的需求>可用资源 ∑ 对 资 源 的 需 求 > 可 用 资 源 \sum_{}^{} 对资源的需求 >可用资源
全栈程序员站长
2022/09/12
9120
TCP拥塞控制机制(附面试题)
TCP具体解释(3):重传、流量控制、拥塞控制……
  在TCP的数据传送状态。非常多重要的机制保证了TCP的可靠性和强壮性。它们包括:使用序号。对收到的TCP报文段进行排序以及检測反复的数据;使用校验和来检測报文段的错误。使用确认和计时器来检測和纠正丢包或延时。   在TCP的连接创建状态,两个主机的TCP层间要交换初始序号(ISN:initial sequence number)。这些序号用于标识字节流中的数据,而且还是相应用层的数据字节进行记数的整数。通常在每个TCP报文段中都有一对序号和确认号。TCP报文发送者觉得自己的字节编号为序号,而觉得接收者的字节编号为确认号。TCP报文的接收者为了确保可靠性,在接收到一定数量的连续字节流后才发送确认。这是对TCP的一种扩展,通常称为选择确认(Selective Acknowledgement)。
全栈程序员站长
2022/07/10
2K0
TCP具体解释(3):重传、流量控制、拥塞控制……
端口timewait如何解决_如何检测端口状态
本文根据众多互联网博客内容整理后形成,引用内容的版权归原始作者所有,仅限于学习研究使用
全栈程序员站长
2022/10/04
3K0
端口timewait如何解决_如何检测端口状态
linux机制
滑动窗口本质上是描述接受方的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据。如果发送方收到接受方的窗口大小为0的TCP数据报,那么发送方将停止发送数据,等到接受方发送窗口大小不为0的数据报的到来。 关于滑动窗口协议,还有三个术语,分别是: 窗口合拢:当窗口从左边向右边靠近的时候,这种现象发生在数据被发送和确认的时候。 窗口张开:当窗口的右边沿向右边移动的时候,这种现象发生在接受端处理了数据以后。 窗口收缩:当窗口的右边沿向左边移动的时候,这种现象不常发生。
charlieroro
2020/03/26
2.8K0
TCP协议可靠性是如何保证之 流量控制和拥塞控制
TCP/IP协议是非常重要的一个知识点,也一直是面试的高频题,当面试官问你,能说说TCP协议是怎么保证可靠传输的吗,你能回答上吗?
码农富哥
2020/02/27
2.2K0
TCP协议可靠性是如何保证之 流量控制和拥塞控制
TCP中的拥塞控制
网络传输过程中,某段时间如果网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就会变坏,这种情况就叫做网络拥塞 为解决这个问题,TCP中使用了四种拥塞控制算法
用户4283147
2022/10/27
8940
TCP中的拥塞控制
你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了
前一篇「硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题」得到了很多读者的认可,在此特别感谢你们的认可,大家都暖暖的。
小林coding
2020/05/18
1.6K1
你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了
​TCP 拥塞控制详解
作者:engleliu,腾讯 PCG 开发工程师 本文主要介绍 TCP 拥塞控制算法,内容多来自网上各个大佬的博客及《TCP/IP 详解》一书,在此基础上进行梳理总结,与大家分享。因水平有限,内容多有不足之处, 敬请谅解。 一、TCP 首部格式 在了解 TCP 的拥塞控制之前,先来看看 TCP 的首部格式和一些基本概念。 TCP 头部标准长度是 20 字节。包含源端口、目的端口、序列号、确认号、数据偏移、保留位、控制位、窗口大小、校验和、紧急指针、选项等。 TCP 首部格式 1.1 数据偏移(D
腾讯技术工程官方号
2020/06/01
3.4K0
TCP/IP详解 卷1 第二十一章 TCP的超时与重传
21.1 引言 可靠性的保证之一就是超时重传 前面两个超时重传的例子 1)  ICMP端口不能到达时,TFTP客户使用UDP实现了一个简单的超时和重传机制,假定5s是一个适当是时间间隔,并每隔5s进行重传 2)  在向一个不存在的主机发送ARP的 例子中,可看到当TCP试图建立连接的时候,在每个重传之间使用一个较长的时延来重传SYN 对于每个连接,TCP管理4个不同的定时器: 1)  重传定时器使用于当希望收到另一端的确认 2)  坚持(persist)定时器使窗口大小信息保持不断流动,即使另一端关闭了其接
xcywt
2018/03/28
1.7K0
TCP/IP详解 卷1 第二十一章 TCP的超时与重传
浅析 TCP 的流量控制和拥塞控制
在上一篇TCP 滑动窗口原理解析文章中,我们对 TCP 的滑动窗口原理进行一次总结,也提到了流量控制和拥塞控制。
Java极客技术
2023/09/02
7000
浅析 TCP 的流量控制和拥塞控制
TCP协议的秘密武器:流量控制与拥塞控制
要实现可靠性传输,需要考虑许多因素,比如数据的损坏、丢失、重复以及分片顺序混乱等问题。如果不能解决这些问题,就无法实现可靠传输。
努力的小雨
2023/11/28
4740
Networks 05 - TCP拥塞控制
如果网络出现拥塞, 那么分组会丢失. 那么如果发送方继续重传, 就会导致网络拥塞程度更高. 因此当网络出现拥塞的时候, 应当控制发送的速率. 这点和流量控制相似, 但是流量控制是为了让接收方能够来得及接收, 拥塞控制是为了降低这个网络的拥塞程度.
Reck Zhang
2021/08/11
3760
TCP 拥塞控制算法
 最近花了些时间在学习TCP/IP协议上,首要原因是由于本人长期以来对TCP/IP的认识就只限于三次握手四次分手上,所以希望深入了解一下。再者,TCP/IP和Linux系统层级的很多设计都可以用于中间件系统架构上,比如说TCP 拥塞控制算法也可以用于以响应时间来限流的中间件。更深一层,像TCP/IP协议这种基础知识和原理性的技术,都是经过长时间的考验的,都是前人智慧的结晶,可以给大家很多启示和帮助。
程序员历小冰
2019/03/01
2.2K0
TCP 拥塞控制算法
TCP/IP协议簇中必知必会的十大问题!
TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。
通往ICT之路
2024/04/25
1790
TCP/IP协议簇中必知必会的十大问题!
TCP/IP中你不得不知的十大秘密
这段时间 有一点心很浮躁,不过希望自己马上要矫正过来。好好学习编程!这段时间我想好好地研究一下TCP/IP协议和网络传输这块!加油 一、TCP/IP模型 TCP/IP协议模型(Transmission
用户1195962
2018/01/18
1K0
TCP/IP中你不得不知的十大秘密
【计算机网络】传输层 : TCP 拥塞控制 ( 慢开始 | 拥塞避免 | 快重传 | 快恢复 )
② 拥塞问题发展 : 网络中 资源 供应不足 -> 网络性能降低 -> 网络吞吐量随着负荷增加而降低
韩曙亮
2023/03/28
1.9K0
【计算机网络】传输层 : TCP 拥塞控制 ( 慢开始 | 拥塞避免 | 快重传 | 快恢复 )
推荐阅读
相关推荐
快速了解TCP的流量控制与拥塞控制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档