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. Vsftpd配置(Centos7)

    6.1.Vsftpd介绍: 用于上传图片和使用 FTP 协议访问图片服务器. 解决分布式环境的图片访问问题,使用vsftpd对图片做统一管理. vsftpd 是"very secure FT ...

  2. Leetcode No.27 Remove Element(c++实现)

    1. 题目 1.1 英文题目 Given an integer array nums and an integer val, remove all occurrences of val in nums ...

  3. String、StringBuilder和StringBuffer的比较

    目录 1.String特性 1.1 不可变 1.2 字符串常量池 2.StringBuilder和StringBuffer 2.1 区别 2.2 应用场景 1.String特性 1.1 不可变 它是I ...

  4. Python----MongoDB数据库

    什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供 ...

  5. 配置Mac 终端高亮

    mac下所有vim的配色方案的样式. 下面讲解如何设置这些好看的配色 首先:在终端输入 vim ~/.bash_profile 查看是否有上面提到的某些配色,所有配色均是以.vim结束的,果有的话,再 ...

  6. JDK环境配置: javac is not recognized as an internal or external command, operable program or batch file

    相信大家在配置TestNG的时候,首先都会去确认JDK的安装是否正确,两个命令缺一不可. 打开'cmd' --> 1. 输入'java -version', 返回java home当前路径. j ...

  7. C语言变量类型

    #include <stdio.h> // C 语言中,任何数据类型都不可以直接存储一个字符串.那么字符串如何存储? //在 C 语言中,字符串有两种存储方式,一种是通过字符数组存储,另一 ...

  8. Java基础00-循环语句7

    1. for循环语句 1.1 循环结构 1.2 for循环语句的格式 执行流程图: 1.3 案例 (1)输出数据 (2)求和 (3)求偶数和 (4)水仙花 public static void mai ...

  9. vmare下克隆一台linux

    第一步:点击"克隆"按钮,注意,克隆之前选择的机器需要关机 第二步:接下来需要改一下新机器的mac地址,选中新机器,右键"设置"-->"网络适配 ...

  10. 大疆M3508、M2006必备CAN总线知识与配置方法

    使用大疆M3508.M2006的CAN总线知识与配置方法 目录 使用大疆M3508.M2006的CAN总线知识与配置方法 前言: 0x00 需要额外的CAN收发器!!! 0x01 硬件层面分析 为什么 ...