支持增量更新的ACL实现有哪些

97 阅读4分钟

在高性能网络系统(如 DPDK、NFV、智能网卡、负载均衡器)中,分类器(Classifier) 用于对数据包进行多字段匹配(如五元组、VLAN、协议等),以执行 ACL、策略路由、服务链等操作。

传统分类器(如 DPDK rte_acl)存在一个关键问题:不支持增量更新——每次规则变更都需要重建整个规则树(Trie),开销大,影响实时性。

因此,支持增量更新的分类器成为高性能系统的重要需求。以下是目前主流的、支持增量更新的分类器技术与实现:


✅ 一、FD.io VPP 的 Classify 模块

特点:

  • 原生支持增量更新
  • 基于 hash + trie + mask 的混合匹配机制;
  • 规则以“表(table)”形式组织,支持动态添加、删除、修改;
  • 支持多维字段匹配(类似 ACL);
  • 可与 vpp-agent 集成,实现 API 驱动的策略下发;
  • 性能高,适用于 10G/100G 网络。

增量更新机制:

  • 每个分类表维护一个规则链;
  • 新规则插入时,仅更新哈希索引或 Trie 节点;
  • 不需要重建整个结构;
  • 支持优先级排序和通配符匹配。

🔗 官网:fd.io/


✅ 二、Open vSwitch (OVS) 的 cls_rule / flow table 机制

特点:

  • OVS 使用 flow-based classification,每条流是一个规则;
  • 支持通过 ofproto 模块动态增删改查流表项;
  • 在用户态(OVS-DPDK)或内核态均可运行;
  • 使用 megaflow 技术进行通配符匹配优化;
  • 支持 OpenFlow 协议,天然支持增量更新。

增量更新机制:

  • 新规则通过 OpenFlow FLOW_MOD 消息下发;
  • OVS 增量插入到 flow table;
  • 使用 (wildcard, mask) 机制支持模糊匹配;
  • 查找使用 (tuple, mask) 哈希 + 掩码比较。

🔗 官网:www.openvswitch.org/


✅ 三、Intel DPCP(Dynamic Policy Control Plane) + DPDK

背景:

Intel 提出的 DPCP 架构 是为 5G UPF、边缘计算设计的高性能策略执行框架。

特点:

  • 控制面与数据面分离;
  • 数据面使用 增量式规则编译器
  • 支持对 PCC(Policy and Charging Control)规则的动态增删;
  • 使用 prefix-sharing trie 或 decision tree 支持高效更新;
  • 可结合 SmartNIC 实现硬件 offload。

增量机制:

  • 规则变更时,只重建受影响的子树;
  • 使用版本号和引用计数管理旧规则;
  • 数据面原子切换规则集。

✅ 四、BPF / XDP Classifier(Linux eBPF)

特点:

  • Linux 内核的 eBPF 支持高性能包分类;
  • XDP(eXpress Data Path)可在网卡驱动层执行 BPF 程序;
  • BPF map(如 BPF_MAP_TYPE_HASHBPF_MAP_TYPE_LPM_TRIE)支持运行时更新
  • 新规则通过 bpf() 系统调用插入;
  • 零拷贝、高吞吐,适合 DDoS 防护、DDoS sinkhole、微隔离等场景。

增量更新示例:

c
深色版本
bpf_map_update_elem(&acl_table, &key, &value, BPF_ANY);

✅ 可在不中断数据面的情况下动态添加 ACL 规则。

🔗 工具:bpftool, Cilium, Facebook Katran


✅ 五、自研增量分类器(常见于商业设备)

许多商用负载均衡器、防火墙(如 F5、Palo Alto、华为、H3C)使用自研分类器,支持增量更新,典型技术包括:

1. Tuple Space Search (TSS) with Incremental Update

  • 将规则映射到多维空间;
  • 使用 grid-of-tries 或 hypercuts
  • 支持局部重建,避免全局 recompile。

2. Decision Tree / Binary Search Tree

  • 构建基于字段的决策树;
  • 新规则插入时,只修改受影响分支;
  • 支持优先级排序和通配符。

3. Prefix Sharing + Incremental Trie

  • 多条规则共享相同前缀;
  • 插入新规则时,只扩展叶子节点;
  • 使用 reference counting 管理共享节点。

✅ 六、学术/研究型增量分类器

以下是一些在论文中提出并部分落地的算法:

算法特点是否支持增量
HyperCuts多维空间划分✅ 支持局部更新
RFC (Recursive Flow Classification)递归划分字段
EffiCuts优化 HyperCuts,降低内存
SmartCuts基于机器学习的划分
Grid-of-Tries二维/三维 Trie 网格✅ 局部更新
P-ACL前缀共享 ACL

这些算法已被部分集成到 VPP、OVS 或商业设备中。


✅ 七、对比总结

分类器是否支持增量更新更新粒度性能适用场景
DPDK rte_acl❌ 否全量重建小规则集、静态策略
VPP Classify✅ 是单条规则NFV、5G UPF、路由器
OVS Flow Table✅ 是单条流/规则SDN、虚拟交换机
eBPF/XDP✅ 是map entry极高内核级 ACL、DPI
DPCP + DPDK✅ 是策略规则5G、边缘计算
自研 TSS/Decision Tree✅ 是规则级商用防火墙、LB

✅ 结论

如果你需要一个支持增量更新的分类器,推荐以下选择:

场景推荐方案
开源 NFV 路由器/交换机FD.io VPP Classify
虚拟化环境 SDNOpen vSwitch (OVS)
Linux 内核级高性能过滤eBPF / XDP
5G UPF、边缘策略DPCP + DPDK
自研高性能设备Grid-of-Tries / HyperCuts / Decision Tree

💡 趋势:现代网络系统越来越依赖支持增量更新的分类器,以实现动态策略、实时安全响应和云原生弹性。

这些技术正在推动网络从“静态配置”向“动态智能”演进。