在网络芯片中,IPv4 地址的最长前缀匹配(LPM)是转发流水线的核心功能,要求每时钟周期完成一次甚至多次查找,同时兼顾功耗、芯片面积和表项更新速度。硬件上主要有三大类实现方式:TCAM 全并行匹配、基于 SRAM 的流水线树/多分支 Trie,以及多级哈希混合方案。下面逐类详细展开。
- TCAM(三态内容寻址存储器)全并行匹配
1.1 工作原理
TCAM 是专门为 LPM 设计的硬件结构,它在一个时钟周期内把输入 Key 与所有存储的表项同时比较。
每个 TCAM 单元存储 3 种值:0、1、X(无关位)。一条路由前缀 Prefix/Len 在 TCAM 中的存储形式为:
· Data = {Prefix, 0...0}(32 位补齐)
· Mask = {Len 个 1, (32-Len) 个 0},掩码位为 1 时要求精确匹配,为 0 时与 X 等效。
比较逻辑:
```
match[i] = (Key & Mask[i]) == (Data[i] & Mask[i])
```
当 Key 与某条表项的 Mask 无关位无关,仅比较前缀部分。
1.2 优先级编码器实现"最长"
如果多条表项同时匹配,必须返回最长的前缀。实现方式不是计算掩码长度,而是通过表项物理顺序保证优先级:
将路由前缀按掩码长度降序排列在 TCAM 中(即 /32 在最顶端,/0 在最底端)。所有匹配线接入一个优先级编码器,它输出匹配线中地址最小(索引最靠前)的那个。因为长前缀排在低地址,所以自然选出了最长匹配。这一过程纯组合逻辑完成,延迟极低。
1.3 硬件成本与局限性
· 比较单元巨大:每个 TCAM 位需要 16 个晶体管(普通 SRAM 位仅需 6 个),功耗极高。
· 容量受限:大容量 TCAM 占据大量芯片面积,典型高端芯片也就存放几十万条 IPv4 路由,难以承担 100 万+ 全网路由表。
· 更新复杂:插入/删除必须维持掩码长度降序,可能引起大量表项搬移,导致更新速率受限(通常需硬件重排序管理器)。
· 并行度:虽完美支持单周期查找,但要支持多端口查找需复制多套 TCAM,面积直接翻倍。
- 基于 SRAM 的多比特 Trie 流水线结构
为了摆脱 TCAM 的限制,业界主流做法是用普通 SRAM 存储经过巧妙编码的多比特 Trie(Multi-bit Trie),并将树的层级映射到硬件流水线。
2.1 多比特 Trie 原理
将 32 位 IP 地址按 k 比特一组(如 k=4、8)切割成多个步长(Stride)。一个前缀在标准二叉树中的每个节点,被扩展成包含 2^k 个分支的子树节点。
硬件查找过程:
· 第 1 级用 IP[31:32-k] 索引 SRAM,取出节点信息;
· 节点信息包含:子树指针(下一级 SRAM 的基地址)和前缀匹配结果(若当前节点本身代表一条路由前缀,则记录下一跳);
· 再用 IP 的下 k 位作为偏移,加上基地址,读出第 2 级节点,依此类推。
关键是无论前缀如何分布,每步都只读一次 SRAM,且路径固定为 32/k 级,延迟确定。
2.2 经典硬件实现:Tree Bitmap(树位图)
Tree Bitmap 是一种高效的节点编码方式,将子节点指针和前缀结果压缩存储于一个固定宽度的 SRAM 字中,便于硬件流水线直接使用。
节点结构
一个 Tree Bitmap 节点包含:
· Internal Bitmap:记录当前节点以下(sub‑trie 内部)哪些深度位置存在前缀。
· Extending Paths Bitmap:记录哪些分支有子节点(需要继续查下一级)。
· Result Array Pointer:指向一个存放下一跳结果的数组,结合 Internal Bitmap 可计算命中结果的偏移。
· Child Node Pointer:子节点块的基地址。
硬件查找过程(以 k=4,32 位分 8 级为例)
流水线第 stage 级执行:
-
输入:级数 stage,当前节点基地址 ptr,IP 分段 seg(4 位)。
-
读取 SRAM:node = SRAM[ptr + seg](实际上 ptr 是对齐的块基地址,加上 seg 偏移立即索引子树分支)。
-
前缀匹配检查:利用 node.InternalBitmap 检查从根到该分支的路径上是否有前缀命中。通常有一个优先级查找逻辑(如找路径上 mask 最长的命中 bit),如果存在,更新临时下一跳 best_nhp。
-
判断是否继续:若 node.ExtendingBitmap 中对应 seg 位为 1,说明该分支有更深子树,计算下一级地址:
```
child_ptr = node.ChildPtr + popcount(ExtendingBitmap & ((1<<seg)-1)) * NodeStrideSize
```
popcount 硬件实现为一个很小的组合逻辑,用于跳过不存在的分支。
若为 0,则提前终止,流水线将该包标记为完成,保留 best_nhp。
- 流水线传递 child_ptr 和更新后的 best_nhp 给下一级。
最终,经过最多 8 级流水线,输出包携带的 best_nhp 即是最长匹配结果。
2.3 优势与代价
· 容量/功耗:仅使用标准 SRAM,功耗远低于同容量 TCAM,可轻松放 1M+ 条目。
· 吞吐率:流水线每周期接受一个新包,实现每时钟周期 1 次查找(甚至可并行多核)。
· 更新:插入/删除只需修改受影响的子树节点,重算 Bitmap,支持高速批量更新。
· 延迟:流水线深度带来固定 8~10 周期延迟(对于管线化转发可接受)。
- 哈希与分段直接查找的混合方案
3.1 DIR‑24‑8 经典架构
将 IPv4 地址分成高 24 位和低 8 位两部分,利用前缀分布的长尾特性:绝大多数前缀长度 ≤ 24。
· 第一级(TBL24):一张 2^24 入口的直接寻址表(实际用哈希表压缩,因为 16M 入口太大;但早期 FPGA 实现会分配完整大块,或用两层 16‑8 分割)。
每个 TBL24 条目存储:
· best_nhp:前缀长度 ≤ 24 时,到这个 24 位前缀为止的最长匹配下一跳。
· long_ptr:如果存在长度 > 24 的更具体前缀,指向第二级表。
· 第二级(TBLlong):
对于前缀长度 > 24 的路由,将这些前缀的低 8 位组织成一个小型多比特 Trie 或直接哈希表(最多 256 个分支)。查找时,如果第一级指示有 long_ptr,就根据 IP 低 8 位索引第二级表,命中则覆盖 best_nhp。
硬件流水线实现
· Stage 1:用 IP[31:8] 作为地址读 TBL24 SRAM,获得 best1 和 ptr2。
· Stage 2:并行检查 ptr2 有效性,若有效则用 {ptr2, IP[7:0]} 读 TBLlong SRAM,得 best2。
· Stage 3:final_nhp = ptr2 ? best2 : best1(直接 MUX 选择)。
该方法电路简洁,只用两块 SRAM 和简单控制逻辑,功耗极低。缺点是对奇长前缀分布敏感,若大量前缀集中在 /25~/32 且 disjoint,则 TBLlong 可能膨胀,但可通过进一步哈希压缩。
3.2 分层哈希 + Bloom Filter(SAIL 等)
某些架构按前缀长度分层(将 /0~/32 分成若干组,每组单独开哈希表),并利用片上 Bloom Filter 过滤掉绝大多数不存在的查询,随后才去访问片外或深流水 SRAM。
查找时,同一 IP 对各层并行计算哈希,经 Bloom Filter 筛选后仅命中层参与比较,选取掩码最长层的结果。这类似于 TCAM 的并行长度匹配,但用哈希实现,适合大规模 IPv6,同样可应用于 IPv4。
- 实际芯片中的混合架构
现代交换机/路由器 ASIC(如 Broadcom XGS/DNX 系列、Barefoot Tofino、Cisco NLB)普遍融合上述技术,分配策略大体为:
· TCAM 用于小容量、高灵活性表(如 ACL、PBR、少数高优先级路由)。
· SRAM 算法查找引擎 承担大规模路由表:
· Tofino 的 MAU(可编程匹配‑动作单元)可在每个 Stage 中使用 SRAM 实现任意 Trie 算法(用户用 P4 编写),或内置 Tree Bitmap 引擎。
· Broadcom 的 L3_DefIP 表底层就是多比特 Trie 或 DIR‑24‑8 变形,通过 SDK 向用户透明。
· 硬件支持快速更新算法,部分芯片用后台硬件线程重算 Trie 节点位图,做到毫秒级 BGP 更新收敛。
- 方案对比与总结
特性 TCAM SRAM 多比特 Trie (Tree Bitmap) DIR‑24‑8 混合
查找延迟 1 周期(极低) 流水线深度 × 周期(固定,如8周期) 2-3 周期
吞吐率 每周期1次(可并行多份) 流水线化每周期1次,易扩展多引擎 极高,SRAM 带宽大
容量 受功耗面积限制(几十万条) 数百万条 支持大规模,依赖高效哈希压缩
功耗 极高 低 低
更新效率 复杂,需排序搬移 局部更新,可在线重算位图 仅影响分块,更新快
灵活性 支持任意掩码、范围匹配 仅精确前缀;其他匹配需额外 TCAM 仅精确前缀
典型应用 ACL、QoS、小容量路由 主干路由器 FIB 数据中心/企业交换机 LPM
- 未来趋势
· 算法与可编程性结合:P4 允许用户自定义查找算法,芯片提供可配置的 SRAM/TCAM 策略。
· 更深的流水线与 Chiplet 集成:用 2.5D/3D 封装将大容量 SRAM 堆叠在逻辑 Die 上,进一步扩大 Trie 规模。
· AI‑guided 前缀压缩:在线学习路由分布,动态调整步长和压缩参数,减少 SRAM 占用。
· 统一 LPM/LPM6 引擎:新一代芯片对 IPv4 和 IPv6 采用相同树位图/哈希引擎,仅调整步长。
综上,硬件 LPM 实现已从单一 TCAM 全面演进到以流水化多比特 Trie 为核心、哈希和 TCAM 作为补充的异构架构,用精巧的数据结构编码换取 SRAM 的巨大容量和低功耗,支撑现代网络线速转发。