1.概述
IBA传输层的基本传输头(Base Transport Header)定义了InfiniBand的事务类型,同时也实现了报文确认与重传功能,是IBA协议的核心部分。RoCE、RoCEv2、veRoCE、iWARP等RDMA改进协议,都是通过保留BTH来兼容RDMA协议。
2.格式
如下图所示,BTH长度为12字节。

BTH中各个位域的意义如下表所示,其中OpCode定义了InfiniBand的事务类型,总共分为6大类,分别是可靠连接(RC)、不可靠连接(UC)、不可靠数据报(UD)、可靠数据报(RD)、拥塞通知报文(CNP)、扩展可靠连接(XRC)
| Field Name | Field Abbreviation | Field Size (in bits) | Description |
|---|---|---|---|
| Opcode | OpCode | 8 | 该字段标识 IBA 数据包的类型。OpCode 同时指明在基础传输头(Base Transport Header)之后所跟随的扩展头类型。 |
| Solicited Event | SE | 1 | 该比特指示接收端是否需要生成一个事件(Event)。 |
| MigReq | M | 1 | 该比特用于传递迁移(Migration)状态信息。 |
| Pad Count | PadCnt | 2 | 该字段指示为了将有效载荷对齐到 4 字节边界而附加的填充字节数量。 |
| Transport Header Version | TVer | 4 | 该字段指示 IBA 传输层头部(Transport Headers)的版本号。 |
| Partition Key | P_KEY | 16 | 该字段指示该数据包所属的逻辑分区(Partition)。 |
| F/Res1* | F/R | 1 | F(FECN):为 0 表示未接收到 FECN 拥塞指示;为 1 表示该数据包经过了发生拥塞的节点。Res1*:发送时置 0,接收时忽略。该字段不包含在不变 CRC(Invariant CRC)计算中。 |
| B/Res1* | B/R | 1 | B(BECN):为 0 表示数据包未经过拥塞点,或虽经过但未被标记;为 1 表示该头部所指示的数据包经历了前向拥塞。B 位在 ACK 或 CN BTH 中被置位。Res1*:发送时置 0,接收时忽略。该字段不包含在不变 CRC 计算中。 |
| Reserved (variant) | 6 | 发送时置 0,接收时忽略。该字段不包含在不变 CRC(Invariant CRC)计算中。 | |
| Destination QP | DestQP | 24 | 该字段标识目的端的工作队列对编号(Work Queue Pair Number,简称 QP)。 |
| Acknowledge Request | A | 1 | 该比特用于指示接收端需要为该数据包调度并发送一个确认(ACK)。 |
| Reserved | 7 | 发送时置 0,接收时忽略。该字段包含在不变 CRC(Invariant CRC)计算中。 | |
| Packet Sequence Number | PSN | 24 | 该字段用于检测数据包是否丢失或重复,用于保证传输的可靠性和有序性。 |
2.1.OpCode
| Code[7-5] | Code[4-0] | Description | Packet Contents following the Base Transport header | Code[4-0] 语义解释 | Code[7-5] 服务解释 |
|---|---|---|---|---|---|
| 000 Reliable Connection (RC) | 00000 | SEND First | PayLd | 多包SEND的第一个分段 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 00001 | SEND Middle | PayLd | SEND中间分段 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 00010 | SEND Last | PayLd | SEND最后分段,触发确认 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 00011 | SEND Last with Immediate | ImmDt, PayLd | 最后分段并携带立即数,接收方产生确认 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 00100 | SEND Only | PayLd | 单包SEND | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 00101 | SEND Only with Immediate | ImmDt, PayLd | 单包SEND + Immediate | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 00110 | RDMA WRITE First | RETH, PayLd | RDMA WRITE首包,含远程地址信息 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 00111 | RDMA WRITE Middle | PayLd | WRITE中间分段 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 01000 | RDMA WRITE Last | PayLd | WRITE最后分段,触发确认 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 01001 | RDMA WRITE Last with Immediate | ImmDt, PayLd | WRITE结束并携带立即数,触发确认 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 01010 | RDMA WRITE Only | RETH, PayLd | 单包WRITE,触发确认 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 01101 | RDMA WRITE Only with Immediate | RETH, ImmDt, PayLd | 单包WRITE + Immediate,触发确认 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 01110 | RDMA READ Request | RETH | RDMA读请求 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 01111 | RDMA READ response First | AETH, PayLd | 读响应首包 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 10000 | RDMA READ response Middle | PayLd | 读响应中间包 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 10100 | RDMA READ response Last | AETH, PayLd | 读响应最后包 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 10001 | RDMA READ response Only | AETH, PayLd | 单包读响应 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 10010 | Knowledge | AETH | 确认包(类似ACK) | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 10011 | ATOMIC Acknowledge | AETH, AtomicAckETH | 原子操作确认 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 10100 | CmpSwap | AtomicETH | 比较并交换原子请求 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 10101 | FetchAdd | AtomicETH | 读取并相加原子请求 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 10110 | Reserved | Undefined | 保留 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 10111 | SEND Last with Invalidate | IETH, PayLd | 最后发送并使远程内存失效 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 000 Reliable Connection (RC) | 11000-11111 | Reserved | undefined | 保留范围 | Reliable Connection (RC) 面向连接、可靠服务: • 使用ACK和重传保证按序交付 • 每个报文都需要确认 • 支持SEND、RDMA WRITE/RDMA READ等操作 • 广泛应用于可靠传输场景 |
| 001 Unreliable Connection (UC) | 00000 | SEND First | PayLd | 多包 SEND 的首个分段 | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 00001 | SEND Middle | PayLd | SEND 中间分段 | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 00010 | SEND Last | PayLd | SEND 最后分段 | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 00011 | SEND Last with Immediate | ImmDt, PayLd | 结束分段并携带 Immediate 数据 | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 00100 | SEND Only | PayLd | 单包 SEND | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 00101 | SEND Only with Immediate | ImmDt, PayLd | 单包 SEND + Immediate | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 00110 | RDMA WRITE First | RETH, PayLd | WRITE 首包(含远端地址信息) | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 00111 | RDMA WRITE Middle | PayLd | WRITE 中间分段 | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 01000 | RDMA WRITE Last | PayLd | WRITE 结束分段 | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 01001 | RDMA WRITE Last with Immediate | ImmDt, PayLd | WRITE 结束并通知对端 | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 01010 | RDMA WRITE Only | RETH, PayLd | 单包 WRITE | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 01101 | RDMA WRITE Only with Immediate | RETH, ImmDt, PayLd | 单包 WRITE + Immediate | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 001 Unreliable Connection (UC) | 01110 | Reserved | undefined | 保留操作码 | Unreliable Connection (UC) 面向连接但不可靠: • 无 ACK 与重传机制 • 保证发送顺序 • 低开销单向传输 • 常用于 RDMA WRITE 数据流 |
| 010 Reliable Datagram (RD) | 00000 | SEND First | RDETH, DETH, PayLd | 可靠 Datagram SEND 首包 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 00001 | SEND Middle | RDETH, DETH, PayLd | SEND 中间包 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 00010 | SEND Last | RDETH, DETH, PayLd | SEND 结束包 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 00011 | SEND Last with Immediate | RDETH, DETH, ImmDt, PayLd | 结束并携带 Immediate | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 00100 | SEND Only | RDETH, DETH, PayLd | 单包 SEND | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 00101 | SEND Only with Immediate | RDETH, DETH, ImmDt, PayLd | 单包 SEND + Immediate | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 00110 | RDMA WRITE First | RDETH, DETH, RETH, PayLd | WRITE 首包 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 00111 | RDMA WRITE Middle | RDETH, DETH, PayLd | WRITE 中间包 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 01000 | RDMA WRITE Last | RDETH, DETH, PayLd | WRITE 结束包 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 01001 | RDMA WRITE Last with Immediate | RDETH, DETH, ImmDt, PayLd | WRITE 结束并通知 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 01010 | RDMA WRITE Only | RDETH, DETH, RETH, PayLd | 单包 WRITE | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 01101 | RDMA WRITE Only with Immediate | RDETH, DETH, RETH, ImmDt, PayLd | 单包 WRITE + Immediate | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 01110 | RDMA READ Request | RDETH, DETH, RETH | 发起远端读取 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 01111 | RDMA READ response First | RDETH, AETH, PayLd | READ 返回首包 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 01112 | RDMA READ response Middle | RDETH, PayLd | READ 返回中间包 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 01113 | RDMA READ response Last | RDETH, AETH, PayLd | READ 返回结束包 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 10000 | RDMA READ response Only | RDETH, AETH, PayLd | 单包 READ 返回 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 10001 | Acknowledge | RDETH, AETH | 确认 ACK | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 10010 | ATOMIC Acknowledge | RDETH, AETH, AtomicAckETH | 原子操作确认 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 10011 | CmpSwap | RDETH, DETH, AtomicETH | Compare & Swap 原子操作 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 10100 | FetchAdd | RDETH, DETH, AtomicETH | Fetch-and-Add 原子操作 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 10101 | RESYNC | RDETH, DETH | QP 状态重新同步 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 010 Reliable Datagram (RD) | 10110-11111 | Reserved | undefined | 保留操作码 | Reliable Datagram (RD) 可靠无连接通信: • 支持 ACK 与重传 • 不需要固定连接 • 支持多目标通信 • 常用于可扩展 RDMA 服务 |
| 011 Unreliable Datagram (UD) | 00000-00011 | Reserved | undefined | 保留 | Unreliable Datagram (UD) 无连接不可靠: • 无需连接建立 • 无确认与重传 • 支持多播 • 低延迟、适合广播/多播 |
| 011 Unreliable Datagram (UD) | 00100 | SEND only | DETH, PayLd | 单包SEND,带数据报头 | Unreliable Datagram (UD) 无连接不可靠: • 无需连接建立 • 无确认与重传 • 支持多播 • 低延迟、适合广播/多播 |
| 011 Unreliable Datagram (UD) | 00101 | SEND only with Immediate | DETH, ImmDt, PayLd | 单包SEND + Immediate | Unreliable Datagram (UD) 无连接不可靠: • 无需连接建立 • 无确认与重传 • 支持多播 • 低延迟、适合广播/多播 |
| 011 Unreliable Datagram (UD) | 00110-11111 | Reserved | undefined | 保留 | Unreliable Datagram (UD) 无连接不可靠: • 无需连接建立 • 无确认与重传 • 支持多播 • 低延迟、适合广播/多播 |
| 100 CNP | 00000 | CNP | none | 拥塞通知包,由交换机或端点生成 | Congestion Notification (CNP) 拥塞控制报文: • 用于基于IP的拥塞控制 • 通知发送端降低速率 • 无负载 |
| 100 CNP | 00001-11111 | Reserved | undefined | 保留 | Congestion Notification (CNP) 拥塞控制报文: • 用于基于IP的拥塞控制 • 通知发送端降低速率 • 无负载 |
| 101 Extended Reliable Connection (XRC) | 00000 | SEND First | XRCETH, PayLd | XRC SEND首包,含XRCETH | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 00001 | SEND Middle | XRCETH, PayLd | XRC中间分段 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 00010 | SEND Last | XRCETH, PayLd | XRC最后分段 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 00011 | SEND Last with Immediate | XRCETH, ImmDt, PayLd | 最后分段+Immediate | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 00100 | SEND Only | XRCETH, PayLd | 单包SEND | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 00101 | SEND Only with Immediate | XRCETH, ImmDt, PayLd | 单包SEND+Immediate | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 00110 | RDMA WRITE First | XRCETH, RETH, PayLd | WRITE首包 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 00111 | RDMA WRITE Middle | XRCETH, PayLd | WRITE中间分段 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 01000 | RDMA WRITE Last | XRCETH, PayLd | WRITE最后分段 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 01001 | RDMA WRITE Last with Immediate | XRCETH, ImmDt, PayLd | WRITE最后分段+Immediate | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 01010 | RDMA WRITE Only | XRCETH, RETH, PayLd | 单包WRITE | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 01011 | RDMA WRITE Only with Immediate | XRCETH, RETH, ImmDt, PayLd | 单包WRITE+Immediate | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 01100 | RDMA READ Request | XRCETH, RETH | 读请求 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 01101 | RDMA READ response First | AETH, PayLd | 读响应首包 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 01110 | RDMA READ response Middle | PayLd | 读响应中间包 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 01111 | RDMA READ response Last | AETH, PayLd | 读响应最后包 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 10000 | RDMA READ response Only | AETH, PayLd | 单包读响应 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 10001 | Acknowledge | AETH | 确认包 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 10010 | ATOMIC Acknowledge | AETH, AtomicAckETH | 原子操作确认 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 10011 | CmpSwap | XRCETH, AtomicETH | 比较并交换原子请求 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 10100 | FetchAdd | XRCETH, AtomicETH | 读取并相加原子请求 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 10101 | Reserved | Undefined | 保留 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 10110 | SEND Last with Invalidate | XRCETH, IETH, PayLd | 最后发送并使远程内存失效 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 101 Extended Reliable Connection (XRC) | 10111 | SEND Only with Invalidate | XRCETH, IETH, PayLd | 单包发送并使远程内存失效 | Extended Reliable Connection (XRC) 扩展可靠连接: • 类似RC,但允许多个接收队列共享一个QP • 适合大规模集群 • 可靠传输,降低QP资源消耗 |
| 110-111 Manufacturer Specific | 00000-11111 | Manufacturer Specific OpCodes | undefined | 厂商自定义操作码 | Manufacturer Specific 厂商私有扩展,非标准行为 |
注:所有OpCode包尾都附加ICRC和VCRC(图中未列出)。
2.2.SOLICITED EVENT(SE)
requester将该位设置为1,以指示responder调用CQ事件处理程序(触发CQE)。详细信息如下:
- SE位仅在SEND、SEND with Immediate或RDMA Write with Immediate的最后一个或唯一一个数据包中设置。
- 有关影响HCA的其他操作指南,详细参考InfiniBand协议第11.4.2.2节"请求完成通知"。
除了在SEND、SEND with Immediate或RDMA Write with Immediate操作中使用外,SE位还可以在SEND with Invalidate操作中设置。在此情况下,SE位应仅在SEND with Invalidate操作的最后一个或唯一一个数据包中设置。
2.3.MIGREQ(M)
用于表示迁移状态。如果该位设置为1,则表示连接或EE上下文已迁移;如果设置为0,则表示当前迁移状态无变化。参见参考InfiniBand协议第17章HCA中的"Automatic Path Migration"。这一机制用于自动路径迁移(APM,Automatic Path Migration)场景,目的是在不停机的情况下将通信链路切换到冗余路径上。
2.4.PAD COUNT(PADCNT)
数据包负载以4字节的倍数发送。Pad Count指示附加到数据包负载末尾的填充字节数(0-3)。填充字节用于将负载(负载长度可能为零或多个字节)对齐至4字节的整数倍。
2.5.TRANSPORT HEADER VERSION(TVER)
指定了数据包所使用的IBA传输层版本。此版本适用于所有传输层字段,包括BTH(基础传输头)、扩展头以及invariant CRC。计算invariant CRC时将TVER视为0,不管TVER具体值。如果接收方不支持指定的传输版本,则该数据包将被丢弃。
2.6.PARTITION KEY(P_KEY)
P_Key用于标识目的QP(RC、UC、UD、XRC)或EE上下文(RD)所属的分区。P_Key是一个16位的标识符,用于定义端口所属的分区。它类似于VLAN Tag在以太网中的作用,用于在网络层提供隔离和安全。每个Port和QP都维护了一个P_Key表。
- port:每个HCA port都有一个P_Key表,列出了该port允许加入的所有分区。
- QP:每个QP在创建时,会绑定一个P_Key索引(P_Key Index),该索引指向port P_Key表中的某一项。这个被指向的P_Key就是该QP所属的分区。
2.7.DESTINATION QP(DEST QP)
定义目的QP编号
2.8.FECN/RES1(F/RES1)
- F(FECN):0表示未收到FECN(前向显式拥塞通知)指示;1表示数据包经过了拥塞点。
- Res1:发送时设置为0,接收时忽略。该字段不参与invariant CRC(循环冗余校验)的计算。
前向显式拥塞通知(FECN,Forward Explicit Congestion Notification)是InfiniBand架构中一种端到端的拥塞管理机制,属于InfiniBand拥塞控制架构的核心部分。简单来说,它是一个交换机在数据包上做的"记号",用于沿着数据包的原始传输方向通知接收端:"我刚才经历的路径上发生了拥塞"。
2.9.BECN/RES1(F/RES1)
- B(BECN): 0表示数据包未经过拥塞点,或经过拥塞点但未被标记;1表示此头部所指示的数据包经历了前向拥塞。B位是在ACK或CN的BTH中设置的。
- Res1:发送时设置为0,接收时忽略。该字段不参与invariant CRC的计算。
2.10.ACKREQ(A)
ACKREQ(Acknowledge Request)是一个强制性的确认机制触发器。核心作用是请求接收方必须立即或尽快针对此数据包返回一个确认(ACK)消息。
InfiniBand的可靠传输服务(如RC,可靠连接)依赖于确认机制来保证数据送达。虽然数据包本身有PSN(包序列号)可以用于检测丢包,但发送方需要知道何时可以安全地释放资源(如缓冲区)以及数据是否真的被对方接收。
- 正常情况:在连续的多包传输中,如果每一包都回复ACK,会产生大量额外的确认流量,浪费带宽。
- 优化机制:IB协议允许接收方延迟确认(Delayed Acknowledgment),即可以多个数据包合并回复一个ACK。
- ACKREQ的作用:当发送方需要立即知道某个特定包的接收状态时(例如发送完最后一个包、或者发送缓冲区即将耗尽),就设置ACKREQ位,强制接收方打破"延迟确认"的规则,立即回复。
2.11.PACKET SEQUENCE NUMBER(PSN)
PSN字段用于标识数据包在数据包序列中的位置。PSN由发送方生成,接收方通过PSN检测数据包是否丢失、乱序或重复。
参考资料
- InfiniBand TM Architecture Specification Volume1
- InfiniBand TM Architecture Specification Volume2