InfiniBand基础:IB架构、链路层、网络层、传输层简介

InfiniBand(IB)并非简单的“高速网卡+交换机”组合,而是一套完整的、为高性能计算与数据中心设计的通道式互联架构。理解IB,首先需要建立分层模型的概念——它与TCP/IP协议栈有相似之处,但在设计哲学上截然不同:IB将可靠传输、流控、路由与拥塞管理下沉到硬件中,从而释放CPU资源。

2.1 IB整体架构:从物理端口到应用Socket

IB网络由四种基本组件构成:HCA(主机通道适配器)、交换机(Switch)、路由器(Router)和子网管理器(SM)。其中,HCA是服务器侧接入IB网络的接口卡,交换机负责子网内转发,路由器用于连接不同IB子网或与其他网络(如以太网)互通,而SM则承担整个子网的拓扑发现、路径计算与转发表下发任务。

IB协议栈分为物理层、链路层、网络层、传输层以及上层的软件协议(如IPoIB、SDP、SRP)。与TCP/IP不同,IB的链路层和网络层职责划分非常清晰:链路层负责同一子网内的帧传递与流控,网络层则负责跨子网的路由寻址。这种设计使得IB交换机在子网内部只需处理链路层转发,延迟极低。

核心要点:IB的“子网”概念类似于以太网中的“广播域”,但IB子网内所有设备由SM统一管理,并分配唯一的16位LID(本地标识符)。子网内转发依据LID进行,而跨子网通信则依赖64位GID(全局标识符),其中包含子网前缀和端口GUID。
IB协议分层与数据封装流程 IB协议栈 传输层 (Transport) 网络层 (Network) 链路层 (Link) 物理层 (Physical) 数据封装与解封装流程 应用数据 (Payload) BTH (Base Transport Header) + Payload 包含OpCode、目的QP、PSN等 LRH (Local Route Header) + BTH + Payload 包含SL、VL、LID等(子网内转发依据) GRH (Global Route Header) + LRH + BTH + Payload 跨子网时添加GRH,包含GID ICRC + VCRC + 物理编码 (8B/10B或64B/66B) 链路层尾部校验,保证传输完整性 发送端逐层添加头部,接收端逐层剥离

2.2 链路层:LID寻址与流控机制

链路层是IB交换机的核心工作层。它负责在同一子网内将数据包从源端口转发到目的端口。链路层的关键要素包括:

  • LID(Local Identifier):16位地址,由SM分配。每个IB端口至少有一个LID,交换机每个端口也有LID。子网内所有数据包转发均依据LID进行。
  • SL(Service Level):3位字段,用于区分服务等级。SL值映射到VL(Virtual Lane),实现不同流量类型的隔离与优先级调度。
  • VL(Virtual Lane):物理链路上的虚拟通道。IB链路支持最多16条VL(VL0~VL15),其中VL15专用于子网管理流量。VL机制实现了链路级流控——每条VL独立进行基于信用(Credit)的流控,避免某条VL的拥塞影响其他VL。
  • 流控机制:IB采用基于信用的流控。接收端为每条VL维护一个信用计数器,发送端只有在收到信用授权后才能发送数据。这种机制从硬件层面保证了不丢包。
实操视角:在Mellanox(现NVIDIA)交换机上,使用 ibstat 或 ibswitches 命令可以查看端口的LID、链路速率和状态。例如,ibstat 输出中的 "Port LID" 字段即为此端口的LID值。

2.3 网络层:GID与跨子网路由

当数据包需要跨越IB子网边界时,链路层的LID寻址不再适用,此时需要启用网络层。IB网络层的核心是GRH(Global Route Header),它携带128位的GID信息。GID由64位子网前缀 + 64位端口GUID组成,格式类似于IPv6地址。

IB路由器(Router)负责处理跨子网的数据包。路由器查找转发表(由SM或管理员配置),根据目的GID决定下一跳。值得注意的是,IB路由器并不像以太网路由器那样执行复杂的路由协议(如OSPF),而是依赖SM集中计算路径并下发转发表项。这种集中式路由模式简化了设备实现,但要求SM具备全局视图。

特性 链路层(L2) 网络层(L3)
地址格式 16位LID 128位GID(子网前缀+GUID)
转发范围 子网内部 跨子网
路径计算 SM计算,交换机线性转发 SM或管理员配置路由器转发表
头部类型 LRH GRH(附加在LRH之上)
典型设备 IB交换机 IB路由器

2.4 传输层:QP与可靠服务类型

传输层是IB协议栈中最体现“通道”思想的一层。它不关心数据如何路由,而是负责端到端的消息传递语义。传输层的核心对象是QP(Queue Pair,队列对)。每个QP由发送队列(SQ)和接收队列(RQ)组成,应用程序通过QP提交工作请求(WR),硬件异步完成数据传输。

IB定义了多种传输服务类型,最常用的是以下两种:

  1. 可靠连接(RC,Reliable Connection):两个QP之间建立一对一连接,支持RDMA读写操作,硬件保证数据包按序交付、不丢失、不重复。RC服务需要维护PSN(包序列号),并通过ACK/NACK机制实现可靠传输。
  2. 不可靠数据报(UD,Unreliable Datagram):类似UDP,一个QP可以向多个QP发送数据报,但不保证可靠交付。UD服务开销小,适合多播或简单请求-响应场景。

此外还有可靠数据报(RD)和不可靠连接(UC),但在实际部署中较少使用。传输层头部(BTH)包含关键字段:OpCode(标识操作类型,如RDMA_WRITE、SEND)、目的QP号、PSN(包序列号,用于排序与重传)。

常见误区:许多初学者将IB的“可靠连接”与TCP的可靠传输混为一谈。实际上,IB的RC可靠性由HCA硬件实现,不消耗CPU;而TCP的可靠性由操作系统协议栈软件实现。此外,IB的RC服务还支持RDMA读/写操作,允许一端直接访问对端内存,这是TCP完全不具备的能力。在IB网络中,RC服务通常用于存储网络(如NVMe over Fabrics)和MPI通信。

2.5 案例:一个RDMA写操作的完整旅程

假设节点A上的应用程序希望将一块数据直接写入节点B的内存(RDMA写)。整个过程涉及IB各层的协同工作:

1. 节点A应用调用 ibv_post_send(),提交RDMA_WRITE工作请求到QP的发送队列
2. HCA硬件从内存中读取数据,封装传输层头部(BTH,OpCode=RDMA_WRITE)
3. 添加网络层头部(LRH,目的LID=节点B端口LID;若跨子网则添加GRH)
4. 物理层编码后,数据包通过链路发送至交换机
5. 交换机依据LRH中的DLID查找转发表,将数据包从对应端口转发出去
6. 数据包到达节点B的HCA,硬件剥离LRH/BTH
7. 节点B的HCA根据BTH中的目的QP号,将数据直接DMA写入应用指定的内存地址
8. 节点B的HCA生成ACK包,沿原路径返回节点A,确认写入完成

整个过程无需节点A和节点B的CPU参与数据搬运,也无需操作系统内核介入。这正是IB能够实现微秒级延迟和数十Gbps吞吐量的根本原因。

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

  • 误区一:认为IB交换机是三层设备。实际上,IB交换机通常只处理链路层(L2),不解析网络层头部。跨子网必须依赖独立的路由器设备。IB交换机的“路由”是指基于LID的转发,而非IP路由。
  • 误区二:混淆SL与优先级。SL是服务等级标识,而VL是物理虚拟通道。SL到VL的映射由SM配置,同一SL可以映射到不同VL,反之亦然。拥塞控制基于VL而非SL。
  • 误区三:忽视SM的作用。IB子网离开SM无法工作。SM负责发现拓扑、分配LID、计算路径并下发交换机的线性转发表。生产环境中SM通常运行在冗余服务器上(主备模式),使用opensm或厂商管理软件。
  • 误区四:将PSN与TCP序号混淆。PSN是传输层用于可靠传输的包序号,初始值在QP建立时协商,每个数据包递增。但PSN的校验和重传机制完全由硬件实现,且RC服务还支持选择性重传,与TCP的累积确认机制不同。
复盘总结:IB的分层设计始终围绕两个目标:降低延迟和减少CPU开销。链路层的信用流控保证了无丢包,网络层的集中路由简化了设备复杂度,传输层的QP模型实现了硬件级可靠传输。理解这些设计动机,比死记硬背头部字段更有助于掌握IB架构的精髓。下一节将深入探讨子网管理器SM如何发现拓扑并计算路径,这是IB网络运维中最核心的环节。