当前位置: 首页 > 科技观察

P4:开创数据平面可编程时代

时间:2023-03-15 18:51:22 科技观察

现有的SDN解决方案将控制平面与转发平面分离,为我们提供了控制平面的可编程性。事实上,通过软件编程实现的控制平面的功能,在传统的高级交换机、路由器上也可以实现。不同的是厂商把这些功能固化在了系统/硬件中,这些系统/硬件是封闭的。第三方很难介入定制或二次开发。虽然一些高级设备提供了SDK,可以让用户在一定程度上进行自定义,但必须受制于厂商制定的规范,能做的事情非常有限。目前SDN所做的就是打破这些限制,让设备和网络更加灵活,让用户不受厂商设备的束缚,拥有无限可能。现有的SDN解决方案向用户开放了控制平面的可编程性。转发机呢?一般情况下,转发设备的数据包解析和转发过程都是由设备的转发芯片固化的,所以设备是支持该协议的。aspect不具备扩展能力。此外,制造商开发新的转发芯片以支持新协议或扩展协议功能的成本非常高。需要对之前的硬件进行重新设计,必然会带来更新成本高、周期长等一系列问题。所以这种将设备功能和协议支持绑定到硬件的方式在一定程度上限制了网络的快速发展。因此,我们可以得出以下结论:新一代SDN解决方案还必须让数据转发平面可编程,让软件真正定义网络和网络设备。而P4为用户提供了这种能力,打破了硬件设备在数据转发平面上的限制,让数据包的解析和转发过程可以通过编程来控制,让网络和设备真正做到自上而下对用户。打开。下面,我们主要从以下几个方面谈谈我对P4转发面编程语言的理解:P4架构与特性、交换机结构、P4程序流程。一、P4的架构与特点首先说说P4的诞生。Nick教授和Bocom教授联合发表论文《P4: Programming Protocol-Independent Packet Processors》,在SDN界引起了极大的反响和关注。随后,Nick教授等人发布了《The P4 Language Specification》、《Barefoot白皮书》等文件。目前,P4在国外已经引起了足够的重视。ONF建立了协议无关的转发开源项目(PIF)。将用于设计下一代的OpenFlow协议。目前提及最多的OpenFlow协议正在逐步完善和演进,表字段和表类型不断增加。白标交换机在支持OpenFlow协议版本更新方面面临着与传统交换设备厂商相同的困境——OpenFlow不支持灵活增加匹配域支持,协议新特性的支持成本高、周期长的时间。同时,随着网络中新协议的不断涌现,OpenFlow协议会越来越臃肿,表的扩容也越来越困难。P4语言最初旨在实现以下三个特点:(1)协议无关的网络设备不绑定任何特定的网络协议,用户可以使用P4语言来描述任何网络数据平面协议和数据包处理行为。此功能是通过自定义数据包解析器、匹配操作表的匹配流和流量控制器实现的。(2)目标独立性用户无需关心底层硬件的细节,即可实现对数据包处理方式的编程描述。该特性由P4前后端编译器实现。前端编译器将P4高级语言程序转换成中间表示IR,后端编译器将IR编译成设备配置,自动配置目标设备。(3)可重构性允许用户随时更改报文解析和处理程序,编译后配置交换机,真正实现现场重构能力。为了实现以上特性,P4语言的编译器采用模块化设计,各个模块之间的输入输出采用标准格式的配置文件,如p4c-bm模块的输出为JSON格式配置加载到bmv2模块文档。P4的架构图如图1所示。图1P4架构图2交换机结构在传统的交换机中,数据流被转换成数据帧然后被解析。首先要检查的是tag,包括有没有tag,灵活的Q-in-Q,VLANmapping等,各个厂家的交换机都需要做VLANtag的检查和处理,但是报文处理流程不一样不同厂商,不同厂商的芯片设计会产生不同的处理流程,每个处理流程都是一个基本的数据处理单元,一般交换机的流水线包含6-8个数据处理单元。图2传统交换机的流水线结构图2列出了几种常见的数据帧处理单元,如二层转发、ACL转发等。流水线上各个基本数据处理单元的数据处理过程就是数据帧解析后根据包头信息反复查表、匹配并执行相应的切换指令的过程。P4交换机中也有流水线的概念。管道代表一整套数据处理过程。这个概念类似于传统交换机中的流水线。如图3所示,P4交换机中的管道可能包括以下组件:解析器/反解析器、匹配操作表和元数据总线。除了元数据总线,其他组件不是必需的。解析器(parser):将分组数据转换为元数据。解析器(Deparser):将元数据转换成序列化的包数据。匹配动作表(match-actiontable):操作元数据。元数据:存储管道中的数据信息。图3P4交换机流水线结构在P4交换机中,对流水线处理数据的过程进行了抽象和重新定义。数据处理单元将数据处理抽象为匹配和执行匹配动作表的过程,将包头的解析抽象为P4中的解析器,将数据处理流程抽象为流程控制。P4中的基本数据处理单元不记录数据,因此需要引入元数据总线来存储流水线过程中需要记录的数据。P4交换机的专用物理芯片Tofino最多支持12个数据处理单元,可以覆盖传统交换机的所有功能。有了以上的知识储备,P4交换机的结构就很容易描述了。如图4所示,P4交换机包含两条流水线——入口流水线和出口流水线;同时,还有一些数据流管理功能,如:拥塞控制、队列控制、流量复制等。图4P4交换机结构对比图2图3和图4,不难看出P4交换机结构与传统交换机没有太大区别,在芯片的设计上,只能定制基本的数据处理单元和转发。工艺及其他设计的功能与传统交换芯片相同,这也使得P4交换能够在保证数据线性转发速率的同时,为用户提供数据转发平面的可编程性。三、P4程序工作流程至此,我们就可以梳理出P4的完整工作流程了。用户首先需要自定义数据框的解析器和流控程序,然后由编译器编译出P4程序,输出JSON格式的开关配置文件和runtimeAPI。以及匹配动作表,最后交换机操作系统根据流控程序进行报文查找操作。图5P4工作流程如图5所示,以新增VLAN报文解析为例,图中除VXLAN外的parser的报文解析已经在交换机中。加载从VXLAN.p4文件中获取的配置文件的过程就是交换机的重新配置过程。配置文件加载到交换机后,parser会增加对VXLAN报文的解析,同时更新matching-actiontable。在用户自定义程序中也指定了匹配成功后要执行的动作。执行一个动作需要开关系统调用该动作对应的指令来完成。此时switch系统调用P4编译器生成的统一运行时API。该API是交换机系统调用芯片功能的驱动程序,流控程序是指定的API。相应的开关命令。以上介绍了P4语言的特点、P4语言的工作原理和过程以及P4开关。希望对P4不了解的人能有一个基本的了解,同时起到一个引以为豪的作用。对P4感兴趣的同学可以联系作者加入P4微信交流群,与大牛们一起探讨。