什么是P4语言
P4 是一种声明性语言,用于告诉转发平面设备(交换机、NIC、防火墙、过滤器等)如何处理数据包。这真的很酷,他摆脱了传统网络硬件的束缚,我们认为它将永远改变网络设备的设计方式,业界通常称这个技术为可编程交换机。
为什么选择P4?
今天,设计一个高性能的网络设备真的很痛苦。首先,您决定需要哪些功能。然后,您尝试找到具有大致所需功能的固定功能的交换芯片。您签署保密协议以访问软件开发工具包 (SDK),并开始爬上学习曲线。使用封闭的专有API,您可以尝试将系统要求强制适应芯片的固定功能。这通常需要一些不自然的行为。归根结底,你有一个自上而下的愿望系统,但真正自下而上地定义(并以特殊的方式约束)。你被锁定在那个芯片组中,因为你的系统和你的专业知识取决于那个SDK。
P4旨在从根本上改变我们设计网络系统的方式。使用P4语言,您可以从系统设计要求开始,编写一个 P4 程序来描述系统需要如何处理数据包,然后编译程序以告诉转发元素要做什么。从本质上讲,P4 使我们能够从软件工程中带来我们熟悉的所有好处(编写程序、调试、代码覆盖率、 可证明的行为、模型检查等)到网络系统的设计。
您可以编写P4 程序来添加自定义数据包处理或分析作为网络的增值,或者,您可以使用它来减少网络必须支持的协议数量。您可以在几天内快速部署新的协议和报头格式,而无需等待数年时间让交换芯片供应商支持新功能。您可以自定义数据平面以匹配网络规模。您可以发布您的 P4 程序或将其保密,这意味着您保留 IP 的所有权,不再需要与您的芯片供应商及其所有客户共享新功能。简而言之,您可以获得(并保持)领先于业界水平。
在过去的几年中,很明显,“匹配 操作”抽象对于数据包转发非常强大。芯片正在以这种方式制造,我们预计未来会有更多。这些芯片与协议无关(它们的硬件规格没有提到任何协议,并且它们具有可编程的数据包解析器),但它们具有非常高的转发性能。独立于协议的NIC和交换机芯片需要一种语言来指定其行为,那么需要一种可以编译为各种目标转发设备(硬件和软件)的语言,P4就是这种语言。
有许多有趣的研究问题需要解决与P4有关的问题:
- P4应该如何进化?
- 编写任意 P4 程序的最佳方法是什么?
- 我们如何测试两个 P4 程序(编译前和编译后)的等效性?
- 如何证明P4程序的正确性?
- 如何从更高级别的网络策略生成 P4?
P4与软件定义网络(SDN)和OpenFlow有何关系?
P4 允许您告诉交换机如何处理数据包,并自动生成连接控制平面和转发平面的 API。因此,P4程序可以将交换机配置为看起来像OpenFlow 1.0交换机,OpenFlow 1.4交换机或其他完全不同的东西。在运行时填充匹配操作规则的控制平面可以是集中式的,也可以是分布式的,在单独的控制器上运行或直接在交换机上运行。P4 的要点是将网络从低级专有接口解放到固定功能芯片组,以实现跨一系列目标平台的独立于协议的数据包处理。