P4可编程技术详解:从理论到硬件实现

news/2024/10/19 1:27:58/

P4的诞生

为打破传统的固定封装模式,充分解放数据平面的编程能力,Nick McKeown领导的斯坦福大学研究团队于2014年提出可编程处理语言P4。借助P4的数据平面编程能力,用户可在网卡、交换机、路由器等网络设备上实现包括VXLAN、MPLS等在内的各种网络协议。

P4语言特性

P4语言具有如下三点特性,同时也是P4语言的设计目标。

  • 协议无关性:P4语言不与特定网络协议绑定。用户只需根据现网协议支持情况和P4语法要素来实现转发逻辑自定义,可按需加入新协议,也可删去冗余协议。

  • 平台无关性:P4语言无需关注底层平台细节。用户能够独立于底层硬件对报文处理功能编程。用户不需要关心底层硬件的细节就可实现对数据包的处理方式的编程描述。前端编译器将P4高级语言程序转换成中间表示IR,后端编译器再将IR编译成目标设备配置。

  • 可重构性:P4语言支持在不更换硬件的情况下动态修改数据包处理方式。允许“朝令夕改”,同一台设备可根据现网需求随时重新配置。

    图1:P4编译架构图
    图1:P4编译架构图

P4转发模型

为了实现上述目标,P4语言定义了如图2所示的抽象转发模型。该转发模型主要包括解析器、多级流水线和缓冲区三部分。

图2:P4抽象转发模型
图2:P4抽象转发模型
  • 解析器(Parser):在利用P4语言编码时,用户可自定义数据报文的格式以及解析流程,接着解析流程会被编译器编译为数据包头解析图并配置到解析器上。在数据包进入可编程设备时,解析器会从报文中提取头部域,并将该头部与余下的数据载荷分离,然后按照编译器生成的数据包头解析图解析。

  • 多级流水线(Multistage Pipeline):由多个匹配动作表(Match-Action )组成,这些表以流水线的形式组织起来,分为入口流水线和出口流水线两部分。入口流水线的匹配动作表负责报文头部的修改并决定报文的输出端口与队列,而出口流水线的匹配动作表仅负责修改报文头部。在编写P4程序时,用户可自定义每张匹配动作表所匹配的数据包类型,执行动作及其参数等,以及各条流水线中每张匹配动作表的执行顺序。在运行时,数据平面会按控制流顺序依次处理数据报文。

  • 缓冲区(Buffer):用于缓存数据载荷以及队列中等待被处理的已解析头部报文。

P4的硬件实现

P4语言在设计之初就是以硬件的网络可编程为目标。在其平台无关性中提到在前后端编译器的共同工作下,P4语言程序最终会被编译成目标设备配置。这个过程实际上是P4的硬件下发。P4通过硬件相关的编译器编译成硬件机器码或汇编代码,下发到硬件中,真正实现硬件的网络可编程。

  • 硬件基础:Barefoot公司的Tofino是业界首款P4可编程网络交换ASIC芯片,后被intel公司收购。不过截至上月,intel已宣布停止了向全球市场的Tofino/Tofino2芯片的生产供货, 目前星融元是唯一一个能提供tofino停产后P4方案的厂家。星融元提供可编程交换机X-T/CX-T,并构建了可编程芯片+DPU的开放网络解决方案,持续助力P4的硬件实现。

    图3:星融元P4解决方案
    图3:星融元P4解决方案
  • 工作流程:以P4可编程交换机为例,其工作流程基于P4抽象转发模型。用户首先自定义数据帧的解析器和流控制程序命名为test.p4,test.p4文件通过编译器编译,得到test.json和 test.p4info两个文件。其中test.json是针对交换机硬件逻辑的配置文件,当配置文件载入交换机硬件后,交换机硬件逻辑得到更新,而test.p4info作为控制接口的配置文件,分别需要更新控制面和P4运行时的服务,完成控制面对交换机控制接口的更新。业务逻辑全部更新后完成P4的硬件实现。

    图4:P4工作流程
    图4:P4工作流程

P4技术的应用

  • 数据中心互联的云边界网关:云边界网关作为连接云内外网络的桥梁,需要处理大量的数据流量,且云服务场景丰富,设计时需要考虑灵活可扩展,充分利用了P4语言的高度灵活性和可编程性。

  • 分布式的带内网络遥测:分布式带内网络遥测允许网络中的多个节点协同工作,实时收集和报告网络状态信息,而无需控制平面的干预。这就需要定义数据包INT头部,用于携带遥测指令和元数据,再利用P4程序定义数据包的解析逻辑,以识别和提取INT头部。

  • 负载均衡和流量缓解:P4程序通过定义哈希函数、设置转发表、动态分配流量以及实现流量控制策略和拥塞控制算法等步骤,实现负载均衡和流量缓解从而有效地优化网络性能并提高用户体验。

总结

综上所述,P4网络可编程技术在提升网络性能、降低投资和运维成本以及促进网络创新方面具有显著价值。面对灵活多变的网络需求,P4提供了新的解决方案。在未来三年内,我们仍可使用P4可编程技术来应对不断增长和演变的网络挑战。


http://www.ppmy.cn/news/1538847.html

相关文章

markdown里粘贴图片的同时保存路径 在vscode里实现

下载扩展Markdown Image 设置保存路径 参考链接 https://blog.cxplay.org/works/vscode-to-markdown-editor/#markdown-image

信息抽取数据集处理——RAMS

引言 RAMS数据集(RAMS:Richly Annotated Multilingual Schema-guided Event Structure)由约翰斯霍普金斯大学于2020年发布,是一个以新闻为基础的事件抽取数据集。它标注了9,124个事件,涵盖了139种不同的事件类型和65种…

wpf实现新用户页面引导

第一步 第二部 部分代码: private void show(int xh, FrameworkElement fe, string con, Visibility vis Visibility.Visible) {Point point fe.TransformToAncestor(Window.GetWindow(fe)).Transform(new Point(0, 0));//获取控件坐标点RectangleGeometry rg new Rectangl…

3.6.xx版本SpringBoot创建基于Swagger接口文档

介绍 基于Swagger构建的JavaAPI文档工具&#xff0c;实现后端功能的测试&#xff0c;并撰写API接口文档。 方法 pom.xml中引入依赖,要注意的是&#xff0c;本依赖使用的SpringBoot版本为3.6.xx <!--Knife4j--><dependency><groupId>com.github.xiaoymin<…

wireshark获取QQ图片

今天随手写下之前做的一个比较有意思的实验&#xff1a;Wireshark抓取qq图片 1.前提 手机和电脑处于同一网络之中&#xff0c;这里我使用了校园网。 接着使用手机向电脑发出图片 2.wireshark流量抓包 先查看好手机的ip地址&#xff0c;随后使用命令&#xff1a;ip.src10.33.X…

图解Redis 03 | List数据类型的原理及应用场景

介绍 List是一个简单的字符串列表&#xff0c;按照元素的插入顺序进行排序。您可以从头部或尾部添加元素到这个列表中。 列表的最大长度为2^32 - 1&#xff0c;即支持多达40亿个元素。 内部实现 List 类型的底层数据结构在 Redis 中可以采用双向链表或压缩列表(ziplist)&…

vue3中swiper11的使用

Swiper官网 vue中使用方法 我使用的是 “vue”: “3.5.11”&#xff0c;swiper版本为 “swiper”: “11.1.14”&#xff0c; “less”: “4.2.0” 1. 属性介绍 属性名作用slidesPerView设置slider容器能够同时显示的slides数量(carousel模式)。可以设置为数字&#xff08;小…

JavaWeb 19 AJAX

"我就是希望你好&#xff0c;就像很多人希望我好一样&#xff0c;特别简单&#xff0c;特别真挚。也不为了什么&#xff0c;就是希望你好" —— 24.10.13 一、什么是AJAX AJAX Asynchronous JavaScript and XML(异步的JavaScript和XML) AJAX不是新的编程语言&…