InfiniBand架构概述:整体协议栈与链路层定位

InfiniBand(IB)不是简单的“高速网卡+线缆”组合,而是一套完整的、为高性能计算(HPC)与数据中心设计的通道式I/O架构。理解IB,首先需要建立分层协议栈的全局视角,再聚焦于链路层——它是整个IB体系中最具特色、最复杂、也最影响性能的层次。

2.1 整体协议栈:四层分工与报文封装

IB协议栈自下而上分为物理层、链路层、网络层、传输层,与OSI模型有对应关系,但更精简、更面向硬件实现。各层职责如下:

层次 核心职责 关键单元/机制 类比(以太网)
物理层 比特传输、信号编码、链路建立 1X/4X/12X通道、NRZ编码、链路训练 PHY芯片、RJ45/光模块
链路层 数据帧封装、流控、错误检测、链路级QoS LRH、CRC、VL仲裁、链路级重传 MAC层+流控(802.3x)
网络层 子网内路由、全局寻址 LRH中的DLID/SLID、子网管理器(SM) IP层(但IB无TTL,靠SL)
传输层 端到端可靠传输、消息拆分/重组 QP、WR、BTH、DETH、RETH TCP/UDP(但IB硬件卸载)

报文在发送端的封装顺序为:传输层头(BTH等)→ 网络层头(LRH)→ 链路层附加CRC(ICRC/VCRC)→ 物理层编码。接收端则逐层解封装。值得注意的是,IB的“网络层”非常轻量——它不提供跨子网路由(那是路由器的事),只在子网内通过LRH中的DLID(目的本地ID)完成端口到端口的转发。

核心认知:IB的传输层与链路层都具备“可靠性”机制,但分工不同。传输层负责端到端(QP到QP)的可靠连接,链路层负责每一跳(端口到端口)的完整性校验与流控。两者协同,才能实现“无损网络”的承诺。
IB协议栈分层与链路层关键功能 传输层 QP / WR / BTH 端到端可靠传输 网络层 LRH (DLID/SLID) 子网内路由 链路层 ★ 帧封装 / CRC校验 VL流控 / 链路级重传 QoS仲裁 / 链路初始化 物理层 1X/4X/12X 通道 NRZ编码 / 链路训练 IB 数据帧格式(链路层视角) LRH GRH BTH Payload ICRC VCRC LRH: 本地路由头(必选) GRH: 全局路由头(跨子网时) BTH: 基础传输头(传输层) ICRC: 不变CRC(端到端) VCRC: 可变CRC(每跳更新) VL 流控与 QoS VL0 (管理/低优先级) VL1 (存储流量) VL2 (计算/MPI流量) VL15 (子网管理) 链路层关键机制 • 链路级CRC校验(VCRC每跳更新) • 基于信用的流控(无丢包) • 链路层重传(LLR,可选) 报文封装方向 传输层头 → LRH → CRC → 物理编码

2.2 链路层的作用:为什么它是IB的“命门”

链路层位于物理层之上、网络层之下,承担着“承上启下”的关键角色。如果说物理层解决了“怎么传比特”,链路层则解决“怎么可靠、有序、公平地传帧”。具体而言,链路层有四大核心功能:

  1. 帧封装与定界:将上层报文封装为IB链路帧,添加LRH(8字节)、ICRC(4字节)、VCRC(2字节)等字段。LRH中的DLID用于交换机转发决策,SL(服务等级)用于QoS仲裁。
  2. 基于信用的流控(Credit-Based Flow Control):这是IB实现无损网络的基石。接收方为每个VL(虚拟通道)维护信用计数器,发送方只有获得信用才能发送数据。信用耗尽则停止发送,从机制上杜绝了缓冲区溢出导致的丢包。
  3. 错误检测与链路级重传:VCRC在每个交换机端口都会被重新计算并校验,一旦发现错误,该帧被丢弃并触发链路层重传(LLR)。ICRC则提供端到端的完整性校验,确保数据在整条路径上未被篡改。
  4. VL仲裁与QoS:链路层将物理链路划分为最多16条虚拟通道(VL0~VL15),通过加权仲裁算法(如加权轮询)分配带宽。VL15专用于子网管理,VL0~VL14承载业务流量,从而实现不同业务流的隔离与优先级控制。
记忆锚点:链路层 = “帧格式 + 信用流控 + CRC校验 + VL仲裁”。这四件事共同保证了IB网络“不丢包、不乱序、可管控”的三大承诺。

2.3 案例/场景:一个MPI消息如何穿越链路层

假设节点A上的MPI进程要向节点B发送一条64KB的消息,且两个节点直连一台交换机。消息在链路层的处理流程如下:

步骤1: 传输层将64KB消息拆分为多个MTU大小的报文(如4KB)
步骤2: 每个报文添加BTH(12B) → 形成传输层PDU
步骤3: 网络层添加LRH(8B),填入DLID=节点B端口LID, SL=2
步骤4: 链路层计算ICRC(4B)并附加,形成待发送帧
步骤5: 发送端检查VL2信用计数器,若信用足够则发送
步骤6: 交换机收到帧,校验VCRC → 通过后更新VCRC → 根据DLID转发到出端口
步骤7: 出端口检查VL2信用,发送到节点B
步骤8: 节点B校验VCRC和ICRC,剥离链路层头,交给传输层重组

整个过程,链路层完成了两次VCRC校验(交换机入口和出口)、两次信用检查(节点A发送前和交换机转发前),以及一次ICRC端到端校验。任何一步失败都会触发重传或错误上报。

2.4 误区/复盘:对链路层的常见误解

误区1:认为IB的可靠性完全由传输层负责。
实际上,链路层的信用流控和VCRC校验是“第一道防线”。如果链路层丢帧,传输层重传的代价要高得多(需要端到端确认)。IB设计哲学是“尽量在链路层解决问题,不让错误向上传播”。
误区2:混淆ICRC与VCRC的作用范围。
ICRC从发送端到接收端全程不变,保护的是“端到端数据完整性”;VCRC在每一跳都会被交换机重新计算,保护的是“单条链路上的传输正确性”。两者缺一不可。
误区3:认为VL数量越多越好。
虽然IB规范支持16个VL,但实际硬件实现通常只支持2~8个VL。VL数量增加会消耗更多硬件资源(信用缓冲区、仲裁器),且配置复杂度上升。生产环境通常配置2~4个业务VL + 1个管理VL即可满足需求。
复盘要点:链路层是IB架构中最“硬核”的部分。学习时建议抓住三条主线:
① 帧格式——LRH各字段含义、CRC覆盖范围;
② 流控机制——信用如何产生、消耗、恢复;
③ QoS实现——VL划分、SL映射、仲裁权重。掌握这三条线,就掌握了链路层的80%核心知识。