5-8 TCP和UDP协议

5-8-3 流量控制和拥塞控制

TCP流量控制

流量控制:为了防止发送方发送速度过快,导致接收方处理不过来,造成丢包重传,浪费网络资源。

TCP流量控制机制:可变大小的滑动窗口协议。在TCP报头中,窗口字段用来实现流控

image-20250305192409752

如下图所示

image-20250305192522007

根据图示的TCP滑动窗口协议工作原理:

  1. 三次握手建立连接并初始化窗口
    • 阶段①:A发送SYN(seq=100)协商初始序列号
  • 阶段②:B响应SYN-ACK(seq=200,ack=101)确认同步;并告诉A:我的接收缓冲区为3
  • 阶段③:A发送ACK(seq=101,ack=201)完成握手;并告诉B:我的接收缓冲区为x
  1. 数据传输阶段
    • 窗口大小决定在收到确认前可以发送的数据量:A发送数据102、103、104
    • B的CPU取走一个数据窗口+1,并通告A当前窗口大小为1
    • A继续发送数据105
例题
例题1

image-20250305193834919

例题2

image-20250305193851658

解析:TCP报头中存在一个窗口字段,用来实现TCP流量控制

TCP拥塞控制

有了流量控制,可以调节发送端和接收端的节奏,为什么还要有拥塞控制?

流量控制:在A、B两个端点进行。

拥塞控制:在A、B和所有网络节点中进行。

比如发送站和接收站协商了滑动窗口大小为500,但是网络中节点的最大窗口只有200,那么必然造成网络拥塞

image-20250421221513969

TCP的拥塞控制方式主要是:慢开始与拥塞避免、快重传与快恢复

慢开始与拥塞避免

image-20250305193930673

TCP拥塞控制是传输层协议中用于避免网络拥塞的重要机制,其核心思想是通过**动态调整发送方的拥塞窗口(cwnd)[该拥塞窗口即每轮次能发送的最大长度]**来平衡网络的利用效率与稳定性。慢开始和拥塞避免是TCP拥塞控制中的两个关键算法,它们共同作用以优化数据传输。

慢开始

慢开始(Slow Start):慢开始算法在TCP连接建立初期或网络恢复时使用,其主要目的是逐步探测网络的承载能力,避免一次性发送过多数据导致网络拥塞 。 [笔者注:慢慢开始试探]

  • 工作原理:
    1. 发送方维护一个拥塞窗口(cwnd)状态变量,初始值通常较小(如1个MSS,最大报文段长度)。
    2. 每经过一个传输轮次(RTT,往返时延),拥塞窗口的大小会加倍,即呈指数增长。 即第一次先发1字节,第二次发送2字节,第3次发送4字节,以此类推指数规律增长
    3. 这种指数增长持续到拥塞窗口达到慢启动门限(ssthresh)为止。
  • 目标:
    慢开始通过快速增加拥塞窗口的大小,迅速探测网络的可用带宽,同时避免过早引发网络拥塞 。
拥塞避免

拥塞避免(Congestion Avoidance):当拥塞窗口达到慢启动门限时,TCP进入拥塞避免阶段。此时,拥塞窗口的增长速度显著放缓,以更谨慎的方式探测网络的承载能力 。

  • 工作原理:
    1. 在拥塞避免阶段,每经过一个RTT,拥塞窗口仅增加一个固定的值(通常是1个MSS)。
    2. 这种线性增长方式可以有效避免网络负载的剧烈波动,从而减少拥塞发生的可能性。
  • 目标:
    拥塞避免的目标是在充分利用网络资源的同时,防止网络过载,确保数据传输的稳定性和可靠性 。
转换机制

转换机制:当网络中发生丢包(通常由超时或三次重复ACK触发)时,TCP会认为网络出现了拥塞,并采取相应的措施:

  1. 将慢启动门限(ssthresh)设置为当前拥塞窗口的一半。

  2. 如果是超时丢包,拥塞窗口会重置为1个MSS,并重新进入慢开始阶段。

  3. 如果是三次重复ACK触发的丢包,则直接进入快速恢复阶段,而不回到慢开始 。

慢开始和拥塞避免是TCP拥塞控制的核心组件,二者相辅相成:慢开始通过指数增长快速探测网络容量,而拥塞避免则通过线性增长维持网络的稳定性。这种机制既保证了高效的数据传输,又避免了网络拥塞的发生 。

快重传与快恢复

image-20250421222804504

TCP使用上面的慢启动和拥塞避免时,每出现一次拥塞,都要将拥塞窗口重置为1,效率很低,这也就是上图中的TCP Tahoe版本的方法

在新的TCP Reno版本当中,引入了快重传与快恢复,当收到3个重复的ACK时,执行快速重传算法

在TCP拥塞控制中,快重传(Fast Retransmit)和快恢复(Fast Recovery)是两个重要的算法,用于在网络发生丢包时快速响应并恢复数据传输,从而提高网络的效率和稳定性 。

快重传

快重传(Fast Retransmit):快重传是一种优化的丢包检测和重传机制,其核心思想是通过接收方的重复确认(ACK)来快速判断某个报文段是否丢失,并立即重传该报文段,而无需等待超时计时器到期 。

  • 工作原理:

    1. 当接收方收到一个乱序的报文段时,会向发送方发送重复的ACK,指示期望收到的下一个报文段的序列号。
    2. 如果发送方连续收到三个相同的重复ACK,则认为对应的报文段已经丢失,并立即重传该报文段,而不必等待超时重传计时器触发 。
    3. 这种机制比传统的超时重传更加高效,因为它能更快地发现并处理丢包问题 。
  • 优点: 快重传避免了因等待超时而导致的长时间延迟,显著提高了TCP的传输效率,尤其是在高带宽或高延迟的网络环境中 。

  • [笔者注:快重传其实优化的是TCP传统的超时重传问题,和拥塞窗口无关]

快恢复

快恢复(Fast Recovery):快恢复是与快重传配合使用的算法,旨在在发生丢包后迅速调整拥塞窗口(cwnd),以避免网络性能的大幅下降 。

  • 工作原理:

    1. 当发送方检测到三次重复ACK并进入快重传阶段后,会立即进入快恢复阶段。
    2. 在快恢复阶段,慢启动门限(ssthresh)被设置为当前拥塞窗口的一半,
      1. 然后cwnd从ssthresh开始使用拥塞避免算法(教材无拥塞控制内容,这是课件所讲的方法,适合应对考试,如下面的例题2)
      2. 同时将拥塞窗口(cwnd)设置为新的ssthresh值加上3个MSS(对应于已收到的三次重复ACK)(这是网络搜索使用的方法)
    3. 每收到一个新的重复ACK,拥塞窗口增加1个MSS,直到接收到新的非重复ACK为止。此时,拥塞窗口会被重新调整为ssthresh的值,并进入拥塞避免阶段 。
  • 目标: 快恢复假设网络并未严重拥塞(因为还能收到重复ACK),因此不需要像超时那样剧烈降低拥塞窗口,而是以更温和的方式调整发送速率,从而快速恢复正常的传输状态 。

快重传和快恢复共同作用,能够在网络发生丢包时快速响应并恢复传输,避免因超时导致的性能下降。快重传通过重复ACK快速检测丢包,而快恢复则通过调整拥塞窗口和慢启动门限,确保网络传输的平稳过渡。这种机制体现了TCP拥塞控制的高效性和自适应性 。

例题
例题1

image-20250421224429485

解析:快速重传的工作方式是当收到三个相同的ACK报文时,会在定时器过期之前,重传丢失的报文段

例题2

image-20250421224454859

解析:快速恢复会将新的拥塞窗口cnwd=ssthresh=4000/2=2000B

例题3

image-20250421224508009

解析:慢启动出现拥塞拥塞窗口恢复为初始值即1,门限值设置为发生拥塞时的一半

例题4

image-20250421224610812

解析:拥塞窗口为8时发生拥塞,那么门限值(拐点)为4。那么4轮应答拥塞窗口分别是:1-2-4-5,完成4轮以后,拥塞窗口应当是6。

例题5

image-20250421224621715

解析:

  • 滑动窗口:是TCP的流量控制措施,接收方通过通告发送方自己的可以接受缓冲区大小,从而控制发送方的发送速度。滑动窗口是对方计算得出,然后发给自己的
  • 拥塞窗口(cwnd):TCP拥塞控制措施,发送方维持一个(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化,发送方让自己的发送窗口等于拥塞。拥塞窗口是自己计算得出的,存放在本地
  • TCP首部的窗口是指滑动窗口,AB选项都在说滑动窗口。
  • 为了使得发送内容既不会使得接收方接收站溢出,又不会使得网络发生拥塞,发送方的每个段包含的数据应当不超过滑动窗口和拥塞窗口的最小值即min[cwnd , win]
例题6

image-20250421224634715

解析:拥塞窗口是自己通过慢启动、拥塞避免等算法计算得出的,存放在本地

例题7

image-20250421224648378

站内搜索

没有找到内容!