为了更好地对传输层进行拥塞控制,因特网建议标准定义了以下四种算法:慢启动、拥塞避免、快重传和快恢复。

1 接收窗口rwnd与拥塞窗口cwnd

  发送方在确定发送报文段的速率时,既要根据接收方的接收能力,又要从全局考虑不要使网络发生拥塞。因为,TCP协议要求发送方维护以下两个窗口:

  (1)接收窗口rwnd:接收方向发送方告知的当前还能接收的数据容量,一般所说的窗口大小即rwnd;

  (2)拥塞窗口cwnd:发送方根据自己估算的网络拥塞程序而设置的窗口值,反映了网络的当前容量。

  发送窗口的上限应当取接收窗口rwnd和拥塞窗口cwnd中较小的一个。

2 慢启动与拥塞避免

  (1)慢启动

  做法:TCP连接刚建立,开始发送TCP报文段时,先令拥塞窗口cwnd=1,即一个最大报文段长度MSS。而在每收到一个对新的报文段的确认后,将cwnd加1,即增大一个MSS。

  使用慢启动算法后,每经过一个RTT,拥塞窗口cwnd就会加倍,即cwnd的大小呈指数形式增长。这样慢启动算法一直把拥塞窗口cwnd增大到一个规定的慢启动门限ssthresh(阈值),然后改用拥塞避免算法。

  (2)拥塞避免

  做法:发送端的拥塞窗口cwnd每经过一个RTT就会增加一个MSS的大小,而不是加倍,使cwnd按线性规律缓慢增长,而当出现一次超时(网络拥塞)时,则令慢启动门限ssthresh等于当前cwnd的一半(但不能小于2),且此时拥塞窗口cwnd又变为1。

  可归纳如下:

  (1)当cwnd<ssthresh时,使用慢启动算法;

  (2)当cwnd>ssthresh时,停止使用慢启动算法而改用拥塞避免算法。

  (3)当cwnd=ssthresh时,既可以使用慢启动算法,也可使用拥塞避免算法(通常做法)。

3 快重传与快恢复

  快重传和快恢复算法是对慢启动和拥塞避免算法的改进。

  (1)快重传

  有两种事件会导致TCP对报文段进行重传:超时和冗余ACK。

  超时即超过了规定的时间没有收到接收端对于某报文段的ACK。

  快重传技术使用冗余ACK方法来实现对未收到的报文段的快速重传:当发送方连续收到三个重复的ACK报文时,表示该ACK对应的下一个报文段丢失,则不必等待那个报文段设置的重传计时器,直接重传该报文段。

  (2)快恢复

  原理:当发送端连接收到连续三个冗余ACK(即发生超时)时,就将慢启动门限ssthresh设置为出现拥塞时发送方cwnd的一半,与慢启动不同之处是它把cwnd的值设置为慢启动门限ssthresh改变后的数值,而不是1,然后开始执行拥塞避免算法。

  由于跳过了cwnd从1起始的慢启动过程,所以被称为快恢复。

TCP流量控制与拥塞控制的更多相关文章

  1. TCP/IP笔记 三.运输层(2)——TCP 流量控制与拥塞控制

    TCP 的流量控制与拥塞控制可以说是一体的.流量控制是通过滑动窗口实现的,拥塞避免主要包含以下2个内容: (1)慢开始,拥塞避免 (2)快重传,快恢复 1.流量控制——滑动窗口 TCP采用大小可变的滑 ...

  2. TCP - 流量控制 and 拥塞控制

      1. 流量控制 - Flow Control 序言:数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制以免数据丢失.利用滑动窗口机制可以很方便的在TCP连接上实现对发 ...

  3. TCP流量控制和拥塞控制

    TCP的流量控制      所谓的流量控制就是让发送方的发送速率不要太快,让接收方来得及接受.利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制.TCP的窗口单位是字节,不是报文段,发送 ...

  4. 面试之路(29)-TCP流量控制和拥塞控制-滑动窗口协议详解

    拥塞: 拥塞发生的主要原因在于网络能够提供的资源不足以满足用户的需求,这些资源包括缓存空间.链路带宽容量和中间节点的处理能力.由于互联网的设计机制导致其缺乏"接纳控制"能力,因此在 ...

  5. TCP 流量控制、拥塞控制

    流量控制: 流量控制是为了控制发送方发送速率,保证接收方来得接收. 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率.将窗口字段设置为 0,则发送方不能发送数据. ...

  6. NetWork——TCP的流量控制和拥塞控制

    ,然后开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大. 这里为什么替换掉了慢开始算法呢,这是因为收到重复的ACK不仅仅告诉我们一个分组丢失了,由于接收方只有在收到另一个报文段时才会产生重复的ACK,所 ...

  7. TCP的流量控制与拥塞控制小结

    概述 为了提高信道的利用率TCP协议不使用停止等待协议,而是使用连续ARQ协议,意思就是可以连续发出若干个分组然后等待确认,而不是发送一个分组就停止并等待该分组的确认.其中TCP的流量控制与拥塞控制是 ...

  8. TCP基础知识(三)重传、流量控制、拥塞控制

    TCP详解(3):重传.流量控制.拥塞控制…… 数据传输 在TCP的数据传送状态,很多重要的机制保证了TCP的可靠性和强壮性.它们包括:使用序号,对收到的TCP报文段进行排序以及检测重复的数据:使用校 ...

  9. TCP的可靠传输(依赖流量控制、拥塞控制、连续ARQ)

    TCP可靠性表现在它向应用层提供的数据是无差错,有序,无丢失,即递交的和发送的数据是一样的. 可靠性依赖于流量控制.拥塞控制.连续ARQ等技术 <TCP/IP详解>中的“分组”是不是就是报 ...

随机推荐

  1. C#/VB.NET 向PowerPoint文档插入视频

    如今,Microsoft Office PowerPoint在我们日常生活中的应用已经很广泛了,利用Microsoft Office PowerPoint不仅可以创建演示文稿,还可以在互联网上召开面对 ...

  2. 如何做优化,UITabelView才能更加顺滑 (转载)

    这篇文章是前两周@叶孤城叶大在微信群里面的分享,一直到这两天才翻出来研究.很多实用的东西,不过由于水平有限,有些地方没能翻译好,还请大家指正. 我已经在iOS这个最好的移动平台上有几年的开发经验了.在 ...

  3. 如何设计一个优秀的API(转载)

    最近在整理框架的一些 API,觉得很有必要总结一下 API 兼容性的设计.下图是我自己当下的一些总结,慢慢维护: 网上搜索了一下,一个多月前,“标点符”已经发布了下面这篇文章,觉得写得非常不错,转载于 ...

  4. 写个C#命令行参数解析的小工具

    最近测试工作做的比较多因此时常要创建一些控制台类型的应用程序.因为程序有不同的参数开关,需要在程序启动的时候通过命令行来给程序传递各种开关和参数.直接操作args有些不方便,所以就写了个解析参数的小工 ...

  5. Winform开发框架之肖像显示保存控件的实现

    我们在开发一些Winform程序的时候,除了常规的显示普通数据外,有的时候需要显示一些人员肖像或者一些车辆等物体的图片,一般这些内容较小,所以以二进制存储在数据库是一个不错的方案.但由于它们虽然很常用 ...

  6. 无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS"

    无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间 2011-0 ...

  7. 基于jQuery的自适应图片左右切换

    效果预览:http://hovertree.com/code/jquery/smjv6d0n.htm 基于jQuery编写的横向自适应幻灯片切换特效 全屏自适应jquery焦点图切换特效,在IE6这个 ...

  8. .Net中的并行编程-3.ConcurrentQueue实现与分析

    在上文<.Net中的并行编程-2.ConcurrentQueue的实现与分析> 中解释了无锁的相关概念,无独有偶BCL提供的ConcurrentQueue也是基于原子操作实现, 由于Con ...

  9. sql语句查询

    1. sql语句查询某位数字或者某几位数字开头的数据,字段类型为数字类: %’: 2. sql搜索以4开头和含有李字的数据: select * from wlzbpre_user where real ...

  10. VMWare 安装 Mac OS X10.10 Yosemite

    OS X Yosemite 新功能特性 Mac OS X10.10 GM3|OS X 10.10 Yosemite 正式版下载 如何在虚拟机中安装苹果mac系统图示说明 vm10虚拟机安装Mac OS ...