eBPF学习手册
Liz Rice
范彬, 张保珠, 覃璐 译
出版时间:2024年08月
页数:256
“本书提供了对eBPF技术的全面概述,从基础知识到高级特性,并提供了使用eBPF的丰富实用建议。”
——AlexeiStarovoitov
eBPF技术的创造者之一
“eBPF在云原生领域掀起了一场全新的基础设施运动,这本书清晰地解释了其基础,提供了宝贵的示例和练习。”
——Daniel Borkmann
eBPF技术的创造者之一

什么是eBPF?eBPF是一项革命性的技术,允许用户编写自定义代码来动态改变Linux内核的行为。eBPF是一个非凡的平台,可用于构建下一代的安全、可观测性和网络工具。这是一本实用性书籍,非常适合开发人员、系统管理员、运维工程师和想了解其工作原理的学生阅读。
本书作者不仅介绍了关于eBPF技术的基础知识,还提供了实际示例和操作。如果你渴望深入了解eBPF技术和想学习编写eBPF程序,本书可以让你能够轻松入门。
通过本书,你将能够:
● 了解为什么eBPF近年来变得如此重要,以及它如何成为构建强大基础设施的关键技术。
● 学习大量的eBPF代码示例,从“HelloWorld”,到安全事件检测和操作网络数据包等。
● 学习如何编写eBPF程序并将它们“附加”到不同事件上,实现内核的灵活扩展。
● 理解eBPF验证器如何确保程序安全运行,及如何使eBPF程序能够在不同内核版本之间实现可移植性。
● 了解eBPF组件如何与Linux内核进行交互,动态改变操作系统的行为。
  1. 前言
  2. 第1章 eBPF是什么,为什么它很重要
  3. 1.1 eBPF起源:伯克利包过滤器
  4. 1.2 从BPF到eBPF
  5. 1.3 eBPF在生产系统中的演变
  6. 1.4 命名的挑战
  7. 1.5 Linux内核
  8. 1.6 为内核添加新功能
  9. 1.7 内核模块
  10. 1.8 动态加载eBPF程序
  11. 1.9 高性能的eBPF程序
  12. 1.10 云原生环境中的eBPF
  13. 1.11 总结
  14. 第2章 eBPF的“Hello World”
  15. 2.1 BCC的“Hello World”
  16. 2.2 运行“Hello World”
  17. 2.3 BPF map
  18. 2.3.1 hash类型的map
  19. 2.3.2 perf和环形缓冲区map
  20. 2.3.3 函数调用
  21. 2.3.4 尾调用
  22. 2.4 总结
  23. 2.5 练习
  24. 第3章 eBPF程序解析
  25. 3.1 eBPF虚拟机
  26. 3.1.1 eBPF寄存器
  27. 3.1.2 eBPF指令
  28. 3.2 针对网络接口的eBPF “Hello World”示例程序
  29. 3.3 编译eBPF对象文件
  30. 3.4 查看eBPF对象文件
  31. 3.5 将程序载入内核
  32. 3.6 查看已加载的程序
  33. 3.6.1 BPF程序标识
  34. 3.6.2 编译后的字节码
  35. 3.6.3 JIT编译的机器码
  36. 3.7 将程序“附加”到事件上
  37. 3.8 全局变量
  38. 3.9 移除程序
  39. 3.10 卸载程序
  40. 3.11 BPF程序调用BPF函数
  41. 3.12 总结
  42. 3.13 练习
  43. 第4章 bpf()系统调用
  44. 4.1 加载BTF数据
  45. 4.2 创建map
  46. 4.3 加载eBPF程序
  47. 4.4 从用户空间修改eBPF map
  48. 4.5 BPF程序和BPF map引用
  49. 4.5.1 Pinning(固定)
  50. 4.5.2 BPF链接
  51. 4.6 eBPF的其他系统调用
  52. 4.6.1 Perf缓冲区初始化
  53. 4.6.2 附加到perf kprobe事件上
  54. 4.6.3 设置和读取Perf事件
  55. 4.7 环形缓冲区
  56. 4.8 从BPF map上读取信息
  57. 4.8.1 查找map
  58. 4.8.2 读取map元素
  59. 4.9 总结
  60. 4.10 练习
  61. 第5章 CO-RE、BTF和Libbpf
  62. 5.1 BCC对可移植性的处理方式
  63. 5.2 CO-RE概述
  64. 5.3 BPF类型格式
  65. 5.3.1 BTF用例
  66. 5.3.2 使用bpftool工具列出BTF信息
  67. 5.3.3 BTF类型
  68. 5.3.4 BTF中的map
  69. 5.3.5 函数和函数原型的BTF数据
  70. 5.3.6 查看map和程序的BTF数据
  71. 5.4 生成内核头文件
  72. 5.5 支持CO-RE的eBPF程序
  73. 5.5.1 头文件
  74. 5.5.2 定义map
  75. 5.5.3 eBPF程序中的Section部分
  76. 5.5.4 使用CO-RE进行内存访问
  77. 5.5.5 许可证定义
  78. 5.6 编译支持CO-RE的eBPF程序
  79. 5.6.1 调试信息
  80. 5.6.2 优化
  81. 5.6.3 目标架构
  82. 5.6.4 Makefile
  83. 5.6.5 目标文件中的BTF信息
  84. 5.7 BPF重定位
  85. 5.8 支持CO-RE的用户空间代码
  86. 5.9 用户空间代码的libbpf库
  87. 5.9.1 BPF骨架
  88. 5.9.2 Libbpf代码示例
  89. 5.10 总结
  90. 5.11 练习
  91. 第6章 eBPF验证器
  92. 6.1 验证过程
  93. 6.2 验证器日志
  94. 6.3 可视化控制流
  95. 6.4 验证helper函数
  96. 6.5 Helper函数参数
  97. 6.6 检查许可证
  98. 6.7 内存访问检查
  99. 6.8 指针解引用之前进行检查
  100. 6.9 访问上下文
  101. 6.10 运行到完成
  102. 6.11 循环
  103. 6.12 检查返回码
  104. 6.13 无效指令
  105. 6.14 无法访问的指令
  106. 6.15 总结
  107. 6.16 练习
  108. 第7章 eBPF程序类型和附加点类型
  109. 7.1 程序上下文参数
  110. 7.2 Helper函数和返回码
  111. 7.3 Kfuncs
  112. 7.4 跟踪
  113. 7.4.1 Kprobes和Kretprobes
  114. 7.4.2 Fentry/Fexit
  115. 7.4.3 Tracepoints
  116. 7.4.4 开启BTF的Tracepoint
  117. 7.4.5 将程序附加到用户空间函数上
  118. 7.4.6 LSM
  119. 7.5 网络
  120. 7.5.1 Socket
  121. 7.5.2 流量控制
  122. 7.5.3 XDP
  123. 7.5.4 Flow Dissector
  124. 7.5.5 轻量级隧道
  125. 7.5.6 Cgroup
  126. 7.5.7 Infrared控制器
  127. 7.6 BPF附加点类型
  128. 7.7 总结
  129. 7.8 练习
  130. 第8章 eBPF网络
  131. 8.1 数据包丢弃
  132. 8.1.1 XDP程序返回码
  133. 8.1.2 XDP 数据包解析
  134. 8.2 负载均衡和转发
  135. 8.3 XDP offloading
  136. 8.4 流量控制(Traffic Control,TC)
  137. 8.5 数据包加密和解密
  138. 8.6 eBPF和Kubernetes网络
  139. 8.6.1 避免使用iptables
  140. 8.6.2 网络程序的协同
  141. 8.6.3 执行网络策略
  142. 8.6.4 网络传输数据加密
  143. 8.7 总结
  144. 8.8 练习和进一步阅读
  145. 第9章 eBPF安全
  146. 9.1 安全可观测性需要策略和上下文
  147. 9.2 使用系统调用处理安全事件
  148. 9.2.1 seccomp
  149. 9.2.2 生成seccomp配置文件
  150. 9.2.3 系统调用跟踪类的安全工具
  151. 9.3 BPF LSM
  152. 9.4 Cilium Tetragon
  153. 9.4.1 附加到内核内部函数上
  154. 9.4.2 预防性安全
  155. 9.5 网络安全
  156. 9.6 总结
  157. 第10章 eBPF编程
  158. 10.1 bpftrace
  159. 10.2 内核态eBPF程序的编程语言选择
  160. 10.3 BCC Python/Lua/C++
  161. 10.4 C和Libbpf
  162. 10.4.1 Go
  163. 10.4.2 Gobpf
  164. 10.4.3 Ebpf-go
  165. 10.4.4 Libbpfgo
  166. 10.5 Rust
  167. 10.5.1 Libbpf-rs
  168. 10.5.2 Redbpf
  169. 10.5.3 Aya
  170. 10.5.4 Rust-bcc
  171. 10.6 测试BPF程序
  172. 10.7 附加多个eBPF程序
  173. 10.8 总结
  174. 10.9 练习
  175. 第11章 eBPF的前景
  176. 11.1 eBPF基金会
  177. 11.2 Windows上运行eBPF
  178. 11.3 Linux eBPF的演进
  179. 11.4 eBPF是一个平台,而不是一个功能
  180. 11.5 结论
书名:eBPF学习手册
作者:Liz Rice
译者:范彬, 张保珠, 覃璐 译
国内出版社:中国电力出版社
出版时间:2024年08月
页数:256
书号:978-7-5198-8988-3
原版书书名:Learning eBPF
原版书出版商:O'Reilly Media
Liz Rice
 
Liz Rice是lsovalent的首席开源负责人。作为CNCF技术监督委员会的前主席,她在安全工具、网络协议和分布式系统方面拥有丰富的经验。她还是Container Security(O'Reilly)一书的作者。
 
 
本书封面上的动物是一种早期大黄蜂(学名:Bombus pratorum),这是一种在欧洲大部分地区(尤其是英国)和亚洲部分地区发现的大黄蜂物种。
大黄蜂在田野、公园和稀疏的森林中筑巢,甚至在废弃的鸟巢或啮齿动物巢中筑巢。早期大黄蜂在一年中较早出现,一般在3~7月,但在英格兰南部,工蜂早在2月就会出现,因此一年中出现两个蜂群周期的情况很常见。
这一种类的大黄蜂比其他种类的小得多。虽然蜂后、工蜂和雄蜂的雄蜂型略有不同,但早期大黄蜂的外观一般为黑色,领部黄色,腹部有另一条黄带,尾部呈淡红色或暗橙色。
早期的熊蜂由蜂王和工蜂组成蜂群,但与众不同的是,蜂王使用攻击性行为而不是信息素来建立统治地位,它用下颚用头撞击最强壮的工蜂,以保持对蜂群的控制。工蜂觅食白三叶草、蓟马、鼠尾草、薰衣草等开花植物的花蜜和花粉;无人蜂在蜂巢周期的后期产生,并离开巢穴寻找新蜂王。
购买选项
定价:78.00元
书号:978-7-5198-8988-3
出版社:中国电力出版社