2. 基础知识:RDMA技术原理、RoCEv1/v2协议栈、与传统TCP/IP对比

2.1 RDMA的核心思想:绕过内核,直接访问远端内存

RDMA(Remote Direct Memory Access,远程直接内存访问)的核心价值在于:它允许一台主机的应用程序直接读写另一台主机的内存,而整个过程不需要双方操作系统的内核参与,也不需要CPU介入数据拷贝。传统网络通信中,数据从网卡到应用需要经过“内核协议栈处理→内核缓冲区→用户缓冲区”多次拷贝,而RDMA通过网卡上的专用硬件(RNIC,RDMA Network Interface Card)完成数据的封装、传输和确认,实现了零拷贝(Zero-Copy)与内核旁路(Kernel Bypass)。

理解RDMA的关键在于三个核心能力:

  • 直接内存访问:发送方网卡直接从用户态内存取数据,接收方网卡直接将数据写入用户态内存,无需中间缓冲。
  • 内核旁路:应用程序通过verbs接口(如ibverbs)与网卡交互,不经过TCP/IP协议栈,也不经过socket层。
  • CPU卸载:数据的可靠传输、流控、重传等由网卡硬件完成,CPU仅负责发起操作和接收完成通知。
类比理解:传统TCP/IP像“寄快递”——每次都要经过多个中转站(内核协议栈),每个中转站都要拆包、登记、再封装;而RDMA像“专线直达”——快递员(网卡硬件)直接从你家仓库取货,开车送到对方仓库并码放好,全程不需要物流总部分拣。

2.2 RDMA的三种实现形态与RoCE的定位

RDMA并非单一技术,目前主流的实现形态有三种,它们的差异决定了适用的网络环境:

实现形态 承载网络 特点 典型场景
InfiniBand(IB) IB专用网络(需IB交换机) 原生RDMA,端到端无损,性能最佳,但成本高、封闭 高性能计算(HPC)集群
RoCEv1/v2 以太网(v2可路由) 在以太网上承载RDMA,需依赖流控机制保证无损 数据中心分布式存储、AI训练集群
iWARP 以太网(TCP/IP) 基于TCP实现RDMA,可路由但性能受TCP影响 较少部署,已被RoCEv2逐步替代

RoCE(RDMA over Converged Ethernet,融合以太网上的RDMA)之所以成为数据中心的主流选择,是因为它复用了已有的以太网基础设施,只需将网卡升级为支持RoCE的智能网卡,并将交换机配置为无损模式,即可获得接近InfiniBand的性能,同时保留以太网的生态和运维习惯。

2.3 RoCEv1与RoCEv2协议栈对比

RoCEv1和RoCEv2在协议封装上有本质区别,这直接决定了它们的网络适用范围。下图展示了两种协议栈的层次差异:

RoCEv1 vs RoCEv2 协议栈对比 RoCEv1(二层协议) 应用程序 / Verbs API RDMA 协议栈(DDP/RDMA) RoCEv1 封装(IB GRH + BTH + Payload) 以太网链路层(Ethernet MAC) 物理层(PHY) ⚠ 无IP层,不可跨子网路由 仅限同一二层广播域内通信 RoCEv2(三层可路由协议) 应用程序 / Verbs API RDMA 协议栈(DDP/RDMA) RoCEv2 封装(IB BTH + Payload) UDP + IP 层(目的端口 4791) 以太网链路层(Ethernet MAC) 物理层(PHY) ✅ 利用UDP封装,可跨三层路由,支持大规模组网 关键差异:RoCEv2 在RoCEv1基础上增加了 UDP + IP 头,使报文可被传统IP网络路由

从上图可以清晰看到,RoCEv2在RoCEv1的以太网头之上增加了UDP和IP头。RoCEv1使用以太网类型字段0x8915标识,而RoCEv2使用UDP目的端口4791来标识。这一改动使得RoCEv2报文可以被标准三层交换机/路由器转发,突破了RoCEv1只能在同一二层网络内通信的限制。

2.4 RoCEv2报文格式详解

RoCEv2的报文封装遵循“以太网头 + IP头 + UDP头 + IB BTH + 数据”的结构。其中IB BTH(Base Transport Header)是RDMA传输的核心控制头,包含以下关键字段:

RoCEv2 报文结构(以64B为例):
┌─────────────────────────────────────────────────────┐
│  Ethernet Header (14B)  | 目的MAC(6B) + 源MAC(6B) + 类型(2B=0x0800) │
├─────────────────────────────────────────────────────┤
│  IP Header (20B)        | 版本/长度/协议(17=UDP)/源IP/目的IP        │
├─────────────────────────────────────────────────────┤
│  UDP Header (8B)        | 源端口(任意) + 目的端口(4791) + 长度 + 校验和 │
├─────────────────────────────────────────────────────┤
│  IB BTH (12B)           | OpCode(2B) + SE(1b) + M(1b) + Pad(6b)    │
│                         | PSN(24b) + 目的QP号(24b) + AckReq(1b)    │
├─────────────────────────────────────────────────────┤
│  Payload (数据段)        | 实际RDMA数据内容                         │
├─────────────────────────────────────────────────────┤
│  ICRC (4B)              | 不变校验和(覆盖BTH及之后)               │
└─────────────────────────────────────────────────────┘

其中OpCode定义了操作类型(如READ、WRITE、SEND、ATOMIC等),PSN(Packet Sequence Number)用于可靠连接的排序和重传检测,目的QP号(Queue Pair Number)标识接收端的通信队列。这些字段共同构成了RDMA硬件处理的基础。

2.5 与传统TCP/IP的深度对比

理解RoCEv2的优势,最直观的方式是与传统TCP/IP进行逐层对比。以下从数据路径、CPU参与度、延迟、吞吐、可靠性实现五个维度展开:

对比维度 传统TCP/IP RoCEv2
数据路径 应用→socket→内核TCP/IP栈→驱动→网卡→网络 应用→verbs接口→网卡硬件→网络
CPU参与度 每个包需CPU处理中断、拷贝、校验和计算 CPU仅发起操作,数据搬运和校验由网卡完成
端到端延迟 通常 10~50μs(受内核调度影响) 可低至 1~2μs(纯硬件转发)
吞吐效率 CPU成为瓶颈,高带宽时占用率高 100Gbps下CPU占用率可低于10%
可靠性机制 内核TCP栈负责ACK/重传/拥塞控制 网卡硬件实现Go-Back-N重传,依赖无损网络
关键结论:RoCEv2并非“更聪明的TCP”,而是完全不同的数据通路。TCP/IP的可靠性由操作系统软件实现,而RoCEv2的可靠性由网卡硬件实现。这意味着RoCEv2的性能上限远高于TCP/IP,但代价是它要求底层以太网不能丢包——因为硬件重传虽然快,但一旦发生拥塞丢包,重传风暴会迅速恶化性能。这正是后续章节要重点讲解PFC流控的根本原因。

2.6 常见误区与复盘

在实际学习和部署中,以下误区需要特别警惕:

误区一:认为RoCEv2可以完全替代TCP/IP。
实际上,RoCEv2仅适用于数据中心内部的高性能场景(存储、AI训练、HPC)。跨广域网、公网通信仍需TCP/IP,因为RoCEv2依赖无损网络,而广域网无法保证这一点。
误区二:混淆RoCEv2的“可路由”与“可跨公网”。
RoCEv2的可路由是指可以在数据中心内部的三层网络(如VXLAN、IP Fabric)中跨子网通信,但前提是整条路径上的交换机都支持无损特性(PFC/ECN)。如果中间经过不支持无损配置的传统路由器,RoCEv2的性能会急剧下降。
误区三:忽略UDP校验和的计算开销。
RoCEv2使用UDP封装,但UDP校验和的计算在部分网卡实现中会消耗额外资源。实际部署中,建议在支持硬件校验和卸载的网卡上启用该功能,否则会引入额外的CPU开销。