深入浅出网卡负载均衡

一、负载均衡在网卡中的全维度应用解析

网卡中负载均衡是突破网络处理瓶颈、提升数据转发效率的核心能力,其依赖RSS技术实现报文的智能哈希分流,而二元组、三元组、五元组的哈希字段选择,是流量分发颗粒度、均衡性的核心决策依据。

网卡对报文的负载均衡核心覆盖数据链路层、网络层、传输层等,仅低流量控制面报文不做负载均衡,对于隧道报文,则可以根据配置选择是由隧道层信息做负载均衡,还是由隧道内层信息做负载均衡。

而二元组、三元组、五元组的哈希字段选择,仅为业务场景定制,无优劣之分。

二、负载均衡实现步骤

所有支持负载均衡的报文,均由网卡硬件独立完成,不同网卡仅在哈希算法、队列数量、映射规则、硬件加速能力上有所差异。

负载均衡步骤如下:

  1. 硬件解析:网卡接收报文后,由专用报文解析引擎提取报文中制定字段;
  2. 哈希计算:根据配置的元组规则,对提取的字段执行Toeplitz/CRC32/SIPHASH哈希算法,生成固定长度的哈希值;(其中主流为Toeplitz哈希,因为其低开销、高分散性、抗碰撞的特性而被广泛使用)
  3. 队列映射:哈希值通过可配置RSS重定向表,映射到网卡的多个接收队列;
  4. 多核分发:接收队列于服务器CPU核心/核组绑定,实现流量在多CPU核心间的均衡分发,避免单核心网络处理瓶颈;

三、各元组优势、局限性及典型应用场景

元组类型

核心优势

局限性

典型应用场景

二元组

  1. 哈希计算最简单,网卡硬件开销最低;
  2. 同一 IP 对的所有流量均分发至同一队列;
  3. 适配IP级别的流量聚合;

均衡性最差,单一 IP 对的大流量易造成单队列/单核心瓶颈;

对四层信息不可用或不需要端口级区分的场景

三元组

  1. 兼顾处理效率和均衡性,行业最通用配置;
  2. 聚合同一 IP 对的同协议流量,会话粘性适中;
  3. 哈希计算开销低,适配绝大多数通用场景;

单一 IP 对的高并发同协议流量(如单 IP 高并发 TCP)易造成单队列瓶颈;

IP分片报文(非首片)、纯IP协议流量(如GRE、ICMP)

五元组

  1. 哈希粒度精准,唯一标识单个网络会话,均衡性极佳;
  2. 可分流单 IP 对的多端口高并发流量,解决单队列瓶颈;
  3. 适配传输层精细化流量控制;

会话粘性弱,同一客户端的不同端口请求可能分发至不同队列;

非分片TCP/UDP报文(绝大多数普通流量)

四、一句话总结负载均衡

网卡级负载均衡通过将流量按不同粒度的哈希分散到多核CPU并行处理,在保障数据流有序的前提下最大化系统吞吐量并降低CPU负载。

二元组(源IP+目的IP):最粗粒度,仅依赖IP地址分发,适用于纯IP转发或端口信息缺失的场景,但同一对IP间的所有流量(无论多少连接)都会发往同一处理单元,易导致负载不均;

三元组(源IP+目的IP+协议号):在二元组基础上区分不同协议(如TCP与ICMP),主要用于IP分片报文或纯协议流量,确保同一报文的所有分片被送往同一处重组;

五元组(源IP+目的IP+源端口+目的端口+协议号):最细粒度,达到连接级分发,能将同一对IP间的多个连接分散到不同CPU核心,实现高度并行处理,同时保证同一TCP/UDP连接的所有报文不发生乱序,是当前主流负载均衡的基础;