3. Infiniband架构:物理层、链路层、网络层、传输层协议栈详解

3.1 协议栈分层总览

InfiniBand(IB)协议栈并非简单的“网络模型套壳”,而是为高带宽、低时延、低CPU占用而生的专用分层体系。与TCP/IP协议栈相比,IB将可靠性、流控、路由与拥塞管理下沉到硬件实现,从而绕开操作系统内核的软件开销。其分层结构自上而下为:传输层(Transport Layer)、网络层(Network Layer)、链路层(Link Layer)与物理层(Physical Layer)。每一层都有明确的报文封装格式与职责边界,层间通过标准化的“原语”交互,确保不同厂商的HCA(Host Channel Adapter)、交换机与线缆能够互操作。

核心设计思想:IB协议栈将“可靠传输”所需的确认、重传、排序等机制全部卸载到HCA硬件,CPU仅需负责提交工作请求(WR)和消费完成队列(CQ),从而在微秒级时延下实现接近线速的数据搬运。
InfiniBand 协议栈分层与报文封装关系 传输层 (Transport Layer) • 报文类型:IBA(InfiniBand Architecture)报文 / 数据报(Datagram) • 关键功能:QP(队列对)管理、可靠连接(RC)/不可靠连接(UC)/数据报(UD) • 头部字段:LNH(链路下一跳)、OpCode、目的QP号、PSN(包序号)、A-key 网络层 (Network Layer) • 核心:全局路由头(GRH)——基于64位全局ID(GID)的寻址 • 功能:子网间路由(跨子网转发)、SL(服务等级)映射、分区密钥(P_Key)校验 链路层 (Link Layer) • 帧格式:本地路由头(LRH)+ 数据 + 不变CRC(ICRC)+ 可变CRC(VCRC) • 关键机制:链路级流控(基于信用)、链路层重传(非可靠时)、子网管理(SM) • 地址:LID(16位本地ID)+ 端口号,用于子网内交换转发 物理层 (Physical Layer) • 电气特性:差分信号、NRZ编码、时钟数据恢复(CDR) • 速率:SDR(2.5Gbps)、DDR(5Gbps)、QDR(10Gbps)、FDR(14.06Gbps)、EDR(25Gbps)、HDR(50Gbps) 报文逐层封装(发送方向) 解封装(接收方向) 关键点:IB网络层不负责端到端可靠传输,该职责由传输层完成;链路层只保证相邻节点间的无差错传递。 子网管理器(SM)运行在链路层之上,负责分配LID、构建路由表并监控链路状态。

3.2 物理层:从信号到链路建立

物理层定义了IB端口与线缆之间的电气接口、连接器类型、信号速率以及链路训练机制。IB物理层采用自协商(Auto-Negotiation)流程,在链路初始化阶段自动匹配双方速率与宽度。一个IB端口可包含1x、4x、8x或12x通道(Lane),每个通道独立传输差分信号。例如,HDR(High Data Rate)单通道速率为50Gbps,4x端口即提供200Gbps聚合带宽。

物理层还负责链路状态机的管理,包括:禁用(Disabled)、初始化(Initialize)、训练(Training)、激活(Active)等状态。当线缆插入或对端设备重启时,物理层通过发送训练序列(TS1/TS2)完成位同步、符号对齐与通道间偏移补偿。值得注意的是,IB物理层并不包含复杂的均衡算法(如PAM4),而是依赖高质量线缆与接收端CDR电路来保证信号完整性。

速率代际 单通道速率 4x端口聚合速率 典型线缆类型
EDR 25 Gbps 100 Gbps 铜缆(≤3m)/ 光模块
HDR 50 Gbps 200 Gbps 光模块(QSFP56)
NDR 100 Gbps 400 Gbps 光模块(QSFP-DD)

3.3 链路层:可靠传输的基石

链路层是IB协议栈中最具特色的层次,它同时承担了寻址转发与可靠性保障的双重职责。每个IB端口在子网内被分配一个16位的本地标识符(LID),交换机依据LID进行二层转发。链路层帧格式包含:LRH(8字节)、GRH(仅在跨子网时存在,40字节)、数据载荷、ICRC(4字节)与VCRC(2字节)。其中,VCRC覆盖LRH与数据,而ICRC覆盖GRH与数据,这种分离设计使得交换机在转发时无需重新计算VCRC,从而降低转发时延。

链路层的另一核心机制是基于信用的流控(Credit-Based Flow Control)。接收方为每个虚拟通道(VL)维护一个信用计数器,发送方只有在收到信用授权后才能发送数据包。这种机制从根本上避免了缓冲区溢出导致的丢包,使得IB网络在满载情况下依然保持零丢包。此外,链路层还支持链路层重传(Link-Level Retry),当检测到CRC错误时,接收方发送NAK,发送方从重传缓冲区中恢复数据。

实操提示:使用 ibstat 命令可查看链路层状态,重点关注 State: Active 与 PhysicalState: LinkUp。若出现 State: Init 或 PhysicalState: Polling,说明链路训练未完成,需检查线缆或对端端口配置。

3.4 网络层:跨子网路由与GID寻址

当IB网络规模超过单个子网(通常最多数千节点)时,需要网络层实现跨子网通信。IB网络层使用全局路由头(GRH),其中包含128位的源GID与目的GID。GID由64位子网前缀(Subnet Prefix)与64位端口GUID拼接而成,类似于IPv6地址结构。路由器(IB Router)根据GID中的子网前缀进行转发决策,将数据包从一个子网传递到另一个子网。

网络层还负责分区(Partition)的跨子网校验。每个数据包携带P_Key(16位分区密钥),接收端HCA会验证P_Key是否匹配,不匹配的数据包将被丢弃。这种机制确保了多租户环境中租户间的强隔离。值得注意的是,IB网络层并不提供分片与重组功能,因此跨子网通信时MTU必须保持一致(通常为4096字节),否则路由器会丢弃超长包并发送错误通知。

# 查看子网管理器分配的路由信息(示例)
# 在子网管理器节点上执行
sminfo -c  # 显示当前子网管理器配置
ibroute -n 0x1  # 显示LID为1的交换机路由表

3.5 传输层:QP状态机与可靠服务

传输层是IB协议栈的“智能核心”,它向上层应用提供队列对(QP)抽象。每个QP由发送队列(SQ)与接收队列(RQ)组成,应用通过提交工作请求(WR)驱动数据传输。传输层定义了四种服务类型:可靠连接(RC)、不可靠连接(UC)、可靠数据报(RD)与不可靠数据报(UD)。其中RC服务使用最广泛,它提供端到端的确认、重传、排序与流控,适用于存储与HPC应用。

传输层报文头(BTH)包含关键字段:OpCode(标识操作类型,如Send/Write/Read/Atomic)、目的QP号(24位)、PSN(24位包序号)与A-key(用于内存保护)。QP状态机包括复位(Reset)、初始化(Init)、就绪接收(RTR)、就绪发送(RTS)与错误(Error)等状态。QP必须经过严格的状态迁移才能开始数据传输,例如从Init迁移到RTR需要调用 ibv_modify_qp 并设置正确的P_Key与访问权限。

常见误区:许多初学者误以为IB的可靠传输与TCP类似,由软件协议栈处理重传。实际上,IB的RC服务完全由HCA硬件实现重传与排序,CPU不参与数据包确认。若应用观察到重传计数增长(通过 ibstat 的 LinkLayerRetrans 字段),通常表示物理链路存在信号质量问题,而非软件拥塞。

3.6 案例:RDMA写操作跨层协作流程

以一次典型的RDMA Write操作为例,展示各层如何协同工作。假设节点A要向节点B的某段内存写入数据:

  1. 应用层:节点A的应用调用 ibv_post_send,提交一个WR,指定QP、目的地址、本地内存地址与长度。
  2. 传输层:HCA硬件将WR封装为传输层报文,分配PSN,填入OpCode(RDMA_WRITE_FIRST/MIDDLE/LAST),并启动重传定时器。
  3. 网络层:若节点A与B不在同一子网,HCA添加GRH头,填入目的GID;若在同一子网,则跳过GRH。
  4. 链路层:添加LRH头,填入目的LID与源LID,计算ICRC与VCRC,通过信用机制发送到交换机。
  5. 接收端:节点B的HCA逐层解封装,校验CRC与P_Key,传输层检查PSN连续性,将数据直接DMA写入应用指定的内存地址,并生成完成队列(CQ)事件通知应用。

整个过程无需节点B的CPU参与数据拷贝,这正是IB实现零拷贝与内核旁路的关键。从应用发起WR到接收端完成事件,典型时延可低至1微秒以内。

3.7 误区与复盘:分层理解中的常见偏差

  • 误区一:将IB链路层等同于以太网MAC层。实际上,IB链路层不仅负责寻址,还承担了端到端流控与链路级重传,而以太网MAC层不具备这些能力。
  • 误区二:认为IB网络层等同于IP层。IB网络层不提供分片、不分优先级(优先级由SL字段在链路层实现),且GID是扁平地址而非层次化路由地址。
  • 误区三:混淆QP与TCP连接。一个QP可以承载多个应用流(通过不同的操作码区分),而TCP连接是单流的。此外,QP的建立需要子网管理器参与(分配LID),而TCP连接仅需IP地址与端口。
  • 复盘建议:排查IB性能问题时,应逐层检查:物理层看信号强度与误码率(ibdiagnet),链路层看CRC错误与重传计数,网络层看路由表与P_Key配置,传输层看QP状态与CQ错误。切忌直接跳到应用层分析。