这里采用常见的QSFP28 + RoCEv2网络的协议栈介绍,涵盖从物理层到应用层的每一层封装、关键机制与部署要点。
一、协议栈全景概览
RoCEv2 的核心设计哲学是:在标准以太网基础设施上承载 InfiniBand 的 RDMA 语义。它通过将 IB 传输层封装在 UDP/IP 中,实现了跨子网路由能力,同时保留了 RDMA 的零拷贝、内核旁路与 CPU 卸载特性。
二、逐层协议栈详解
L0:NIC 硬件卸载层(Hardware Offload)
这是 RoCEv2 实现低延迟的关键。RDMA NIC(如 NVIDIA ConnectX-5/6/7、Intel E810)在硬件中完成以下全部操作:
- 报文组装:从 BTH 到 Ethernet 的所有头部在 NIC 内部生成
- ICRC 计算:InfiniBand 循环冗余校验(4 字节)
- DMA 引擎:直接将数据从用户空间内存 DMA 到远程主机的内存区域
用户空间应用通过 Verbs API 提交 Work Request 后,数据路径完全不经过操作系统内核,实现真正的零拷贝。
L1:物理层(QSFP28)
QSFP28 作为物理承载介质,提供 100Gbps 的物理带宽:
| 参数 | 规格 |
|---|---|
| 电接口 | CAUI-4(4×25.78125 Gbps NRZ) |
| 光接口 | 100GBASE-SR4(MPO-12)/ LR4(LC)/ PSM4 / CWDM4 |
| 编码 | NRZ(不归零编码) |
| 功耗 | 3.5W – 4.5W |
| 热插拔 | 支持 |
QSFP28 端口可向后兼容 QSFP+(40G)模块,实现平滑迁移。
L2:以太网数据链路层
RoCEv2 在标准以太网帧上运行,但需启用以下关键扩展:
| 机制 | 标准 | 作用 |
|---|---|---|
| PFC(Priority Flow Control) | IEEE 802.1Qbb | 基于优先级的逐跳流控,防止缓冲区溢出丢包 |
| ETS(Enhanced Transmission Selection) | IEEE 802.1Qaz | 带宽分配,确保 RDMA 流量优先 |
| VLAN Tag | IEEE 802.1Q | 携带 3-bit PCP 优先级字段(通常 RoCEv2 流量标记为 Priority 3) |
关键配置:PFC 必须在 RDMA 流量所在的优先级上启用,否则 RoCEv2 在拥塞时会发生丢包,导致 RDMA 重传(Go-Back-N),严重损害性能。
L3:IP 网络层
RoCEv2 使用标准 IPv4/IPv6 头部,这是其与 RoCEv1(仅 L2)的根本区别:
- 路由能力:可跨三层子网通信,支持标准 IP 路由协议(OSPF/BGP/ECMP)
- ECN(Explicit Congestion Notification):IP 头部的 ECN 位(bit 6-7)用于拥塞信号传递
- 交换机检测到拥塞时,标记 ECN=11(CE,Congestion Experienced)
- 接收端 NIC 生成 CNP(Congestion Notification Packet)回传发送端
- 发送端根据 DCQCN(Datacenter Quantized Congestion Notification)算法降速
- DSCP:用于区分服务类别,通常 RoCEv2 流量标记为 DSCP=48(CS6)
L4:UDP 封装层
RoCEv2 使用 UDP 作为承载协议,而非 TCP:
| 字段 | 值/说明 |
|---|---|
| 目的端口 | 4791(固定分配,IANA 注册为 RoCEv2) |
| 源端口 | 动态分配,但在一个连接中保持固定,用于区分不同 RDMA 流 |
| 校验和 | 通常设为 0x0000(由 NIC 硬件处理,或完全禁用) |
为什么用 UDP 而非 TCP?
- UDP 无连接、无状态,避免了 TCP 的握手、滑动窗口、拥塞控制等复杂机制
- 可靠性由 IB 传输层(BTH + PSN)自行管理,实现更高效的 Go-Back-N 重传
- 避免了 TCP 内核协议栈的处理延迟,支持真正的内核旁路
L5:InfiniBand 传输层(BTH)
这是 RoCEv2 的核心,直接继承自 InfiniBand 架构。BTH(Base Transport Header)包含:
| 字段 | 位宽 | 功能 |
|---|---|---|
| OpCode | 8 bits | 传输服务类型(RC/UD/RD/UC)+ 操作类型(SEND/READ/WRITE/ACK) |
| S (Solicited Event) | 1 bit | 请求响应端产生事件 |
| M (MigReq) | 1 bit | 迁移请求标志 |
| Pad | 2 bits | 填充字节数 |
| TVer | 4 bits | 传输头版本 |
| Partition Key | 16 bits | 逻辑分区键(类似 VLAN 的隔离机制) |
| Destination QP | 24 bits | 目的队列对号(类似 TCP 端口,但包含 Send/Recv 队列对) |
| A (AckReq) | 1 bit | 应答请求标志 |
| PSN | 24 bits | 包序列号(Packet Sequence Number),用于丢包检测与排序 |
BTH 之后可跟随扩展传输头(ETH),如 RETH(RDMA Extended Transport Header)用于 READ/WRITE 操作,携带虚拟地址、R_Key 和数据长度。
L6:RDMA 操作层
定义 RDMA 的四种核心操作:
| 操作 | 类型 | 说明 |
|---|---|---|
| SEND/RECV | 双边操作 | 类似消息传递,发送方 SEND,接收方需预先 POST RECV |
| WRITE | 单边操作 | 发送方直接写入远程内存,无需接收方 CPU 参与 |
| READ | 单边操作 | 发送方直接从远程内存读取数据 |
| ATOMIC | 原子操作 | 支持 Fetch-and-Add、Compare-and-Swap 等原子内存操作 |
Queue Pair (QP)是 RDMA 通信的基本端点,包含:
- Send Queue (SQ):发送工作请求队列
- Receive Queue (RQ):接收工作请求队列
- Completion Queue (CQ):完成事件队列(异步通知)
L7:应用层(Verbs API)
应用通过libibverbs(或 rdma-core)库调用 Verbs API:
// 典型 RDMA WRITE 流程ibv_post_send(qp,&wr,&bad_wr);// 提交工作请求// NIC 硬件完成:封装 BTH → UDP → IP → Eth → 物理发送// 对端 NIC 解封装,DMA 数据到目标内存,生成 ACK/CQE应用无需关心下层协议细节,由 NIC 硬件完成全部封装/解封装。
三、RoCEv2 数据包格式(Wire Format)
+-------------------------------------------------------------+ | Ethernet Header (14B) | | - Dst MAC (6B) | Src MAC (6B) | EtherType=0x0800 (2B) | +-------------------------------------------------------------+ | IP Header (20B) | | - Version/IHL | TOS(DSCP+ECN) | Total Length | ... | | - Protocol=UDP(17) | Src IP | Dst IP | +-------------------------------------------------------------+ | UDP Header (8B) | | - Src Port (dynamic) | Dst Port=4791 | Length | Checksum=0 | +-------------------------------------------------------------+ | IB Base Transport Header (BTH) (12B) | | - OpCode | S | M | Pad | TVer | P_Key | Dst QP | PSN ... | +-------------------------------------------------------------+ | [Extended Transport Header] (optional, variable) | | - RETH (16B): VAddr | R_Key | DMALen (for READ/WRITE) | +-------------------------------------------------------------+ | Payload (0 ~ PMTU bytes, typically 1024/4096) | +-------------------------------------------------------------+ | ICRC (4B) - InfiniBand CRC | +-------------------------------------------------------------+ | FCS (4B) - Ethernet Frame Check Sequence | +-------------------------------------------------------------+最小报文开销:14 (Eth) + 4 (FCS) + 20 (IP) + 8 (UDP) + 12 (BTH) + 4 (ICRC) =62 字节(不含 Payload)。
四、Lossless 机制:PFC + ECN + DCQCN
RoCEv2 在以太网上实现"无损"传输,依赖三层协同机制:
1. PFC(Priority Flow Control,IEEE 802.1Qbb)
- 逐跳流控:当交换机缓冲区达到阈值时,向上游发送 Pause 帧
- 优先级隔离:仅暂停 RDMA 流量所在的优先级(如 Priority 3),不影响其他流量
- 风险:配置不当会导致PFC Storm(全网暂停风暴),引发尾延迟爆炸
2. ECN(Explicit Congestion Notification,RFC 3168)
- 早期拥塞信号:交换机在即将拥塞时标记 IP 头部的 ECN 位,而非直接丢包
- 端到端反馈:接收端 NIC 生成 CNP(Congestion Notification Packet)回传
- 发送端降速:根据 DCQCN 算法调整发送速率
3. DCQCN(Datacenter Quantized Congestion Notification)
- 基于 CNP 的端到端拥塞控制算法
- 发送端维护速率状态机,根据 CNP 频率进行加性增/乘性减(AI/MD)
- 避免 PFC 的过度反压,实现更平滑的拥塞控制
典型阈值配置(100G 端口):
- ECN 标记开始:~150 KB 缓冲区
- ECN 100% 标记:~3 MB
- PFC XOFF(暂停):略高于 ECN 全标记阈值
- PFC XON(恢复):低于 XOFF 并保留迟滞
五、与 InfiniBand 协议栈对比
| 维度 | RoCEv2 (QSFP28 + Ethernet) | InfiniBand (QSFP28/QSFP56) |
|---|---|---|
| 物理层 | 标准以太网 QSFP28 | 专用 IB QSFP28/QSFP56 |
| 链路层 | Ethernet + PFC + VLAN | IB Link Layer + Credit-Based FC |
| 网络层 | IPv4/IPv6(可路由) | IB GRH(Global Route Header,有限路由) |
| 传输层 | IB BTH(封装在 UDP 中) | IB BTH(原生) |
| 流控机制 | PFC + ECN + DCQCN(需配置) | Credit-Based(原生无损,无需配置) |
| 延迟 | 2–5 μs(p50) | 1–2 μs(p50) |
| 运维复杂度 | 中等(需调优 PFC/ECN) | 高(需专用 IB 管理员) |
| 多租户 | 支持(EVPN-VXLAN 叠加) | 有限(Partition Key 隔离) |
| 供应商 | 多厂商(Arista/Cisco/Juniper + Mellanox/Intel) | 主要 NVIDIA/Mellanox |
| 成本 | 低 20–30% | 较高 |
六、部署关键 checklist
- 交换机配置:启用 PFC(Priority 3)、ECN、ETS;校准缓冲区阈值
- NIC 配置:加载 RDMA 驱动(如 MLNX_OFED),启用 RoCEv2,配置 DCQCN
- 网络拓扑:推荐 Leaf-Spine,避免超订(Oversubscription)> 3:1
- QoS 策略:DSCP 标记 + VLAN PCP 优先级映射一致
- 监控:关注 PFC Pause 帧计数、ECN 标记包比例、CNP 速率
- 固件对齐:NIC 固件、交换机固件、GPU 驱动、NCCL 版本需兼容
七、协议栈架构图
总结
QSFP28 + RoCEv2 方案的本质是用标准以太网的物理基础设施,承载 InfiniBand 的 RDMA 语义。通过 UDP/IP 封装实现可路由性,通过 PFC+ECN+DCQCN 实现无损传输,通过 NIC 硬件卸载实现零拷贝与低延迟。其协议栈的复杂性主要体现在拥塞控制与流控的协同调优,而非协议本身的设计。RoCEv2 是当前大规模 AI/HPC 集群最具成本效益的网络方案。