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程序

P4学习笔记(一)初识P4相关推荐

  1. P4学习笔记(三)P4编程语言简介

    文章目录 P4学习笔记(三)P4编程语言简介 基本数据类型 Typedef 声明和初始化变量 元数据 参考资料 P4学习笔记(三)P4编程语言简介 上图展示了P4语言主要结构,下面简单讲解一下P4的基 ...

  2. P4学习笔记(二)一个简单P4交换机实现

    P4学习笔记(一)初始P4 P4学习笔记(二)一个简单P4交换机实现 文章目录 1. 架构模型 2.预定义模块详细描述 2.1 Arbiter 模块 2.2 Parser runtime 模块 2.3 ...

  3. Hadoop学习笔记—4.初识MapReduce

    一.神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个 编程模型 ,用以进行大数据量的计算.对于大 数据量的计算,通常采用的处理手法就是并行计算.但对许多开 ...

  4. ASM学习笔记1 - 初识ClassVistor ——以ClassReader的应用为例

    ASM学习笔记1 - 初识ClassVistor --以ClassReader的应用为例 1 ASM简介 什么是ASM? Java操纵类字节码的工具.是一个jar包. 如何使用? ASM提供两类API ...

  5. C语言学习笔记-P1 初识C语言(2)

    C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...

  6. C语言学习笔记-P1 初识C语言(1)

    C语言学习笔记-P1 初识C语言(1) P1 初识C语言(1) 一.什么是C语言 1.定义 2.发展 二.第一个C语言程序 Hello World 三.数据类型 四.变量,常量 未完待续!!! P1 ...

  7. xilinx srio ip学习笔记之初识srio

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之初识srio 前言 IP 设置 总结 前言 因为工作原因,需要对rapidio 的协议进行了解, ...

  8. 吴恩达《机器学习》学习笔记一——初识机器学习

    吴恩达<机器学习>学习笔记一 一. 什么是机器学习? 二.监督学习 三.无监督学习 初识机器学习 这是个人学习吴恩达<机器学习>课程的一些笔记,供自己和大家学习提升.第一篇内容 ...

  9. 【人工智能学习笔记】初识人工智能

    文章目录 前言 一.人工智能的定义 二.人工智能的应用 1.计算机视觉技术 2.自然语言处理 3.其他具体应用举例 三.AI算法工程师主要工作流程 四.人工智能的基本概念 机器学习 有监督学习 VS ...

最新文章

  1. 基于对应点的6D姿态识别
  2. 解决Android emulator PANIC: Missing emulator engine program for ‘x86‘ CPU.
  3. 传递list对象作为参数_24.scala的隐式参数
  4. 五种常用的异常值检测方法(均方差、箱形图、DBScan 聚类、孤立森林、Robust Random Cut Forest)
  5. java的准动态(反射)
  6. TensorFlow RNN tutorial解读
  7. 我大学期间看的好书推荐
  8. 利用C++语言设计可扩展线程池
  9. [LeetCode] Sum of Left Leaves 左子叶之和
  10. Python3之logging模块
  11. 45 岁以后的程序员都到哪里去了?
  12. 如何下载matlab,如何下载MATLAB?
  13. 甘特图控件VARCHART XGantt,分析拖动工具!
  14. Codeforces 474D. Flowers
  15. 饼图制作软件,饼图的制作方法
  16. 企业安全-003NTA大法
  17. 深度学习平台——Paddle核心框架介绍
  18. python 节假日_python判断工作日,节假日
  19. DTI-ATS入门(2):DTI协议纵览
  20. 如何在Windows中轻松查看最近修改的文件

热门文章

  1. php nette,php – Nette Framework – 自定义属性宏
  2. jquery延时执行
  3. uedit上传视频时提示输入的视频地址有误,请检查后再试
  4. cbnertvirtual内部框架下载_快速开发,支持前后端分离,微服务框架
  5. 卧槽,又来一个Python神器!!
  6. 苹果平板可以用html么,哪些苹果平板可以用苹果笔
  7. cqh-class 文件内容,类加载过程,编写第一个程序
  8. Activiti使用教程
  9. Introduction to Track-To-Track Fusion
  10. 优化算法系列-模拟退火算法(1)——基本原理枯燥版本