一、P4是什么?
P4是一种高级语言,用来编写协议无关的包处理器,P4和SDN 控制协议Openflow一起工作。如何一起工作?我们可以看到SDN引入了控制平台和转发平台,而P4和OpenFlow就工作在控制平台和转发平台之间。那么都运行在其之间,OpenFlow和P4的区别在哪?OpenFlow没办法改变switch的处理逻辑,它只能通过表配置来对switch进行小小的控制,相当于OpenFlow面对的还是fix function的switch。而P4不仅可以影响switch中的某些表,而且还可以对switch的处理逻辑进行编程。可以这样说,P4提供了网络编程的抽象层次。
P4主要有以下目标:
(1) 可以改变packet switch的处理数据包的逻辑流程
(2) 使得switch不再限制于处理特定的协议数据包,协议无关。
(3) 平台独立,编程者可以不基于底层硬件来进行数据包处理流程的编写,通过编译器再将程序映射到特定的硬件交换机上
为什么要引入P4?
OpenFlow通过显示地声明协议头部来表名可以处理的操作,近些年来,协议头部集合已经从12个扩展到了41个,复杂性大大提高,而且也没有提供足够的灵活性来增加新的协议。
P4可以看做是OpenFlow的一种未来演化趋势。
二、一个抽象的转发模型
下图是一个抽象的switch ,它由一个可编程的parser、具有很多状态的并行或者组合的match+action构成。
上面这个模型与openflow模型的区别有三点:
(1) openflow模型假定了一个fix parser,而这个模型假定了一个可编程的parser
(2) openflow模型假定match+action的stages是顺序的,而这个模型假定它们既可以是顺序的,也可以是并列的
(3) 上面的这个模型假定action是由被switch支持的,独立于特定协议的基元(primitives)组成的
实际中的包可能会被不同的转发设备转发,比如说Ethernet switches,router等。但是我们不管这些底层硬件,只把注意力集中在P4语言如何描述在这个抽象的转发模型上的数据转发。通过这一点,程序员可以编写平台无关的程序,然后通过编译器将它映射到不同的转发设备上去。
转发模型有两种类型的控制操作:配置和填充(config