1.拥塞窗口

发送方窗口的大小不仅取决于接收方,而、而且还取决于网络拥塞的情况。

发送方有2种信息:接收方通告的窗口大小和拥塞窗口的大小,实际的窗口大小事这两者中的最小者。

实际窗口大小 = min(rwnd,cwnd)

rwnd:接收窗口大小。

cwnd:拥塞窗口大小。

2.拥塞策略

TCP处理拥塞的一般策略基于3个阶段:慢速启动,拥塞避免和拥塞检测。

2.1.慢速启动:指数增长

TCP拥塞控制所使用的一种算法称为慢性启动(slow start),这种算法是基于这样的想法,它在开始时设置拥塞窗口大小(cwnd)
为一个最长段长度(MSS),每次接到一个确认时,窗口的大小就增加一个MSS值。窗口时慢速启动的,但是按指数规则增长。
下图说明了慢速启动的过程。(图中假设rwnd比cwnd大得多,这样发送方窗口大小永远等于cwnd,每段都是单独进行确认的)

开始:cwnd = 1
第一次传输后:cwnd =2
第二次传输后:cwnd=4
第三次传输后:cwnd=8
慢速启动不能一直继续下去,到达阈值必须停止该阶段。发送方保存一个称为ssthresh(慢速启动阈值)变量,当拥塞窗口中的字节达到这个
阈值时,慢速启动阶段结束而下一个阶段开始。在大多数实现中,ssthresh值是65536个字节。

2.2.拥塞避免:加性增加

如果我们以慢速启动算法开始,则拥塞窗口大小按指数规则增长。为了在拥塞发生之前避免拥塞,必须降低指数增长的速度。TCP定义了另一个
算法,称为拥塞避免(congestion avoidance),这个算法是加性增加(additive increase),而不是指数增加。当拥塞窗口的大小达到慢速启动
的阈值时,慢速启动阶段停止,加性增加阶段开始。在这个算法中,每次整个窗口所有段都被确认(一次传输)时,拥塞窗口才增加1。下图说明
了这个过程。


开始:cwnd = 1
第一次传输后:cwnd = 2
第二次传输后:cwnd = 3
第三次传输后:cwnd = 4

2.3.拥塞检测:乘性减少

如果发生拥塞,拥塞窗口的大小必须减少。发送方能推测出发生拥塞现象的唯一方法就是通过重传段的要求。可是重传是在两种情况下发生:重传计时器
到达或接受到三个ACK。在这二中情况下,阈值就下降一半,即乘性减少(multiplicative decrease)。大多数TCP实现包含2个反应:
1.如果计时器到达,那么存在非常严重的拥塞的可能性;一个段可能已在网络中丢失。
在这种情况下,TCP做出强烈的反应。
a.设置阈值为当前拥塞窗口大小的一半。
b.设置cwnd为一个段的大小。
c.启动慢速启动阶段。
2.如果接收到3个ACK,那么存在着轻度拥塞的可能性。一个段可能已经丢失,但自从接收到3个ACK后,有一些段可能已安全到达,这称为快速传送和快速恢复。
在这种情况下,TCP做出轻度的反应。
a.设置阈值为当前拥塞窗口大小的一半。
b.设置cwnd为阈值(有些实现是阈值加上3个段)
c.启动拥塞避免阶段。

下图给出了一个例子。


假定最大窗口是32个段,阈值时16个段(最大窗口的一半),在慢速启动阶段,窗口大小从1开始按指数规律增加知道它达到阈值。
当达到阈值后,拥塞避免(加性增加)过程允许窗口大小线性增长知道计时器到达或达到最大窗口的大小。在途中,当窗口为20时,
计时器到达。此时。进入乘性减少过程,将阈值设置为当前窗口的大小的一半,当计时器达到时,当前窗口大小为10,因此现在的
阈值为10。
TCP再次进入慢速启动,并设置窗口的大小为1,当达到新阈值(10)时,TCP进入加性增加阶段。当窗口大小为12时,3个ACK事件
发生,再次进入乘性减少过程,阈值设置为6,这时TCP进入加性增加阶段,该阶段一直维持到另一个计时器到时或者另外3个ACK
事件发生为止。

《数据通信与网络》笔记--TCP中的拥塞控制的更多相关文章

  1. 三十天学不会TCP,UDP/IP网络编程 -- TCP中的智慧之连续ARQ

    突然发现上一篇文章贴图有问题,关键我怎么调也调不好,为了表达歉意,我再贴一篇gitbook上的吧,虽然违背了我自己的隔一篇在这里发一次的潜规则~其余完整版可以去gitbook(https://www. ...

  2. 网络编程学习笔记-TCP拥塞控制机制

    为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制.最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion ...

  3. 《数据通信与网络》笔记--SCTP

    SCTP(stream control transmission protocol)是一种新的可靠的,面向报文的传输层控制协议.它兼有UDP和TCP的特性,它是可靠的面向报文的协议,它保存报文的边界, ...

  4. 《数据通信与网络》笔记--QoS

    QoS(Quality of Service)服务质量,是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术. 1.QoS参数 衡量服务质量QoS的参数主要包括: 端到端延迟(Delay) ...

  5. TCP系列55—拥塞控制—18、其他拥塞控制算法及相关内容概述

    前面我们演示分析了100+个wireshark TCP实例,拥塞控制部分也介绍常见的拥塞处理场景以及4种拥塞撤销机制,但是我们一直使用的都是reno拥塞控制算法.实际上拥塞控制发展到今天已经有了各种各 ...

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

    一.拥塞控制的相关算法 早期的TCP协议只有基于窗口的流控(flow control)机制而没有拥塞控制机制,因而易导致网络拥塞.1988年Jacobson针对TCP在网络拥塞控制方面的不足,提出了& ...

  7. .net学习笔记---tcp/udp/http/socket

    什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. UDP全称为用户数据报协议,它可以提供非连接的不可靠的点到多点的通信. 使用 ...

  8. 网络知识--OSI七层网络与TCP/IP五层网络架构及二层/三层网络

    作为一个合格的运维人员,一定要熟悉掌握OSI七层网络和TCP/IP五层网络结构知识. 废话不多说!下面就逐一展开对这两个网络架构知识的说明:一.OSI七层网络协议OSI是Open System Int ...

  9. 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络(转)

     reference:https://www.cnblogs.com/kevingrace/p/5909719.html https://www.cnblogs.com/awkflf11/p/9190 ...

随机推荐

  1. DataTable中如何去除重复的项【转】

    上周在项目中遇到一个问题,就是获取DataTable中某一列的值,因为从数据库中检索数据时,按照2个字段进行分组,而要获得的那一列刚好在分组这两列中,所以该列的值必然有重复,于是就想到了去除重复,有了 ...

  2. 第二章 Spring MVC入门

    2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...

  3. 交互式shell和非交互式shell、登录shell和非登录shell的区别

    交互式shell和非交互式shell.登录shell和非登录shell的区别.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录. 交互式shell和非交互式shell(intera ...

  4. Android journey 1@关于编码风格和命名规范

    /* * 1.关于编程风格:每一位程序猿可能都有自己独特的编程风格,但是有些规则是大家都必须遵守的,特别 * 是在工作的过程中,良好的代码风格能大大提高代码本身的可阅读性和维护性,也更有利于别人修改你 ...

  5. 解决方法:java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;

    hibernate4.3版本 报错: 把实体注解的声明方式修改一下解决,如: 将 @Entity@Table(name=”table_name”)改为@Entity(name=”table_name” ...

  6. 2434: [Noi2011]阿狸的打字机 - BZOJ

    Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的 ...

  7. 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3

    // test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  8. CSS3展现精彩的动画效果 css3的动画属性

    热火朝天的css3无疑吸引了很多前端开发者的眼球,然而在css3中的动画属性则是新功能中的主打招牌,说到css3的动画属性不得不让人想起这三个属性:Transform﹑Transition﹑Anima ...

  9. SQL Server 之 锁

    锁,是由锁管理器负责维护,其目的是保证事务的ACID,是平衡并发和数据安全的机制. 锁定粒度与并发性是成反比的,默认情况下,SQL Server Compact 4.0 对数据页使用行级锁定,对索引页 ...

  10. 前端MVC学习——模块发开发、seajs学习

    这份学习链接已经足够了:http://seajs.org/docs/#intro 我假设你至少已经浏览过上述链接文档.并且掌握了基本的seajs基础知识~ 手把手教你创建helloworld~ Hel ...