描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302677550
本书作者结合研发实践,详细讲解P4语言的学习路线,以实际工程项目中运用的实例加深读者对P4和可编程交换芯片的理解。
网络技术是云计算的关键技术之一,可编程交换芯片技术是网络领域近年来比较有影响力的新技术,是
软件定义网络(Software Defined Network,SDN)理念的进一步发展,也是走向网络全组件可编程的必由之路。
P4语言是可编程交换芯片的标准编程语言,风格类似于C语言。借着可编程交换芯片的发展契
机,P4语言从可编程交换芯片、可编程网卡逐渐扩展到FPGA(现场可编程门阵列)、DPDK(Data Plane
Development Kit)、eBPF(扩展伯克利包过滤器)等,初步展现成为网络数据面统一编程语言的潜质。
本书共分为6章。第1章介绍可编程交换芯片的产生背景、实现原理、特点和优势;第2章概述P4
语言的特点,介绍P4编程架构,并以一个P4版“hello,world”程序展示P4语言的各个编程要素;第3章
详细介绍P4语言,包括数据类型、表达式、语句等,并重点介绍与可编程交换芯片相关的重要组件;第
4章介绍P4编程环境的搭建,方便读者进行实践操作;第5章通过13个精心设计的P4编程实例,帮助
读者掌握P4编程的核心概念和技术;第6章介绍可编程交换芯片的实战项目,帮助读者在实际的学习工
作中灵活应用可编程交换芯片技术。
本书面向高等学校计算机网络方向的本科生、研究生,以及云计算、互联网企业中的网络研发工程
师、架构师,也可供对可编程交换芯片、P4语言感兴趣的读者学习参考。
第1章 可编程交换芯片概述1
11 可编程交换芯片产生的背景1
111 可编程交换芯片是SDN发展过程的自然产物 1
112 可编程交换芯片的发展是学界与业界互相促进的结果 3
12 可编程交换芯片的实现原理4
121 传统交换芯片存在的问题 4
122 可编程交换芯片的设计目标 6
123 可编程交换芯片的参考实现——RMT架构 7
124 可编程交换芯片与传统交换芯片的比较 13
13 可编程交换芯片的应用场景14
131 传统交换设备功能的增强 14
132 网关类应用 15
133 新型网络应用 16
14 本章小结16
第2章 P4语言概述17
21 P4语言的特点17
22 P4语言规范19
23 P4编程架构19
24 P4报文路径22
25 P4 “hello, world” 实例程序24
26 P4学习资料30
27 P4语言的发展前景31
28 本章小结31
第3章 P4语言详解32
31 P4语言概述32
311 P4语言的关键字 32
312 P4语言的数据类型 32
32 P4语言基本数据类型及其表达式33
321 无符号整型 33
322 有符号整型 36
323 整型常量 38
324 varbit类型 38
325 布尔类型 39
326 error类型 40
33 复合数据类型及其表达式40
331 枚举类型 41
332 结构类型 44
333 元组类型 45
334 header类型 46
335 header stack类型 49
336 header union类型 50
337 集合类型 51
338 extern类型 53
34 有关数据类型的其他主题53
341 类型默认值 53
342 未初始化的值 54
343 类型转换 54
344 类型别名 55
345 类型嵌套规则 56
346 运算符的优先级 56
347 表达式的求值顺序 58
348 P4中非法算术表达式举例 58
35 函数59
36 语句60
361 赋值语句 60
362 条件语句 60
363 switch语句 61
前言
V
364 return语句 62
365 exit语句 62
37 control62
371 control的定义 63
372 action 64
373 table 65
374 control调用的方法 69
38 parser70
381 parser的定义 70
382 parser中的语句 71
383 parser value set 73
39 deparser74
391 将数据插入报文 74
392 计算checksum 75
310 package76
311 本章小结76
第4章 P4开发环境搭建77
41 使用虚拟机搭建P4开发环境78
411 安装Ubuntu 2004 78
412 安装P4开发环境 78
42 BMv2网络拓扑的搭建79
43 P4程序的编译和运行80
431 编译P4“hello,world”实例程序 80
432 运行P4“hello,world”实例程序 80
44 simple_switch_CLI使用方法介绍84
441 simple_switch_CLI命令概览 84
442 通过simple_switch_CLI进行表项配置 85
45 本章小结87
第5章 P4编程实例88
51 可编程parser实例88
511 parser实例的主要功能 89
512 parser实例的代码清单 89
513 parser实例代码的详细解释 93
514 parser实例的运行 101
515 parser实例小结 104
52 最长前缀匹配算法lpm实例104
521 lpm实例的主要功能 104
522 lpm实例的代码清单 105
523 lpm实例代码的详细解释 108
524 lpm实例的运行 109
525 lpm实例小结 112
53 三态匹配ternary实例112
531 ternary实例的主要功能 113
532 ternary实例的代码清单 113
533 ternary实例代码的详细解释 116
534 ternary实例的运行 117
535 ternary实例小结 120
54 范围匹配range实例120
541 range实例的主要功能 120
542 range实例的代码清单 121
543 range实例代码的详细解释 123
544 range实例的运行 124
545 range实例小结 126
55 可编程deparser实例127
551 deparser实例的主要功能 127
552 deparser实例的代码清单 127
553 deparser实例代码的详细解释 131
554 deparser实例的运行 133
555 deparser实例小结 135
56 selector实例135
561 selector实例的主要功能 137
562 selector实例的代码清单 137
563 selector实例代码的详细解释 138
564 selector实例的运行 140
565 selector实例小结 142
57 register实例143
571 register实例的主要功能 143
572 register实例的代码清单 144
573 register实例代码的详细解释 147
574 register实例的运行 150
575 register实例小结 153
58 counter实例154
581 counter实例的主要功能 154
582 counter实例的代码清单 154
583 counter实例代码的详细解释 156
584 counter实例的运行 158
585 counter实例小结 161
59 meter实例161
591 meter实例的主要功能 161
592 meter实例的代码清单 161
593 meter实例代码的详细解释 162
594 meter实例的运行 164
595 meter实例小结 166
510 resubmit/recirculate实例167
5101 resubmit实例的主要功能 168
5102 resubmit实例的代码清单 168
5103 resubmit实例代码的详细解释 169
5104 resubmit实例的运行 172
5105 resubmit实例小结 175
511 clone实例175
5111 clone实例的主要功能 176
5112 clone实例的代码清单 176
5113 clone实例代码的详细解释 177
5114 clone实例的运行 178
5115 clone实例小结 181
512 vnic实例181
5121 vnic实例的主要功能 183
5122 vnic实例的代码清单 183
5123 vnic实例代码的详细解释 185
5124 vnic实例的运行 186
5125 vnic实例小结 189
513 P4Runtime实例189
5131 P4Runtime实例的主要功能 191
5132 P4Runtime实例的代码清单 192
5133 P4Runtime实例代码的详细解释 194
5134 P4Runtime控制面代码 197
5135 P4Runtime实例的运行 200
5136 P4Runtime实例小结 203
第6章 P4项目实战204
61 P4项目立项与软硬件平台选型204
611 P4项目立项需要考虑的问题 204
612 P4硬件平台选型 205
613 P4软件平台选型 205
62 基于P4和可编程芯片的虚拟路由器206
621 虚拟路由器的功能 207
622 虚拟路由器适合用P4和可编程芯片实现吗 212
623 基于P4和可编程芯片的虚拟路由器的需求定义 214
624 基于P4和可编程芯片的虚拟路由器的概要设计 214
63 基于P4和可编程芯片的分流器218
631 网关设备的部署模式 218
632 网关集群化部署模式的缺点和问题 222
633 分流器设计 223
64 本章小结230
参考文献231
为什么要写这本书?
2022年夏天,我们回顾过去两年多从事有关P4语言和可编程交换芯片的研发项目,
有一个很深的体会,那就是“科学技术是第一生产力”。
我们之前长期从事网关研发工作,硬件平台是高性能服务器和高性能网卡,软件平台
是高性能数据平面开发套件及Linux内核协议栈。受限于平台本身,网关性能有限且不稳
定。首先是单台设备的性能有限,目前主流网关的带宽只能达到50Gb/s或者200Gb/s,很
难有数量级的提升。其次是每次更新硬件时,例如更换不同型号的网卡或者CPU,转发
性能都会发生变化,有时会变好,有时会变差,因此每次都要重新进行一遍性能优化工作
才能确保得到预期的性能。最后是在同样配置下,遇到不同类型的流量,网关性能也会产
生较大的波动。例如,受CPU Cache的影响,包长较长的报文,转发性能相对较差。
这种状况在P4和可编程交换芯片出现之后有了很大的变化。使用P4和可编程交换
芯片,可以在交换机上实现网关的功能,带宽较之前提升一个数量级,即从百吉比特每秒
(Gb/s)提升至太比特每秒(Tb/s)级别,并且转发性能也很稳定,一般在平均256字节包
长时便可以达到线速。另外,芯片升级过程也比较平滑,如从3.2Tb/s升级至6.4Tb/s,除
端口数量增加1倍之外,其他地方(包括P4程序等)基本不需要变化。
当一种新的技术取得一个数量级的优势时,它便会展现极强的生命力。
但是学习P4和可编程交换芯片有两个难点。第一个难点是P4语言是一个领域特定
语言(Domain Specific Language,DSL)。P4语言本身并不复杂,有C语言知识的读者基
本就能直接读懂P4源代码。但是P4面向的是可编程交换芯片领域,而可编程交换芯片是
用在交换机中的,这导致P4语言不可避免地涉及很多交换机研发的知识和概念。
P4语言处于网络研发和交换机研发的交叉点上,因此开发人员既要掌握网络开发的
知识,理解业务逻辑,熟悉各种网络协议的处理,又要掌握部分交换机研发的知识,熟悉
交换机的计算资源和存储资源的使用。本书从网络开发者的视角,将交换机研发的专业
知识去粗取精、融会贯通,简洁明了地表述出来,配合P4相关的编程知识,一起呈现给
读者。
第二个难点是P4语言相关资料繁杂。每种资料其实都是有上下文的,编者刚开始学
习时,因为没有厘清P4语言和可编程交换芯片发展的脉络,所以容易如坠迷津,不知所云。
编者经过长时间的阅读、思考、摸索、实践、再阅读、再思考,才逐渐整理出一个比较清
晰的发展脉络。
编者希望这本书能降低初学者学习P4的门槛,提供一份P4学习地图,既能高屋建
瓴、总揽全局、仰观宇宙之大,又能细致入微、鞭辟入里、俯察品类之盛。
II
本书面向的读者
本书面向高等学校计算机网络方向的本科生、研究生,为他们写程序、做实验、写论
文提供帮助。本书面向云计算、互联网企业中的网络研发工程师,为他们开展P4相关项
目提供参考。本书面向对P4语言感兴趣的技术专家和架构师,为他们进行项目方案选型
提供新的思路。
一点说明
本书共分为6章,第1章介绍可编程交换芯片的产生背景、实现原理、特点和优势,
第2章介绍P4语言的特点和P4编程架构,第3章详细介绍P4语言,第4章介绍如何搭
建P4编程环境,第5章通过编程实例介绍P4编程的核心概念和技术,第6章介绍P4和
可编程交换芯片的实际项目。本书的开发环境和实例代码的下载地址可扫描下方二维码
获取。
配套资源
本书第1章、第2章、第5章和第6章由潘卫平编写,第3章和第4章部分内容由龚
志敏编写,其余部分由潘卫平编写。全书由潘卫平统稿。
非常幸运躬逢信息化和云计算的时代,感谢百度公司提供的良好的工作环境,也感谢
编辑安妮、李燕为本书所做的细致而专业的工作。受到编者认知层次、技术水平、写作能
力以及时间的限制,本书难免有错误或者不准确的地方,欢迎读者指正,联系方式可从本
书配套资源压缩包中获取,不胜感谢。
编者
2024年6月
评论
还没有评论。