news 2026/7/13 15:32:01

RoCEv2 网络的完整协议栈简介

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RoCEv2 网络的完整协议栈简介

这里采用常见的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 TagIEEE 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)包含:

字段位宽功能
OpCode8 bits传输服务类型(RC/UD/RD/UC)+ 操作类型(SEND/READ/WRITE/ACK)
S (Solicited Event)1 bit请求响应端产生事件
M (MigReq)1 bit迁移请求标志
Pad2 bits填充字节数
TVer4 bits传输头版本
Partition Key16 bits逻辑分区键(类似 VLAN 的隔离机制)
Destination QP24 bits目的队列对号(类似 TCP 端口,但包含 Send/Recv 队列对)
A (AckReq)1 bit应答请求标志
PSN24 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 + VLANIB 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

  1. 交换机配置:启用 PFC(Priority 3)、ECN、ETS;校准缓冲区阈值
  2. NIC 配置:加载 RDMA 驱动(如 MLNX_OFED),启用 RoCEv2,配置 DCQCN
  3. 网络拓扑:推荐 Leaf-Spine,避免超订(Oversubscription)> 3:1
  4. QoS 策略:DSCP 标记 + VLAN PCP 优先级映射一致
  5. 监控:关注 PFC Pause 帧计数、ECN 标记包比例、CNP 速率
  6. 固件对齐:NIC 固件、交换机固件、GPU 驱动、NCCL 版本需兼容

七、协议栈架构图


总结

QSFP28 + RoCEv2 方案的本质是用标准以太网的物理基础设施,承载 InfiniBand 的 RDMA 语义。通过 UDP/IP 封装实现可路由性,通过 PFC+ECN+DCQCN 实现无损传输,通过 NIC 硬件卸载实现零拷贝与低延迟。其协议栈的复杂性主要体现在拥塞控制与流控的协同调优,而非协议本身的设计。RoCEv2 是当前大规模 AI/HPC 集群最具成本效益的网络方案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 15:31:36

如何用Gotalk实现分布式系统负载均衡:心跳机制详解

如何用Gotalk实现分布式系统负载均衡:心跳机制详解 【免费下载链接】gotalk Async peer communication protocol & library 项目地址: https://gitcode.com/gh_mirrors/go/gotalk 在构建现代分布式系统时,负载均衡是确保系统高可用性和可扩展…

作者头像 李华
网站建设 2026/7/13 15:26:04

解密Enigma虚拟打包文件:evbunpack实战指南

解密Enigma虚拟打包文件:evbunpack实战指南 【免费下载链接】evbunpack Enigma Virtual Box Unpacker / 解包、脱壳工具 项目地址: https://gitcode.com/gh_mirrors/ev/evbunpack 你是否曾经遇到过这样的情况:拿到一个经过Enigma Virtual Box打包…

作者头像 李华