TCP拥塞控制

拥塞

在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion)。

拥塞原因

  • 某结点缓存容量太小
  • 某链路带宽不足
  • 某些处理机处理效率太慢
  • 拥塞会累积,不断加剧。

增加资源并不能从根本上解决拥塞,还可能会使网络性能更坏。

拥塞控制

网络拥塞主要指网络路由器由于排队报文过多而丢弃报文,拥塞控制是指发送方采取措施避免网络拥塞的发生或者对已经发生的拥塞做出的响应。即 防止过多数据注入网络,使网络中的路由器或链路不致过载。

是一个全局性的过程。
TCP拥塞控制_第1张图片

控制思路

  • 开环控制

    在设计时考虑。力争避免

  • 闭环控制

    根据当前运行状态采取相应措施。力争消除。(基于反馈环路的概念)

TCP拥塞控制

  1. 拥塞避免:拥塞发生前,发送方在发送速度增加到一定程度后主动减缓发送速度的一种预防措施。
  2. 拥塞控制:拥塞发生后,发送方探测到拥塞状况后,进行降速。

发送方如何探测拥塞状况?

发送方根据超时重传事件的发生,判定网络拥塞。

发送卡如何控制发送速度?

利用拥塞窗口变量(cwnd)控制发送速度。

发送窗口的大小(未获确认可连发多少数据)=Min(cwnd, rwnd)

cwnd:拥塞窗口变量

rwnd:接收方反馈的窗口大小

当rwnd

当cwnd

用什么算法进行拥塞控制?

慢开始、拥塞避免、快速重传、快速恢复。

TCP每条连接都会维持两个变量:

  • 拥塞窗口变量cwnd
  • 慢开始门限ssthresh

慢开始(旧):初始cwnd=1至2个发送方的最大报文段SMSS(Sender Maximum Segment Size)的数值。

慢开始(新):初始cwnd=不超过2至4个SMSS。

慢开始算法思路:由小到大逐渐增大拥塞窗口cwnd数值。

cwnd每次的增加量=MIN(N,SMSS)

N表示先前未被确认的,但现在被刚接收到的确认报文段所确认的字节数。

当N

好处:使分组注入到网络的速率更加合理。

图解:
TCP拥塞控制_第2张图片

慢开始阶段,cwnd从1开始呈指数型增长,每经过一个传输轮次,cwnd就加倍。

传输轮次:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认,算一次传输轮次。

慢开始门限ssthresh(状态变量):防止cwnd增长过大引起网络拥塞。

当cwnd>=ssthresh时,慢开始阶段结束,进入拥塞避免阶段。

拥塞避免

算法思路:让cwnd呈线性缓慢增长,每经过一个RTT,cwnd就加1。

拥塞出现

当发送方判断出网络出现拥塞时,无论是在慢开始阶段,还是拥塞避免阶段,都会执行以下步骤:

  • ssthreth = cwnd / 2
  • cwnd = 1
  • 执行慢开始算法

目的:迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间处理积压的分组。
TCP拥塞控制_第3张图片
TCP拥塞控制_第4张图片
TCP拥塞控制_第5张图片

快重传算法:FR(Fast Retransmission),可以让发送方尽早知道发生了个别报文段丢失的情况。

快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。

发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传(即“快重传”),这样就不会出现超时,发送方也不就会误认为出现了网络拥塞。

使用快重传可以使整个网络的吞吐量提高约20%。

不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。

快恢复算法:当发送端收到连续三个重复的确认时,由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是执行快恢复算法。

  • 慢开始门限ssthresh=cwnd/2
  • 新的拥塞窗口cwnd = ssthresh
  • 开始执行拥塞避免算法。
    TCP拥塞控制_第6张图片

加法增大,乘法减小 (AIMD)

可以看出,在拥塞避免阶段,拥塞窗口是按照线性规律增大的。这常称为“加法增大” AI (Additive Increase)。
当出现超时或3个重复的确认时,就要把门限值设置为当前拥塞窗口值的一半,并大大减小拥塞窗口的数值。这常称为“乘法减小”MD (Multiplicative Decrease)
二者合在一起就是所谓的 AIMD 算法。

拥塞控制流程图⭐

TCP拥塞控制_第7张图片

习题

  1. 主机甲和主机乙之间已建立一个TCP连接,TCP最大段长度为1000字节,若主机甲的当前拥塞窗口为4000字节,在主机甲向主机乙连续发送2个最大段后,成功收到主机乙发送的第一段的确认段,确认段中通告的接收窗口大小为2000字节,则此时主机甲还可以向主机乙发送的最大字节数是1000

    解析:发送窗口的大小(未获确认可连发多少数据)=Min(cwnd, rwnd)
    TCP拥塞控制_第8张图片

    此时主机乙具有一个2000B的空闲缓冲区,即此时主机乙最大还可以接收2000B的数据。由于主机乙还未对主机甲发出第2个报文段进行确认,因此这2000B的空闲缓冲区还需预留出1000B用于接收第2个报文段,即此时主机甲还可以向主机乙发送的最大字节数只有1000B。

  2. 假定一个用户正在通过HTTP下载一个网页,该网页没有内嵌对象,TCP协议的慢启动窗口门限值为30个报文段大小。该网页长度为14个报文段大小,用户主机到服务器之间的往返时延RTT为1s,不考虑其它开销(如域名访问、报文段处理等),用户下载该网页大概需要多长时间? 若TCP协议的慢启动窗口门限值为6个报文段大小,用户下载该网页大概需要多长时间?

TCP拥塞控制_第9张图片

若TCP协议的慢启动窗口门限值为6个报文段大小:

TCP拥塞控制_第10张图片

  1. 设TCP的ssthresh的初始值为8(单位为报文段)。当拥塞窗口上升到12时网络发生了超时,TCP使用慢开始和拥塞避免。试分别求出第1轮次到第15轮次传输的各拥塞窗口大小。你能说明拥塞窗口每一次变化的原因吗?

TCP拥塞控制_第11张图片

第1轮次,cwnd=1,第15轮次,cwnd=9。

  1. TCP的拥塞窗口cwnd大小与传输轮次n的关系如下所示:

    cwnd 1 2 4 8 16 32 33 34 35 36 37 38 39
    n 1 2 3 4 5 6 7 8 9 10 11 12 13
    cwnd 40 41 42 21 22 23 24 25 26 1 2 4 8
    n 14 15 16 17 18 19 20 21 22 23 24 25 26
    • 试画出拥塞窗口与传输轮次的关系曲线。
    • 指明TCP工作在慢开始阶段的时间间隔
    • 指明TCP工作在拥塞避免阶段的时间间隔
    • 在第16轮次和第22轮次之后发送方是通过收到三个重复的确认还是通过超时检测到丢失了报文段?
    • 在第1轮次、第18轮次和第24轮次发送时,门限ssthresh分别被设置为多大?
    • 在第几轮次发送出第70个报文段?
    • 假设在第26轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口cwnd和门限ssthresh应设置为多大?ssthresh=cwnd/2=4, cwnd=ssthresh=4

TCP拥塞控制_第12张图片

你可能感兴趣的:(计算机网络,计算机网络,TCP拥塞控制)