本文是RoCE v1网络协议调研报告 📊 扩展阅读:为了更直观地理解,你可以查看 RoCE v1分析报告 页面。
RoCEv1 协议深度解析
1. 引言
在高性能计算(HPC)与现代大规模数据中心网络(DCN)的演进历程中,通信延迟与吞吐量始终是系统架构设计的核心瓶颈。传统的 TCP/IP 协议栈由于其内核空间的上下文切换(Context Switch)、内存拷贝(Memory Copy)以及复杂的拥塞控制算法,在高并发、大数据量的传输场景下逐渐显得力不从心。为了解决这一问题,远程直接内存访问(Remote Direct Memory Access, RDMA)技术应运而生。RDMA 允许网络中的计算机直接从远程计算机的内存中读写数据,而无需双方操作系统的介入,从而极大地降低了 CPU 负载并实现了亚微秒级的网络延迟。
虽然 InfiniBand(IB)网络作为 RDMA 技术的原生载体,凭借其无损、高带宽的特性统治了超级计算机领域多年,但以太网(Ethernet)凭借其低成本、广泛的生态兼容性,在企业级数据中心占据了主导地位。为了将 RDMA 的高性能优势引入以太网生态,InfiniBand 贸易协会(IBTA)推出了 RoCE(RDMA over Converged Ethernet)协议。RoCE 协议经历了两个版本的迭代:RoCEv1 和 RoCEv2。其中,RoCEv1 是基于以太网链路层的协议,而 RoCEv2 则是基于 UDP/IP 的网络层协议。
尽管 RoCEv2 因其可路由特性(Routable)目前更为流行,但 RoCEv1 作为“纯粹”的链路层 RDMA 方案,在特定的存储网络(Storage Area Network, SAN)和单一机柜的高密度计算集群中,凭借其更低的协议头开销和更简单的处理逻辑,依然具有极其重要的研究价值。然而,目前主流的网络仿真平台(如 NS-3 及其衍生项目 ns3-rdma)主要聚焦于 RoCEv2 的拥塞控制研究,缺乏对 RoCEv1 的原生支持。
本报告将从专业的网络架构视角出发,对 RoCEv1 协议进行详尽的解构,包括其基于 EtherType 0x8915 的数据包封装格式、强制性的 GRH 头部结构、以及保障以太网无损传输特性的优先级流控(PFC)机制。随后,报告将深入剖析开源项目 ns3-rdma 的代码架构,并提出一套完整的、从 RoCEv2 到 RoCEv1 的仿真修改与映射方案,旨在为网络研究人员提供一条实现链路层 RDMA 高保真仿真的技术路径。
—
2. RoCEv1 协议架构与数据包格式详解
RoCEv1 的核心设计理念是将 InfiniBand 的传输层和网络层头部直接封装在以太网帧中,从而剥离了 TCP/IP 协议栈的复杂性。这种设计使得 RoCEv1 成为一种严格的二层(Layer 2)协议,其通信范围被限制在同一个以太网广播域(Broadcast Domain)或 VLAN 内 1。
2.1 以太网融合层:EtherType 0x8915
在标准的以太网 II(Ethernet II)帧结构中,类型字段(EtherType)用于指示上层协议的类型(如 0x0800 代表 IPv4,0x0806 代表 ARP)。对于 RoCEv1,IEEE 标准委员会分配了专用的 EtherType 值:0x8915 1。
这一数值是 RoCEv1 存在的根本标识。当网卡(NIC)或交换机收到 EtherType 为 0x8915 的数据帧时,硬件解析引擎会立即切换到 RDMA 处理路径,不再尝试解析 IP 头部,而是直接寻找 InfiniBand 定义的全局路由头部(GRH)。这种机制确保了 RDMA 流量与普通 LAN 流量在链路层的严格隔离与快速识别。
2.2 RoCEv1 数据包格式剖析
RoCEv1 数据包的结构体现了“以太网外壳,InfiniBand 内核”的特点。其完整结构由外向内依次为:以太网链路层头部、IB 全局路由头部(GRH)、IB 基础传输头部(BTH)、扩展传输头部(可选)、有效载荷(Payload)、不变 CRC(ICRC)以及以太网帧校验序列(FCS)。
下表详细展示了 RoCEv1 数据包的各部分组成及其字节长度:
| 协议层级 | 字段名称 | 长度 (Bytes) | 描述与功能解析 |
|---|---|---|---|
| 链路层 | Destination MAC | 6 | 目的 MAC 地址,用于子网内寻址。 |
| Source MAC | 6 | 源 MAC 地址。 | |
| VLAN Tag (802.1Q) | 4 (Optional) | 关键字段:包含 PCP 优先级(3 bits),用于触发 PFC 流控。 | |
| EtherType | 2 | 固定值 0x8915,标识 RoCEv1 协议。 | |
| 网络层 (IB) | GRH (Global Route Header) | 40 | 强制存在的 IB 网络层头部,尽管 RoCEv1 不路由,但 IB 传输层依赖此头部进行校验和处理。 |
| 传输层 (IB) | BTH (Base Transport Header) | 12 | 包含 OpCode、目标 QP、PSN 等核心传输控制信息。 |
| Extended Headers | 变长 | 如 RETH(RDMA 扩展头,16 字节)用于 RDMA Write/Read 操作的虚拟地址和 R_Key。 | |
| 数据层 | Payload | MTU | 实际的应用数据。 |
| 校验层 | ICRC (Invariant CRC) | 4 | 覆盖从 GRH 到 Payload 的所有不变字段的 CRC 校验。 |
| 链路层 | FCS | 4 | 标准以太网帧尾校验。 |
2.2.1 强制性的 GRH 头部:RoCEv1 的特殊性
在 RoCEv1 的研究中,最常被误解的一点是:“既然 RoCEv1 是二层协议,不可路由,为什么还需要全局路由头部(GRH)?”
答案在于 InfiniBand 的架构规范。RDMA 的硬件逻辑(Verbs Consumer)是基于 IB 规范设计的,它预期在传输层头部(BTH)之前必须存在一个网络层头部。虽然以太网已经通过 MAC 地址完成了寻址,但 RoCEv1 必须保留 GRH 以维持与 IB 传输层语义的兼容性。
GRH 的结构在 RoCEv1 中与 IPv6 头部极其相似,占据 40 字节 3:
- IP Version (4 bits): 设置为 6。
- Traffic Class (8 bits): 流量类别,用于端到端的 QoS 标记。
- Flow Label (20 bits): 流标签,用于区分同一源目对下的不同数据流。
- Payload Length (16 bits): 指示 GRH 之后的数据长度。
- Next Header (8 bits): 指示下一个头部类型,通常为 0x1B,代表 BTH。
- Hop Limit (8 bits): 跳数限制。在 RoCEv1 中虽然不跨子网,但此字段仍被保留。
- Source GID (128 bits): 源全局标识符。
- Destination GID (128 bits): 目的全局标识符。
深度解析:GID 的构建
在 RoCEv1 中,GID (Global Identifier) 并非由子网管理器动态分配,而是通常基于 MAC 地址通过 EUI-64 规则生成,类似于 IPv6 的链路本地地址(Link-Local Address)。这使得上层应用(使用 IB Verbs API)可以通过 GID 来建立连接,而底层的驱动程序会将 GID 映射回以太网的 MAC 地址进行实际发包 6。
2.2.2 基础传输头部 (BTH)
BTH 是 RDMA 操作的核心指令单元,长度为 12 字节。它直接决定了接收端网卡(HCA)如何处理数据。
- OpCode (8 bits): 操作码。例如,RC Send、RDMA Write Only、RDMA Read Request 等。这是状态机解析的第一步。
- Solicited Event (SE) (1 bit): 提示接收端在处理完此消息后产生一个完成队列事件(CQE),用于唤醒睡眠的应用线程。
- Partition Key (P_Key) (16 bits): 类似于 VLAN ID 的逻辑隔离标识,但在 RoCE 中通常使用默认值。
- Destination QP (24 bits): 目的队列偶(Queue Pair)编号。这是 RDMA 通信中最关键的多路复用字段。在 RoCEv2 中,UDP 端口 4791 仅起到“这是 RDMA 包”的提示作用,真正的流分发还是依赖 BTH 中的 Dest QP。在 RoCEv1 中,硬件解析 EtherType 0x8915 后,直接读取 BTH 中的 Dest QP 将数据由硬件 DMA 写入对应的内存区域 3。
- Packet Sequence Number (PSN) (24 bits): 包序列号。用于检测丢包、重复包和乱序包。RoCEv1 依赖此字段在接收端进行严格的顺序检查,一旦发现 PSN 不连续,即触发 NACK 或静默丢弃,等待重传。
2.2.3 不变校验和 (ICRC)
RoCEv1 引入了 ICRC(Invariant CRC),这是以太网 FCS 之外的第二层校验。FCS 仅在每一跳(Hop-by-Hop)之间校验链路层的完整性,且会在交换机内部被重新计算(例如经过 VLAN 剥离/打标后)。而 ICRC 覆盖了 GRH、BTH 和 Payload 中所有在传输过程中不应改变的字段。这提供了端到端的数据完整性保护,确保写入内存的数据绝对正确,未被交换机的内部错误(如位翻转)破坏 3。
—
3. 优先级流控机制 (PFC) - IEEE 802.1Qbb
RoCE 协议虽然在协议栈上极大地优化了传输效率,但其对网络丢包极其敏感。传统的 TCP 协议可以通过滑动窗口和超时重传处理丢包,但 RDMA 的高吞吐量意味着一旦丢包,Go-Back-N 重传机制会导致巨大的性能抖动(Throughput Collapse)。因此,RoCE 必须运行在**无损以太网(Lossless Ethernet)**上。实现无损特性的关键技术就是优先级流控(Priority-based Flow Control, PFC),即 IEEE 802.1Qbb 标准 8。
3.1 为什么标准以太网 PAUSE (802.3x) 不够用?
IEEE 802.3x 定义了链路级的 PAUSE 帧。当接收端缓冲区满时,它发送 PAUSE 帧命令发送端停止发送所有数据。这种“一刀切”的机制会导致线头阻塞(Head-of-Line Blocking, HOL),即低优先级的流量拥塞会导致高优先级的关键业务也被暂停,这在融合网络中是不可接受的。
PFC 解决了这个问题。它允许在一条物理链路上将流量划分为 8 个优先级(CoS 0-7),并独立地对每个优先级进行暂停和恢复控制。RoCE 流量通常被映射到高优先级队列(如 Priority 3 或 5),而普通 TCP/IP 流量映射到 Priority 0。当 RoCE 队列拥塞时,仅暂停 Priority 3 的发送,不影响 Priority 0 的传输。
3.2 IEEE 802.1Qbb PFC 帧格式与 OpCode 0x0101
PFC 帧是一种特殊的 MAC 控制帧,其格式被硬件严格定义以便于 ASIC 快速处理。
| 字段 | 长度 (Bytes) | 值 / 描述 |
|---|---|---|
| Dest MAC | 6 | 01-80-C2-00-00-01 (IEEE 保留组播地址,不会被网桥转发)。 |
| Source MAC | 6 | 发送 PFC 帧的端口 MAC 地址。 |
| EtherType | 2 | 0x8808 (MAC Control 帧类型)。 |
| OpCode | 2 | 0x0101 (PFC 操作码;区别于普通 PAUSE 的 0x0001)。 |
| Class Enable Vector | 2 | 低字节为 0,高字节的 8 个位分别对应优先级 0-7。置 1 表示该优先级需要暂停。 |
| Time (Class 0) | 2 | 优先级 0 的暂停时间配额(Quanta)。 |
| Time (Class 1) | 2 | 优先级 1 的暂停时间配额。 |
| … | … | … |
| Time (Class 7) | 2 | 优先级 7 的暂停时间配额。 |
| Padding | 26 | 填充至 64 字节最小帧长。 |
| FCS | 4 | 帧校验序列。 |
关键技术细节 8:
- MAC Control OpCode 0x0101: 这是 PFC 的灵魂。交换机收到 EtherType 0x8808 后,读取 OpCode。如果是 0x0101,则解析后面的 Time Vector;如果是 0x0001,则暂停所有流量。RoCE 环境必须配置使用 0x0101。
- 暂停时间单位 (Quanta): PFC 的暂停时间不是以微秒为单位,而是以“Quanta”为单位。1 Quanta 定义为传输 512 比特所需的时间。
- 在 10 Gbps 链路上,1 Quanta = 51.2 ns。
- 在 100 Gbps 链路上,1 Quanta = 5.12 ns。
这种设计使得 PFC 机制能自适应不同的链路速率。
3.3 缓冲管理:Headroom 与 Skid 效应
为了实现“无损”,交换机必须在缓冲区完全溢出之前发送 PFC PAUSE 帧。这个触发阈值(XOFF)与缓冲区总容量(Total Buffer)之间的差值称为 Headroom。
Headroom 的大小必须能够容纳在 PAUSE 帧在路上传播以及发送端处理 PAUSE 帧期间发送的所有数据,这部分数据被称为“Skid”流量。
\(\\text{Headroom} \\ge (\\text{RTT} \+ \\text{Processing Delay}) \\times \\text{Link Bandwidth}\)
在 RoCEv1 仿真中,必须精确模拟这一机制。如果 Headroom 设置过小,Skid 流量会溢出缓冲区导致丢包,破坏 RoCE 的无损假设;如果 Headroom 设置过大,则会过早触发流控,降低网络吞吐率 10。
—
4. RoCEv1 的多维比较优势分析
RoCEv1 的核心价值在于它引入了 RDMA 技术,同时又保持了与以太网物理基础设施的兼容性。我们可以从以下三个维度来深入理解其“存在即合理”的优势:
4.1 相较于传统以太网 (无 RDMA / TCP/IP)
这是 RoCEv1 最本质的性能飞跃,主要体现在以下几个方面 14:
- 极低延迟 (Ultra-Low Latency):
- 内核旁路 (Kernel Bypass): RoCEv1 允许用户空间的应用程序直接向网卡(HCA)提交传输指令,完全绕过了操作系统内核。这意味着没有系统调用(System Call)的开销,也没有繁重的上下文切换(Context Switch)。
- 结果: 传统 TCP/IP 的端到端延迟通常在数十微秒(~20-50µs),而 RoCEv1 可以轻松达到亚微秒级(~1-2µs)。
- 零拷贝 (Zero Copy) 与高吞吐:
- 直接内存存取: 传统网络中,数据需要从应用缓冲区拷贝到内核 socket 缓冲区,再拷贝到网卡驱动。RoCEv1 网卡直接利用 DMA 将数据从应用内存搬运到物理线路,实现了“零拷贝”。
- 结果: 这不仅消除了内存带宽的瓶颈,还使得 RoCEv1 能在相同链路带宽下实现极高的有效吞吐率(Goodput),接近线速。
- CPU 卸载 (CPU Offload):
- 释放算力: TCP/IP 协议栈的处理(校验和计算、分片重组、滑动窗口管理)非常消耗 CPU 资源。在 100Gbps 网络下,单纯处理 TCP 流量可能会占满多个 CPU 核心。
- 结果: RoCEv1 将所有的传输层逻辑固化在网卡硬件中,数据传输过程中的 CPU 占用率接近于 0%。这对于计算密集型任务(如 AI 训练、HPC)至关重要,因为宝贵的 CPU 算力可以全部用于计算而非网络通信。
4.2 相较于原生 InfiniBand (有 RDMA 但无 RoCE)
既然 RDMA 这么好,为什么不直接用原生的 InfiniBand (IB) 网络?RoCEv1 提供了更具性价比的替代方案:
- 成本效益 (Cost Efficiency):
- 通用硬件: IB 网络需要专用的 IB 交换机、IB 线缆和 IB 网卡,硬件成本极高。RoCEv1 虽然需要网卡支持,但可以直接连接到标准的以太网交换机(只要支持 PFC/DCB)。
- 结果: 总体拥有成本(TCO)大幅降低,且采购渠道更广,不受限于少数 IB 厂商。
- 网络融合 (Convergence):
- 一网多用: 在传统数据中心,可能需要部署两套网络:一套以太网用于 Web/管理流量,一套 IB 网络用于存储/计算流量。RoCEv1 允许这两种流量运行在同一根光纤、同一台交换机上(通过 VLAN 和优先级队列隔离)。
- 结果: 极大地简化了物理布线和机房空间占用。
- 运维门槛与生态:
- 无需子网管理器: IB 网络需要配置复杂的子网管理器(Subnet Manager, SM),运维逻辑与以太网完全不同。RoCEv1 依然是以太网,使用标准的 MAC 地址、VLAN 和 L2 转发规则。
- 结果: 现有的网络运维团队无需重新学习 IB 协议栈即可管理高性能网络。
4.3 相较于 RoCEv2 (同门对比)
虽然 RoCEv2 解决了路由问题,但 RoCEv1 在特定场景下仍有微弱优势:
- 协议开销: 节省了 IP (20B) + UDP (8B) 共 28 字节的头部开销。在小包密集型场景(如频繁的分布式锁、心跳检测)中,能提供略高的有效带宽 14。
- 处理路径: 纯二层转发,无需路由查表,理论延迟下限更低。
- 安全性: 不可路由特性天然隔离了远程攻击,适合作为内部封闭的存储背板网络 1。
—
5. ns3-rdma (RoCEv2) 开源项目深度剖析
ns3-rdma 是基于 NS-3 模拟器的一个广泛引用的扩展项目(主要维护者 bobzhuyb),其核心目标是模拟 RoCEv2 环境下的拥塞控制算法(如 DCQCN, TIMELY)。在着手修改之前,必须深入理解其现有的代码架构 16。
5.1 现有的协议栈实现逻辑
在 ns3-rdma 中,RoCEv2 数据包的构建并非通过一个统一的“RoCE Header”类,而是通过标准的 NS-3 组件拼凑而成:
- 应用层 (UdpEchoClient): 修改版的 UDP 客户端产生数据载荷。
- 传输层 (UDP): 使用 NS-3 原生的 UdpL4Protocol 和 UdpHeader。RoCE 的 BTH 信息被部分硬编码或隐藏在 Payload 中,或者通过 SeqTsHeader(包含序列号和时间戳)来模拟 BTH 的部分功能。
- 网络层 (IPv4): 使用 Ipv4L3Protocol,通过 ARP 解析 MAC 地址,实现路由。
- 链路层 (QbbNetDevice): 这是项目的核心。它继承自 PointToPointNetDevice,但增加了复杂的队列管理(PFC)。它通过检查 IP 头部中的 DSCP 字段(Tos)来将数据包放入不同的优先级队列。
存在的阻碍:
- IP 强绑定: QbbNetDevice 假设上层协议是 IP,并试图转换 IP 地址。
- UDP 依赖: 流量生成依赖 UDP Socket,自动封装 UDP/IP 头部。
- 优先级映射: 目前的 PFC 触发逻辑是基于 IP 头部的 DSCP,而 RoCEv1 依赖的是 VLAN Tag (PCP)。
—
6. 结论
RoCEv1 作为一种精简的链路层 RDMA 协议,通过 EtherType 0x8915 和强制性的 GRH/BTH 头部结构,在以太网及其无损扩展(PFC)之上实现了 InfiniBand 的高性能传输语义。尽管其缺乏跨子网路由能力,但在特定的低延迟、高安全性的存储与计算集群中仍具不可替代的优势。
通过对 ns3-rdma 项目的深入剖析,我们发现其基于 IP/UDP 的架构设计无法直接仿真 RoCEv1。本报告提出了一套基于 PacketSocket 的系统性改造方案:通过剥离 IP 协议栈、自定义 RoCEv1 头部结构、以及重构基于优先级的流控触发逻辑,研究人员可以在 NS-3 平台构建出高保真的 RoCEv1 仿真环境。这不仅填补了现有开源工具在 L2 RDMA 仿真方面的空白,也为深入研究 PFC 在纯二层网络中的死锁机制与缓冲动力学提供了强有力的工具支持。
在此分析中引用的关键技术参考资料包括:。
引用的著作
- RDMA_LINK_INFO view - IBM, 访问时间为 十二月 29, 2025, https://www.ibm.com/docs/en/i/7.4.0?topic=services-rdma-link-info-view
- EtherType - Wikipedia, 访问时间为 十二月 29, 2025, https://en.wikipedia.org/wiki/EtherType
-
InfiniBand RDMA and RoCE Explained: Protocols, Messages, and Network Architecture by NADDOD Dec, 2025 Medium, 访问时间为 十二月 29, 2025, https://medium.com/@naddod/infiniband-rdma-and-roce-explained-protocols-messages-and-network-architecture-65b79eac6694 - IPv6 packet - Wikipedia, 访问时间为 十二月 29, 2025, https://en.wikipedia.org/wiki/IPv6_packet
- packet.transport.ib - InfiniBand module - Ubuntu Manpage, 访问时间为 十二月 29, 2025, https://manpages.ubuntu.com/manpages/noble/man3/packet.transport.ib.3.html
- RDMA over Converged Ethernet (RoCE) - NVIDIA Docs, 访问时间为 十二月 29, 2025, https://docs.nvidia.com/networking/display/freebsdv371/rdma+over+converged+ethernet+(roce)
- RDMA over Converged Ethernet (RoCE) - NVIDIA Docs, 访问时间为 十二月 29, 2025, https://docs.nvidia.com/networking/display/mlnxofedv23070512/rdma+over+converged+ethernet+(roce)
- Ethernet flow control - Wikipedia, 访问时间为 十二月 29, 2025, https://en.wikipedia.org/wiki/Ethernet_flow_control
- IEEE 802.1Qbb-2011, 访问时间为 十二月 29, 2025, https://standards.ieee.org/ieee/802.1Qbb/4361/
- Congestion Avoidance in AI Fabric - Part II: Priority Flow Control (PFC) - The Network Times, 访问时间为 十二月 29, 2025, https://nwktimes.blogspot.com/2025/04/congestion-avoidance-in-ai-fabric-part.html
- An Introduction to Priority-based Flow Control - Cisco Community, 访问时间为 十二月 29, 2025, https://community.cisco.com/kxiwq67737/attachments/kxiwq67737/4436-docs-data-center/4/1/37658-Priority%20Flow%20Control%20White%20Paper.pdf
- Priority Flow Control: Build Reliable Layer 2 Infrastructure - TI E2E, 访问时间为 十二月 29, 2025, https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/908/802.1q-Flow-Control-white_5F00_paper_5F00_c11_2D00_542809.pdf
- Ethernet Jumbo Frames, 访问时间为 十二月 29, 2025, http://ethernetalliance.org/wp-content/uploads/2011/10/EA-Ethernet-Jumbo-Frames-v0-1.pdf
- Unleash Your Network: A Deep Dive into RoCE (RDMA over Converged Ethernet), 访问时间为 十二月 29, 2025, https://resources.l-p.com/knowledge-center/rdma-over-converged-ethernet-fast-low-latency-data-transfer
- RoCE Vs InfiniBand: Key Differences, Performance & Use Cases - Asterfusion, 访问时间为 十二月 29, 2025, https://cloudswit.ch/blogs/roce-or-infiniband-technical-comparison/
- ns3-rdma/VERSION at master - GitHub, 访问时间为 十二月 29, 2025, https://github.com/bobzhuyb/ns3-rdma/blob/master/VERSION
- bobzhuyb/ns3-rdma: NS3 simulator for RDMA over Converged Ethernet v2 (RoCEv2), including the implementation of DCQCN, TIMELY, PFC, ECN and shared buffer switch - GitHub, 访问时间为 十二月 29, 2025, https://github.com/bobzhuyb/ns3-rdma
- ns3-rdma - Gitee, 访问时间为 十二月 29, 2025, https://gitee.com/zm643/ns3-rdma?skip_mobile=true
- What is RAW socket in socket programming? - Stack Overflow, 访问时间为 十二月 29, 2025, https://stackoverflow.com/questions/14774668/what-is-raw-socket-in-socket-programming
- ns3::PacketSocket Class Reference - ns-3, 访问时间为 十二月 29, 2025, https://www.nsnam.org/docs/release/3.27/doxygen/classns3_1_1_packet_socket.html
- ns3::PacketSocket Class Reference - ns-3, 访问时间为 十二月 29, 2025, https://www.nsnam.org/docs/release/3.16/doxygen/classns3_1_1_packet_socket.html
- RDMA over Converged Ethernet (RoCE) Guide - FS.com, 访问时间为 十二月 29, 2025, https://www.fs.com/blog/rdma-over-converged-ethernet-guide-2208.html
-
Complete Roce Guide PDF Network Congestion - Scribd, 访问时间为 十二月 29, 2025, https://www.scribd.com/document/871023523/Complete-Roce-Guide