4. RoCE v1详解:基于以太网的实现、帧格式与适用场景

4.1 核心原理:RoCE v1的“透明承载”设计

RoCE v1(RDMA over Converged Ethernet version 1)是RDMA技术最早与以太网结合的产物。它的核心设计思想非常直接:将InfiniBand的报文格式原封不动地封装进以太网帧的Payload字段中,并直接使用以太网类型字段(EtherType)0x8915进行标识。这意味着RoCE v1报文在二层网络中就是一个“普通”的以太网帧,交换机无需感知RDMA协议,只需按照标准以太网帧进行转发即可。

从协议栈角度看,RoCE v1位于传输层(IB Transport层)之下,直接替代了InfiniBand中的链路层(IB Link Layer)。它没有IP层和UDP层,因此不具备路由能力,只能在同一个二层广播域(VLAN)内通信。这种设计带来了极低的封装开销——相比RoCE v2,它省去了IP和UDP头,但也因此牺牲了跨子网能力。

关键认知:RoCE v1的“透明”是相对于交换机而言的。交换机只看到标准以太网帧头(目的MAC、源MAC、EtherType),而RDMA的LID(Local Identifier)、QPN(Queue Pair Number)、PSN(Packet Sequence Number)等关键信息全部隐藏在Payload中,由端节点的RDMA网卡(RNIC)负责解析。
RoCE v1 帧格式与协议栈位置 协议栈对比 IB Transport (IBA) IB Network (LID路由) IB Link Layer IB PHY (IB介质) IB Transport (IBA) IB Network (LID路由) Ethernet MAC (RoCE v1) Ethernet PHY (RJ45/光口) RoCE v1 以太网帧格式 DA 6B SA 6B 0x8915 2B IB 报文 (BTH+Payload) 46~1500B FCS 4B 目的MAC 源MAC EtherType IB Payload(无IP/UDP头) ✗ 无IP头 ✗ 无UDP头 ✗ 无VLAN标签(可选) 仅支持二层转发,无法跨子网路由 IB BTH(Base Transport Header)关键字段 OpCode SE ( solicited ) M ( MigReq ) PAD ( 3bit ) TVer ( 8bit ) PKey ( 16bit ) Dest QP ( 24bit ) AK ( 8bit ) Resv ( 8bit ) PSN ( 24bit ) • PKey:分区密钥,用于隔离不同租户/业务的RDMA流量,类似VLAN在二层的作用 • Dest QP:目的队列对编号,标识接收端的特定队列对(QP),类似TCP端口号的作用 • PSN:包序号,用于可靠连接(RC)模式下的丢包检测、重排序和ACK确认 • OpCode:操作码,标识报文类型(如SEND、WRITE、READ、ATOMIC等),决定接收端处理方式

4.2 帧格式深度拆解

RoCE v1帧的最小结构由以太网头(14字节)+ IB BTH(12字节)+ 数据负载 + FCS(4字节)组成。以太网头中的EtherType固定为0x8915,这是IEEE分配给RoCE v1的专用类型值。交换机通过识别该值,可以将帧正确分发到接入RoCE的端口,但不会对帧内容做任何修改。

IB BTH是RoCE v1帧中最重要的传输控制头,它承载了RDMA通信的核心元数据。其中PKey(Partition Key)是RoCE v1实现网络隔离的关键机制——只有PKey匹配的节点才能互相通信,这类似于以太网中VLAN的隔离作用,但粒度更细(可以基于QP级别)。Dest QP字段则类似于TCP/UDP中的端口号,用于在接收端定位到具体的队列对,从而将数据交付给正确的应用程序。

值得注意的是,RoCE v1帧中没有IP地址和UDP端口,这意味着它无法被传统三层路由设备转发。所有RoCE v1设备必须处于同一个IP子网(实际上是同一个二层广播域)内,且中间不能有路由器。此外,RoCE v1帧也不携带VLAN标签(除非额外配置),因此对交换机的PFC(优先级流控)配置需要基于物理端口或端口组进行。

4.3 方法流程:RoCE v1通信建立与数据交换

RoCE v1的通信流程与InfiniBand保持一致,遵循“连接建立 → 内存注册 → 数据收发 → 连接拆除”的标准RDMA流程。下面以RC(可靠连接)模式为例,说明一次典型的RoCE v1读写操作过程:

  1. 连接建立:通信双方通过带外机制(如TCP/IP)交换QP编号、LID、PKey等信息,完成连接参数协商。RoCE v1本身不提供连接管理协议,通常由上层应用(如Verbs API)配合CM(Connection Manager)完成。
  2. 内存注册:发送端将用户缓冲区注册到RNIC,获得L_Key/R_Key(本地/远程内存密钥),并将R_Key告知接收端。
  3. 数据发送:发送端RNIC将用户数据封装为IB报文,添加BTH头,再封装为以太网帧(EtherType=0x8915),通过网卡发送到以太网。
  4. 交换机转发:二层交换机根据目的MAC地址将帧转发到目标端口,期间不感知RDMA协议。
  5. 接收端处理:接收端RNIC校验以太网帧头,识别EtherType=0x8915后,剥离以太网头,将IB报文交给IB传输层处理。根据BTH中的Dest QP和PSN进行去重、排序,最终通过DMA将数据直接写入用户缓冲区。
  6. 确认与重传:RC模式下,接收端会发送ACK/NAK报文(同样封装为RoCE v1帧),发送端根据PSN判断是否需要重传。
实操提示:在配置RoCE v1时,需要确保通信双方的MTU一致(通常为1500或9000)。如果MTU不匹配,可能导致分片或丢包。此外,RoCE v1要求所有中间交换机必须启用PFC(802.1Qbb)或至少保证无丢包转发,否则微小的丢包就会导致RDMA性能急剧下降。

4.4 适用场景与典型案例

RoCE v1虽然功能有限,但在特定场景下仍有其价值。下表总结了它的典型适用场景与不适用场景:

场景类型 具体案例 适用性 原因分析
同机房高性能计算 气象模拟、基因测序集群 ✅ 适用 所有节点在同一二层网络,延迟极低(<2μs),无路由需求
存储网络(同子网) NVMe-oF 同交换机连接 ✅ 适用 存储与计算节点同VLAN,RoCE v1可提供比iSCSI更低的CPU开销
跨子网/跨机房通信 两地三中心容灾 ❌ 不适用 无IP层,无法路由,必须使用RoCE v2或IB
混合云/容器跨节点 K8s集群跨网段 ❌ 不适用 容器网络通常涉及VXLAN/三层路由,RoCE v1无法穿越

一个典型的RoCE v1部署案例是同机柜GPU训练集群。假设8台GPU服务器通过一台TOR交换机互联,每台服务器配置一块支持RoCE v1的网卡(如Mellanox ConnectX-4)。此时所有服务器处于同一二层网络,使用RoCE v1进行AllReduce集合通信,可以获得约1.5μs的端到端延迟,相比TCP/IP方案降低约60%的CPU占用率。

4.5 误区与复盘:RoCE v1的常见陷阱

误区一:认为RoCE v1可以跨VLAN通信。RoCE v1帧中没有VLAN标签字段(除非使用802.1Q-in-Q或额外封装),且没有IP头,因此无法跨VLAN路由。即使两个VLAN在交换机上配置了VLAN间路由,RoCE v1流量也无法穿越。正确做法是使用RoCE v2(基于UDP/IP)或配置VLAN trunk并保证PFC策略一致。
误区二:忽视PFC的全局配置。RoCE v1对丢包极度敏感。如果交换机上同时承载普通TCP流量和RoCE v1流量,必须为RoCE v1配置独立的优先级队列并启用PFC。否则,TCP突发流量可能导致RoCE v1报文被丢弃,触发重传,性能下降可达90%以上。
误区三:混淆RoCE v1与RoCE v2的兼容性。RoCE v1和RoCE v2的帧格式完全不同(EtherType 0x8915 vs UDP端口4791),两者无法互通。在混合环境中,必须明确区分哪些网卡配置为RoCE v1、哪些配置为RoCE v2,并确保它们不在同一物理链路上混用。

复盘建议:在实际部署RoCE v1前,务必使用ibv_devinfo命令确认网卡支持的RoCE版本,并使用ibping或perftest工具验证连通性和带宽。如果发现性能不达标,优先检查交换机的PFC配置和MTU一致性,而不是盲目调整网卡参数。