P4:编程网络的转发平面

简介:

随着物联网设备、数据流量、新协议以及私有云和公共云的巨大增长,网络世界的创新速度也在不断加快。网络的未来已经超越了SDN的数据和控制平面分离,而是在ASIC中深入编写转发逻辑。技术现在正从传统的固定架构转向灵活的可编程交换机。新的可编程ASIC支持自定义协议,以及当前和未来的协议。

7f7e0e269f8ee6d46a3bf39a0c7f25c3fb4d3aae

要充分利用这种灵活性,需要使用新的、更高级别的、特定于域的语言来简化转发平面的编写。每个ASIC制造商都必须提供自己的定制语言,这更多地取决于硬件架构。将转发平面逻辑从一个网络ASIC制造商移植到另一个制造商需要付出很多努力。这就产生了对独立于底层硬件和协议的标准语言的需求。

这就是P4(独立于编程协议的数据包处理器)的用武之地。P4是一种开源的、特定于域的编程语言,专为编程可重构网络而设计。 P4语言是公开的,由p4.org联盟开发,该联盟包括网络、云系统和学术机构领域的各种公司。最初,P4针对的是网络交换机的数据平面编程。现在,它的范围已扩展到包括硬件或软件、网络接口卡和其他数据包处理系统在内的可编程网络元素。

P4编译器:P4如何独立于目标

从过去几年来看,很明显,在任何网络设备中由数据平面处理的数据包大致可以分为三个基本阶段。 1)Parser block:负责分组识别和提取,2)Control block:负责匹配+动作,3)DeParser:负责形成所需的出口包。

网络芯片正在以这种方式构建,并且与协议无关。 P4是可以为任何目标设备编译的语言,用于指定如何在数据平面中处理数据包。 P4编译器的体系结构有助于通过分离语言和目标模型使其独立于目标。每个芯片供应商都可以实现自己的编译器后端以映射到他们的硬件架构。 P4的体系架构(见图)还允许芯片公司定义自己的模型,然后编写P4后端来支持相同的内容,从而有助于隔离硬件细节。

46cbece2c87e88b89f04138163189bc028a8b2a4

每个芯片制造商只需要一个与其硬件兼容的P4编译器工具链,用户就可以独立于厂商的依赖性编写自己的P4程序,并在不影响速度的情况下编译和运行。用户只需关注实际的数据包处理逻辑,而无需担心底层硬件。编译器将为您的硬件生成runtime代码。下图显示了P4为数据平面编程提供的核心组件。

623213234fbc457f957f6030a7c46944185c8451

P4如何有益?

P4带来了许多好处,包括:

 ●  所有可编程网络设备的开源语言。易于移植。
 ●  由于P4程序可以由用户编写,因此有助于保留新IP的所有权。现在,不再需要与芯片厂商或他们的客户共享新的功能规范,从而保留知识产权保护。
 ●  P4使新协议的部署更加简单,消耗的时间更少。
 ●  在不同应用程序中使用的网络设备需要不同的协议集。使用P4,用户可以根据应用程序仅实现所需的协议,并删除其应用程序不需要的协议。因此,可以有效地利用现有资源。
 ●  编程数据平面现在使用软件编写程序,使用P4编译和加载硬件,从而提供软件重用、数据隐藏、库创建、硬件和软件组件分离、软件升级和调试方便等优点。

但是,实现这些好处也面临着一些挑战。需要记住的一点是,定制专有语言可以更好地控制可编程网络硬件。 P416是P4语言的2016版本,它确实支持外部方法以满足此类自定义硬件的特定要求,但会削弱P4的易于移植性。

此外,Hash、ECMP、多播、广播、镜像、排队、调度和校验等功能非常依赖于硬件。很难用Generic P4解决所有目标并获得对硬件的完全访问权限。

P4中控制平面和数据平面之间的通信方式有限。因此,不支持生成新数据包。

也就是说,P4开辟了许多机会并改变了网络芯片的设计方式。 P4架构提供了一个设计完全可编程芯片的样本模型和思路。未来所有传统交换机将很快转换为可编程交换机,具有完全软件定义的数据和控制平面。


原文发布时间为:2018-09-17

本文来自云栖社区合作伙伴“SDNLAB”,了解相关信息可以关注“SDNLAB”。

相关文章
|
14天前
|
监控 安全
公司上网监控:Mercury 在网络监控高级逻辑编程中的应用
在数字化办公环境中,公司对员工上网行为的监控至关重要。Mercury 作为一种强大的编程工具,展示了在公司上网监控领域的独特优势。本文介绍了使用 Mercury 实现网络连接监听、数据解析和日志记录的功能,帮助公司确保信息安全和工作效率。
85 51
|
1月前
|
网络协议 测试技术 网络安全
Python编程-Socket网络编程
Python编程-Socket网络编程
|
3月前
|
安全 Java 应用服务中间件
网络安全的护城河:漏洞防御与加密技术深入浅出Java并发编程
【8月更文挑战第31天】在数字世界的棋盘上,每一次点击都可能是一步棋。网络安全的战场无声却激烈,漏洞如同裂缝中的风,悄无声息地侵袭着数据的堡垒。本文将揭示网络漏洞的隐蔽角落,探讨如何通过加密技术筑起防线,同时提升个人和组织的安全意识,共同守护我们的数字家园。
|
4月前
|
监控 Python
单位网络监控软件中的PostScript图形编程
PostScript是一种强大的页面描述语言,广泛应用于图形编程和打印控制。在单位网络监控软件中,利用PostScript可以实现复杂的图形绘制和文本处理。本文将通过几个具体的代码示例,介绍如何在PostScript中进行图形编程,并讨论如何将监控到的数据自动提交到网站。
70 10
|
4月前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
【7月更文挑战第26天】在网络的数字宇宙中,Python Socket编程是开启网络世界大门的钥匙。本指南将引领你从基础到实战,成为网络世界的建筑师。
64 2
|
3月前
|
安全 Java 网络安全
云计算时代下的网络安全挑战与应对策略Java编程中的异常处理:从基础到高级
在云服务不断深入各行各业的今天,网络安全问题也随之凸显。本文将探讨云计算环境下的安全风险,并提出相应的防护措施,以期为相关行业提供参考和指导。 在Java的世界里,异常处理是代码健壮性的守护神。它不仅保护程序免于意外崩溃,还提供了一种优雅的方式来响应错误。本文将带你领略异常处理的艺术,从简单的try-catch语句到复杂的自定义异常和finally块的神秘力量,我们将一起探索如何让Java程序在面对不确定性时,依然能够优雅地起舞。
|
4月前
|
网络协议 Python
告别网络编程迷雾!Python Socket编程基础与实战,让你秒变网络达人!
【7月更文挑战第27天】在网络编程的广阔天地中,Socket编程常被视为一道难关。但用Python这把钥匙,我们可以轻松入门。Socket作为网络通信的基石,在Python中通过`socket`模块封装了底层细节,简化了开发过程。以下是一个基本的TCP服务器与客户端的示例,展示了如何建立连接、收发数据及关闭连接。为了应对实际场景中的并发需求,我们还可以借助多线程技术来提升服务器处理能力。掌握了这些基础知识后,你将逐步揭开网络编程的神秘面纱,踏上编程高手之路!
59 0
|
4月前
|
网络协议 开发者 Python
颠覆传统!Python Socket编程新思维,基础与进阶并重,打造卓越网络能力!
【7月更文挑战第25天】在数字时代,网络通信至关重要,Python的Socket编程简化了这一复杂领域,使初学者也能轻松上手。通过Python的`socket`模块,我们能快速搭建服务器与客户端,实现数据交换。示例代码展示了如何创建、绑定及监听Socket,以及收发消息。掌握基础后,可利用asyncio库探索异步编程,提升通信效率,处理多连接。Python的Socket编程,结合传统与现代技术,助力开发者在网络通信领域取得非凡成就。
73 0
|
5月前
|
移动开发 网络协议 视频直播
25.Python 网络编程:TCP和UDP编程
25.Python 网络编程:TCP和UDP编程
46 2
|
5月前
|
存储 网络协议 安全
编程入门(四)【计算机网络基础(由一根网线连接两个电脑开始)】
编程入门(四)【计算机网络基础(由一根网线连接两个电脑开始)】
58 1

热门文章

最新文章

下一篇
无影云桌面