显式拥塞通知(ECN)机制

显式拥塞通知(ECN,Explicit Congestion Notification) 是一种网络层拥塞控制机制,核心是在数据包不被丢弃的前提下,通过标记数据包的方式向发送端传递网络拥塞信号,解决传统 "丢包作为拥塞信号" 机制的高开销、高延迟问题,尤其适配智算中心 RoCE 网络、数据中心 TCP 网络等对低丢包、低延迟敏感的场景。


一、ECN 的核心设计逻辑

传统拥塞控制依赖 "数据包丢弃" 作为拥塞信号(如 TCP Reno),但丢包会触发重传,增加时延和带宽开销;而 ECN 的核心是**"标记替代丢弃"**:

  1. 网络设备(交换机 / 路由器)检测到拥塞时,不丢弃数据包,而是修改数据包 IP 头部的ECN 标志位,标记为 "经历过拥塞"。
  2. 接收端收到标记包后,通过反馈机制告知发送端网络拥塞。
  3. 发送端收到反馈后,主动降低发送速率,提前缓解拥塞,避免队列溢出导致的丢包。

二、ECN 的关键组成(IP 头部标志位定义)

ECN 功能通过 IP 头部的 2 个保留比特位(共 4 种组合) 实现,具体定义如下:

标志位组合 含义 角色
00 ECN-Capable Transport(ECT)= 0 数据包来自不支持 ECN的端系统,设备不标记
01 ECT(1) 数据包来自支持 ECN的端系统,可被标记
10 ECT(0) 数据包来自支持 ECN的端系统,可被标记
11 Congestion Experienced(CE) 数据包被网络设备标记为经历过拥塞

注:ECT (0) 和 ECT (1) 功能等价,仅用于区分不同传输流,设备对两者的标记逻辑一致。


三、ECN 的完整工作流程(以 RoCE 网络为例)

1.端系统协商

发送端和接收端在建立连接时,通过协议握手确认双方均支持 ECN(如 RoCEv2 通过 IB 握手报文)。

2.拥塞检测与标记

  • 交换机实时监控端口队列长度,对比预设的低水位线(Kmin)高水位线(Kmax)
  • 队列长度 < Kmin:无拥塞,不标记,正常转发。
  • Kmin ≤ 队列长度 ≤ Kmax:中度拥塞,按ECN 标记比例概率性标记数据包为 CE。
  • 队列长度 > Kmax:严重拥塞,对所有 ECT 数据包标记为 CE。

3.拥塞反馈

接收端收到 CE 标记的 RoCE 数据包后,生成CNP(拥塞通知报文),发送给发送端。

4.速率调整

发送端接收 CNP 后,触发拥塞控制算法(如 DCQCN),降低发送速率,缓解网络拥塞。


四、ECN 的核心优势与适用场景

优势 适用场景
无丢包开销,避免重传延迟 智算中心 RoCE 网络(AI 训练梯度同步)
拥塞信号更精准,提前缓解 数据中心低时延业务(实时交易、数据库同步)
与现有协议兼容(TCP/RoCE) 混合流量网络(长流 + 短流并发)

ECN 的依赖条件

  1. 端到端支持:发送端、接收端必须均开启 ECN 功能,否则设备会退化为传统丢包策略。
  2. 网络设备支持:交换机需具备 ECN 标记能力,且可配置水位线和标记比例。
  3. 拥塞控制算法适配:发送端需支持基于 ECN 反馈的速率调整(如 TCP 的 ECE 标志位、RoCE 的 DCQCN 算法)。

五、ECN 标记比例

ECN 标记比例是显式拥塞通知(ECN)机制中的关键参数,指在网络处于特定拥塞程度时,交换机等网络设备对经过的数据包进行 ECN 拥塞标记(即 CE 标记)的概率或占比,用于精准控制拥塞通知的触发强度,避免标记过于频繁或不足导致的网络波动。

1.核心作用

该比例通常作用于网络中度拥塞场景。比如交换机缓冲区数据量处于低水位线(拥塞预警阈值)和高水位线(严重拥塞阈值)之间时,不会对所有数据包都标记,而是按设定比例标记部分数据包。这样既能向发送端传递拥塞信号,促使其降速,又能避免因全量标记导致发送端速率骤降,保障网络传输的稳定性。例如星飞全闪存储就曾配置 9% 的标记比例,用于低、高水位线之间的数据包拥塞标记。

2.功能实现方式

其实现需依托网络设备配置、队列监测和端侧反馈协同完成,具体步骤如下:

  1. 预设关键参数阈值:首先在交换机等网络设备上完成基础配置。一方面设定队列的低水位线(Kmin)和高水位线(Kmax),界定不同拥塞阶段;另一方面设定 ECN 标记比例。比如典型配置可设低水位线为 30% 队列深度、高水位线为 60% 队列深度,标记比例设为 10%,明确中度拥塞时的标记概率。在 SONiC 交换机等设备中,还可通过专属配置界面或命令行定义这些参数。
  2. 实时监测队列拥塞状态:设备持续监控端口缓冲区的队列长度。当队列长度小于低水位线时,判定为无拥塞,不进行任何 ECN 标记,数据包正常转发;当队列长度超过高水位线,判定为严重拥塞,通常对所有数据包进行 ECN 标记,快速触发拥塞缓解;当队列长度处于低、高水位线之间时,进入中度拥塞状态,触发概率性标记逻辑。
  3. 按比例执行 ECN 标记:中度拥塞状态下,设备依据预设的 ECN 标记比例,通过随机算法筛选待标记数据包。例如标记比例为 9% 时,每 100 个经过的数据包中约有 9 个会被设置 CE 标记。标记过程仅修改 IP 头部的两位 ECN 标志位,不改变数据包的有效数据,几乎无额外开销。
  4. 端侧反馈与速率调整:接收端收到带 CE 标记的数据包后,会通过对应的反馈机制告知发送端。比如 TCP 协议通过 ACK 包中的 ECE 标志位反馈,RoCE 网络中接收端可生成 CNP(拥塞通知报文)反馈。发送端根据接收的反馈信息,结合标记数据包的占比感知拥塞程度,通过 AIMD 等算法调整发送速率,最终实现拥塞缓解。

3.网络硬件与基础参数

  • 设备缓冲区容量:不同厂商交换机的缓冲区差异很大,比如 Mellanox 交换机缓冲区可能达 12MB,而 Broadcom 部分机型仅 4MB。缓冲区小的设备若标记比例对应的触发区间过宽,易导致队列溢出;缓冲区大的设备可适当放宽比例区间,避免过早标记。像 H3C S9825 - 64D 交换机就建议下限值设为队列容量的 5% - 10%,上限值设为 10% - 20%。
  • 链路带宽与 RTT:链路带宽和往返时延(RTT)决定的 BDP(在途数据量)是关键参考。100Gbps 链路搭配 50 微秒 RTT 时,BDP 约 625KB,ECN 标记比例对应的阈值区间需预留足够 gap 以容纳 1 - 2 个 BDP 的数据。高速链路(如 400G)需适配更大的阈值区间,Meta 的 400G 网络就采用了 5MB 的宽松 ECN 阈值,对应的标记比例区间也随之调整。

4.网络拥塞控制协同机制

ECN 常与 PFC(优先级流控)配合使用,二者的阈值搭配直接影响标记比例设定。**核心原则是 ECN 的高阈值(kmax)必须小于 PFC 的关闭阈值(xoff),且要留出足够 gap。**若 kmax 与 xoff 过近,ECN 反馈回路(需至少 1 个 RTT)来不及生效,PFC 会频繁触发,此时需调低 kmax 并调整标记比例,让 ECN 提前发挥作用;若 PFC 极少触发但延迟过高,则需提高标记比例的触发概率,通过更早的标记缓解队列积压。

5.业务流量特征

  • 业务时延敏感度:低时延敏感业务如 AI 训练、实时交易,需设置较高的初始标记比例,比如降低 kmin 阈值,让队列刚出现轻微积压就触发概率标记,以小幅度降速换取低延迟;而云存储等对吞吐更敏感的业务,可降低初始标记比例,避免频繁降速影响传输效率。
  • 流量突发与汇聚模式:AI 训练中的 AllReduce 场景会出现几十上百个节点同时向一个节点发数据的 Incast 情况,入向队列压力骤增。此时需提高中度拥塞阶段的标记比例,快速压制突发流量;而常规分布式业务流量平稳,标记比例可设得更平缓。

6.端侧协议与适配能力

标记比例需匹配发送端的拥塞控制算法响应能力。在 RoCE 网络中,发送端通常依赖 DCQCN 算法响应 ECN 标记,若算法中速率恢复设置得过于激进,刚降速就快速回升,就需提高标记比例,通过更密集的标记强化拥塞信号;而 TCP 协议通过 ACK 包中的 ECE 标志位反馈拥塞,其 AIMD 算法调整节奏较慢,标记比例可设置得更温和,避免发送端速率骤降。若发送端不支持 ECN 功能,设备会按 WRED 策略丢弃报文,此时标记比例设置便失去意义,需适配丢弃概率而非标记比例。

7.网络拓扑与负载变化

  • 网络拓扑复杂度:多跳网络的 RTT 更长,ECN 反馈延迟增加,标记比例的区间需扩大,让标记率缓慢上升,给发送端充足的调整时间;而 1 - 2 跳的简单拓扑可缩小区间,提升标记灵敏度。
  • 动态负载波动:网络流量模式会随业务变化,如新增推理服务、数据预处理任务后,流量特征改变。若监控到 ECN 标记率持续高于 50% 或低于 5%,需相应调低或调高标记比例;若 PFC 触发计数持续增长,也需通过调整标记比例让 ECN 充分发挥作用,减少 PFC 介入。

六、ECN 与 PFC 协同部署

ECN 与 PFC 常协同部署于 RoCE 等对无损传输、低延迟要求高的智算中心网络,二者遵循 "ECN 提前预警控拥塞,PFC 兜底防丢包" 的核心逻辑,配置需围绕阈值匹配、设备协同、业务适配等核心要点展开。

1.阈值强绑定:筑牢层级控制关系

这是协同配置的核心原则,需明确 4 个关键阈值的大小排序:ECN 的 kmin(开始标记阈值)<ECN 的 kmax(全量标记阈值)<PFC 的 xoff(触发暂停阈值),且各阈值间需预留合理间隙。一方面,kmax 与 xoff 的间隙要能容纳至少 1 个 BDP(在途数据量),比如 100G 链路搭配 50 微秒 RTT 时 BDP 约 625KB,二者间隙就不宜小于该值,为 ECN 反馈(需 1 - 2 个 RTT)预留足够反应时间,避免 ECN 未生效就触发 PFC;另一方面,kmin 与 kmax 需保留渐进区间,像 100G RoCE 网络设 kmin=150KB、kmax=500KB,可实现标记率平滑上升,防止发送端速率骤变。同时 PFC 需配置 xon(恢复发送阈值),通常设为 xoff 减去 10KB - 100KB,避免 XON/XOFF 频繁切换导致网络抖动。

2.设备参数协同:统一底层适配标准

  • 交换机侧参数适配:不同厂商交换机缓冲区差异大,Mellanox 交换机缓冲区可达 12MB,Broadcom 部分机型仅 4MB,配置时需按缓冲区容量调整阈值。例如大容量缓冲区交换机可将 xoff 设为 2 - 5MB,小缓冲区设备则需适度降低,同时确保 ECN 阈值同步适配。且交换机需开启优先级队列与 ECN 标记功能,确保仅对目标优先级流量(如 RoCE 业务对应的优先级)启用 PFC 和 ECN,避免影响其他普通流量。
  • 网卡侧算法联动:网卡需启用 DCQCN 等适配 RoCE 的拥塞控制算法,其参数要与 ECN 标记逻辑匹配。若网卡速率恢复设置过激进,会导致发送端降速后快速回升,使 ECN 标记失效,此时需调慢速率恢复节奏;同时需确保网卡能正常解析 CNP 报文,及时响应 ECN 的拥塞标记信号。

3.业务场景适配:按需调整管控强度

  • 低时延高优业务:AI 训练梯度同步、实时交易等业务,需让 ECN 更早介入,可将 kmin 下调至 150KB 左右,使轻微队列积压就触发标记,通过柔性降速控制延迟,同时将 xoff 设为较高值(如 1.5MB 以上),减少 PFC 触发概率。
  • Incast 高发场景:AI AllReduce 等多对一传输场景,流量突发时队列压力会骤增,需扩大 kmin 与 kmax 的区间,提高中度拥塞阶段的标记比例,同时 xoff 需预留更大缓冲区,避免突发流量直接触发 PFC,防止多节点互相暂停引发 PFC 死锁。
  • 大吞吐普通业务:数据备份、非实时推理等业务,可适当提高 kmin(如 300 - 500KB),避免 ECN 过度干预影响吞吐,xoff 则按链路 BDP 的 1.5 倍配置,平衡缓冲空间与拥塞防护。

4.动态监控调优:适配网络负载变化

配置并非一成不变,需通过监控指标持续优化。正常状态下应满足 ECN 标记率维持在 10% - 30%,PFC 触发次数接近 0,RDMA 重传率低于 0.01%。若 PFC 频繁触发,需降低 kmax 并增大其与 xoff 的间隙,让 ECN 充分发挥作用;若延迟过高但无 PFC 触发,可下调 kmin 和 kmax,减少队列积压;当新增业务导致流量特征改变时,需重新计算 BDP,同步调整 ECN 和 PFC 的阈值参数。

5.规避典型风险:提前防范异常问题

一是避免 PFC 死锁,配置时需避免多链路互传场景下 xoff 阈值过近,同时限制 PFC 暂停帧的传播范围,防止全网扩散引发 "PFC 风暴";二是防止 ECN 失效,需确认端到端设备均开启 ECN 功能,若某端设备不支持,需降级适配丢包策略,避免标记功能无效导致拥塞扩散;三是上线前通过 iperf3、perftest 等工具模拟满负载和突发流量,验证阈值合理性,确保极端场景下也能实现 "ECN 为主、PFC 兜底" 的协同效果。

相关推荐
Elastic 中国社区官方博客1 小时前
使用 Elastic Cloud Serverless 扩展批量索引
大数据·运维·数据库·elasticsearch·搜索引擎·云原生·serverless
超龄超能程序猿2 小时前
Docker GPU插件(NVIDIA Container Toolkit)安装
运维·docker·容器
岁岁种桃花儿2 小时前
Nginx 站点垂直扩容(单机性能升级)全攻略
网络·nginx·dns
Xの哲學2 小时前
Linux SMP 实现机制深度剖析
linux·服务器·网络·算法·边缘计算
2501_906150563 小时前
私有部署问卷系统操作实战记录-DWSurvey
java·运维·服务器·spring·开源
钦拆大仁3 小时前
单点登录SSO登录你了解多少
服务器·sso
岳来3 小时前
docker 从 Path 值看容器启动命令
运维·docker·容器
only火车头3 小时前
升级 ceph (16.2 -> 18.2) ceph mon 启动失败
服务器·ceph
一颗青果3 小时前
公网构建全流程与参与主体深度解析
网络
RisunJan4 小时前
Linux命令-ifconfig命令(配置和显示网络接口的信息)
linux·运维·服务器