ECN+、ECN+/Wait、ECN+/TryOnce 和 ECN 替代退避 (ABE)
ECN算法不允许在SYN、SYN/ACK、ACK、URG、FIN等控制数据包上设置ECT标志。ECN+算法及其扩展基本上扩展了ECN的思想,允许在SYN/ACK数据包上设置ECT标志。如果在 SYN 数据包上允许 ECN,那么它可能会被滥用,攻击者可以对服务器发起 SYN 泛洪攻击,最终进行拒绝服务攻击。想象一下,攻击者发送一个启用了 ECN 的 SYN 数据包,然后服务器接受它并发送 SYN/ACK 数据包,攻击者没有响应它以完成 3 次握手。在此期间,将浪费服务器的资源和时间,这些资源和时间可以用于真正的用户。如果这样的SYN包被大量发送,那么服务器就受到了DOS攻击。此外,由于启用了 ECN 标志,路由器不会丢弃这些数据包,因此网络将变得非常拥塞。
ECN有四种扩展:
- ECN+
- ECN+/等待
- ECN+/TryOnce
- 使用 ECN (ABE) 的替代退避
ECN+:
这是原始 ECN 算法的直接扩展。它允许控制数据包之一使用 ECN 标志。由于存在攻击的可能性,不允许 SYN 数据包使用 ECN 标志是合法的。但为什么不允许 SYN/ACK? ECN+ 基本上允许 SYN/ACK 数据包使用 ECN 标志。它说不能丢弃第三次握手的第二个数据包,因为如果丢弃它会导致资源浪费。服务器必须等待一个 RTO 时间和重传它的开销。请注意,它不允许任何其他控制数据包(除了一个:SYN/ACK)使用 ECN。
ECN+的工作:
第 1 步:发送方发送带有 ECN 设置的 SYN 数据包。发件人正在通知服务器它支持 ECN。
步骤 2:服务器接受连接请求并用 ECN 确认回复 SYN/ACK 数据包。此数据包包含 ECT,它通知路由器如果遇到拥塞,它必须标记数据包而不是丢弃。
第 3 步:路由器感觉到拥塞,因此用 CE 标志标记 SYN/ACK 数据包。
第四步:发送方会在ACK包中发送ECN Echo,通知服务器路由器拥塞。
步骤 5:服务器获取拥塞信息并将其 cwnd 减小为 1,而不是初始值 10,因为路由器拥塞。现在服务器将发送一个带有 ECT 的数据包。
ECN+/等待:
它是ECN+的扩展。它适用于轻度至中度的拥堵。 SYN/ACK 数据包允许在 IP 头中携带 ECT(0) 或 ECT(1)。这意味着如果出现拥塞,SYN/ACK 数据包可以被路由器标记。 ECN+ 是一种服务器端机制。
当一个服务器收到拥塞信息时,它会严格地把它的拥塞窗口减小到1,而不是减小到初始的拥塞窗口。因为从服务器到发送者的路径上存在拥塞。因此,它不是从初始拥塞窗口 10 开始,而是从 1 开始。
ECN+/等待的工作:
如果 ACK 以 ECN-Echo 到达,则服务器将拥塞窗口减少到 1 个段,并在发送数据包之前等待一个 RTT。
第 1 步:发送方发送带有 ECN 设置的 SYN 数据包。发件人正在通知服务器它支持 ECN。
步骤 2:服务器接受连接请求,并用 ECN 确认回复 SYN/ACK 数据包。此数据包包含 ECT,它通知路由器如果遇到拥塞,它必须标记数据包而不是丢弃。
第 3 步:路由器感觉到拥塞,因此用 CE 标志标记 SYN/ACK 数据包。
步骤 4: Sender 将在 ACK 包中发送 ECN Echo 通知服务器路由器拥塞。
步骤 5: Server 获取拥塞信息并将其 cwnd 减小为 1,而不是初始值 10,因为路由器拥塞。
步骤 6: Server 将等待 1 个 RTT 时间段让路由器退出拥塞状态。然后,服务器将发送一个带有 ECT 的数据包。
ECN+/TryOnce:
它是ECN+的扩展。它适用于高度拥塞。如果 ACK 带有 ECN-Echo,则服务器将拥塞窗口减小到 1。此外,它首先重传没有 ECT 的 SYN/ACK,并确认网络没有严重拥塞
ECN+/TryOnce 的工作:
第 1 步:发送方发送带有 ECN 设置的 SYN 数据包。发件人正在通知服务器它支持 ECN。
步骤 2:服务器接受连接请求,并用 ECN 确认回复 SYN/ACK 数据包。此数据包包含 ECT,它通知路由器
如果遇到拥塞,它必须标记数据包而不是丢弃。
第 3 步:路由器感觉到拥塞,因此用 CE 标志标记 SYN/ACK 数据包。
第四步:发送方会在ACK包中发送ECN Echo,通知服务器路由器拥塞。
步骤5:服务器获取拥塞信息并将其cwnd减小为1,而不是初始值10,因为路由器拥塞。
第 6 步:现在服务器不会静坐 1 个 RTT 时间。相反,它将检查网络是否仍然严重拥塞。因此,它会再次发送 SYN/ACK 而不带 ECT 标志。如果网络仍然拥塞,则该数据包将被丢弃,并且服务器不会为此获得 ACK,其 RTO 计时器将到期。
第7步:一旦服务器的定时器超时,就断定网络仍然拥塞,所以现在等待3秒。之后,它再次发送不带 ECT 的 SYN/ACK 数据包,以检查网络是否已脱离拥塞状态。这将一直持续到网络出现拥塞并且服务器获得此重复数据包的 ACK 为止。
第八步:当这个重复的 SYN/ACK 包收到 ACK 时,服务器知道网络不再拥塞,所以现在它会发送 1 个数据包,导致它的拥塞窗口减少到 1。
使用 ECN 的替代退避:
它区分标记数据包和丢弃数据包的拥塞响应。它在 RFC 8511 中提到。退避是在拥塞窗口的上下文中。它说 ECN 标记的数据包不应被视为丢弃,因此对标记的数据包给出的响应不那么激进。拥塞窗口的减少应该小于丢包时的情况。
TCP 发送方将 ECN 信号视为与“数据包丢弃”信号相同。此行为在 RFC 3168(原始 ECN 机制)中被推荐。 ABE 为带有 ECN 标记的数据包定义了另一种行为。因为“ECN 标记”数据包并未“实际”丢弃。因此,拥塞窗口减少可以不那么激进。 RFC 8511 对 TCP 发送方使用 ABE 的拥塞响应的建议:
- 对于 CUBIC:如果数据包带有 ECN 标记,则将 cwnd 乘以 0.85,如果数据包被丢弃,则乘以 0.7。
- 对于 Reno:如果数据包标记为 ECN,则将 cwnd 乘以 [0.7, 0.85],如果数据包被丢弃,则乘以 0.5。