Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

CoS 显式拥塞通知

显式拥塞通知 (ECN) 支持在基于 TCP/IP 的网络上的两个端点之间发送端到端拥塞通知。这两个端点是支持 ECN 的发送方和启用 ECN 的接收方。必须在两个端点以及端点之间的所有中间设备上启用 ECN,ECN 才能正常工作。传输路径中任何不支持 ECN 的设备都会中断端到端 ECN 功能。

ECN 向网络通报拥塞情况,目的是通过使发送设备降低传输速率,直到拥塞消失,而不会丢弃数据包,从而减少数据包丢失和延迟。RFC 3168, 向 IP 添加显式拥塞通知 (ECN),定义 ECN。

默认情况下,ECN 处于禁用状态。通常,您只能在处理尽力服务流量的队列上启用 ECN,因为其他流量类型使用不同的拥塞通知方法:无损流量使用基于优先级的流控制 (PFC),严格高优先级流量接收所需的所有端口带宽,直至达到配置的最大速率。

通过在队列调度器配置中启用 ECN,将调度器映射到转发类(队列),然后将调度器应用于接口,可以在单个输出队列(如转发类表示)上启用 ECN。

ECN 有两种类型:静态 ECN 和动态 ECN (D-ECN)。静态 ECN 要求您手动配置触发拥塞通知的阈值,并且阈值保持不变,直到您更改设置。动态 ECN 会根据实时情况(例如队列长度和流量模式)自动调整阈值。

在支持的设备上,可以同时在设备上启用两个 ECN 版本,但一次只能将一个版本分配给特定队列。

注意:

要使 ECN 在队列上正常工作,还必须对队列应用加权随机早期检测 (WRED) 数据包丢弃配置文件。

ECN 工作原理

如果没有 ECN,设备会通过丢弃 TCP/IP 数据包来应对网络拥塞。丢弃的数据包向网络发出发生拥塞的信号。IP 网络上的设备通过降低数据包传输速率以清除拥塞来响应 TCP 数据包丢弃。但是,拥塞通知和管理的丢包方法存在一些缺点。例如,数据包被丢弃,必须重新传输。此外,突发流量会导致网络过多降低传输速率,导致带宽利用效率低下。

ECN 不会丢弃数据包以表示网络拥塞,而是将数据包标记为表示网络拥塞,而不会丢弃数据包。要使 ECN 正常工作,两个启用 ECN 的端点之间路径中的所有设备都必须启用 ECN。ECN 在端点之间建立 TCP 连接期间进行协商。

支持 ECN 的设备会根据应用于队列的 WRED 数据包丢弃配置文件配置确定队列拥塞状态,因此每个启用 ECN 的队列也必须具有 WRED 丢弃配置文件。如果队列填满到 WRED 丢弃配置文件的数据包丢弃概率大于零 (0) 的级别,则设备可能会将数据包标记为拥塞。设备是否将数据包标记为拥塞的概率与队列在该填充级别上的丢弃概率相同。

ECN 通过在 IP 报头的差异化服务 (DiffServ) 字段中标记两个最低有效位来通信是否出现拥塞。DiffServ 字段中最高有效六位包含差分服务代码点 (DSCP) 位。两个 ECN 位的状态表示数据包是否为支持 ECN 的数据包,以及是否经历过拥塞。

支持 ECN 的发送方将数据包标记为支持 ECN。如果发送方不支持 ECN,它会将数据包标记为不支持 ECN。如果支持 ECN 的数据包在设备的出口队列中遇到拥塞,则设备会将该数据包标记为遇到拥塞。当数据包到达支持 ECN 的接收方(目标端点)时,接收方通过发送标记为指示拥塞的数据包,将拥塞指示器回显给发送方(源端点)。

源端点从接收方接收到拥塞指示器后,降低传输速率以缓解拥塞。这与 TCP 拥塞通知和管理的结果类似,但 ECN 不是丢弃数据包以发出网络拥塞信号,而是标记数据包,接收方将拥塞通知回显给发送方。由于数据包不会被丢弃,因此不需要重新传输数据包。

DiffServ 字段中的 ECN 位

DiffServ 字段中的两个 ECN 位提供了四个代码,用于确定数据包是否被标记为支持 ECN 的传输 (ECT) 数据包,这意味着传输协议的两个端点都支持 ECN,以及是否出现拥塞 (CE),如 表 1 所示:

表 1:ECN 位代码

ECN 位(代码)

意义

00

非 ECT — 数据包被标记为不支持 ECN

01

ECT(1) —传输协议的端点支持 ECN

10

ECT(0) —传输协议的端点支持 ECN

11

CE - 经历拥塞

代码 01 和 10 具有相同的含义:传输协议的发送和接收端点支持 ECN。这些代码之间没有区别。

端到端 ECN 行为

在发送端点和接收端点协商 ECN 后,发送端点通过将 DiffServ ECN 字段设置为 ECT(1) (01) 或 ECT(0) (10) 将数据包标记为支持 ECN。端点之间的每个中间设备都必须启用 ECN,否则将无法工作。

当数据包遍历设备并在使用 WRED 数据包丢弃机制的输出队列中遇到拥塞时,设备会通过将 DiffServ ECN 字段设置为 CE (11) 将数据包标记为遇到拥塞。设备不会丢弃数据包(与 TCP 拥塞通知一样),而是转发数据包。

注意:

在出口队列中,WRED 算法根据队列填充级别(队列的满度)确定数据包是否符合丢弃条件。如果数据包符合丢弃条件并标记为支持 ECN,则可以将该数据包标记为 CE 并进行转发。如果某个数据包符合丢弃条件,并且未标记为支持 ECN,则该数据包可能会被丢弃。有关 WRED 算法的详细信息,请参阅 ECN 阈值的 WRED 丢弃配置文件控制

当数据包到达接收端点时,CE 标志会通知接收方存在网络拥塞。然后,接收方向发送方发送(回显)一条消息,指示网络上存在拥塞。发送方确认拥塞通知消息并降低其传输速率。 图 1 总结了 ECN 如何缓解网络拥塞:

图 1:显式拥塞通知 Explicit Congestion Notification

端到端 ECN 行为包括:

  1. 支持 ECN 的发送方和接收方在建立连接期间协商 ECN 功能。

  2. 在成功协商 ECN 功能后,支持 ECN 的发送方会向接收方发送设置了 ECT 字段的 IP 数据包。

    注意:

    您必须在发送方和接收方之间路径中 的所有 中间设备上启用 ECN。

  3. 如果设备出口队列上的 WRED 算法确定队列遇到拥塞,并且数据包符合丢弃条件,则设备可以将数据包标记为“遇到拥塞”(CE),以向接收方指示网络上存在拥塞。如果数据包已标记为 CE(另一台设备的出口处已出现拥塞),则设备会转发标记为 CE 的数据包。

    如果出口队列没有拥塞,设备将转发数据包,并且不会更改 ECN 位中启用 ECT 的标记,因此数据包仍会被标记为支持 ECN,但不会出现拥塞。

  4. 接收方收到标有 CE 的数据包,指示沿拥塞路径出现拥塞。

  5. 接收方将数据包回显(发送)给发送方,并在 TCP 报头的标志字段中标记 ECE 位(位 9)。ECE 位是 ECN 回显标志位,用于通知发送方网络上存在拥塞。

  6. 发送方降低数据传输速率,并向接收方发送一个数据包,该数据包在 TCP 报头的标志字段中标记了 CWR 位(位 8)。CWR 位是拥塞窗口减少的标志位,它向接收方确认已收到拥塞通知。

  7. 当接收方收到 CWR 标志时,接收方停止设置 ECE 位以回复发送方。

表 2 总结了启用 ECN 的队列上的流量行为。

表 2:启用 ECN 的队列上的流量行为

ECN 位的传入 IP 数据包标记

输出队列上的 ECN 配置

如果 WRED 算法确定数据包符合丢弃条件,则执行操作

ECN 位的传出数据包标记

非 ECT (00)

没关系

落。

未标记 ECN 位

ECT(10 或 01)

ECN 已禁用

数据包丢弃 — 未标记 ECN 位

ECT(10 或 01)

支持 ECN

不要掉落。将数据包标记为遇到拥塞(CE,位 11)。

标记为 ECT (11) 的数据包表示拥塞

CE (11)

ECN 已禁用

数据包丢弃 — 未标记 ECN 位

CE (11)

支持 ECN

不要掉落。数据包已标记为遇到拥塞,转发数据包而不更改 ECN 标记。

标记为 ECT (11) 的数据包表示拥塞

当输出队列未出现映射到队列的 WRED 丢弃配置文件所定义的拥塞时,将转发所有数据包,并且不会丢弃任何数据包。

ECN 与 PFC 和以太网的比较 暂停

ECN 是用于 IP 流量的端到端网络拥塞通知机制。基于优先级的流控制 (PFC) (IEEE 802.1Qbb) 和以太网暂停 (IEEE 802.3X) 是不同类型的拥塞管理机制。

ECN 要求输出队列还必须具有关联的 WRED 数据包丢弃配置文件。用于启用了 PFC 的流量的输出队列不应具有关联的 WRED 丢弃配置文件。启用了以太网暂停的接口不应具有关联的 WRED 丢弃配置文件。

PFC 是一种点对点流控制机制,可支持无损流量。PFC 使连接的对等设备能够在拥塞期间暂停流量传输。通过 PFC,您可以暂停链路上指定类型流的流量,而不是链路上的所有流量。例如,您可以(也应该)在无损流量类(如 fcoe 转发类)上启用 PFC。 以太网暂停也是一种对等流控制机制,但以太网暂停会暂停物理链路上的所有流量,而不是仅暂停指定的流量流。

使用 PFC 和以太网 PAUSE,流量的发送端点和接收端点不会跨中间设备相互传递拥塞信息。相反,PFC 控制两个支持数据中心桥接 (DCB) 标准且支持 PFC 的对等设备(例如设备)之间的流量。PFC 的工作原理是在流输出队列拥塞时向连接的对等方发送暂停消息。以太网 PAUSE 只是在拥塞期间暂停链路上的所有流量,不需要 DCB。

PFC 的工作方式是这样的:如果设备输出队列填满到某个阈值,设备会向正在传输数据的已连接对等设备发送 PFC 暂停消息。暂停消息告诉传输设备暂停流的传输。拥塞清除后,设备会发送另一条 PFC 消息,告知连接的对等方恢复传输。(如果传输设备的输出队列也达到特定阈值,则该设备可以依次向正在向其传输的连接对等方发送 PFC 暂停消息。这样,PFC 可以通过网络将传输暂停传播回去。)

更多信息,请参阅 了解 CoS 流控制(以太网 PAUSE 和 PFC)。 您也可以参阅了解 跨第 3 层接口的 PFC 功能

ECN 阈值的 WRED 丢弃配置文件控制

您可以将 WRED 丢弃配置文件应用于转发类(映射到输出队列),以控制设备标记支持 ECN 的数据包的方式。调度器图将丢弃配置文件与调度器和转发类相关联,然后将调度器图应用于接口,以实现这些接口上转发类的调度属性。

丢弃配置文件定义队列填充级别(队列充满度的百分比)和丢弃概率(丢弃数据包的百分比概率)对。当队列填充到指定级别时,与丢弃配置文件匹配的流量具有与该填充级别配对的下降概率。配置丢弃配置文件时,您可以配置成对的填充级别和丢弃概率,以控制数据包在不同队列填充度级别的丢弃方式。

第一个填充水平和下降概率对是下降起点。在队列到达第一个填充级别之前,不会丢弃数据包。当队列到达第一个填充级别时,超过填充级别的数据包被丢弃的概率等于与填充级别配对的丢弃概率。

最后一个填充水平和下降概率对是下降端点。当队列到达最后一个填充级别时,所有数据包都将被丢弃,除非它们已针对 ECN 进行配置。

注意:

无损队列(使用丢包属性配置的 no-loss 转发类)和严格高优先级队列不使用丢弃配置文件。无损队列使用 PFC 来控制流量。严格高优先级队列接收它们所需的所有端口带宽,最高可达配置的最大带宽限制。

不同的设备在液滴配置文件中支持不同数量的液位/液滴概率对。

注意:

不要将最后的填充级别配置为 100%。

丢弃配置文件配置影响 ECN 数据包,如下所示:

  • 丢弃起点 — 支持 ECN 的数据包可能会被标记为已体验拥塞 (CE)。

  • 丢弃端点 — 支持 ECN 的数据包始终标记为 CE。

当队列从丢弃起点填满到丢弃终点时,ECN 数据包被标记为 CE 的概率与将丢弃配置文件应用于尽力而为流量时丢弃非 ECN 数据包的概率相同。随着队列填满,ECN 数据包被标记为 CE 的概率会增加,就像将丢弃配置文件应用于尽力而为流量时,非 ECN 数据包被丢弃的概率也会增加一样。

在丢弃端点,所有 ECN 数据包均标记为 CE,但不会丢弃 ECN 数据包。当队列填充级别超过丢弃端点时,所有 ECN 数据包都标记为 CE。此时,所有非 ECN 数据包都将被丢弃。如果队列完全填满,ECN 数据包(和所有其他数据包)将被丢弃。

要配置 WRED 数据包丢弃配置文件并将其应用于输出队列(在支持 ETS 的设备上使用分层调度):

  1. 使用语句 set class-of-service drop-profiles profile-name interpolate fill-level drop-start-point fill-level drop-end-point drop-probability 0 drop-probability percentage配置丢弃配置文件。

  2. 使用语句 set class-of-service schedulers scheduler-name drop-profile-map loss-priority (low | medium-high | high) protocol any drop-profile profile-name将丢弃配置文件映射到队列调度程序。丢弃配置文件的名称是在步骤 1 中配置的 WRED 配置文件的名称。

  3. 使用语句 set class-of-service scheduler-maps map-name forwarding-class forwarding-class-name scheduler scheduler-name将步骤 2 与丢弃配置文件关联的调度程序映射到输出队列。转发类标识输出队列。默认情况下,转发类会映射到输出队列,并且可以通过显式用户配置重新映射到不同的队列。调度程序名称是在步骤 2 中配置的调度器。

  4. 使用语句 set class-of-service traffic-control-profiles tcp-name scheduler-map map-name将调度器图与流量控制配置文件相关联。调度器图名称是在步骤 3 中配置的名称。

  5. 使用语句 set class-of-service interface interface-name forwarding-class-set forwarding-class-set-name output-traffic-control-profile tcp-name将流量控制配置文件与接口相关联。输出流量控制配置文件名称是在步骤 4 中配置的流量控制配置文件的名称。

    接口使用流量控制配置文件中的调度器图将丢弃配置文件(和其他属性,包括 enable ECN 属性)应用于该接口上的输出队列(转发类)。由于您可以使用不同的流量控制配置文件将不同的调度程序映射到不同的接口,因此不同接口上的相同队列号可以通过不同方式处理流量。

您可以配置 WRED 数据包丢弃配置文件,并将其应用于支持端口调度的设备上的输出队列(不支持或不使用 ETS 分层调度)。要配置 WRED 数据包丢弃配置文件并将其应用于支持端口调度的设备上的输出队列(不支持或不使用 ETS 分层调度):

  1. 使用语句 set class-of-service drop-profiles profile-name interpolate fill-level level1 level2 ... level32 drop-probability probability1 probability2 ... probability32配置丢弃配置文件。您可以指定最短两个填充水平/下降概率对或多达 32 个对。

  2. 使用语句 set class-of-service schedulers scheduler-name drop-profile-map loss-priority (low | medium-high | high) drop-profile profile-name将丢弃配置文件映射到队列调度程序。丢弃配置文件的名称是在步骤 1 中配置的 WRED 配置文件的名称。

  3. 使用语句 set class-of-service scheduler-maps map-name forwarding-class forwarding-class-name scheduler scheduler-name将步骤 2 与丢弃配置文件关联的调度程序映射到输出队列。转发类标识输出队列。默认情况下,转发类会映射到输出队列,并且可以通过显式用户配置重新映射到不同的队列。调度程序名称是在步骤 2 中配置的调度器。

  4. 使用语句 set class-of-service interfaces interface-name scheduler-map scheduler-map-name将调度器图与接口相关联。

    接口使用调度程序图将丢弃配置文件(和其他属性)应用于映射到该接口上的转发类的输出队列。由于您可以在不同的接口上使用不同的调度器图,因此不同接口上的相同队列号可以通过不同方式处理流量。

动态 ECN

动态 ECN 通过提供一种自动执行触发拥塞通知事件的阈值的方法,增强了 ECN 功能集。Junos OS 演化版可监控队列长度和流量模式等实时状况,以评估是否应调整阈值。与静态 ECN 相比,这样对拥塞事件的响应速度更快,并且提高了拥塞控制效率。

D-ECN 比静态 ECN 更难实施,并且需要主动监控。您应该评估您的网络状况和配置,以确定 D-ECN 是否最适合您的网络。

您可以检查 功能浏览器 以查看您的设备是否支持 D-ECN。

支持、限制和注意事项

如果映射到队列的 WRED 算法未发现数据包丢弃符合条件,则 ECN 配置和 ECN 位标记无关紧要。数据包传输行为与未启用 ECN 时相同。

默认情况下,ECN 处于禁用状态。通常,只能在处理尽力服务流量的队列上启用 ECN,不能在处理无损流量或严格高优先级流量的队列上启用 ECN。

ECN 支持以下内容:

  • IPv4 和 IPv6 数据包

  • 未标记、单标记和双标记数据包

  • IP 隧道数据包的外部 IP 报头(但不是内部 IP 报头)

ECN 不支持以下内容:

  • 使用 MPLS 封装的 IP 数据包

  • IP 隧道数据包的内部 IP 报头(但是,ECN 适用于外部 IP 报头)

  • 组播、广播和目标查找失败 (DLF) 流量

  • 非 IP 流量

注意:

要将 WRED 丢弃配置文件应用于非 ECT 流量,请配置多域 (MF) 分类器以将非 ECT 流量分配给未启用 ECN 的其他输出队列,然后将 WRED 丢弃配置文件应用于该队列。

特定于平台的行为

使用 功能浏览器 确认平台和版本对 ECN 的支持。

使用下表查看此功能的特定于平台的行为。

平台

差异

PTX10001-36MR、PTX10004、PTX10008、PTX10016

您可以通过定义调度程序的缓冲区速率和低丢弃百分比配置文件来实现低阈值 ECN(缓冲区开始填充后立即开始 ECN 标记)。

缓冲区速率用作计算缓冲区大小的基本速率。缓冲速率是 VOQ 的目标速率,即典型拥塞期间的预期出口队列速率。在[edit class-of-service schedulers scheduler-name]层次结构级别设置。buffer-rate

您还可以为跌落配置文件定义更细粒度(精确到十分之一)和更小的填充水平百分比。也就是说,您可以将填充级别设置为低至 0.7%。

注意:

PTX 路由器仅支持静态 ECN。

QFX5000 系列

在 QFX5K 平台上,ECN 功能与 WRED 阈值紧密集成。WRED 阈值是静态的,因此 ECN 也基于缓冲区阈值的静态计算工作。但是,队列的实际共享缓冲区使用情况是动态的。以下是在 ECN 配置时用于计算 ECN 标记阈值的公式。

  • max buffer access eligibility for ECN enabled queue = (( shared pool size * hardware_alpha)/(1 + hardware_alpha)) + egress queue dedicated buffer

  • ECN marking start threshold = WRED start fill level percent * Max buffer access eligibility for ECN enabled queue

  • ECN 100% marking threshold = WRED end fill level percent * Max buffer access eligibility for ECN enabled queue

在支持 ECN 的数据包拥塞期间,ECN CE 标记在 ECN marking start threshold 达到之后开始。支持 ECN 的数据包在达到之前 ECN 100% marking threshold 可能会进行 ECN CE 标记。在此阈值之后,所有支持 ECN 的数据包都将进行 ECN CE 标记,直到队列达到 max buffer access eligibility for ECN enabled queue。在此阈值之后,会发生尾部下降。

在上面的 max buffer access eligibility for ECN enabled queue计算中,假设了单个队列单独竞争共享缓冲区空间的最佳情况。但是,拥塞队列的实际共享缓冲区使用量可能会根据任何时间点共享缓冲区的竞争队列数动态减少。下面是计算 actual dynamic max buffer usage per queue的公式。

  • actual max buffer usage for ECN enabled queue = (shared pool size * hw_alpha) / (1 + (hw_alpha * number of competing queues)) + egress queue dedicated buffer + ingress Pg dedicated buffer by the traffic flow

在计算 ECN 阈值时,不能考虑计算中使用actual dynamic max buffer usage per queue的两个参数 number of competing queues ingress Pg dedicated buffer by the traffic flow和 ,因为这两个参数本质上都是动态的。这就产生了一种可能性,即启用了 ECN 的队列的实际最大缓冲区使用量可能低于计算出的静态 ECN 标记阈值。

因此,对于某些共享缓冲区和 WRED 填充级别配置,甚至在启用 ECN 的有损队列上进行 ECN 标记之前,就有可能由于共享缓冲区耗尽而发生数据包尾部丢弃。对于无损队列,由于上述限制,PFC 可以从 ECN 标记之前的入口端口开始,因为 PFC XOFF 阈值是动态的,与静态 ECN 阈值不同。您可以通过监控拥塞队列的峰值缓冲区使用情况并相应地微调 ECN/WRED 阈值来确定正确的 ECN 标记阈值。

QFX10000 系列

  • 在QFX10000交换机上,当您为 ECN 启用队列并将 WRED 丢弃配置文件应用于队列时,WRED 丢弃配置文件仅设置将 ECN 流量标记为拥塞的阈值 (CE, 11)。在启用了 ECN 的队列上,WRED 丢弃配置文件不会为非 ECT (00) 流量(不支持 ECN 的流量)设置丢弃阈值。相反,交换机对流量使用尾丢算法,即在拥塞期间在启用 ECN 的队列上标记为非 ECT。