一:慢启动算法

慢启动算法通过观察到新分组进入网络的的速率应该与另一端返回确认的速率相同而进行工作。慢启动为发送方的TCP增加了另一个窗口:拥塞窗口(congestion window),记为cwnd。

有必要解释一下cwnd: 当新建连接时,cwnd初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1个MSS大小

当两端建立起TCP连接时,拥塞窗口被初始化为1。每收到一个ACK,拥塞窗口就增加一个报文段。发送方取拥塞窗口与通告窗口的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。

发送方开始时发送一个报文段,然后等待ACK,当收到该ACK时,拥塞窗口从1增加到2,即可以发送两个报文段。当收到这两个报文段的ACK时,拥塞窗口就增加为4。这是一种指数增加的关系。

指数增加的一个结果是,到了某个时间一次性报文发送过多,某些点上可能达到了互联网的容量,于是中间路由器开始丢弃分组。这就通知发送方它的拥塞窗口开得过大。慢启动算法往往和拥塞避免算法一起配合使用。

二:拥塞避免算法

拥塞避免算法是假定由于分组受到损坏引起的丢失时非常少的(远小于1%),因此分组丢失意味着在源主机和目的主机之间的某处网络上发生了拥塞。拥塞表现为两种形式:发送一个报文后定时器发生超时没有收到ACK,另外就是收到了重复的ACK确认。

拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口cwnd和一个慢启动门限ssthresh。这样得到的算法工作过程如下:

1,对一个给定的TCP连接,初始化cwnd为1,ssthresh为65535个字节

2,发送方发送的报文不能超过cwnd和接收方通告的窗口大小。拥塞避免算法时发送方使用的流量控制,而通告窗口则时接收方进行的流量控制。前者时发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。

3,当拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口大小的一半(cwnd和接收方通告大小的最小值,但最少为两个报文段)。此外如果是超时引起了拥塞,则cwnd被设置为1个报文段(这就是慢启动)。

4,当新得数据被对方确认时,就增加cwnd,但增加的方法依赖于我们是否正在进行慢启动或拥塞避免,如果cwnd小于或等于ssthresh,则进行慢启动,否则实施拥塞避免。慢启动一直持续到我们回到当拥塞发生时所处位置一半的时候停止,然后转为执行拥塞避免。

拥塞避免算法要求每次收到一个ACK时,将cwnd设置为cwnd+1/cwnd。与慢启动的指数增加相比起来这是一种加性增长。

当cwnd增加到某个大小的时候,同样也会发生超时,这时候如果收到连续的三个ack,就立马重传丢失的报文段,不用等待超时定时器的溢出。另外无需像一开始那样反应那么剧烈,立马启用慢启动。这时候能连续收到三个ack说明情况还没那么糟糕,这时候启用的是快速重传与快速恢复算法。

三:快速重传与快速恢复算法

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

1.  cwnd = cwnd/2

2. sshthresh = cwnd

该算法如下:

1. 设置cwnd = ssthresh+ACK个数*MSS(一般情况下会是3个dup ACK)

2. 重传丢失的数据包(对于重传丢失的那个数据包,可以参考TCP-IP详解:https://blog.csdn.net/wdscq1234/article/details/52503315)

3. 如果只收到Dup ACK,那么cwnd = cwnd + 1, 并且在允许的条件下发送一个报文段

4. 如果收到新的ACK, 设置cwnd = ssthresh, 进入拥塞避免阶段

四:总结

以上三种算法结合在一起就是如下图所示。在该图中假如在32个报文段时发生了拥塞。于是将慢启动的门限ssthresh设置为当前发生拥塞的窗口的一半为16个报文段,当慢启动的窗口cwnd达到16个时,启动拥塞避免算法。当进行到某个点,发生了超时,这时候启动快速重传和快速恢复算法,总的流程如下:

慢启动和拥塞避免算法相关推荐

  1. TCPIP------慢启动与拥塞避免

    如果阅读过 TCP 协议相关的书籍,一定看到过慢启动.拥塞控制等名词.这些概念似乎离应用开发者很远,然而,如果没有拥塞控制,整个网络将会锁死,所有消息都无法传输.当接收主机的处理能力不足时,是通过滑动 ...

  2. TCP系列39—拥塞控制—2、拥塞相关算法及基础知识

    原文:https://www.cnblogs.com/lshs/p/6038722.html 一.拥塞控制的相关算法 早期的TCP协议只有基于窗口的流控(flow control)机制而没有拥塞控制机 ...

  3. TCP的拥塞控制--慢启动,拥塞避免,快重传,快速恢复

    拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象.这种现象跟公路网中经常所见的 ...

  4. TCP的慢启动、拥塞避免、重传、快恢复乱七八糟总是记不清?11个连环问让你一次性打通任督二脉

    摘要:如果你的开发过程涉及数据传输,一直在重传.超时之类的方案里有困惑的话,不妨重新学一学可靠性最精致的TCP协议. 本文分享自华为云社区<TCP的慢启动.拥塞避免.重传.快恢复乱七八糟总是记不 ...

  5. 常见 TCP 拥塞避免算法浏览(下)

    文末可长摁二维码查看分享视频版本- BBR 估计 BtlBw 和 RTprop 延续前面说的,要把发送速率调整到跟 BDP 差不多大是最优的.因为网络环境会持续变化,所以需要持续监控 RTprop 和 ...

  6. TCP系列42—拥塞控制—5、Linux中的慢启动和拥塞避免(二)

    在本篇中我们继续上一篇文章wireshark的示例讲解,上一篇介绍了一个综合示例后,本篇介绍一些简单的示例,在读本篇前建议先把上一篇读完,为了节省篇幅,本篇只针对一些特殊的场景点报文进行讲解,不会像上 ...

  7. Python【算法中心 01】Web框架Django入门(安装+项目创建+应用创建+服务启动)Python搭建算法中心后台实例分享

    Django 官网 有详细的使用说明,这里只做简单记录. 1.起因 Java 项目用到了 Python 的类库,使用jython-standalone在 idea 里可以调用,但是部署时模块无法找到, ...

  8. Linux TCP拥塞控制算法原理解析

    这里只是简单梳理TCP各版本的控制原理,对于基本的变量定义,可以参考以下链接: TCP基本拥塞控制http://blog.csdn.net/sicofield/article/details/9708 ...

  9. RFC2861 TCP 拥塞窗口检验

    组织:中国互动出版网(http://www.china-pub.com/) RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook ...

最新文章

  1. 假如鲁迅是程序员......
  2. C++中的override关键字
  3. PHP中利用header设置content-type和常见文件类型的content-type
  4. Python3-笔记-E-006-库-路径os.path
  5. ubuntu20.04中gedit使用markdown插件(没搞定)
  6. java提示找不到或无法加载主类
  7. 前端学习(2530):使用computed获取数据
  8. vuebaidumap 删除覆盖物_VUE BAIDU MAP覆盖物 - 自定义覆盖物手记
  9. 【JAVA 第三章 流程控制语句】课后习题 判断用户输入的数是否为质数
  10. mysql系列:登陆和退出
  11. C# 实现 MD5 和 SHA1 加密算法_哈希函数 hush
  12. VS配置OpenCV教程(超详细)
  13. java超市库存管理系统_java实现超市库存管理系统
  14. 360 无法显示网速
  15. 计算机二级职业生涯规划讲座心得,职业规划课心得体会2000字
  16. ELK 收集中断错误处理
  17. 药品市场信息查询-药品数据库(全面)
  18. Ubuntu18.04安装QQ、网易云音乐、百度云盘、搜狗输入法
  19. 《Mysql必知必会》-----笔记(2)
  20. 谈谈JavaScript和Java

热门文章

  1. 第二届2011年国信蓝点杯软件设计大赛预赛的试题3
  2. 计算机奥赛金牌排名,2019年第36届信息学奥赛金牌获奖名单公布!信息学竞赛中学有哪些?...
  3. 百题大战c语言写九九乘法表,九九乘法表汉字版|九九乘法表数字汉字双版下载 Word/Excel版_星星软件园...
  4. SKILLCAD v41R Linux64 1CD+Keyshot Pro v7.0.438
  5. android M自带铃声壁纸,​Android Q 内置壁纸、铃声,带你提前进入Q时代。
  6. Google面对点击欺诈拷问 广告主拟诉诸法律
  7. 录音转文字助手怎么转换出文字,在线录音转文字教程
  8. 2021-2027全球及中国音圈马达驱动行业研究及十四五规划分析报告
  9. linux xenserver教程,XenServer 6.5安装图文教程
  10. 诺顿360偷偷挖矿被怒喷 官方却说:都是为了用户好