软件定义安全边界 (SDP) 深度系列
1. 深入内核:封装全路径对比
1.1 OVS 传统流表路径 (Heavyweight)
- OVS Datapath:执行基于 OpenFlow 的多级哈希匹配。
- 即时封装 (Immediate Encap):数据包在离开 OVS 模块进入 IP 栈前,就已经完成了内存重新分配与头部物理拷贝。在高并发下容易触发
skb_cow导致的性能抖动。
1.2 eBPF 现代元数据路径 (Lightweight)
- TC Egress Hook:利用 BPF Map 瞬间完成 TID 识别。
- 延迟封装 (Delayed Encap):通过
bpf_skb_set_tunnel_key设置内核内部元数据ip_tunnel_info。 - 价值:数据包在大部分内核路径中保持原始大小,仅在驱动发出前一步由隧道设备完成包头拼凑,极大地优化了内存开销。
2. skb 在不同路径下的变形全过程 (ASCII)
2.1 eBPF 路径变迁
阶段 1: 租户发出 [ Ethernet | IP | Payload ] (skb->mark = 0)
阶段 2: TC Ingress -> skb->mark = 0x64 (身份注入)
阶段 3: TC Egress -> skb->_skb_refdst = [ VNI:100, Dst:1.1.1.1 ] (标记隧道)
阶段 4: 驱动封装 -> [ Outer_UDP | VXLAN | Inner_Packet ] (物理封装)2.2 OVS 路径变迁
阶段 1: OVS DP -> skb->cb[OVS_CB] = [ tun_id: 100 ] (存储在控制块)
阶段 2: Vport -> [ Outer_UDP | VXLAN | Inner_Packet ] (即时头部拷贝)3. 拦截策略与全栈可观测性
- 身份标识:eBPF 使用标准的
skb->mark;OVS 依赖私有结构体,导致 DeepFlow 可观测性 在 OVS 下读取难度更高。 - 执行效率:eBPF 配合 DPDK 旁路技术,可支撑 100G 级别的安全过滤。