P4学习笔记(一)初识P4
P4学习笔记(二)一个简单P4交换机实现
文章目录 P4简介P4提供的核心抽象P4的优点
本系列我学习P4的学习笔记,很多是翻译自官方文档,很多不是很准确的地方,建议大家去看官方文档。
P4简介
P4是一种语言,用于表示如何通过可编程转发元件(如硬件或软件交换机,网络接口卡,路由器或网络)的数据平面处理数据包。P4(Programming Protocol-independent Packet Processors:独立于编程协议的数据包处理器)名字的来源于下面这篇论文: https://arxiv.org/pdf/1312.1719.pdf。 虽然P4是最初设计用于编程交换机,但现在其范围已扩大到涵盖各种各样的设备。在本文档的其余部分中,我们对所有此类设备使用通用术语目标。
许多类似设备的实现包含控制平面和数据平面。 P4旨在仅实现数据平面功能。 P4程序还部分地定义了控制平面和数据平面通信的接口,但P4不能用于描述控制平面功能。在本文档的其余部分中,当我们将P4称为“编程目标”时,我们的意思是“编程目标的数据平面”。作为目标的具体示例,图1说明了传统的特定功能的交换机和P4可编程交换机之间的差异。
在传统的交换机中,制造商定义了数据平面功能,控制平面通过管理表格中的条目来控制数据平面(例如:路由表),配置专用对象(例如:meters),以及处理控制分组(例如:路由协议分组)或异步事件,例如链路状态改变或学习通知。
P4可编程交换机与传统交换机有以下主要两个区别:
P4数据平面功能未提前固定,但由P4程序确定。数据
在初始化时配置平面以实现P4程序描述的功能(由长红色箭头表示),并且没有现有网络协议的内置知识。控制平面使用与特定功能交换机一样的通道与数据平面通信,但数据平面中的表集合和其他对象不再固定,因为它们由P4定义且利用P4编译器生成控制平面使用的API与数据平面通信。
因此,P4可以说是独立于协议的,它使程序员能够自由实现一组协议和其他数据平面行为。 P4提供的核心抽象 1、Header types(协议头类型):描述数据包中每个协议头的格式。2、Parser(解析器):从接收数据包中识别协议头等其他元数据。3、table(表):将用户定义的键与action相关联。 P4表概括了传统的交换表;它们可用于实现路由表,flow查找表,访问控制列表等,以及用户根据自己需求定义的表类型。4、Action: 是描述如何操作包头文件和元数据的代码片段。Actions可以包括在运行时由控制平面提供的数据。5、Match-action(匹配操作单元)执行以下操作序列:
从包或元数据中查找key,再使用key执行表查找,选择要执行的操作(包括关联的数据),以及最后执行选定的操作。6、Control flow(控制流)表示一个描述目标数据包处理的命令性程序,包括匹配action单元调用的数据相关序列。也可以使用控制流来执行Deparsing(分组重组)。7、Extern objects(外部对象)是体系结构特定的构造,可以利用P4程序通过定义好的API进行操作,但其内部行为是硬连线的(例如校验和单元),因此不能用P4编程。8、User-defned metadata(用户定义的元数据):与每个数据包关联的用户定义的数据结构。9、Intrinsic metadata(内部元数据):由交换机提供的与每个数据包相关联的元数据,例如已接收数据包的输入端口。
图2显示了使用P4可编程交换机的典型工作流程。交换机制造商为该交换机提供硬件或软件实现框架,架构定义和P4编译器。 P4程序员为特定的架构编写程序,在交换机及其外部定义一组P4可编程组件数据平面接口。
编译一组P4程序实现以下两个功能:
•数据平面配置,实现输入程序中描述的转发逻辑
•用于管理控制平面中数据平面中对象状态的API
P4是一种领域特定的语言,旨在可在多种目标上实现,包括可编程网络接口卡,FPGA,软件开关和硬件ASIC。因此,该语言仅限于可以在所有这些平台上实现和运行。
假设表查找操作以及与外部对象的交互的成本固定,所有P4程序能(即解析器和控件)对接收的数据包中每个字节执行恒定数量的分析操作。尽管解析器可能包含循环操作,在每次循环当中要提取一些标头,但解析器对数据包本身的操作次数不随之变化。换一句话说,P4程序的计算复杂度和报文头多少线性相关,而不是依赖于处理数据的大小(例如流数或已处理的数据包总数)。这些保证是必要的在实现跨多个目标的快速数据包处理的场景下。
P4的优点
与最先进的数据包处理系统(例如,基于在自定义硬件之上编写微代码的系统)相比,P4具有许多显着的优势:
1、灵活性:与传统的交换机相比,P4使许多包转发策略可用程序实现,而传统的交换机向用户提供了固定功能的转发功能。2、可移植性:P4可以仅使用通用操作和表查找来表达复杂的,独立于硬件的数据包处理算法。 此类程序可在实现相同体系结构的硬件目标之间移植。3、资源映射和管理:P4程序抽象地描述了存储资源(例如IPv4源地址, 编译器将此类用户定义的字段映射到可用的硬件资源,并管理底层细节,例如分配和调度。4 、软件化:P4程序具有重要的好处,例如类型检查,信息隐藏和软件重用。5、 组件化:制造商提供的组件库可用于将特定于硬件的功能包装到可移植的高级P4架构中。6、硬件和软件分离:上游制造商可能会使用抽象体系结构,进一步将低层体系结构细节的发展与高层处理脱钩。7、调试:制造商可以提供体系结构的软件模型,以帮助开发和调试P4程序