可编程网络自动化(第二版)
可编程网络自动化(第二版)
Matt Oswalt, Christian Adell, Scott S. Lowe, Jason Edelman
门佳 译
出版时间:2026年06月
页数:794
“本书帮助网络专业人员和开发人员编写清晰、易于扩展的网络自动化playbook。它涵盖了掌控网络自动化所需的几乎所有内容。”
——Akhil Behl
Red Hat合作伙伴经理

如今,网络工程师越来越难仅依赖手动流程来完成工作。新的协议、技术、交付模型,以及企业对敏捷性和灵活性日益增长的需求,使得网络自动化成为必然选择。这本实用指南更新后的第二版向网络工程师展示了如何运用一系列技术和工具,内容涵盖以下主题:
● 基于Linux的新型网络技术与云原生环境,以及如何利用它们为网络项目搭建开发环境
● Python和Go编程技能
● 如何通过模板技术构建一致的网络设备配置
● 数据格式、编码及模型:JSON、XML、YAML、Protobuf、
YANG
● 应用程序接口(API)在网络自动化中的作用,包括HTTP API、NETCONF、RESTCONF、gNMI
● 如何在网络自动化项目中使用Git等版本控制系统以及持续集成等开发实践
● 如何使用Ansible、Nornir、Terraform实现网络设备与服务的自动化
● 以整体化视角设计网络自动化解决方案
  1. 前言
  2. 第1章 网络行业趋势
  3. 1.1 SDN的兴起
  4. 1.1.1 OpenFlow问世
  5. 1.1.2 为什么是OpenFlow
  6. 1.2 什么是软件定义网络
  7. 1.2.1 开放数据平面
  8. 1.2.2 网络功能虚拟化
  9. 1.2.3 虚拟交换
  10. 1.2.4 网络虚拟化
  11. 1.2.5 设备API
  12. 1.2.6 网络自动化
  13. 1.2.7 裸机交换
  14. 1.2.8 数据中心网络架构
  15. 1.2.9 SD-WAN
  16. 1.2.10 控制器网络
  17. 1.2.11 云原生网络
  18. 1.3 小结
  19. 第2章 网络自动化
  20. 2.1 为什么要实现网络自动化
  21. 2.1.1 简化架构
  22. 2.1.2 确定性结果
  23. 2.1.3 业务敏捷力
  24. 2.1.4 安全增强与风险管控
  25. 2.2 网络自动化的类型
  26. 2.2.1 设备制备
  27. 2.2.2 数据采集与丰富
  28. 2.2.3 迁移
  29. 2.2.4 配置管理
  30. 2.2.5 配置合规性
  31. 2.2.6 状态验证
  32. 2.2.7 报表
  33. 2.2.8 故障排查
  34. 2.3 从SNMP向设备API的管理平面演变
  35. 2.3.1 应用程序编程接口(API)
  36. 2.3.2 开放网络运动的影响
  37. 2.4 SDN时代的网络自动化
  38. 2.5 小结
  39. 第3章 Linux
  40. 3.1 网络自动化场景中的Linux
  41. 3.2 Linux简史
  42. 3.3 Linux发行版
  43. 3.3.1 Red Hat Enterprise Linux、Fedora、CentOS,以及Amazon Linux
  44. 3.3.2 Debian、Ubuntu和其他衍生版
  45. 3.3.3 其他Linux发行版
  46. 3.4 使用Linux
  47. 3.4.1 文件系统导航
  48. 3.4.2 操作文件和目录
  49. 3.4.3 运行程序
  50. 3.4.4 守护进程
  51. 3.5 Linux网络技术
  52. 3.5.1 使用接口
  53. 3.5.2 作为端主机的路由
  54. 3.5.3 像路由器一样执行路由操作
  55. 3.5.4 桥接(交换)
  56. 3.6 使用bash脚本实现Linux自动化
  57. 3.7 eBPF与XDP:驱动Linux内核演进
  58. 3.8 小结
  59. 第4章 云
  60. 4.1 云计算的简明定义
  61. 4.2 云环境中的网络基础
  62. 4.2.1 云网络基础组件
  63. 4.2.2 云网络拓扑
  64. 4.2.3 云网络自动化
  65. 4.3 容器
  66. 4.3.1 容器与云有什么关系?
  67. 4.3.2 容器与网络有什么关系?
  68. 4.3.3 为容器扩展Linux网络功能
  69. 4.4 Kubernetes
  70. 4.4.1 Kubernetes的关键概念
  71. 4.4.2 Kubernetes网络的基础组件
  72. 4.4.3 服务网格
  73. 4.5 小结
  74. 第5章 网络开发人员环境
  75. 5.1 文本编辑器
  76. 5.1.1 语法高亮
  77. 5.1.2 定制化
  78. 5.1.3 智能代码分析
  79. 5.1.4 文本编辑器与集成开发环境
  80. 5.2 开发工具
  81. 5.2.1 Virtualenv
  82. 5.2.2 Make
  83. 5.2.3 Docker
  84. 5.2.4 dyff
  85. 5.3 仿真/模拟工具
  86. 5.3.1 VirtualBox
  87. 5.3.2 Vagrant
  88. 5.3.3 Containerlab
  89. 5.3.4 其他工具
  90. 5.4 小结
  91. 第6章 Python
  92. 6.1 网络工程师是否应该学习代码?
  93. 6.2 使用Python交互式解释器
  94. 6.3 理解Python数据类型
  95. 6.3.1 字符串
  96. 6.3.2 数值
  97. 6.3.3 布尔值
  98. 6.3.4 列表
  99. 6.3.5 Python字典
  100. 6.3.6 集合与元组
  101. 6.4 向代码中添加条件逻辑
  102. 6.5 理解包含关系
  103. 6.6 在Python中使用循环
  104. 6.6.1 while循环
  105. 6.6.2 for循环
  106. 6.7 使用Python函数
  107. 6.8 处理文件
  108. 6.8.1 读取文件
  109. 6.8.2 写入文件
  110. 6.9 创建Python程序
  111. 6.9.1 创建一个Python基础脚本
  112. 6.9.2 在Python中使用注释
  113. 6.9.3 将代码从Python解释器迁移到Python脚本
  114. 6.10 使用Python模块
  115. 6.11 传入Python脚本参数
  116. 6.12 使用pip安装Python包
  117. 6.13 理解Python类
  118. 6.13.1 使用类
  119. 6.13.2 构建自定义类
  120. 6.14 使用try/except从容应对失败
  121. 6.15 Python程序并行化
  122. 6.16 小结
  123. 第7章 Go语言
  124. 7.1 为什么选择Go
  125. 7.1.1 Go比Python更快吗
  126. 7.1.2 Go比Python更难吗
  127. 7.2 Go基础概念
  128. 7.2.1 数据类型与变量
  129. 7.2.2 流程控制
  130. 7.2.3 集合类型
  131. 7.2.4 函数
  132. 7.2.5 结构体
  133. 7.2.6 方法
  134. 7.2.7 接口
  135. 7.3 进阶概念
  136. 7.3.1 并发
  137. 7.3.2 泛型
  138. 7.4 包与模块
  139. 7.4.1 标准库包
  140. 7.4.2 第三方模块与包
  141. 7.5 小结
  142. 第8章 数据格式与模型
  143. 8.1 结构化数据格式的优势与基础知识
  144. 8.1.1 当结构化数据不可用时:屏幕抓取
  145. 8.1.2 数据类型
  146. 8.1.3 文档与数据
  147. 8.1.4 数据格式的分类
  148. 8.2 文本型数据格式
  149. 8.2.1 YAML
  150. 8.2.2 XML
  151. 8.2.3 JSON
  152. 8.3 二进制数据格式
  153. 8.3.1 Protocol Buffers
  154. 8.3.2 其他二进制数据格式
  155. 8.4 数据建模
  156. 8.4.1 YANG
  157. 8.4.2 JSON Schema
  158. 8.4.3 XML Schema Definition
  159. 8.4.4 Protocol Buffers的建模与验证
  160. 8.5 小结
  161. 第9章 模板
  162. 9.1 现代模板语言的兴起
  163. 9.1.1 使用模板进行Web开发
  164. 9.1.2 拓展模板的使用
  165. 9.2 模板在网络自动化中的价值
  166. 9.3 Jinja
  167. 9.3.1 在Python中渲染Jinja模板文件
  168. 9.3.2 使用条件判断与循环
  169. 9.3.3 使用Jinja过滤器
  170. 9.3.4 Jinja模板继承
  171. 9.3.5 在Jinja中创建变量创建
  172. 9.4 可扩展样式表语言转换
  173. 9.5 Go模板
  174. 9.6 小结
  175. 第10章 使用网络API
  176. 10.1 理解网络API
  177. 10.1.1 熟悉基于HTTP的API
  178. 10.1.2 使用NETCONF
  179. 10.1.3 使用RESTCONF
  180. 10.1.4 使用gRPC与gNMI
  181. 10.1.5 比较NETCONF、RESTCONF和gNMI
  182. 10.2 使用网络API实现自动化
  183. 10.2.1 Python Requests库
  184. 10.2.2 Go net/http包
  185. 10.2.3 Python ncclient库
  186. 10.2.4 OpenConfig gNMIc Go包
  187. 10.2.5 Python Netmiko库
  188. 10.3 小结
  189. 第11章 Git源代码管理
  190. 11.1 源代码管理的应用场景
  191. 11.2 源代码管理的优势
  192. 11.2.1 变更跟踪
  193. 11.2.2 责任追溯
  194. 11.2.3 流程与工作流
  195. 11.3 源代码管理在网络领域中的优势
  196. 11.4 走进Git
  197. 11.4.1 Git简史
  198. 11.4.2 Git术语
  199. 11.4.3 Git架构概览
  200. 10.5 使用Git
  201. 10.5.1 安装Git
  202. 10.5.2 创建仓库
  203. 10.5.3 向仓库中添加文件
  204. 10.5.4 向仓库提交变更
  205. 11.5.5 修改并提交已跟踪的文件
  206. 11.5.6 取消暂存文件
  207. 11.5.7 从仓库中排除文件
  208. 11.5.8 查看仓库的更多信息
  209. 11.5.9 提取文件版本之间的差异
  210. 11.5.10 在Git中为提交添加标签
  211. 11.6 Git的分支机制
  212. 11.6.1 重命名默认分支
  213. 11.6.2 创建分支
  214. 11.6.3 检出分支
  215. 11.6.4 stash机制
  216. 11.6.5 分支的合并与删除
  217. 11.7 使用Git进行协作
  218. 11.7.1 在运行Git的多系统之间开展协作
  219. 11.7.2 通过基于Git的在线服务展开协作
  220. 11.8 小结
  221. 第12章 自动化工具
  222. 12.1 自动化工具回顾
  223. 12.2 使用Ansible
  224. 12.2.1 认识Ansible框架
  225. 12.2.2 理解Ansible的工作原理
  226. 12.2.3 构建清单文件
  227. 12.2.4 执行Ansible playbook
  228. 12.2.5 使用机密信息
  229. 12.2.6 使用变量文件
  230. 12.2.7 编写Ansible playbook实现网络自动化
  231. 12.2.8 使用第三方集合与模块
  232. 12.2.9 Ansible小结
  233. 12.3 使用Nornir实现自动化
  234. 12.3.1 Nornir入门
  235. 12.3.2 在Nornir中使用NAPALM
  236. 12.3.3 Nornir小结
  237. 12.4 使用Terraform管理动态基础设施
  238. 12.4.1 理解Terraform架构
  239. 12.4.2 使用Terraform创建首个资源
  240. 12.4.3 丰富Terraform的执行能力
  241. 12.4.4 在大规模场景下管理Terraform
  242. 12.4.5 打破Terraform的常规用法
  243. 12.4.6 Terraform总结
  244. 12.5 小结
  245. 第13章 持续集成
  246. 13.1 重要前提
  247. 13.1.1 简单胜于复杂
  248. 13.1.2 人、流程与技术
  249. 13.1.3 学会编程
  250. 13.2 持续集成简介
  251. 13.2.1 CI基础
  252. 13.2.2 持续交付
  253. 13.2.3 测试驱动开发
  254. 13.2.4 为什么要在网络中实践持续集成?
  255. 13.3 面向网络的持续集成流水线
  256. 13.3.1 同行评审
  257. 13.3.2 构建自动化
  258. 13.3.3 部署验证与测试
  259. 13.3.4 测试/开发/预发布环境
  260. 13.3.5 部署工具与策略
  261. 13.4 小结
  262. 第14章 网络自动化架构
  263. 14.1 网络自动化架构简介
  264. 14.2 架构组件概览
  265. 14.2.1 用户交互
  266. 14.2.2 事实源
  267. 14.2.3 自动化引擎
  268. 14.2.4 遥测与可观测性
  269. 14.2.5 编排
  270. 14.3 结合示例理解架构
  271. 14.3.1 确定运维工作流
  272. 14.3.2 将工作流步骤转变为自动化任务
  273. 14.3.3 将自动化任务映射到架构组件
  274. 14.3.4 选择工具来实现每个组件的任务
  275. 14.4 小结
  276. 作者介绍
  277. 封面介绍
书名:可编程网络自动化(第二版)
译者:门佳 译
国内出版社:中国电力出版社
出版时间:2026年06月
页数:794
书号:978-7-5239-0538-8
原版书书名:Network Programmability and Automation, 2e
原版书出版商:O'Reilly Media
Matt Oswalt
 
Matt Oswalt,Cloudflare公司的软件工程师,致力于解决软件开发和网络基础设施交叉领域的技术和非技术难题,同时讲授与Docker和可编程网络自动化相关的在线课程。他最开心的时候是坐在键盘前,手边放着冲泡壶,或是运用手中的工具,消除阻塞信息流通的障碍。
 
 
Christian Adell
 
Christian Adell是Network to Code的首席架构师,拥有为本地和云环境构建及交付网络自动化解决方案的丰富经验。
 
 
Scott S. Lowe
 
Scott Lowe任职于Pulumi的开发者关系团队,专注于基础设施即代码以及云基础设施与服务的自动化。

Scott S. Lowe,VMware公司的工程架构师,在从事计算虚拟化工作多年后投身于云计算和网络虚拟化。斯科特撰写了多本关于vSphere和OpenStack的技术图书,还在个人博客上定期分享技术内容。他与妻子和7个孩子中最小的两个住在美国科罗拉多州丹佛市。
 
 
Jason Edelman
 
Jason Edelman是领先的网络自动化解决方案提供商Network to Code的创始人兼首席技术官。Jason于2014年创立了Network to Code。

Jason Edelman,网络工程师,持有CCIE认证和VCDX-NV认证,典型的“CLI爱好者”和“路由器玩家”。几年前,他决定更多地关注软件、开发实践以及如何与网络工程融合。贾森目前经营着一家精品咨询公司Network to Code,帮助厂商和用户利用新的工具和技术提高工作效率。贾森拥有新泽西州史蒂文斯理工学院(StevensInstitute of Technology)的工程学士学位,目前居住在纽约市。贾森还定期在他的个人博客上发表文章。
 
 
在两个国家/地区找到:印度的昌巴尔河(Chambal)、吉尔瓦河(Girwa)和桑河(Son River)沿岸;尼泊尔的那纳雅尼河(Narayani River)沿岸。长吻鳄得名自其雄性鼻子上生长的组织结,叫作ghara,意为印度语中的“壶”。
长吻鳄因其细长的鼻子和狭窄而锋利的牙齿,很容易与其他鳄鱼区分开。它主要以小鱼和甲壳类为食。它会将鱼群赶到岸边,然后用水下的颚拍击以把它们打昏。它不咀嚼猎物,而是将其囫囵吞下。该物种极少攻击人类,但是长有110颗交错的指状牙齿,你可别靠得太近。
长吻鳄身长4~6米。颜色范围从橄榄绿色到棕灰色,腹部颜色较浅。经过8~12年发育到达成熟期。雄性在求偶时会用自己的ghara发出声音并吹泡泡。雌性在沙堤上筑巢,一直守护着卵83~94天,然后照顾幼体数月。
长吻鳄喜欢栖息在河水清澈、水流湍急的高岸河流和深潭。自20世纪中叶以来,由于传统药物的猎杀和淡水栖息地的急剧变化,长吻鳄的数量已经下降了98%。
购买选项
定价:198.00元
书号:978-7-5239-0538-8
出版社:中国电力出版社