P4(Programming Protocol-Independent Packet Processor)
转自https://www.sdnlab.com/22466.html
OpenFlow的缺陷:
OF只能依据现有的协议来定义流表项。例如,OF的字段是规定好数目和格式的,匹配效率和空间占用都是问题。特定的OF生产出来后,无法用于新的协议字段,只能在现有协议上进行开发,然后面临淘汰。
我们想要一种可以自定义协议字段的类型。甚至可以自定义动作的类型。那么我们就不需要在修改协议本身,SDN的架构也将更加灵活。自定义协议字段类型,自定义动作类型就是我们所说的数据面编程。
数据面编程思想
自定义匹配字段,自定义动作类型。从而自定义流表,进而形成流水线(pipeline)。
P4(Programming Protocol-Independent packet Processor)一种数据面的高级编程语言。可以自定义匹配规则的字段数目和类型,自定义动作和规则,通过P4 Runtime(一种类似于OpenFLow的南向协议)可以充分利用P4语言的协议无关特性进而达到更自如的控制网络转发路径。

P4语言的模型,从左到右五个模块分别称作
Parser: 解析器, 解析并且提取数据包头的各个字段。
Ingress:Ingress处理,在这里定义Ingress流水线。
TM:Traffic Manager,有一些队列,用于流量控制(一些队列相关的metadata在此更新)
Egress:Egress,在这里定义Egress流水线。
Deparser:用于重组数据包,因为数据包在处理过程中经历了分解和处理。所以最后转发的时候需要重组
behavioral-model简称BMv2,是一款支持P4的软件交换机。用于功能性实验和学习,性能不是第一目标。BMv2可以和Mininet集成。
tutorials是学习P4编程最重要的教程。里面含有一些交互式的学习材料和一个搭建好环境的虚拟机。
p4c是P4的编译器,是一个综合的编译器,支持多个版本的P4代码,同时支持多种输出格式。二进制和json
P4 paper:http://arxiv.org/pdf/1312.1719.pdf
P4 have three goals:
(1) Reconfigurability in the fiels(域可重构性):
一旦部署,程序员能够改变交换机处理包的方式。
(2) Protocol independence(协议无关):
交换机不绑定任何网络协议(switches should not be tied to any specific network protocols.)
(3) Target independence(目标无关):
程序员能够描述 与底层硬件规范无关的 包处理功能
Rather than repeatedly extending the OpenFlow specification, we argue that future switches should support flexible mechanisms for parsing packets and matching header fields,作者认为未来的交换机应该提供灵活机制支持解析数据包和匹配头部。
In our abstract model (Fig. 2 The abstract forwarding model), switches forward packets via a programmable parser followed by multiple stages of match+action, arranged in series, parallel, or a combination of both.作者设计的模型中,交换机通过可编程的解析器转发数据包,这个解析器由多个阶段的 匹配+操作 组成,可以是串行、并行或两者混合。

Fig 2. The abstract forwarding model
The forwarding model is controlled by two types of operations: Configure and Populate.
Configure对解析器进行编程,设置多阶段 匹配+操作 的顺序,为每一处理阶段指定要处理的头字段。决定 支持哪些protocols以及交换机如何处理数据包。
Populate add(or remove) Configure期间指定的 匹配+操作。决定 处理包的policy at any given time
当数据包到来时,报头由解析器处理,假设数据包主体无法到达解析器。解析器识别头部字段从而定义该数据包支持的协议,将提取的字段传递给match+action表。Ingress switch负责一些转发、复制、丢弃或转发到控制器等操作,Egress对分组包头执行per-instance修改。传播期间可能会添加新的数据例如时间戳,入口交换机等附加信息,成为metadata,与数据包头字段同等待遇。
队列规则的处理方式与OF相同,action将数据包map到队列。
Section 3 A Programmable Language
浙公网安备 33010602011771号