网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

ECN+、ECN+/Wait、ECN+/TryOnce,以及采用ECN机制的替代式退避策略(ABE)。

更新时间:2026年03月27日   作者:spoto   标签(Tag):

ECN算法不允许在SYN、SYN/ACK、ACK、URG、FIN等控制数据包上设置ECT标志。 ECN+算法及其扩展版本,本质上是对ECN原理的进一步延伸。它们允许在SYN/ACK数据包上设置ECT标志。 如果允许在SYN数据包中使用ECN机制,那么这种机制可能会被滥用。攻击者可以利用这一特性对服务器发起SYN洪水攻击,最终导致服务中断。 想象一下,攻击者发送一个带有ECN功能的SYN数据包。服务器接收到该数据包后,会发送SYN/ACK数据包。然而,攻击者并没有对服务器的响应做出任何回应,从而完成了三次握手过程。 在此期间,服务器的资源和时间会被浪费掉,而这些资源和时间本可以用于真正的用户。 如果大量这样的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:路由器检测到拥塞情况,因此会为SYN/ACK数据包添加CE标志。

步骤4:发送方会在ACK数据包中发送ECN Echo信息,以告知服务器:该路由器处于拥堵状态。

步骤5:服务器收到了拥塞信息后,将其当前的cwnd值降低到1,而不是初始的10。因为此时路由器处于拥塞状态。现在,服务器会发送一个包含ECT的数据包。

ECN+/等待时间:

它实际上是ECN+的扩展版本。适用于轻度到中度的拥塞情况。SYN/ACK数据包可以在IP头部携带ECT(0)或ECT(1)的值。这意味着,如果存在拥塞情况,路由器可以标记这些SYN/ACK数据包。ECN+是一种服务器端机制。

当服务器接收到拥塞信息后,它会将自身的拥塞窗口严格降低到1,而不是初始的拥塞窗口值。因为从服务器到发送方的路径上存在拥塞情况。因此,服务器不会以初始的10为拥塞窗口值来开始处理数据包,而是以1为拥塞窗口值来开始处理。

ECN+/等待状态的工作原理:

如果收到带有ECN-Echo的ACK信号,那么服务器会将拥塞窗口缩小到1个段,然后等待一个RTT的时间后再发送数据包。

步骤1:发送方在建立ECN连接后,会发送SYN数据包。这样做是为了向服务器表明,该设备支持ECN协议。

步骤2:服务器接受了连接请求,并发送了一个包含ECN确认信息的SYN/ACK数据包作为回应。这个数据包中包含了ECT信息,它向路由器表明:如果网络出现拥塞的情况,那么应该让路由器继续处理该数据包,而不是将其丢弃。

步骤3:路由器检测到拥塞情况,因此会为SYN/ACK数据包添加CE标志。

步骤4:发送方会通过ACK数据包将ECN Echo发送给服务器,以告知服务器:该路由器处于拥堵状态。

步骤5:服务器收到了拥塞信息后,将其当前的cwnd值降低到1,而不是初始的10。因为此时路由器处于拥塞状态。

步骤6:服务器会等待1个RTT时间周期,以便路由器能够脱离拥堵状态。之后,服务器会发送一个包含ECT的数据包。

ECN+/TryOnce:

这是ECN+的扩展版本。它适用于高度拥塞的情况。如果收到带有ECN-Echo的ACK信号,服务器会将拥塞窗口缩小到1。此外,它会重新发送SYN/ACK信号,同时确认网络并未处于严重拥塞状态。

ECN+/TryOnce的工作原理:

步骤1:发送方在建立ECN连接后,会发送SYN数据包。这样做是为了向服务器表明,该设备支持ECN协议。

步骤2:服务器接受了连接请求,并发送了包含ECN确认信息的SYN/ACK数据包作为回应。这个数据包中包含了ECT信息,它向路由器传达了相关信息。

如果遇到拥塞情况,它必须标记该数据包,而不是将其丢弃。

步骤3:路由器检测到拥塞情况,因此会为SYN/ACK数据包添加CE标志。

步骤4:发送方会在ACK数据包中发送ECN Echo,以告知服务器:该路由器处于拥堵状态。

步骤5:服务器收到了拥塞信息后,将其Cwnd值降低到1,而不是初始的10。因为此时路由器处于拥塞状态。

步骤6:现在,服务器不会处于静止状态,而是会持续检查网络是否仍然处于拥堵状态。因此,它会再次发送SYN/ACK数据包,但这次不会携带ECT标志。如果网络仍然处于拥堵状态,那么这个数据包就会被丢弃,服务器也无法获得ACK响应。此时,服务器的RTO计时器将会到期。

步骤7:当服务器的计时器到期时,它会判断网络仍然处于拥堵状态。因此,服务器会等待3秒钟。之后,它再次发送SYN/ACK数据包,以确认网络是否已经从拥堵状态中恢复。这个过程会持续进行,直到网络不再拥堵,服务器收到对重复发送的数据包的确认响应为止。

步骤8:当收到关于这个重复SYN/ACK数据包的确认消息时,服务器就知道网络不再拥塞了。因此,现在它会发送一个数据帧,从而将其拥塞窗口缩小到1个数据帧。

基于ECN的替代式回退策略:

它区分了带有标记的数据包和被丢弃的数据包的拥塞响应方式。这一点在RFC 8511中有提及。Backoff机制与拥塞窗口相关。根据RFC 8511的规定,带有标记的ECN数据包不应被视为被丢弃的数据包,因此应对该数据包采取较为温和的响应策略。此时,拥塞窗口的减少幅度应该小于当数据包被直接丢弃时的减少幅度。

ECN信号在TCP发送端被当作“数据包丢失”信号来处理。这一行为在RFC 3168中有所规定(即最初的ECN机制)。ABE则提出了一种替代的处理方式。因为“ECN标记”的数据包实际上并没有被丢弃,所以拥塞窗口的减少幅度可以相对较小。RFC 8511中提出了关于TCP发送端使用ABE进行拥塞响应的建议。

  • 对于CUBIC协议来说,如果数据包带有ECN标记,那么cwnd的值应乘以0.85;如果数据包被丢弃了,则乘以0.7。
  • 对于Reno来说:如果数据包被标记为ECN,那么cwnd乘以[0.7, 0.85];如果数据包被丢弃,则乘以0.5。
              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料