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仅负责发起操作和接收完成通知。
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在协议封装上有本质区别,这直接决定了它们的网络适用范围。下图展示了两种协议栈的层次差异:
从上图可以清晰看到,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重传,依赖无损网络 |
2.6 常见误区与复盘
在实际学习和部署中,以下误区需要特别警惕:
实际上,RoCEv2仅适用于数据中心内部的高性能场景(存储、AI训练、HPC)。跨广域网、公网通信仍需TCP/IP,因为RoCEv2依赖无损网络,而广域网无法保证这一点。
RoCEv2的可路由是指可以在数据中心内部的三层网络(如VXLAN、IP Fabric)中跨子网通信,但前提是整条路径上的交换机都支持无损特性(PFC/ECN)。如果中间经过不支持无损配置的传统路由器,RoCEv2的性能会急剧下降。
RoCEv2使用UDP封装,但UDP校验和的计算在部分网卡实现中会消耗额外资源。实际部署中,建议在支持硬件校验和卸载的网卡上启用该功能,否则会引入额外的CPU开销。