P4(Programming protocol-independent packet processors)[1]是由Pat Bosshart等人提出来的高级“协议独立数据包处理编程语言”,可以硬件无关的描述网络流量转发行为。用程序员的“说人话”,P4类似Python等动态高级语言,描述清晰,业务化,动态。传统的网络硬件编程类似汇编语言,需要对硬件流程非常了解,不能跨平台,静态语言,更新需要重新编译。


P4是由斯坦福大学的Nick McKeown教授和普林斯顿大学的Jennifer Rexford教授,以及谷歌、英特尔、微软和 Barefoot Networks共同发起并创立的一个开源项目。


P4英雄帖,请贡献你的想象力_java

P4英雄帖,请贡献你的想象力_java_02P4将网络的控制权真正交给网工P4英雄帖,请贡献你的想象力_java_03


回顾几年前的网络设备,完全在思科和博通的统治之下,思科封闭生态,追求尽善尽美;博通占据其他地盘,控制节奏,挤挤牙膏。各自赚钱,相安无事。思科的UADP的可编程芯片,应用在企业网交换机系列中,和NPU(网络处理器)没有本质区别,开放性并没有提供到最终用户。


P4通过开放的生态,简洁的编程语言,将网络的控制权真正交还给最终用户手里。下图是一个对比传统的网络需求变更流程,在传统网络中,虽然网工运维管理网络,但本质上对设备商有非常强的依赖。


P4英雄帖,请贡献你的想象力_java_04


传统网络设备的变更流程,如下:


  • 最终用户发现网络的业务部署当前设备无法支持;

  • 最终用户将需求反馈给设备商;

  • 设备商看看最终用户的采购规模,小客户很难得到支持。如果是大客户,设备商制定计划,进行开发,测试发布,估计要6-12个月反馈解决方案。如果硬件并不支持新增该功能,还需要硬件更新,可能就要几年后才能发布解决方案,无法匹配互联网时代的快速迭代的要求。

Openflow和SDN出现后,网络具备了一定的开放性,最终用户发现网络的业务部署当前设备无法支持,通过管理面的SDN对网络行为进行调整,有一定机会解决问题,但是如果没有办法解决,将是要回到设备商去做定制化,走漫长的执行流程。


使用了P4后,网络控制权真正到了最终用户手中,那对于新需求和新想法的步骤如下,最终用户发现网络业务部署当前设备无法支持,或者有自己的奇思妙想,直接通过P4可编程实现。还有一个很重要的是,客户不需要担心核心方案被设备商复制给自己的竞争对手,知识产权得到了保护。


P4英雄帖,请贡献你的想象力_java_02兼顾创新和基础应用优化


P4论文作者中还有斯坦福大学的Nick McKeown教授和普林斯顿大学的Jennifer Rexford教授两位业界大牛的名字。Nick教授是SDN的提出者之一,一直是SDN学术领域顶尖的存在;而后者Jennifer教授也发表了4D[2]等诸多重要的SDN相关论文,更提出了网络编程语言Frenetic[3],同样是业界的先驱。两位教授也是P4组织的主要推动者之一。

摘自P4:真正的SDN还遥远吗?



P4在流量监控,负载均衡上的应用大家都已经耳熟能详,Ucloud贡献了很多的典型案例。今年是中国IPv6规模落地的元年,IPv4和IPv6并存对网络规划带来了很大的挑战,传统网络设备需要使用成本非常高的路由器的来实现NAT,而且转发性能有限,不利于IPv6的大规模铺开,Ucloud通过P4语言对网络设备的重定义,高性价比兼具高性能的实现了NAT功能。


转载的传送门:

http://blog.ucloud.cn/archives/3981


P4英雄帖,请贡献你的想象力_java_06


Ucloud设计的基于NAT64和P4交换机实现IPv6转换功能的系统架构,如下图所示,其中NAT64 Access使用P4交换机实现,通过NAT64 Access的一致性Hash实现高可用。同时在NAT64 Access对CPS进行限速,实现DDoS防护。


NAT64 Access与物理交换机1组成三层网络,通过BGP向物理交换机1宣告一个/96的IPv6地址段,作为该地域的IPv6 prefix。POP1与POP2中Access向外宣告的地址段相同,实现负荷分担和POP点级别的容灾。同理,POP点内两个Access之间也是负荷分担和容灾。


在大规模的数据中心的基础应用中,更关注高性能,业务转发流程相对简单。P4通过可编程技术可以关闭冗余的流水线,启用更少的Engine,以提供更低功耗和更低时延的解决方案。


P4英雄帖,请贡献你的想象力_java_07


Barefoot的Tofino2在大规模数据中心应用中仅需要开启24个可编程Engine,为大规模数据中心提供更高的能效比。


P4英雄帖,请贡献你的想象力_java_02P4生态与DPDK,FPGA的融会贯通P4英雄帖,请贡献你的想象力_java_03


P4在可编程交换机的应用上已经具备典型案例,并体现出了P4带来的创新优势。我们宏观看整个网络生态,包括服务器的虚拟交换机,虚拟路由器,智能网卡。每个领域上都有对应的技术发展,比如DPDK/SPDK,比如FPGA实现智能网卡。


每个领域的技术发展都具备独特的创新性,但没有形成一个完整网络技术体系,这种割裂让网络开发工程和网络运维工程是都面临很强的学习压力和落地挑战。P4作为高级语言,具备重新梳理网络架构的可能性,比如P4 Model和DPDK的结合。


P4英雄帖,请贡献你的想象力_java_10


Petr Kastovsky (CEO, Netcope Technologies)介绍了自己对P4和FPGA智能网卡的结合。


“网络功能虚拟化正在全面展开。每天,专门构建的网络设备被商用x86硬件上运行的软件应用程序所取代。即使是交换机,一个非常基本的网络设备现在也有它的软件对应,为了进一步加强这一趋势,供应商将基于FPGA的可编程应用中。可编程加速卡可以增强数据平面中的转发性能,并提高单个物理机器的吞吐量。由于NFV完全与生态系统和协作有关,因此必须以标准方式对PAC(可编程加速卡)进行编程和操作。 P4语言和P4Runtime API都是由强大的联盟支持的开放标准,在这方面获得了很大的吸引力。 P4可编程加速卡以网络线速运行,执行许多计算密集型的每个数据包任务:封装,解封装,ACL,负载平衡,统计,加密,DPI,QoS等。全部由网络架构师完全定义,而不是硬件供应商。”


P4英雄帖,请贡献你的想象力_java_02小结P4英雄帖,请贡献你的想象力_java_03


P4打开了网络封闭的大门,将网络硬件的控制权真正交到了网工手里,业务可编程带动了创新应用,流水线的可编程进一步提高数据中心基础网络能效比。而且P4的生态并不局限在交换机应用,和DPDK,FPGA充分融合迭代。


但是更重要的是,P4的上限并不局限在定义者的智慧,而且所有使用P4的网络同仁们的智慧合集,是属于分布式的智慧体。