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可编程交换机之间的差异。
P4学习笔记(一)初始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(内部元数据):由交换机提供的与每个数据包相关联的元数据,例如已接收数据包的输入端口。

P4学习笔记(一)初始P4
图2显示了使用P4可编程交换机的典型工作流程。交换机制造商为该交换机提供硬件或软件实现框架,架构定义和P4编译器。 P4程序员为特定的架构编写程序,在交换机及其外部定义一组P4可编程组件数据平面接口。
编译一组P4程序实现以下两个功能:

  • •数据平面配置,实现输入程序中描述的转发逻辑

  • •用于管理控制平面中数据平面中对象状态的API