RoCEv2是什么?
RoCEv2是什么?
RoCEv2(RDMA over Converged Ethernet v2) 是一种 在以太网上承载 RDMA 的协议,其核心特征是:
把 RDMA 封装在 UDP/IP 之上,从而实现三层可路由的 RDMA。
下面从定义、协议栈、与 RoCEv1 的区别、以及工程意义几个角度说明。
RoCE(RDMA over Converged Ethernet)本质上是:
在以太网中使用 InfiniBand 的 RDMA 语义(QP、WR、MR、CQ 等)
RoCEv2 是 RoCE 的 第二个版本,其关键变化是:
因此,RoCEv2 = RDMA + UDP + IP + Ethernet
Application
RDMA Verbs
-----------------
InfiniBand Transport (RC/UC/UD)
-----------------
UDP
IP
Ethernet
关键点:
| 项目 | RoCEv1 | RoCEv2 |
|---|---|---|
| 所在层级 | L2 | L3 |
| 是否可路由 | ❌ 不可 | ✅ 可 |
| 封装 | Ethernet | Ethernet + IP + UDP |
| 广播域限制 | 是 | 否 |
| 网络部署 | 局域、同一子网 | 数据中心级 |
RoCEv1 是 纯二层协议:
RoCEv2 解决的是 可扩展性与部署问题:
所以现在:
实际生产环境几乎只用 RoCEv2
是的,但要注意理解方式:
所以:
| 层 | 职责 |
|---|---|
| UDP/IP | 路由、寻址、分片 |
| RDMA RC | 可靠性、顺序、重传 |
| NIC | 完全卸载(offload) |
这点非常关键。
RoCEv2 本身 没有 TCP 那样的拥塞控制,因此需要网络侧配合:
否则:
| 项目 | RoCEv2 | iWARP |
|---|---|---|
| 承载 | UDP/IP | TCP/IP |
| 拥塞控制 | 依赖网络(PFC/ECN) | TCP 自带 |
| NIC 复杂度 | 低 | 高 |
| 延迟 | 更低 | 稍高 |
| 部署复杂度 | 高 | 低 |
如果你愿意,下一步可以继续拆:
我对于VLAN / 广播域 广播域限制不太熟悉,讲解一下 RDMA RC是什么 PFC(Priority Flow Control)ECN + DCQCN 是什么 QP 超时重传是什么 为什么RoCEv2牺牲了网络部署复杂度
下面按从网络基础 → RDMA 语义 → 拥塞与可靠性 → 工程代价的顺序解释。尽量把概念拆开,不假设你已经熟悉数据中心网络。
广播域:
一次二层广播(如 ARP 请求)能到达的所有设备范围。
典型广播帧:
在一个广播域中:
广播域 ≈ 一个二层网络
以下情况会切断广播域:
以下情况不会切断广播域:
VLAN(Virtual LAN) 是对二层网络的逻辑切分:
可以理解为:
VLAN 是“人为制造的广播域边界”
RoCEv1 是 纯二层协议,结果是:
工程后果:
RoCEv2 的本质改进:
把 RDMA 从“广播域级别”提升到“IP 网络级别”
RDMA 继承自 InfiniBand 的三种传输类型:
| 类型 | 全称 | 特点 |
|---|---|---|
| RC | Reliable Connection | 可靠、有序 |
| UC | Unreliable Connection | 不可靠、有序 |
| UD | Unreliable Datagram | 不可靠、无连接 |
RoCEv2 最常用的是 RC
RC 是:
它的语义接近于:
“NIC 实现的、硬件级的可靠传输协议”
但注意:
这直接引出下面的“QP 超时重传”。
QP(Queue Pair):
RC 模式下:
在 RC 中,每个发送的数据包都有:
如果发生:
则:
QP 认为对端不可达
流程(简化):
retry_timeout严重性在于:
这也是为什么 RoCE 极度厌恶丢包
PFC = 按优先级的暂停机制
特点:
在 RoCE 中:
目标:
避免丢包(lossless Ethernet)
ECN 是 IP 层机制:
不是阻断,而是“提醒”。
DCQCN 是 RoCEv2 的拥塞控制算法
它做什么:
可以理解为:
“给 RDMA 补上的类 TCP 拥塞控制”
但它:
TCP 假设:
所以:
RoCEv2 + RC 假设:
于是必须:
对比总结:
| 维度 | TCP | RoCEv2 |
|---|---|---|
| 网络要求 | 普通 | 精细调优 |
| 丢包容忍 | 高 | 极低 |
| 拥塞控制 | 端到端 | 网络 + NIC |
| 运维难度 | 低 | 高 |
| 性能 | 中 | 极高 |
一句话概括:
RoCEv2 把复杂性从主机协议栈,转移到了数据中心网络本身
如果你愿意,下一步可以继续深入:
以太网 PAUSE 帧是什么? PFC ECN都是怎么实现的?
下面从以太网最底层机制开始,把 PAUSE → PFC → ECN 的实现逻辑一层层展开。重点放在“它到底是怎么工作的”,而不是只给定义。
PAUSE 帧定义在 IEEE 802.3x(以太网流控)中。
它解决的问题非常原始:
接收端来不及处理帧,想让发送端“先别发了”
PAUSE 帧是一个 二层控制帧:
关键字段:
| 字段 | 含义 |
|---|---|
| Destination MAC | 01:80:C2:00:00:01(控制帧) |
| Opcode | 0x0001(PAUSE) |
| Pause Time | 要求对端暂停发送的时间 |
Pause Time 的单位是:
512 bit-times
流程:
它有两个致命缺陷:
结果:
在混合流量网络中几乎不可用
PFC 定义在 IEEE 802.1Qbb
它是对 802.3x PAUSE 的“升级版”。
把“是否暂停”从“端口”细化到“优先级”
以太网最多支持 8 个优先级(PCP,3 bit):
PFC 仍然是 MAC 控制帧,但:
可以理解为:
Priority 0: Pause 0
Priority 1: Pause 0
Priority 3: Pause 65535 ← RDMA 停
Priority 5: Pause 0
解决:
引入的问题:
所以 PFC 不能单独使用。
ECN 属于 IP 层机制(RFC 3168)。
它不是暂停,而是“标记”。
IP 头中有 2 bit ECN 字段:
| ECN 值 | 含义 |
|---|---|
| 00 | 不支持 ECN |
| 10 / 01 | 支持 ECN |
| 11 | 遇到拥塞 |
DCQCN = 三件事:
这就是:
RoCEv2 的“类 TCP 拥塞控制”
| 机制 | 作用 |
|---|---|
| PFC | 防止队列溢出(最后防线) |
| ECN | 提前告知拥塞 |
| DCQCN | 控制发送速率 |
一句话总结:
PFC 是刹车,ECN 是仪表,DCQCN 是油门控制器
如果你愿意,下一步可以继续拆:
Head-of-Line Blocking
拥塞传播(congestion spreading)
死锁风险 这些是什么?
下面把这三个问题放在 PFC / RoCEv2 的真实运行场景里解释。它们不是抽象名词,而是由“暂停机制 + 多跳网络”直接推导出的必然现象。
Head-of-Line Blocking 指的是:
队列最前面的流量被阻塞,导致后面的流量即使本来可以走,也被一起卡住
这是一个排队结构问题,不是协议 bug。
关键前提:
考虑一个交换机场景:
NIC ──(RDMA)──> Switch A ──> Switch B ──> Host
Switch B 的 RDMA 队列拥塞,于是:
此时问题出现:
这就是 HOL Blocking。
拥塞传播指的是:
原本只在一个点发生的拥塞,通过 PFC 暂停机制,被“反向扩散”到整个网络
PFC 的本质行为是:
“我满了,你别再给我发”
但注意:
考虑一条三跳路径:
Host A → S1 → S2 → S3 → Host B
结果:
一个点的拥塞 → 整条路径被“冻结”
网络死锁不是程序死锁,而是:
一组设备互相等待对方释放资源,导致永久停滞
PFC 的暂停是:
简化成环形:
S1 → S2 → S3 → S1
每个交换机都:
结果:
形成:
闭环等待
理论假设:
现实情况:
一旦进入某些状态组合:
这三个问题不是独立的:
PFC 暂停
↓
HOL Blocking
↓
队列占满
↓
PFC 向上游传播
↓
拥塞传播
↓
形成环路
↓
死锁风险
可以理解为:
PFC 是把“丢包问题”换成了“排队与系统性风险问题”
因为对 RC 而言:
所以业界选择:
接受复杂的网络风险,换取极低延迟与高吞吐
现实中不会“裸用 PFC”,而是:
如果你愿意,下一步可以继续深入:
简明地总结我们上面遇到的所有问题与概念
下面给你一份高度压缩但逻辑完整的总览,把前面出现的所有关键概念、问题、因果关系放在一张“心智地图”里。可以当复习提纲用。
结论:
RC 极度厌恶丢包
分工总结:
因果链:
PFC
→ HOL Blocking
→ 队列堆积
→ Pause 传播
→ 潜在死锁
结果:
一句话总结:
RoCEv2 用“网络复杂性”换“极致性能”
如果你需要,我可以把这份总结进一步压缩成一页“考试速记版”或“面试回答版”,或者直接画一张文字版拓扑推导图。