1. 拥塞原因与代价

  • 拥塞的代价

    • 当分组的到达速率接近链路容量时,分组经历巨大的排队时延。
    • 发送方必须执行重传以补偿因为缓存溢出而丢弃的分组。
    • 发送方在遇到大时延时进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组副本。
    • 当一个分组沿一条路径被丢弃时,每个上游路由器用于转发该分组到丢弃该分组而使用的传输容量最终被浪费掉了。
  • 运输层向网络层中发送报文段(含有初始数据或重传数据)的速率用表示,它有时被称为网络的供给载荷

2. 拥塞控制方法

  • 端到端的拥塞控制:网络层没有为运输层提供显示帮助,即使网络中存在拥塞,端系统也必须通过对网络行为的观察来推断。TCP采用端到端的方法来解决拥塞控制问题,因为IP层不会向端系统提供有关网络拥塞的反馈信息。
  • 网络辅助的拥塞控制:服务器向发送方提供关于网络中用色状态的显示反馈信息。还有一些更复杂的网络反馈比如ATM可用比特率拥塞控制机制(服务器显示地通知发送方服务器能支持的最大主机发送速率)。网络辅助的拥塞控制有两种反馈拥塞信息的形式。
    • 第一种是直接反馈,信息由路由器发送给发送方,这种方式采用了一种阻塞分组的形式。
    • 第二种是路由器标记或更新从发送方流向接收方的分组中的某个字段来指示拥塞的产生。

3. TCP拥塞控制

  • TCP所采用的方法是让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率。

  • TCP发送方跟踪一个拥塞窗口cwnd,它对一个TCP发送方能向网络中发送流量的速率进行了限制。在一个发送方中未被确认的数据量不会超过 cwnd 和 rwnd(接收窗口) 中的最小值,即满足以下公式。

    LastByteSent - LastByteAcked ≤ min{cwnd,rwnd}
    • 注意rwnd是流量控制中的概念。在下面的讨论中,我们将接收方缓存视为无限大,这样来讨论拥塞控制而避免流量控制的问题。

    • 在每个RTT的起始点,上面的限制条件允许向连接发送cwnd个字节的数据,在RTT结束时发送方接收对数据的确认报文。因此发送方的发送速率大概是cwnd/RTT 字节/秒。通过调节cwnd的值,实际上调节了发送方向连接发送数据的速率。

  • 我们将一个TCP发送方的丢包事件定义为:要么出现超时,要么收到来自接收方的三个冗余ACK。而丢包事件在发送方看来,是路径上出现了拥塞的一种指示。

  • 因为TCP使用确认来触发(或增大)它的窗口调节长度,TCP被称为自计时的。

  • TCP遵从下列指导性原则以令发送方确定它应当发送的速率

    • 一个丢失的报文段意味着阻塞,因此丢失报文段时应当适当降低TCP发送方的速率。
    • 一个确认报文段指示着一种顺利的信号,因此当对先前未确认报文段的确认到达时,应当增加发送方的速率。
    • 带宽探测,TCP发送方的行为是一个试探的过程,假如增加/降低了发送方的速率,TCP发送方会接着进行探测,从而考虑是否进行进一步的增加/降低。

  • 慢启动

    • TCP连接开始时,cwnd 的值通常被设为一个 MSS 的较小值,这使得初始发送速率大约为 MSS/RTT。但对于 TCP 发送方而言,可用带宽可能远大于 MSS/RTT,因此 TCP 发送方希望尽可能快地找到可用带宽的数量。

    • 在慢启动状态,cwnd 的值以一个 MSS 开始并且每当传输的报文段首次被确认就增加一个 MSS。这样一来,每经过一个 RTT,发送速率就翻倍。TCP 发送速率呈现指数级增长。

      • 每有一个报文被首次确认,就增加一个MSS。这导致了每一个RTT内cwnd都会翻倍。

    • 有下列三种改变状态的情况

      • 如果存在超时指示的丢包事件,将 cwnd 置为 1 并重新开始慢启动过程。还将第二个状态变量的值 ssthresh(慢启动阈值)设置为 cwnd/2。

        相当于用ssthresh标记一下可能快要出现超时的位置

      • 当 cwnd 的值等于 ssthresh 时,结束慢启动并令 TCP 转移到拥塞避免模式。

      • 如果检测到三个冗余 ACK,TCP 反应相对不那么剧烈,而是将 cwnd 的值减半,再为三个冗余 ACK 加上三个 MSS。再将 ssthresh 的值记录为 cwnd 的一半。最终进入快速恢复状态。

  • 拥塞避免

    • 进入拥塞避免说明 cwnd 的值是上次遇到拥塞的值的一半,这意味着我们距离拥塞并不远。因此 TCP 不再选择每过一个 RTT 将 cwnd 的值翻番,而是每次只将 cwnd 的值增加一个 MSS。

      • 注意是一个RTT增加一个MSS。
    • 有下列两种改变状态的情况
      • 当出现超时丢包时,与慢启动情况一样,cwnd 的值置为一个 MSS,ssthresh 的值被更新为 cwnd 值的一半。最终进入慢启动状态。
      • 当出现三个冗余 ACK 事件的丢包时,TCP 反应相对不那么剧烈,而是将 cwnd 的值减半,再为三个冗余 ACK 加上三个 MSS。再将 ssthresh 的值记录为 cwnd 的一半。最终进入快速恢复状态。
  • 快速恢复

    • 进入快速恢复阶段后,对收到的每个冗余 ACK,cwnd 的值增加一个 MSS。最终当丢失报文段的第一个 ACK 到达时,TCP 在降低 cwnd 后进入拥塞避免状态。
    • 如果出现超时事件,与慢启动和拥塞避免一样,cwnd 的值置为一个 MSS,ssthresh 的值被更新为 cwnd 值的一半。最终进入慢启动状态。

  • TCP拥塞控制的FSM描述

  • TCP连接大多数情况下都处于拥塞避免状态,这个时候的cwnd增长是一种线性增长。而无论是发生了超时还是快速回复,cwnd的下降都是以减半为基础的。所以我们称之为****

  • 对 TCP 吞吐量的宏观描述

    • 当窗口长度是 w 字节,且当前往返时间是 RTT 秒时,则 TCP 的发送速率大约是 w/RTT
    • 假设丢包事件后的窗口长度保持在 W 附近,根据一系列推导我们可知,一条连接的平均吞吐量为 0.75W/RTT
  • 现有丢包率L,往返时间RTT,最大报文段长度MSS,可推导出一条连接的平均吞吐量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5nJOsao0-1628833752541)(G:\markdown\计算机网络\3 运输层\image-20210627223055720.png)]

4. 公平性

  • 假设每条链接都在传输一个大文件,而且无UDP流量通过该瓶颈链路。如果每条连接的平均传输速率接近R/K,即每条连接都得到相同份额的链路带宽,则认为该拥塞控制机制是公平的
  • 实践中,TCP显然是不公平的,具有较小RTT的连接能更好地抢到更大的带宽。

5. 明确拥塞通告:网络辅助拥塞控制

  • 对于IP和TCP的扩展方案已经提出并实现和部署,该方案允许网络明确像TCP发送方和接收方发出拥塞信号。这种形式的网络辅助拥塞控制称为明确拥塞通告

TCP拥塞控制详解的更多相关文章

  1. 传输层-Transport Layer(下):UDP与TCP报头解析、TCP滑动窗口、TCP拥塞控制详解

    第六章 传输层-Transport Layer(下) 上一篇文章对传输层的寻址方式.功能.以及流量控制方法做了简短的介绍,这一部分将介绍传输层最重要的两个实例:TCP协议和UDP协议,看一看之前描述的 ...

  2. 第3章 TCP协议详解

    第3章 TCP协议详解 3.1 TCP服务的特点 传输协议主要有两个:TCP协议和UDP协议,TCP协议相对于UDP协议的特点是 面向连接使用TCP协议通信的双方必须先建立连接,完成数据交换后,通信双 ...

  3. 网络编程TCP/IP详解

    网络编程TCP/IP详解 1. 网络通信 中继器:信号放大器 集线器(hub):是中继器的一种形式,区别在于集线器能够提供多端口服务,多口中继器,每个数据包的发送都是以广播的形式进行的,容易阻塞网络. ...

  4. TCP/IP详解学习笔记

    TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...

  5. TCP/IP详解 (转)

    TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中 ...

  6. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  7. 《TCP/IP详解卷1:协议》第1章 概述-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  8. TCP/IP详解

    第一篇 TCPIP协议详解 第1章 TCPIP协议族 第2章 IP协议详解 第3章 TCP协议详解 第4章 TCP/IP通信案例:访问Internet上的Web服务器 一.TCP/IP协议族 TCP/ ...

  9. TCP/IP详解--发送ACK和RST的场景

    在有以下几种情景,TCP会把ack包发出去: 1.收到1个包,启动200ms定时器,等到200ms的定时器到点了(第二个包没来),于是对这个包的确认ack被发送.这叫做“延迟发送”: 2.收到1个包, ...

随机推荐

  1. hdu 6025 前缀 后缀 gcd

    大致题意: 去掉一个元素能使这个数列的GCD最大为多少 分析: 我们求一个数列的GCD,是先求前两个元素的GCD,然后将这个GCD值在与下一个元素进行GCD运算.由此可知进行GCD运算的顺序对最终的结 ...

  2. Network:java中文转byte出现负数问题

    字节的释义 字节(Byte) 是计算机信息技术用于计量存储容量的一种计量单位,通常情况下 1字节 = 8位(bit),也表示一些计算机编程语言中的数据类型和语言字符. 字符与字节 ASCII码:1个英 ...

  3. 第二章 - Java与协程

    Java与协程 内核线程的局限 通过一个具体场景来解释目前Java线程面临的困境.今天对Web应用的服务要求,不论是在请求数量上还是在复杂度上,与十多年前相比已不可同日而语,这一方面是源于业务量的增长 ...

  4. 羊城杯wp babyre

    肝了好久,没爆破出来,就很难受,就差这题没写了,其他三题感觉挺简单的,这题其实也不是很难,我感觉是在考算法. 在输入之前有个smc的函数,先动调,attach上去,ida打开那个关键函数. 代码逻辑还 ...

  5. linux学习之路第二天(xshell和xftp的使用图解)

    以上xshell的连接过程 2.远程上传和下载文件xftp6 一定要换成22和sftp,否则连接不上 如果出现中文乱码的情况 先点击那个小齿轮 再点击选项 把编码编程UTF-8就ok了

  6. python多线程实现方式,最基础的实现方式模块是什么

    https://blog.csdn.net/daiyu__zz/article/details/81912018 python3.x中通过threading模块创建新的线程有两种方法:一种是通过thr ...

  7. 前端-Vue基础1

    Vue核心思想:只要改变数据,页面就会发生改变 1.引入vue 1.下载vue.js 2.在script标签的src属性中,引入vue.js <script src="js/vue.j ...

  8. C语言:const详解

    希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定.例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小.为了满足这一要求,可以使用const关键字对变量加以限定:const in ...

  9. urllib3使用池管理发送请求和requests常用方法的基本使用+session使用

    使用urllib3的池管理器 urllib3是在urllib进行更加深入的改进,最大的好处就是在urllib的基础上添加了池管理,以至于我们不需要再去注意我们需要由那个链接去发送请求,而只需要获取到链 ...

  10. deepin安装Motrix,cocomusic

    1,motrix(下载工具):https://motrix.app/ 2,cocomusic(开源音乐播放器):https://github.com/xtuJSer/CoCoMusic/release ...