mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
3343 字
10 分钟
系列导读
2026-01-28

系列简介#

eBPF(extended Berkeley Packet Filter)是 Linux 内核近十年来最具革命性的技术之一。它允许你在不修改内核源码、不加载内核模块的前提下,安全地在内核中运行自定义逻辑——就像给内核装上了”可编程的插件系统”。从网络数据包的高性能处理(XDP/TC),到安全策略的实时执行(LSM),再到全链路可观测性(bpftrace/BCC),eBPF 正在重新定义人与内核交互的方式。

本系列从 eBPF 的底层原理出发,逐步构建完整的技术认知体系:虚拟机指令集如何工作?验证器如何保证安全?Map 如何在内核态与用户态之间传递数据?CO-RE 如何实现”一次编译到处运行”?XDP 为什么能达到每秒数千万包的处理能力?Cilium 如何用 eBPF 替代 kube-proxy?eBPF 与 WebAssembly 的融合会带来什么?在生产环境中如何调试和优化 eBPF 程序?

每一章都配有可在你自己的 Linux 系统上验证的实践操作,让你从「听说过 eBPF」进阶到「能用 eBPF 解决真实问题」。

场景驱动阅读路线#

以下 5 条路线从你日常遇到的真实问题出发,按”你需要什么→eBPF 怎么实现”的顺序串联章节。每条路线可独立阅读,前置依赖已在路线内标注。

路线总览#

flowchart TB subgraph 路线A["路线A:网络性能优化"] A1[Ch1 eBPF全景] --> A2[Ch5 Hook点] A2 --> A3[Ch7 XDP] A3 --> A4[Ch8 TC] A4 --> A5[Ch9 eBPF网络] A5 --> A6[Ch12 Cilium] end subgraph 路线B["路线B:安全监控与防护"] B1[Ch1 eBPF全景] --> B2[Ch3 验证器] B2 --> B3[Ch5 Hook点] B3 --> B4[Ch10 eBPF安全] B4 --> B5[Ch16 内存管理] B5 --> B6[Ch18 综合实战] end subgraph 路线C["路线C:可观测性与排障"] C1[Ch1 eBPF全景] --> C2[Ch4 Map数据结构] C2 --> C3[Ch11 可观测性] C3 --> C4[Ch13 开发框架] C4 --> C5[Ch17 生产部署] C5 --> C6[Ch18 综合实战] end subgraph 路线D[" 路线D:Kubernetes 网络与安全"] D1[Ch1 eBPF全景] --> D2[Ch7 XDP] D2 --> D3[Ch9 eBPF网络] D3 --> D4[Ch12 Cilium] D4 --> D5[Ch15 K8s] D5 --> D6[Ch17 生产部署] end subgraph 路线E[" 路线E:eBPF 开发入门"] E1[Ch1 eBPF全景] --> E2[Ch2 虚拟机] E2 --> E3[Ch4 Map] E3 --> E4[Ch6 CO-RE] E4 --> E5[Ch13 开发框架] E5 --> E6[Ch18 综合实战] end style 路线A fill:#e3f2fd,stroke:#1565c0 style 路线B fill:#fce4ec,stroke:#c62828 style 路线C fill:#e8f5e9,stroke:#2e7d32 style 路线D fill:#f3e5f5,stroke:#6a1b9a style 路线E fill:#fff3e0,stroke:#e65100

路线A:网络性能优化#

场景:你的服务每秒需要处理百万级数据包,iptables 规则链越来越长导致延迟飙升,L4 负载均衡成为瓶颈——如何用 eBPF 突破内核网络栈的性能极限?

顺序章节为什么读这章
1Ch1 eBPF 全景建立 eBPF 整体认知——理解”内核可编程”的含义与能力边界
2Ch5 Hook 点理解 kprobe/tracepoint/uprobe 三大 Hook 机制——eBPF 程序挂载到内核的入口
3Ch7 XDP核心:XDP 在驱动层处理数据包,绕过内核协议栈,实现千万级 PPS
4Ch8 TCTC 层 eBPF 处理——比 XDP 更灵活,可访问 skb 完整信息
5Ch9 eBPF 网络eBPF 如何替代 iptables/kube-proxy,实现连接跟踪与 NAT
6Ch12 Cilium 深入Cilium 如何将 XDP+TC+连接跟踪组合为生产级网络方案

路线逻辑:从理解 eBPF 的 Hook 机制出发,先掌握 XDP 这一最快的数据包处理路径,再理解 TC 层的灵活处理,然后看 eBPF 如何重构网络功能,最终落地到 Cilium 的生产实践。


路线B:安全监控与防护#

场景:需要实时监控进程行为、检测异常系统调用、实现细粒度的安全策略——传统方案要么性能开销大(Audit),要么不够灵活(Seccomp),eBPF 如何提供新的安全范式?

顺序章节为什么读这章
1Ch1 eBPF 全景理解 eBPF 的安全模型——验证器如何保证内核安全
2Ch3 验证器核心:验证器是 eBPF 安全的基石——理解它如何阻止危险操作
3Ch5 Hook 点LSM BPF 如何在安全检查点挂载 eBPF 程序
4Ch10 eBPF 安全LSM BPF + Tetragon——eBPF 安全的完整方案
5Ch16 内存管理理解 eBPF 程序的内存限制与安全边界
6Ch18 综合实战构建完整的 eBPF 网络安全工具

路线逻辑:先理解 eBPF 自身的安全保证(验证器),再理解 eBPF 如何用于安全监控(LSM BPF),然后深入内存安全边界,最终通过实战构建安全工具。


路线C:可观测性与排障#

场景:凌晨 3 点服务延迟飙升,需要知道哪个函数耗时最长、哪个系统调用最频繁、哪个进程在疯狂分配内存——eBPF 如何实现零侵入的全链路可观测?

顺序章节为什么读这章
1Ch1 eBPF 全景理解 eBPF 可观测性的核心优势——零侵入、低开销、内核级
2Ch4 Map 数据结构Map 是数据传递的核心——Perf Buffer、Ring Buffer 如何高效传输追踪数据
3Ch11 eBPF 可观测性核心:bpftrace/BCC/Beyla——三大可观测性工具链
4Ch13 开发框架选择合适的开发框架——libbpf/Aya/Go eBPF 各有适用场景
5Ch17 生产部署生产环境中的性能开销、调试方法、灰度策略
6Ch18 综合实战端到端构建可观测+安全工具

路线逻辑:从理解数据传递机制(Map)出发,掌握可观测性工具链,选择开发框架,最后解决生产部署中的实际问题。


路线D:Kubernetes 网络与安全#

场景:Kubernetes 集群中 kube-proxy 的 iptables 模式在大规模 Service 下性能急剧下降,NetworkPolicy 无法实现 L7 策略——Cilium + eBPF 如何重塑 K8s 网络?

顺序章节为什么读这章
1Ch1 eBPF 全景理解 eBPF 在云原生场景的定位
2Ch7 XDPXDP 加速 NodePort 和 LoadBalancer Service
3Ch9 eBPF 网络eBPF 替代 kube-proxy 的完整方案
4Ch12 Cilium 深入核心:Cilium 的身份安全模型、Hubble 可观测性、ClusterMesh
5Ch15 eBPF 在 K8seBPF CNI 对比、Ambient Mesh、K8s 网络策略增强
6Ch17 生产部署K8s 集群中部署 Cilium 的最佳实践

路线逻辑:从 eBPF 网络基础出发,理解 kube-proxy 替代方案,深入 Cilium 架构,再看 K8s 集成与生产部署。


路线E:eBPF 开发入门#

场景:你想从零开始学习 eBPF 开发——从写第一个 eBPF 程序到选择开发框架,从理解指令集到掌握 CO-RE 可移植性。

顺序章节为什么读这章
1Ch1 eBPF 全景建立 eBPF 全局认知
2Ch2 虚拟机理解 eBPF 指令集与寄存器模型——写出正确的 eBPF 字节码
3Ch4 Map 数据结构掌握内核态与用户态的数据交互方式
4Ch6 CO-RE核心:BTF + libbpf 实现”一次编译到处运行”
5Ch13 开发框架libbpf/Aya/Go eBPF/bpftrace——选择最适合你的框架
6Ch18 综合实战从零构建完整的 eBPF 网络安全工具

路线逻辑:从底层原理(虚拟机、指令集)到数据交互(Map),到可移植性(CO-RE),到开发框架,最终通过实战综合运用。


路线交叉参考#

同一章节在不同路线中的关注点不同:

章节路线A 关注点路线B 关注点路线C 关注点路线D 关注点路线E 关注点
Ch1内核可编程能力边界安全模型零侵入优势云原生定位全局认知
Ch2指令集与寄存器
Ch3验证器安全保证
Ch4Ring Buffer 传输数据交互核心
Ch5kprobe/tracepointLSM Hook
Ch6CO-RE 可移植性
Ch7XDP 核心原理NodePort 加速
Ch8TC 流量控制
Ch9连接跟踪/NATkube-proxy 替代
Ch10LSM BPF + Tetragon
Ch11bpftrace/BCC
Ch12Cilium 网络方案Cilium 核心
Ch13框架选型开发框架
Ch15K8s CNI/Ambient
Ch16内存安全边界
Ch17生产调试K8s 部署实践
Ch18网络安全工具安全工具构建可观测工具综合开发

知识导图#

以下导图展示 18 章知识之间的网络关系。这里强调跨领域的连接——一个 XDP 程序同时涉及虚拟机、验证器、Map、网络协议栈;一个 Cilium 部署同时依赖 XDP、TC、连接跟踪、身份安全。

概念关系图#

graph TB subgraph 基础层[" 基础层 — eBPF 的运行机制"] VM["eBPF 虚拟机<br/>Ch2"] VER["验证器<br/>Ch3"] MAP["Map 数据结构<br/>Ch4"] HOOK["Hook 点<br/>Ch5"] CORE["CO-RE<br/>Ch6"] end subgraph 网络层[" 网络层 — eBPF 的网络应用"] XDP["XDP<br/>Ch7"] TC["TC<br/>Ch8"] ENET["eBPF 网络<br/>Ch9"] CIL["Cilium<br/>Ch12"] end subgraph 安全可观测层[" 安全与可观测层 — eBPF 的监控能力"] SEC["eBPF 安全<br/>Ch10"] OBS["可观测性<br/>Ch11"] MEM["内存管理<br/>Ch16"] end subgraph 生态层[" 生态层 — eBPF 的开发与部署"] DEV["开发框架<br/>Ch13"] WASM["eBPF+Wasm<br/>Ch14"] K8S["Kubernetes<br/>Ch15"] PROD["生产部署<br/>Ch17"] LAB["综合实战<br/>Ch18"] end %% 基础层内部 VM --> VER VM --> MAP HOOK --> VM CORE --> MAP %% 基础 → 网络 HOOK --> XDP HOOK --> TC MAP --> XDP MAP --> TC XDP --> ENET TC --> ENET ENET --> CIL %% 基础 → 安全可观测 HOOK --> SEC MAP --> OBS VER --> SEC MAP --> MEM %% 网络 → 生态 CIL --> K8S ENET --> PROD %% 安全可观测 → 生态 SEC --> PROD OBS --> PROD OBS --> DEV SEC --> LAB %% 生态层内部 CORE --> DEV DEV --> WASM K8S --> PROD PROD --> LAB style 基础层 fill:#e8eaf6,stroke:#283593 style 网络层 fill:#e3f2fd,stroke:#1565c0 style 安全可观测层 fill:#fce4ec,stroke:#c62828 style 生态层 fill:#e8f5e9,stroke:#2e7d32

章节网络关系图#

graph LR Ch0["Ch0 导读"] --> Ch1["Ch1 全景"] Ch1 --> Ch2["Ch2 虚拟机"] Ch1 --> Ch5["Ch5 Hook点"] Ch1 --> Ch10["Ch10 安全"] Ch2 --> Ch3["Ch3 验证器"] Ch2 --> Ch4["Ch4 Map"] Ch2 --> Ch6["Ch6 CO-RE"] Ch4 --> Ch5 Ch4 --> Ch7["Ch7 XDP"] Ch4 --> Ch8["Ch8 TC"] Ch4 --> Ch11["Ch11 可观测"] Ch5 --> Ch7 Ch5 --> Ch8 Ch5 --> Ch10 Ch6 --> Ch13["Ch13 开发框架"] Ch7 --> Ch9["Ch9 eBPF网络"] Ch8 --> Ch9 Ch9 --> Ch12["Ch12 Cilium"] Ch10 --> Ch16["Ch16 内存"] Ch11 --> Ch13 Ch12 --> Ch15["Ch15 K8s"] Ch13 --> Ch14["Ch14 Wasm"] Ch13 --> Ch17["Ch17 生产"] Ch15 --> Ch17 Ch16 --> Ch17 Ch17 --> Ch18["Ch18 实战"] style Ch0 fill:#bbdefb,stroke:#1565c0 style Ch4 fill:#c8e6c9,stroke:#2e7d32 style Ch7 fill:#fff9c4,stroke:#f9a825 style Ch12 fill:#e1bee7,stroke:#6a1b9a style Ch18 fill:#ffccbc,stroke:#d84315

知识关联参考表#

按四层模型组织:基础层(eBPF 运行机制)→ 网络层(网络应用)→ 安全可观测层(监控能力)→ 生态层(开发与部署)。

基础概念对应章节网络应用对应章节安全可观测对应章节生态实践对应章节
eBPF 指令集Ch2XDP 快速路径Ch7LSM BPFCh10libbpf 开发Ch13
验证器安全Ch3TC 流量控制Ch8bpftrace 追踪Ch11Aya (Rust)Ch13
Hash/Array MapCh4连接跟踪/NATCh9Tetragon 监控Ch10Wasm-eBPFCh14
kprobe/tracepointCh5Cilium 身份安全Ch12Beyla 自动化Ch11K8s CNICh15
BTF + CO-RECh6kube-proxy 替代Ch9容器内存Ch16生产部署Ch17

系列大纲#

以下是按章节编号排列的完整目录。建议结合上方的场景驱动阅读路线知识导图选择适合你的阅读顺序。

章节标题核心内容
0系列导读系列定位、场景路线、知识导图、环境搭建
1eBPF 全景eBPF 起源、架构总览、程序类型、Map 概览、Hello World
2eBPF 虚拟机指令集、寄存器模型、ALU/JMP/内存指令、JIT 编译
3验证器DAG 验证、路径探索、安全检查、复杂度限制、常见拒绝原因
4Map 数据结构Hash/Array/Per-CPU/Ring Buffer/Stack/Queue/LRU
5Hook 点kprobe/kretprobe、tracepoint、uprobe/uretprobe、USDT
6CO-REBTF 类型信息、vmlinux.h、libbpf 骨架、一次编译到处运行
7XDPXDP 程序类型、XDP_PASS/DROP/TX/REDIRECT、驱动模式、性能对比
8TCcls_bpf、ingress/egress、direct action、skb 操作
9eBPF 网络连接跟踪、NAT、kube-proxy 替代、Socket Filter
10eBPF 安全LSM BPF、Tetragon、进程监控、运行时安全
11eBPF 可观测性bpftrace、BCC、Beyla、性能分析、分布式追踪
12Cilium 深入身份安全模型、Hubble、ClusterMesh、eBPF 管线
13eBPF 开发框架libbpf、Aya、Go eBPF、bpftrace、框架选型
14eBPF 与 WebAssemblyWasm-eBPF、用户态 eBPF 运行时、跨平台可移植性
15eBPF 在 KubernetesCNI 对比、Ambient Mesh、网络策略增强、多集群
16eBPF 与内存管理eBPF-mm、容器内存追踪、Map 内存开销、内存限制
17eBPF 生产部署性能开销、调试方法、灰度策略、内核兼容性
18综合实战构建完整的 eBPF 网络安全工具:XDP+TC+LSM

开发环境搭建#

系统要求#

# 检查内核版本(需要 5.15+)
uname -r
# 5.15.0-91-generic
# 检查 BTF 支持(CO-RE 必需)
ls /sys/kernel/btf/vmlinux
# /sys/kernel/btf/vmlinux ← 存在即支持
# 检查 eBPF 特性支持
bpftool feature probe | head -20

安装开发工具#

# Ubuntu 22.04+
sudo apt update
sudo apt install -y build-essential clang llvm bpftool libbpf-dev linux-headers-$(uname -r)
# 验证安装
clang --version # 需要 12+
llc --version # LLVM 静态编译器
bpftool version # eBPF 工具

安装 bpftrace(可观测性工具)#

# Ubuntu 22.04+
sudo apt install -y bpftrace
# 验证
bpftrace --version
# 运行第一个 bpftrace 程序
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s opened %s\n", comm, str(args->filename)); }'

安装 BCC 工具集#

# Ubuntu 22.04+
sudo apt install -y bpfcc-tools linux-headers-$(uname -r)
# BCC 工具安装在 /usr/share/bcc/tools/ 下
ls /usr/share/bcc/tools/
# execsnoop opensnoop biolatency tcplife ...
# 运行 opensnoop
sudo /usr/share/bcc/tools/execsnoop

安装 Go eBPF 开发环境#

# 安装 Go
wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
# 安装 cilium/ebpf 库
go get github.com/cilium/ebpf
# 安装 eBPF code generator
go install github.com/cilium/ebpf/cmd/bpf2go@latest

编译第一个 eBPF 程序#

# 创建工作目录
mkdir -p ~/ebpf-lab && cd ~/ebpf-lab
# 编写 eBPF 程序(C)
cat > hello.bpf.c << 'EOF'
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
SEC("tracepoint/syscalls/sys_enter_execve")
int hello_execve(void *ctx)
{
char msg[] = "Hello, eBPF!";
bpf_trace_printk(msg, sizeof(msg));
return 0;
}
char LICENSE[] SEC("license") = "GPL";
EOF
# 编译 eBPF 程序
clang -g -O2 -target bpf -D__TARGET_ARCH_x86 \
-I/usr/include/$(uname -m)-linux-gnu \
-c hello.bpf.c -o hello.bpf.o
# 加载并运行
sudo bpftool prog load hello.bpf.o /sys/fs/bpf/hello \
type tracepoint name sys_enter_execve
# 查看输出
sudo cat /sys/kernel/debug/tracing/trace_pipe

本系列的实践方法论#

本系列遵循 理解原理 → 编写代码 → 验证效果 → 生产落地 的学习方法:

  1. 理解原理:通过架构图和源码分析,理解 eBPF 机制的设计动机与实现方式
  2. 编写代码:每章提供完整的可编译 eBPF 程序,从 Hello World 到生产级工具
  3. 验证效果:通过 bpftool、bpftrace、perf 等工具验证程序行为与性能
  4. 生产落地:讨论部署策略、兼容性处理、性能调优等工程实践

每章的「动手实践」部分都遵循这一方法论,让你不仅知道”是什么”,更理解”为什么”和”怎么做”。

推荐参考资料#

经典教材#

书籍作者特点
《BPF Performance Tools》Brendan GreggeBPF 性能分析的百科全书,覆盖所有 BCC 工具
《Learning eBPF》Liz RiceeBPF 入门最佳读物,从原理到实践循序渐进
《Systems Performance》Brendan Gregg性能分析方法论,eBPF 是其中核心工具
《Linux Observability with BPF》David Calavera 等eBPF 可观测性专题,libbpf 实践丰富
《What is eBPF?》Liz RiceO’Reilly 迷你书,1 小时快速理解 eBPF

在线资源#

开发工具#

  • bpftool:eBPF 程序/Map 的瑞士军刀,查看、加载、调试
  • bpftrace:高级追踪语言,一行命令即可追踪内核行为
  • BCC (BPF Compiler Collection):Python/Lua 前端 + eBPF 后端的工具集
  • libbpf:C 语言 eBPF 开发库,CO-RE 的基石
  • pahole:BTF 类型信息生成工具

Tip

本系列所有 eBPF 程序均可在 Ubuntu 22.04(内核 5.15+)上运行。如果你的内核版本较低,部分高级特性(如 bpf_timer、bpf_kptr)可能不可用,但基础功能不受影响。

准备好开始了吗?从 eBPF 全景 开始你的 eBPF 之旅吧!


参考#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

系列导读
https://blog.souloss.com/posts/ebpf/ebpf-series-guide/
作者
Souloss
发布于
2026-01-28
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时