📜  什么是 ECN(显式拥塞通知)?

📅  最后修改于: 2022-05-13 01:56:15.043000             🧑  作者: Mango

什么是 ECN(显式拥塞通知)?

ECN 代表显式拥塞通知算法。它不是像慢启动重启和 AIMD 那样的拥塞控制算法。这个算法只有一个责任通知发送者关于路由器拥塞的建立。因此,ECN 是一种拥塞通知或拥塞信令算法。它将拥塞通知发送方,以便可以采取相应的措施来避免这种情况。

ECN 是 RFC 3168 中定义的拥塞信令机制。它出现于 1999 年,并在 2001 年左右完成。它在 TCP 标头中使用两个位,在 IP 标头中使用两个位。它标记数据包,其中标记=在标头中翻转一点。

ECN 可与 AQM 算法一起使用。我们已经看到 AQM 算法会在链路拥塞时主动丢弃数据包。但是,如果不是“丢弃”数据包,而是可以“标记”它们,那就太好了。由于 ECN 不会丢弃数据包,因此可以避免重传。这就是 ECN 算法在今天非常流行的原因。因为目的只是让已知的发送者知道路由器正在拥塞,所以当我们可以使用 ECN 告诉发送者这一点时,为什么要为此丢弃数据包。丢弃数据包也不会立即告诉发送者有关拥塞的信息。这对于时间敏感的数据包非常重要,因为它们的流量非常低。

为了使用ECN机制;发送方、接收方和路由器“都”必须支持 ECN 功能。目前,ECN 已在所有操作系统中实现,例如手机、服务器、笔记本电脑,甚至在路由器等中间设备中。但默认情况下它是禁用的。原因不是 ECN 有问题,而是因为 ECN 与 AQM 算法一起部署。由于参数配置,AQM 并没有那么流行。

RFC 3168 推荐: ECN 不得应用于 TCP 控制数据包。作者强烈建议不要将 ECN 应用于控制数据包。控制数据包的示例有:SYN、SYN/ACK、ACK、FIN、RST、PSH、URG。所以只有数据包没有标记ECN。

TCP 标头中的 ECN 位:

TCP 标头中的 ECN 位

2 位取自保留部分。现在保留 4 位,ECN 占用 2 位。这两位是 CWR 和 ECE。注意它们出现的顺序。我们不能改变这两个标志位的顺序。 CWR 位于左侧,ECE 位于右侧。

  • CWR:拥塞窗口减少标志
  • 欧洲经委会:欧洲经委会回声

因为这些是 2 位。有 4 种可能的组合。组合在这里称为代码点。

TCP 标头中的 ECN 代码点

S. No.CWRECECodepointSent FromTo
1.00Non-ECN set upanyany
2. 1ECN EchoReceiverSender
3. 0Congestion window reducedSender Receiver
4.11ECN SetupSender Receiver
  • [0 0] 是非 ECN 设置代码点。这可以从任何发送到任何。当这个代码点从 X->Y 共享时,X 告诉 Y 它不支持 ECN。
  • [0 1] 是 ECN Echo 代码点。这是从接收方发送到发送方的。首先,当发送方告诉接收方他支持 ECN 时,接收方会告诉发送方自己是否支持 ECN。如果接收方支持 ECN,那么它将使用此代码点回复。当接收方告诉发送方拥塞时,也会使用此代码点。因此,此代码点有两种用途。
  • [1 0] 是 CWR 代码点。这是从发送者发送到接收者的。该代码点用作从发送方发送到接收方的确认。发送者告诉接收者,当它知道拥塞时,他已经减小了它的拥塞窗口大小。
  • [1 1] 是 ECN 设置代码点。这是从发送者发送到接收者的。该代码点由发送方发送给接收方,告知发送方支持 ECN。

ECN协商:

ECN协商

  • 第 1 步:发送方使用 ECN 设置码点将 SYN 数据包发送到接收方。 ECN 设置意味着 CWR=1 和 ECE=1。发送者告诉接收者它支持 ECN。在通过 3 次握手建立 TCP 连接时,此信息始终在 SYN 数据包中传送。现在接收方必须向发送方回复其关于 ECN 的状态。
  • 第 2 步:如果接收方支持 ECN,那么它将使用 ECN-Echo 代码点回显给发送方。 CWR=0 和 ECE=1,它通知发送方是的,接收方也启用了 ECN。假设如果接收方不支持 ECN,那么它将回复 CWR=0 和 ECE=0。这就是第 4 个代码点所指示的内容。这是非 ECN 设置,这意味着实体未启用 ECN。该代码点可以由发送方共享给接收方,反之亦然。
  • 第 3 步:现在,发送方和接收方正在交换 ECN 信息。发送者现在可以像往常一样向接收者请求数据。

但是,如果发送方和接收方都支持 ECN 并且它必须标记数据包而不是丢弃它,该怎么办。路由器无法读取 TCP 头,它只能读取数据包的 IP 头。因此,IP 头中使用了 2 位来通知路由器有关 ECN 的信息。

IP 标头中的 ECN 位:

IP 标头中的 ECN 位

路由器是要运行 AQM 的,路由器是要标记数据包的。因此,路由器必须知道发送方和接收方已启用 ECN。由于路由器无法访问 TCP 标头,因此在 IP 标头中添加了 2 个新位。见第一行,IP 头中的第三个字段。为区分服务保留了 8 位。其中 2 位已用于 ECN 代码点。

第一个比特称为 ECT:ECN Capable Transport,第二个比特称为 CE:Congestion Experienced。同样会有四个代码点,但这些代码点将不同于用于发送方和接收方使用的 ECN 代码点。

IP 标头中的 ECN 代码点:

S. No.ECTCECodepointSent FromTo
1. 00non-ECTany any
2. 01ECT(1): ECN Capable Transportsender receiver
3.10ECT(0): ECN Capable Transportsenderreceiver
4. 1CE: Congestion Experiencedrouterreceiver
  • [0 0] 表示非 ECT。这意味着数据包不支持 ECN,因此没有必要标记此数据包。如果存在拥塞,则必须丢弃此数据包而不是对其进行标记。
  • [0 1] 是 ECT(0) 代码点表示数据包支持 ECT。
  • [1 0] 是 ECT(1) 代码点,这也意味着数据包启用了 ECT。如果一个数据包是 ECT(0) 或 (1),那么这个数据包不会被路由器丢弃,而是会被标记。
  • [1 1] 是 CE 代码点。当路由器拥塞并且数据包启用 ECT 时,路由器会将这个数据包标记为 CE。路由器将翻转 ECT 代码点的 0 位并使其成为 CE。它不会丢弃数据包,只是将其标记并传输给接收者。