P4 tutorials实验后补习理论知识

学习完P4 tutorials----Basic Forwarding和Basic Tunneling两个实验,也急需补充些理论知识。
透过实验的现象,再看理论也不是很枯燥难懂。

什么是P4

P4是“Programming Protocol-independent Packet Processors” 每个词的首字母的缩写。最早是在https://​arxiv.​org/​pdf/​1312.​1719.​pdf. 这篇论文所发布。
一开始P4是为可编程交换机而设计,现在已经扩展到交换机、网卡、FPGA以及软交换机等很多种设备。现在我们一般在称P4中的这些设备为target。

传统交换机 vs P4可编程交换机

target的实现一般包括控制平面和数据平面。P4主要是设计数据平面的功能,以及涉及一部分控制平面和数据平面交互接口的定义。
如下图,我们看传统交换机和P4可编程交换机的不同之处。

在这里插入图片描述
传统交换机,是由设备厂商定义数据平面的功能。控制平面管理数据平面是通过管理表(如:routing table),配置特定对象(如:meters),处理控制报文(如:routing protocol packets)、异步事件(如:link up/down、notificatins)。

相比传统交换机P4可编程交换机有本质的区别:
数据平面功能不是预先设定的,而是P4程序定义的。数据平面初始化功能是由P4程序定义(如图中长红箭头),没有内置的网络协议。
控制平面和数据平面交互使用统一的通道。P4程序编译生成控制平面和数据平面交互的API。

因此P4是协议无关的,使用者可以灵活定义数据平面的行为。

P4中的核心概念

Header Type:描述数据包中报文头的字段和大小尺寸。
Parsers:描述收到数据包的报文头序列、如何识别序列以及提取数据包的报文头和字段。
Tables:关联用户定义的key与action关联。P4 Tables是传统交换机Tables的扩充,它能实现routing table,flow table,acl以及其它用户自定义table的查找。包括多变量决策。
Actions:描述如何操作数据包报文头字段和元数据(metadata)的代码。actions可以包括控制平面在runtime时提供的数据。
Match-action units:执行以下操作顺序:

  1. 从数据包或计算的元数据中构造查找keys,
  2. 使用keys进行查表,选择要执行的action(包括关联数据),
  3. 最后执行选定的action。
    Control flow:描述在target上的包处理程序,包括:match-action units调用的数据相关顺序,解析(包重组)。
    Extern objects:是特定的体系架构,可以由P4程序通过API操作,但是由于它属于hard-wired不可改变(如:checksum units)不能被P4编辑。
    User-defined metadata:与每个数据包相关的用户定义的数据包构造。
    Intrinsic metadata:与每个数据包相关的结构提供的元数据(如:数据包的入接口)

P4 对target编程的工作流

下图,用P4编辑target的标准工作流程:

在这里插入图片描述
target 由设备厂商提供软件或硬件的实现框架、架构模型,P4编译器;架构用户为特定的体系架构编写P4的程序代码。该架构模型定义了target上的一组P4可编程组件及其外部数据平面接口。

编译P4程序会产生两个组件:

  1. 数据平面的配置,它描述了程序的转发逻辑,这是一个.bin的文件(例如针对 ASIC),也可以是其他格式的文件,例如运行在 simple_switch 就是一个 .json文件;
  2. 控制平面管理数据平面对象状态的API。

例如我之前介绍的P4 tutorials----Basic Forwarding这个实验中
P4 program是basic.p4,P4 compiler是p4c,P4 architecture model是V1 model,target是bmv2软件交换机,API是P4Runtime。
basic.p4通过编译器p4c编译后生成basic.json并加载到bmv2软交换机,
编译器生成basic.p4.p4info.txt文件,这个文件中包含了sX-runtime.json里定义的tables,keys,actions,由P4Runtime加载到控制平面。

architecture model

之前实验用的软件交换机BVM2对应的 V1Model。从下图可以看出,数据包的处理过程像一条流水线一样,它由5个模块组成,分别是:
Parser:解析器,对数据包根据预先定义好的格式进行解析,并提取头部的各个字段,在这里可能会根据不同的头部进行匹配。比如如果三层包头的协议字段是0x0800则是ip报文。
Ingress:Ingress流水线部分,数据处理逻辑的入口。
TM:Traffic Manager,在这里定义核心的处理逻辑,并且会对一些元数据进行更新。
Egress:Egress流水线部分,数据处理逻辑的出口。
Deparser:用于对数据包进行重组,因为数据包在处理过程中经历了分解和处理。所以最后转发的时候需要重组一下。

不过现在据说PSA才是真实世界里匹配万物的利器,有空再着重学习一下,
特别是第一个支持P4编程的Tofino芯片也值得一看。
PSA

今天先到这吧,改天再继续把Parser、Ingress、 Egress、Deparser学一学。给自己多挖几个坑。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值