InfiniBand架构概述:网络层次、核心组件与链路层定位

核心原理:从“通道”视角理解InfiniBand网络层次

InfiniBand并非简单的“高速以太网”,而是一种通道导向(Channel-Oriented)的互联架构。与TCP/IP网络中“逐跳存储转发”的报文交换不同,IB网络在通信前先建立一条逻辑上的通道(Channel),数据以消息(Message)为单位,在通道两端的主机内存之间直接流动。这种设计将网络协议栈的职责大幅简化——中间节点(交换机)不需要理解消息内容,只需按本地路由头(LRH)中的信息完成转发即可。

从层次模型看,IB协议栈自上而下分为四层:应用层(如RDMA verbs接口)、传输层(负责端到端可靠性与消息分段)、网络层(全局路由,类似IP地址)、链路层(负责物理链路上的数据搬运)。链路层是IB协议栈中最贴近硬件的“承载者”,它定义了数据如何在一条物理链路上编码、组帧、流控与错误检测。理解链路层,必须先看清它在整个IB网络中的“承上启下”位置。

关键认知:IB网络中的“链路”不是指一根线缆,而是指两个端口之间完整的物理+逻辑通路。链路层协议管理的是这条通路上所有比特的流动规则。

IB协议栈分层 应用层 RDMA verbs / 消息语义 传输层 QP / 可靠连接 / 分段重组 网络层 全局路由 (GRH) / 子网间寻址 链路层 LRH / 流控 / 错误检测 / 组帧 ← 本课程核心焦点 物理层 信号编码 / 电气特性 / 连接器 IB网络核心组件与连接 HCA 节点 A CPU + 内存 HCA (主机通道适配器) HCA 节点 B CPU + 内存 HCA (主机通道适配器) IB 交换机 根据 LRH 转发 不解析上层内容 IB 路由器 跨子网通信 解析 GRH + LRH 子网 1 (LID 寻址域) 链路 (Link) 链路 跨子网 链路层数据单元 (Packet) 关键字段 LRH GRH* 传输头 Payload (数据) ICRC VCRC * GRH 仅在跨子网时存在;LRH 由链路层生成,交换机只读此头

核心组件:HCA、交换机与路由器的分工

IB网络中的设备角色非常清晰,每种组件只处理自己职责范围内的协议层,这种“分工明确”的设计是IB高性能的关键原因之一。

  • HCA(Host Channel Adapter,主机通道适配器):相当于服务器上的“网卡”,但它远比以太网卡智能。HCA直接挂载在CPU的内存总线上(如PCIe),支持RDMA(远程直接内存访问)——应用层数据可以不经过CPU拷贝,直接从一台主机内存搬到另一台主机内存。HCA是链路层协议的“发起者”和“终结者”:发送时负责构造LRH、计算VCRC(变长CRC);接收时负责校验、剥离LRH并向上层递交。
  • IB交换机(Switch):工作在链路层的转发设备。它只读取数据包中的LRH(本地路由头),根据其中的DLID(目的LID)字段将包从对应端口转发出去。交换机不解析传输层或网络层内容,因此转发延迟极低(通常几百纳秒)。交换机还参与链路层的流控——通过信用机制(Credit)防止数据丢失。
  • IB路由器(Router):工作在网络层,用于连接多个IB子网(每个子网有独立的LID空间)。路由器需要同时解析GRH(全局路由头)和LRH:先根据GRH中的GID决定转发到哪个子网,再在出口链路上重新封装新的LRH。路由器是IB网络中“最重”的设备,延迟远高于交换机。

记忆锚点:HCA是“端点”,交换机是“子网内的搬运工”,路由器是“子网间的桥梁”。链路层协议覆盖HCA与交换机之间的所有交互规则。

方法流程:数据包在链路层的一次“旅程”

以两台服务器通过一台交换机通信为例,链路层的工作流程如下:

  1. 发送端HCA:从传输层收到已分段的消息后,在数据包最前面添加LRH(包含VL、SL、DLID、SLID等字段),并在包尾追加VCRC(变长循环冗余校验)。
  2. 物理层编码:链路层将完整数据包交给物理层,物理层进行8B/10B或64B/66B编码后,按链路速率逐比特发送。
  3. 交换机接收:交换机端口收到数据后,物理层解码,链路层检查VCRC。若校验通过,则提取LRH中的DLID,查询转发表(由子网管理器SM预先配置),确定输出端口。
  4. 交换机转发:交换机在输出端口重新生成VCRC(因为VL可能改变),将数据包从目标端口发出。注意:交换机不修改LRH中的SLID和DLID(除非是子网管理包)。
  5. 接收端HCA:收到数据包后,链路层校验VCRC,剥离LRH,将剩余部分交给网络层/传输层处理。若VCRC错误,则丢弃该包并可能发送错误信号(如Bad P_Key或CRC错误计数)。

链路层核心职责清单:

  • 组帧与解帧:添加/剥离LRH、VCRC
  • 流控:基于信用的链路级流控,防止缓冲区溢出
  • 错误检测:VCRC校验、错误计数与上报
  • 虚拟通道(VL)调度:保证QoS与死锁避免
  • 链路状态管理:初始化、链路训练、错误恢复

案例场景:集群中链路层故障的典型表现

假设一个IB集群中,某台服务器与交换机之间的链路出现信号劣化(如光模块衰减)。此时链路层会表现出以下特征:

现象 链路层原因 排查工具
ping延迟偶尔飙升 链路重传(链路层重传机制触发) ibstat 查看LinkDownedCounter
RDMA操作超时 VCRC错误导致数据包被静默丢弃 ibqueryerrors 检查端口CRC错误
交换机端口状态变为“Polling” 物理层信号丢失,链路层状态机回退 ibswitches 查看端口状态

这类问题在以太网中往往表现为“丢包率上升”,但在IB中由于链路层流控和重传机制,应用层可能只感知到“变慢”而非“断连”。这正是链路层设计“隐藏复杂性”的体现。

误区与复盘:对IB链路层的常见误解

误区1:认为IB交换机是“三层设备”。实际上,IB交换机是纯二层设备(链路层),它不处理IP地址,只处理LID。IB中的“路由”概念与TCP/IP完全不同——IB子网内用LID(16位地址),子网间才用GID(128位,类似IPv6)。

误区2:混淆“链路层重传”与“传输层重传”。IB链路层有基于信用的流控,但不负责端到端重传。可靠传输(如RC服务)由传输层QP完成。链路层只保证“一条链路上不因拥塞丢包”,不保证“端到端不丢包”。

误区3:忽视VCRC与ICRC的区别。VCRC(变长CRC)由链路层计算,覆盖整个数据包,每经过一个交换机都会重新计算;ICRC(不变CRC)由发送端HCA计算,覆盖除LRH外的所有字段,接收端HCA校验,用于检测数据在传输过程中是否被交换机或链路篡改。两者缺一不可。