📜  TCP拥塞控制

📅  最后修改于: 2021-09-28 09:34:12             🧑  作者: Mango

先决条件 –基本的拥塞控制知识

TCP 使用拥塞窗口和避免拥塞的拥塞策略。以前,我们假设只有接收方可以指定发送方的窗口大小。我们在这里忽略了另一个实体,即网络。如果网络不能像发送者创建的那样快地传送数据,它必须告诉发送者放慢速度。换句话说,除了接收方,网络是确定发送方窗口大小的第二个实体。

TCP 中的拥塞策略 –

  1. 慢开始阶段:开始缓慢增量是阈值的指数
  2. 拥塞避免阶段:达到阈值后增量为 1
  3. 拥塞检测阶段:发送方回到慢启动阶段或拥塞避免阶段。

慢启动阶段:指数增量——在每个 RTT 之后的这个阶段,拥塞窗口大小以指数方式增加。

Initially cwnd = 1
After 1 RTT, cwnd = 2^(1) = 2
2 RTT, cwnd = 2^(2) = 4
3 RTT, cwnd = 2^(3) = 8

拥塞避免阶段:附加增量 –此阶段在阈值之后开始,也表示为ssthreshcwnd (拥塞窗口)的大小增加了可加性。在每个 RTT 之后 cwnd = cwnd + 1。

Initially cwnd = i
After 1 RTT, cwnd = i+1
2 RTT, cwnd = i+2
3 RTT, cwnd = i+3

拥塞检测阶段:乘法递减——如果发生拥塞,拥塞窗口大小就会减小。发送方可以猜测发生拥塞的唯一方法是需要重新传输一个段。需要重传来恢复丢失的数据包,该数据包被假定为由于拥塞而被路由器丢弃。重传可能发生在以下两种情况之一:当 RTO 计时器超时或收到三个重复的 ACK 时。

  • 情况 1:由于超时而重传——在这种情况下,拥塞的可能性很高。

    (a) ssthresh 减少到当前窗口大小的一半。
    (b) 设置 cwnd = 1
    (c) 再次从慢启动阶段开始。

  • 情况 2:由于 3 个确认重复而重新传输——在这种情况下,拥塞的可能性较小。

    (a) ssthresh 值减小到当前窗口大小的一半。
    (b) 设置 cwnd=ssthresh
    (c) 从拥塞避免阶段开始

    示例 –假设 TCP 协议遇到慢启动行为。在第 5 轮传输时,阈值 (ssthresh) 值为 32,进入拥塞避免阶段并持续到第 10 次传输。在第 10 轮传输时,接收器收到 3 个重复的 ACK 并进入加法增加模式。超时发生在第 16 轮传输。绘制传输轮次(时间)与 TCP 段的拥塞窗口大小。

    GATE CS 角问题 –

    练习以下问题将帮助您测试您的知识。所有问题都在前几年的 GATE 或 GATE 模拟测试中提出。强烈建议您练习它们。

    1. GATE CS 2008,问题 56
    2. GATE CS 2012,问题 65
    3. GATE CS 2014(第 1 组),问题 65
    4. GATE IT 2005,问题 73