参考
- P4: Programming Protocol-Independent Packet Processors
- Design Principles for Packet Parsers
- Forwarding Metamorphosis: Fast Programmable Match-Action Processing in Hardware for SDN
- Compiling Packet Programs to Reconfigurable Switches
P4可编程技术是一种专为数据平面设计的领域特定语言(DSL),由斯坦福大学研究团队于2014年提出,旨在打破传统固定封装模式,释放数据平面的编程能力。以下是P4可编程技术的一些关键特性和应用:
1. P4的诞生:
P4语言的提出是为了在网卡、交换机、路由器等网络设备上实现包括VXLAN、MPLS等在内的各种网络协议。
2. P4语言特性:
- 协议无关性:P4语言不与特定网络协议绑定,允许用户根据现网协议支持情况和P4语法要素来实现转发逻辑自定义,可按需加入新协议,也可删去冗余协议。
- 平台无关性:P4语言无需关注底层平台细节,用户能够独立于底层硬件对报文处理功能编程。前端编译器将P4高级语言程序转换成中间表示IR,后端编译器再将IR编译成目标设备配置。
- 可重构性:P4语言支持在不更换硬件的情况下动态修改数据包处理方式,允许同一台设备根据现网需求随时重新配置。
3. P4转发模型:
P4语言定义了抽象转发模型,主要包括解析器、多级流水线和缓冲区三部分。
The abstract forwarding model.png
4. P4技术的应用:
- 数据中心互联的云边界网关:云边界网关作为连接云内外网络的桥梁,需要处理大量的数据流量,且云服务场景丰富,设计时需要考虑灵活可扩展,充分利用了P4语言的高度灵活性和可编程性。
- 分布式的带内网络遥测:分布式带内网络遥测允许网络中的多个节点协同工作,实时收集和报告网络状态信息,而无需控制平面的干预。这就需要定义数据包INT头部,用于携带遥测指令和元数据,再利用P4程序定义数据包的解析逻辑,以识别和提取INT头部。
5. P4的硬件实现:
P4语言在设计之初就是以硬件的网络可编程为目标。在其平台无关性中提到在前后端编译器的共同工作下,P4语言程序最终会被编译成目标设备配置。这个过程实际上是P4的硬件下发。P4通过硬件相关的编译器编译成硬件机器码或汇编代码,下发到硬件中,真正实现硬件的网络可编程。
5.1 Parser部分实现
以往Parser部分的设计采用固化Pipeline设计,如下图所示,该架构只能解析固定的报文头,不具有扩展性。
image.png
P4采用可编程parser设计,如下图所示。区别于Fixed parser,programmable parser添加了TCAM和RAM,TCAM存储报文头的type,RAM存储下一个状态信息,要提取的域段和其他需要的数据。
image.png
5.2 Match-Action部分实现
将查表拆分为多级。
image.png
P4可编程技术因其灵活性和可编程性,在网络领域中扮演着越来越重要的角色,特别是在软件定义网络(SDN)、网络函数虚拟化(NFV)以及网络研究和实验中。