网络基础:以太网、VLAN、QoS、PFC 与 ECN 关键技术

RoCE(RDMA over Converged Ethernet)的核心思想,是让以太网承担起原本属于 InfiniBand 的无损、低延迟传输任务。但传统以太网是“尽力而为”的,丢包、乱序、拥塞都是常态。因此,理解 RoCE 的前提,是先把以太网、VLAN、QoS、PFC、ECN 这五块基石弄清楚。它们分别解决了“怎么传”“怎么隔离”“怎么排队”“怎么不丢”和“怎么降速”的问题。

一、核心原理:从以太网帧到无损通道

RoCEv2 的数据报文封装在 UDP/IP 之上,标准以太网帧结构如下:

| 目的MAC(6B) | 源MAC(6B) | 802.1Q Tag(4B) | 以太类型(2B) | Payload | FCS(4B) |
                          |--TPID:0x8100--|--TCI: PCP(3bit)+DEI(1bit)+VID(12bit)--|

其中 802.1Q Tag 是 VLAN 与 QoS 的交汇点:VID 标识二层隔离域,PCP(Priority Code Point)字段则用于标记报文优先级,是后续 QoS 队列调度和 PFC 流控的基础。RoCEv2 通常将 PCP 设为 3 或 5,以区分不同流量类型。

RoCE 要实现无损传输,必须让网络中的交换机端口在出现拥塞时“不丢包”。这依赖两条链路:PFC(优先级流控)提供逐跳的停-发机制,ECN(显式拥塞通知)提供端到端的拥塞反馈。两者配合,才能让发送端主动降速,而不是被动丢包重传。

关键认知:RoCE 并非“替换”以太网,而是“改造”以太网。VLAN 负责隔离租户,PCP 负责区分优先级,PFC 保证高优先级帧不因缓冲溢出而丢弃,ECN 则让接收端能通知发送端“我快撑不住了”。四者缺一不可。

二、关键技术拆解

1. VLAN:广播域隔离与流量标识

在 RoCE 组网中,VLAN 不仅用于隔离广播域,更重要的是为不同租户或不同流量类型(存储、计算、管理)提供独立的逻辑通道。每个 VLAN 对应一个 12bit 的 VID,取值范围 1~4094。RoCE 流量通常规划独立 VLAN,避免与普通 TCP/IP 流量相互干扰。

2. QoS:队列调度与优先级映射

QoS 的核心是“分类-标记-排队-调度”。交换机根据报文的 PCP 值或 DSCP 值将其映射到不同的硬件队列。典型配置如下:

流量类型PCP值DSCP值队列行为
RoCE 高优先级326 (AF31)严格优先或高权重WRR
RoCE 中优先级224 (AF32)高权重WRR
普通TCP存储00 (BE)尽力而为
管理流量756 (CS7)严格优先(但限速)

注意:管理流量虽然优先级最高,但必须做速率限制,否则会挤占 RoCE 的带宽。

3. PFC:逐跳无损的“刹车”机制

PFC(IEEE 802.1Qbb)将物理链路划分为 8 个虚拟通道(对应 PCP 0~7)。当某个通道的接收缓冲超过阈值时,交换机向对端发送 PFC Pause 帧,对端收到后停止发送该优先级的报文,直到收到 Resume 帧。这种机制是逐跳生效的,即每一台交换机都要对自己的上游链路做流控。

重要陷阱:PFC 是“以邻为壑”的机制。如果某条链路持续拥塞,PFC 会向上游反压,最终可能导致拥塞树(Congestion Tree)扩散到整个网络,甚至引发死锁。因此 PFC 必须配合 ECN 使用,让源端主动降速,而不是依赖 PFC 无限反压。

4. ECN:端到端的“减速信号”

ECN(RFC 3168)利用 IP 头中的 ECN 字段(2bit)进行标记。发送端在报文头设置 ECT(ECN-Capable Transport),交换机检测到队列深度超过阈值时,将报文标记为 CE(Congestion Experienced),接收端收到 CE 后,通过反馈(如 RoCEv2 的 CNP 报文)通知发送端降低发送速率。整个过程不丢包,仅靠标记传递拥塞信号。

三、方法流程:无损以太网配置五步法

在实际组网中,配置顺序至关重要。推荐按以下流程操作:

  1. 规划 VLAN 与 IP:为 RoCE 分配独立 VLAN(如 VLAN 100),并规划好子网,确保所有 RoCE 节点二层可达。
  2. 配置 QoS 映射:在服务器网卡和交换机上,将 RoCE 流量的 DSCP/PCP 统一映射到优先级队列(通常为队列 3)。
  3. 启用 PFC:在交换机所有涉及 RoCE 的端口上,为队列 3 开启 PFC 流控,并设置合理的缓冲阈值(建议先使用厂商默认值,再根据监控调整)。
  4. 配置 ECN:在交换机上启用 ECN,设置队列深度的标记阈值(如 100KB~200KB),并确保服务器网卡支持 ECN 和 CNP 生成。
  5. 验证无损性:使用 ethtool -S 查看网卡丢包计数,使用 rdma_ping 或 ib_write_bw 测试实际带宽和延迟。
# 交换机配置示例(以某厂商CLI为例)
interface Ethernet1/1
  switchport mode trunk
  switchport trunk allowed vlan 100
  qos map dscp 26 to queue 3
  priority-flow-control mode on
  priority-flow-control priority 3 no-drop
  qos ecn threshold queue 3 100000 bytes

四、案例场景:存储网络中的 RoCE 部署

某企业部署分布式存储集群,使用 RoCEv2 承载存储流量。初始配置时,工程师将所有流量(存储+管理)放在同一 VLAN,未区分优先级。结果发现:当存储节点进行大规模数据重构时,管理流量被阻塞,SSH 登录延迟高达 10 秒以上。

优化方案如下:

  • 将存储流量划入 VLAN 100(PCP=3),管理流量划入 VLAN 200(PCP=7)。
  • 在交换机上为 PCP=7 设置严格优先队列,但增加 监管器(Policer)限制其带宽不超过 100Mbps。
  • 为 PCP=3 开启 PFC 和 ECN,确保存储流量无损。

优化后,即使存储流量占满 100Gbps 带宽,管理流量仍能正常响应,SSH 延迟稳定在 50ms 以内。这说明:无损网络不是“所有流量都无损”,而是“关键流量无损,其他流量可控”。

五、误区与复盘:常见配置错误

误区一:所有队列都开启 PFC。PFC 只应对无损队列(如 RoCE)开启。如果对所有队列开启,广播风暴或恶意流量可能导致整个链路持续反压,造成网络瘫痪。
误区二:ECN 阈值设置过小。如果 ECN 标记阈值太低,交换机在轻微拥塞时就大量标记 CE,导致发送端频繁降速,带宽利用率下降。建议阈值设置为端口缓冲的 30%~50%,并通过监控逐步调优。
复盘要点:在部署 RoCE 时,务必先画清“流量矩阵”——哪些流量需要无损,哪些可以容忍丢包。然后针对无损流量配置 PFC+ECN,针对控制流量配置限速,针对尽力而为流量配置 WRR。最后,务必在真实负载下验证 PFC 反压帧计数和 ECN 标记计数,这两个指标是判断无损网络是否健康的关键。

下图总结了 RoCE 网络中从发送端到接收端,VLAN、QoS、PFC、ECN 如何协同工作:

发送端 RoCE 流量生成 DSCP=26, PCP=3 ECN: ECT=1 交换机 A VLAN 100 转发 QoS: 队列3 (高优先级) PFC: 队列3 无丢包 ECN: 标记阈值 100KB 交换机 B VLAN 100 转发 QoS: 队列3 (高优先级) PFC: 队列3 无丢包 ECN: 标记阈值 100KB 接收端 检测 CE 标记 生成 CNP 报文 反馈拥塞状态 数据帧 数据帧 100G 链路 PFC Pause CNP 反馈 ECN 工作机制 1. 发送端设置 ECT=1 2. 交换机队列超阈值 → 置 CE=1 3. 接收端收到 CE → 发 CNP 4. 发送端降低速率 数据路径 PFC 反压

上图展示了 RoCE 无损传输的完整闭环:发送端发出带优先级标记的数据帧,经过交换机时由 QoS 保证队列调度;当交换机缓冲超过阈值时,一方面通过 PFC 向上游反压,另一方面通过 ECN 标记报文,最终由接收端通过 CNP 报文通知发送端降速。只有 PFC 和 ECN 协同工作,才能既保证不丢包,又避免拥塞扩散。