![]()
内容推荐 "网络技术是云计算的关键技术之一,可编程交换芯片技术是网络领域近年来比较有影响力的新技术,是 软件定义网络(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
1.1 可编程交换芯片产生的背景...............................................................................1
1.1.1 可编程交换芯片是SDN发展过程的自然产物 ............................................1
1.1.2 可编程交换芯片的发展是学界与业界互相促进的结果 ..............................3
1.2 可编程交换芯片的实现原理...............................................................................4
1.2.1 传统交换芯片存在的问题 ..............................................................................4
1.2.2 可编程交换芯片的设计目标 ..........................................................................6
1.2.3 可编程交换芯片的参考实现——RMT架构 ................................................7
1.2.4 可编程交换芯片与传统交换芯片的比较 ....................................................13
1.3 可编程交换芯片的应用场景.............................................................................14
1.3.1 传统交换设备功能的增强 ............................................................................14
1.3.2 网关类应用 ....................................................................................................15
1.3.3 新型网络应用 ................................................................................................16
1.4 本章小结..........................................................................................................16
第2章 P4语言概述.................................................................17
2.1 P4语言的特点.................................................................................................17
2.2 P4语言规范....................................................................................................19
2.3 P4编程架构....................................................................................................19
2.4 P4报文路径....................................................................................................22
2.5 P4 “hello, world” 实例程序..............................................................................24
2.6 P4学习资料....................................................................................................30
2.7 P4语言的发展前景..........................................................................................31
2.8 本章小结..........................................................................................................31
第3章 P4语言详解.................................................................32
3.1 P4语言概述....................................................................................................32
3.1.1 P4语言的关键字 ...........................................................................................32
3.1.2 P4语言的数据类型 .......................................................................................32
3.2 P4语言基本数据类型及其表达式....................................................................33
3.2.1 无符号整型 ....................................................................................................33
3.2.2 有符号整型 ....................................................................................................36
3.2.3 整型常量 ........................................................................................................38
3.2.4 varbit类型 ......................................................................................................38
3.2.5 布尔类型 ........................................................................................................39
3.2.6 error类型 .......................................................................................................40
3.3 复合数据类型及其表达式................................................................................40
3.3.1 枚举类型 ........................................................................................................41
3.3.2 结构类型 ........................................................................................................44
3.3.3 元组类型 ........................................................................................................45
3.3.4 header类型 ....................................................................................................46
3.3.5 header stack类型 ...........................................................................................49
3.3.6 header union类型 ..........................................................................................50
3.3.7 集合类型 ........................................................................................................51
3.3.8 extern类型 .....................................................................................................53
3.4 有关数据类型的其他主题................................................................................53
3.4.1 类型默认值 ....................................................................................................53
3.4.2 未初始化的值 ................................................................................................54
3.4.3 类型转换 ........................................................................................................54
3.4.4 类型别名 ........................................................................................................55
3.4.5 类型嵌套规则 ................................................................................................56
3.4.6 运算符的优先级 ............................................................................................56
3.4.7 表达式的求值顺序 ........................................................................................58
3.4.8 P4中非法算术表达式举例 ...........................................................................58
3.5 函数.................................................................................................................59
3.6 语句.................................................................................................................60
3.6.1 赋值语句 ........................................................................................................60
3.6.2 条件语句 ........................................................................................................60
3.6.3 switch语句 .....................................................................................................61
前言
V
3.6.4 return语句 ......................................................................................................62
3.6.5 exit语句 .........................................................................................................62
3.7 control.............................................................................................................62
3.7.1 control的定义 ................................................................................................63
3.7.2 action ..............................................................................................................64
3.7.3 table ................................................................................................................65
3.7.4 control调用的方法 ........................................................................................69
3.8 parser..............................................................................................................70
3.8.1 parser的定义 .................................................................................................70
3.8.2 parser中的语句 .............................................................................................71
3.8.3 parser value set ...............................................................................................73
3.9 deparser..........................................................................................................74
3.9.1 将数据插入报文 ............................................................................................74
3.9.2 计算checksum ...............................................................................................75
3.10 package..........................................................................................................76
3.11 本章小结..........................................................................................................76
第4章 P4开发环境搭建............................................................77
4.1 使用虚拟机搭建P4开发环境..........................................................................78
4.1.1 安装Ubuntu 20.04 .........................................................................................78
4.1.2 安装P4开发环境 ..........................................................................................78
4.2 BMv2网络拓扑的搭建.....................................................................................79
4.3 P4程序的编译和运行......................................................................................80
4.3.1 编译P4“hello,world”实例程序 .................................................................80
4.3.2 运行P4“hello,world”实例程序 .................................................................80
4.4 simple_switch_CLI使用方法介绍....................................................................84
4.4.1 simple_switch_CLI命令概览 ........................................................................84
4.4.2 通过simple_switch_CLI进行表项配置 .......................................................85
4.5 本章小结..........................................................................................................87
第5章 P4编程实例.................................................................88
5.1 可编程parser实例..........................................................................................88
5.1.1 parser实例的主要功能 .................................................................................89
5.1.2 parser实例的代码清单 .................................................................................89
5.1.3 parser实例代码的详细解释 .........................................................................93
5.1.4 parser实例的运行 .......................................................................................101
5.1.5 parser实例小结 ...........................................................................................104
5.2 最长前缀匹配算法lpm实例..........................................................................104
5.2.1 lpm实例的主要功能 ...................................................................................104
5.2.2 lpm实例的代码清单 ...................................................................................105
5.2.3 lpm实例代码的详细解释 ...........................................................................108
5.2.4 lpm实例的运行 ...........................................................................................109
5.2.5 lpm实例小结 ...............................................................................................112
5.3 三态匹配ternary实例....................................................................................112
5.3.1 ternary实例的主要功能 ..............................................................................113
5.3.2 ternary实例的代码清单 ..............................................................................113
5.3.3 ternary实例代码的详细解释 ......................................................................116
5.3.4 ternary实例的运行 ......................................................................................117
5.3.5 ternary实例小结 ..........................................................................................120
5.4 范围匹配range实例......................................................................................120
5.4.1 range实例的主要功能 ................................................................................120
5.4.2 range实例的代码清单 ................................................................................121
5.4.3 range实例代码的详细解释 ........................................................................123
5.4.4 range实例的运行 ........................................................................................124
5.4.5 range实例小结 ............................................................................................126
5.5 可编程deparser实例....................................................................................127
5.5.1 deparser实例的主要功能 ............................................................................127
5.5.2 deparser实例的代码清单 ............................................................................127
5.5.3 deparser实例代码的详细解释 ....................................................................131
5.5.4 deparser实例的运行 ....................................................................................133
5.5.5 deparser实例小结 ........................................................................................135
5.6 selector实例.................................................................................................135
5.6.1 selector实例的主要功能 .............................................................................137
5.6.2 selector实例的代码清单 .............................................................................137
5.6.3 selector实例代码的详细解释 .....................................................................138
5.6.4 selector实例的运行 .....................................................................................140
5.6.5 selector实例小结 .........................................................................................142
5.7 register实例..................................................................................................143
5.7.1 register实例的主要功能 .............................................................................143
5.7.2 register实例的代码清单 .............................................................................144
5.7.3 register实例代码的详细解释 .....................................................................147
5.7.4 register实例的运行 .....................................................................................150
5.7.5 register实例小结 .........................................................................................153
5.8 counter实例..................................................................................................154
5.8.1 counter实例的主要功能 .............................................................................154
5.8.2 counter实例的代码清单 .............................................................................154
5.8.3 counter实例代码的详细解释 .....................................................................156
5.8.4 counter实例的运行 .....................................................................................158
5.8.5 counter实例小结 .........................................................................................161
5.9 meter实例.....................................................................................................161
5.9.1 meter实例的主要功能 ................................................................................161
5.9.2 meter实例的代码清单 ................................................................................161
5.9.3 meter实例代码的详细解释 ........................................................................162
5.9.4 meter实例的运行 ........................................................................................164
5.9.5 meter实例小结 ............................................................................................166
5.10 resubmit/recirculate实例.............................................................................167
5.10.1 resubmit实例的主要功能 .......................................................................168
5.10.2 resubmit实例的代码清单 .......................................................................168
5.10.3 resubmit实例代码的详细解释 ...............................................................169
5.10.4 resubmit实例的运行 ...............................................................................172
5.10.5 resubmit实例小结 ...................................................................................175
5.11 clone实例...................................................................................................175
5.11.1 clone实例的主要功能 .............................................................................176
5.11.2 clone实例的代码清单 .............................................................................176
5.11.3 clone实例代码的详细解释 .....................................................................177
5.11.4 clone实例的运行 .....................................................................................178
5.11.5 clone实例小结 .........................................................................................181
5.12 vnic实例......................................................................................................181
5.12.1 vnic实例的主要功能 ..............................................................................183
5.12.2 vnic实例的代码清单 ..............................................................................183
5.12.3 vnic实例代码的详细解释 ......................................................................185
5.12.4 vnic实例的运行 ......................................................................................186
5.12.5 vnic实例小结 ..........................................................................................189
5.13 P4Runtime实例..........................................................................................189
5.13.1 P4Runtime实例的主要功能 ...................................................................191
5.13.2 P4Runtime实例的代码清单 ...................................................................192
5.13.3 P4Runtime实例代码的详细解释 ...........................................................194
5.13.4 P4Runtime控制面代码 ...........................................................................197
5.13.5 P4Runtime实例的运行 ...........................................................................200
5.13.6 P4Runtime实例小结 ...............................................................................203
第6章 P4项目实战...............................................................204
6.1 P4项目立项与软硬件平台选型......................................................................204
6.1.1 P4项目立项需要考虑的问题 .....................................................................204
6.1.2 P4硬件平台选型 .........................................................................................205
6.1.3 P4软件平台选型 .........................................................................................205
6.2 基于P4和可编程芯片的虚拟路由器.............................................................206
6.2.1 虚拟路由器的功能 ......................................................................................207
6.2.2 虚拟路由器适合用P4和可编程芯片实现吗 ............................................212
6.2.3 基于P4和可编程芯片的虚拟路由器的需求定义 ....................................214
6.2.4 基于P4和可编程芯片的虚拟路由器的概要设计 ....................................214
6.3 基于P4和可编程芯片的分流器.....................................................................218
6.3.1 网关设备的部署模式 ..................................................................................218
6.3.2 网关集群化部署模式的缺点和问题 ..........................................................222
6.3.3 分流器设计 ..................................................................................................223
6.4 本章小结........................................................................................................230
参考文献................................................................................231 |