3. 网络虚拟化基础与卸载需求分析
在数据中心与云原生环境中,网络虚拟化把物理网络抽象成大量彼此隔离的虚拟网络,使租户可以自由定义地址空间、拓扑与策略,而不必关心底层交换机与网卡的物理连接。承载这些虚拟网络的关键技术就是 Overlay 隧道协议,其中 VXLAN、GENEVE 与 NVGRE 是最常见的三种。理解它们的封装格式、控制面差异以及 vSwitch/vRouter 的数据路径,是判断哪些功能可以卸载到 DPU、哪些必须留在主机侧的前提。
Overlay 协议:VXLAN、GENEVE 与 NVGRE
Overlay 的核心思想是"MAC in UDP/IP"或"L2 over L3":把原始的二层以太帧整体作为载荷,再套上一层外层 IP/UDP 头,通过底层三层网络转发。VXLAN 使用 UDP 目的端口 4789,外层头为 8 字节,包含 24 位 VNI(VXLAN Network Identifier),可支持约 1600 万个隔离网段,足以满足多租户需求。GENEVE 同样基于 UDP,但采用 TLV(Type-Length-Value)可变长选项,能携带更多元数据,例如安全组标签、流标识、策略上下文,因此被 OVN、部分云平台作为默认封装。NVGRE 则使用 GRE 协议(IP 协议号 47),以 24 位 TNI 标识租户,早期在 Hyper-V 环境中使用较多,但由于 GRE 对中间设备兼容性和 ECMP 哈希支持不如 UDP,如今部署比例已明显下降。
三者的共同点是:封装与解封装都需要计算校验和、查表、改写头部,这些操作在纯软件 vSwitch 中会消耗大量 CPU 周期。以 25Gbps 线速为例,若每个包都经过内核 OVS 的完整流水线,单核往往只能处理几 Gbps,因此把隧道封装/解封装卸载到具备硬件加速能力的 DPU 上,是提升吞吐、降低主机 CPU 占用的直接手段。
vSwitch 与 vRouter 模型
主机侧的虚拟交换通常由 Open vSwitch(OVS)实现,它既是 vSwitch 也是 vRouter:通过内部端口连接虚拟机、容器与物理网卡,通过隧道端口建立 Overlay 连接,通过流表实现转发、ACL、NAT 等功能。OVS 的数据路径分为内核态 datapath 与用户态 ovs-vswitchd,前者负责快速转发,后者负责慢路径与流表下发。当报文首次到达时,内核 datapath 未命中,会送到用户态查询 OpenFlow 流表,命中后把动作缓存回内核,后续同流报文直接在内核完成。这个"首包上送、后续缓存"的机制决定了:流表规模越大、首包越多,CPU 开销越高,而 DPU 卸载正是把这条路径整体下沉到硬件。
vRouter 则更强调三层转发与路由功能,常见于 NFV 场景,例如在主机内实现 VRF、动态路由、NAT 网关。它与 vSwitch 的边界并不绝对,OVS 也能做三层转发,但 vRouter 通常具备更完整的路由协议栈。理解这一模型有助于区分:哪些是纯转发面(适合卸载),哪些是控制面或复杂有状态处理(通常保留)。
OpenFlow 与 OVS 流水线
OVS 的转发逻辑由 OpenFlow 流表描述,典型流水线包括 ingress 处理、ACL 表、学习表、转发表、egress 处理等阶段。每个报文从 table 0 开始,按优先级匹配流表项,执行动作(output、drop、mod、resubmit 等),再跳转到下一张表。以 VXLAN 场景为例,一个简化流程是:table 0 识别隧道端口并解封装,table 10 做安全组匹配,table 20 查 MAC 学习表决定出端口,table 30 执行封装并输出到物理口。流表项数量、匹配字段宽度、动作复杂度直接决定软件转发性能。
在卸载设计中,需要把这条流水线映射到 DPU 的硬件表项。通常做法是:把高频、规则简单的流(如隧道封装、五元组 ACL、VNI 转发)编译为硬件表;把低频、复杂或需要上送控制器的流保留在软件慢路径。判断依据包括:匹配字段是否被硬件支持、动作是否可硬件实现、流表是否频繁变化、是否需要连接跟踪等。
可卸载与不可卸载功能的识别方法
识别过程可以按"数据面 vs 控制面""无状态 vs 有状态""高频 vs 低频"三个维度展开。隧道封装/解封装、校验和、VNI 查表、简单 ACL 属于典型可卸载项;BGP EVPN 路由学习、OVSDB 配置同步、OpenFlow 控制器交互属于控制面,通常不卸载;NAT 端口分配、负载均衡健康检查、防火墙会话属于有状态服务,是否卸载取决于硬件是否支持连接跟踪表;virtio-net 后端与 vhost-user 协商涉及主机与虚拟机的内存共享,一般保留在主机或 DPU 控制核。
卸载需求分析示例
假设某云平台单主机运行 40 个虚拟机,每台虚拟机平均产生 2Gbps 东西向流量,其中 70% 需要 VXLAN 封装。若全部由软件 OVS 处理,按每 Gbps 消耗约 1.5 个 CPU 核估算,仅隧道封装就需要约 84 个核,显然不可行。把 VXLAN 封装/解封装、校验和、VNI 转发卸载到 DPU 后,主机 CPU 仅需处理控制面与少量慢路径,预计可释放 60% 以上的计算资源。这个估算属于示例性假设,实际数值需以具体平台压测为准。
| 功能 | 数据面/控制面 | 状态性 | 建议 |
|---|---|---|---|
| VXLAN/GENEVE 封装解封装 | 数据面 | 无状态 | 卸载到 DPU |
| 外层校验和计算 | 数据面 | 无状态 | 卸载到 DPU |
| VNI 查表转发 | 数据面 | 有限状态 | 卸载到 DPU |
| 五元组 ACL | 数据面 | 无状态 | 卸载到 DPU |
| BGP EVPN 路由学习 | 控制面 | 有状态 | 保留主机/控制核 |
| NAT 端口分配 | 数据面 | 有状态 | 视硬件能力而定 |
| vhost-user 协商 | 控制面 | 有状态 | 保留主机 |