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 Main Memory 主存

Main Memory 主存 1. 主存在系统中的位置 2. 共享资源 3. 主存面临的问题 内存子系统 channel->DIMM(内存条)->Rank->Chip->Bank->Row/Column 内存子系统分解 channel DIMM 3. Rank 4. chip 5. bank...

P4 初体验之p4factory

P4 近来在SDN的数据平面可以算是大行其道,无论是Nick 大神的Barefoot 公司的成立,还是美国高校和产业界几乎半年一次的workshop 和讨论,都让从事网络研究的人特别是年轻人趋之若鹜。之前,我的一些工作更关注与控制平面,关注点也更多的在控制器。 p4, 我最早的接触还是当时follow Nick Feamster 教授的SDN公开课时, 后来陆陆续续看了些相关的文章。 但是数据平面...

P4语言的特性、P4语言和P4交换机的工作原理和流程简介

现有的SDN解决方案将控制平面与转发平面分离,并为我们提供了控制平面的可编程能力。而事实上,目前通过软件编程实现的控制平面的功能,在传统的高级交换机和路由器上也都能实现,差别是厂商把这些功能固化在了系统/硬件中,这些系统/硬件是封闭的,第三方难以介入进行定制或二次开发。虽然一些高级设备提供了SDK,使得用户能够进行一定程度的定制,但也必须受厂商所制定的规范的限制,能做到的事情十分有限。目前SDN所...

jdk的安装和配置教程

1.上官网下载jdk的安装包 https://www.oracle.com/   进入官网,按如下所示步骤进行  选择jdk    选择版本 windows安装教程,下面是linux安装教程  由于新版需要登录才可以下载,所以我们选择去网上找一个,哈哈,我根本不想注册,感谢这位大佬分享账号了,大家不要改密码啊 参考文档 https://b...

残差网络

残差块 残差块是两层神经网络在L层**,得到a[l+1]再次进行**。在ReLU非线性**前加上a[l],a[l]的信息直接到达神经网络的深层 不再沿着主路径传递。也称跳远连接(捷径)。 跳远连接构成残差块,残差块构成残差网络。  由此得出a[l+2]=a[l]。所以尽管多了两层,也只是把a[l]的值赋给a[l+2],建立了恒等函数。 要保证a[l]和a[l+2]的维度相同 若不同需要将...

猜你喜欢

关于请假申请的时间计算

最近在优化一个办公系统,需要计算请假时间 首先要实现请假时间的计算,需要以下几步 第一步、首先我们要知道时间表(我们以最常用的 上午上班时间(09:00 - 12:00)下午(13:00 - 18:00)为例) 第二步,我们分析可能出现的可能性 1、早上请假 2、下午请假 3、跨中午请假 4、跨天但又不满一天请假 5、跨天满一天请假 6、跨周请假(需要除去周末) 7、节假日请假 (需要除去节假日)...

Eclipse下Maven新建Web项目index.jsp报错完美解决(war包)

Eclipse下Maven新建Web项目步骤   1、         2、           3、         4、             5、        问题描述   最近用eclipse新建了一个maven项目,...

js——iterator,可枚举,for of、for in、foreach

1.javascript中的Iterator 参考链接 参考链接 执行Symbol.iterator这个属性,会返回一个遍历器对象。该对象的根本特征就是具有next方法。每次调用next方法,都会返回一个代表当前成员的信息对象,具有value和done两个属性。 js中具备Iterator接口的数据结构有: 总结:Iterator主要是供for of使用。只有部署了Iterator接口的数据结构,...

在线工具

1、picdiet是一款在线批量压缩图片神器,它不需要后端服务器或者API的支持,仅通过你的浏览器来压缩图片大小,这意味着它压缩图片极快并且不会导致隐私或敏感图片泄漏。同时我们大量的测试结果也证明其压缩表现要远好于常规的压缩软件如:jpegoptim,jpegtran,jpegrescan和jpegmini 2、cloudconvert是一款在线全能格式转换工具 3、smallpdf在线pdf处理...

2019年第一次画画,顺便评价一下ipadPro和Surface的画画优劣

难得放假了,除了弹吉他以外,也画一下画。 绘画的过程也发上来给大家看看: 接下来说说绘画的工具。 我是使用iPadPro2 10.5英寸+Apple Pencil来画画的。 一开始我打算使用Surface Go来画画的,我想,之前我都是拿Wocam画板+PhotoShop来画画的,Surface能直接在屏幕上画画,按道理应该更好用才对。Surface Go买回来几个月,那支笔都没怎样用过,于是就试...

问答精选

Pass decimal value to django model from formated input

I, have a DecimalField in Django model and form, likewise I, have an input in html form, with comma as thounsand separator and dot for decimal separator (123,456.78), formated with jquery plugin Cleav...

Inheritance vs Static in Java

I dont quite understand why Static methods can be inherited in Java ? Inheritance is like inheriting from the base class AND Static belongs to the Class and not Object. So if the Static belongs to the...

Hiding form submit button in loop

I am using javascript to hide the post button until text has been entered into the form. It works fine but when i have the form being rendered for each post in a loop it only works for the first post ...

SUMIF with listdown criteria pt.2

I ask earlier about this. here is the link and I used the checked answer. When I tried to add another listdown with not the same array. I'm having an error if I choose all. here is my full formula: {=...

MvxSpinner item should be blank until not select from dropdown list

I'm using MvxSpinner and just want to show drop down selected value over spinner.Currently its showing first item from dropdown list but i want to show blank as i didn't choose any value from dropdown...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答