开发者社区> 技术小能手> 正文

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”。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《UNIX网络编程 卷2:进程间通信(第2版)》——1.8 书中IPC例子索引表
生产者-消费者:一个或多个线程或进程(生产者)把数据放到一个共享缓冲区中,另有一个或多个线程或进程(消费者)对该共享缓冲区中的数据进行操作。序列号持续增1:一个或多个线程或进程给一个共享的序列号持续增1。该序列号有时在一个共享文件中,有时在共享内存区中。
1116 0
《Java遗传算法编程》—— 2.5 轮盘赌选择
轮盘赌选择(也称为适应度比例选择)是用轮盘赌为类比,从种群中选择个体的方法。这种想法是根据种群中个体的适应值,将它们放置在一个假想的轮盘上。个体的适应度越高,在轮盘上占据的空间就越多。图2-1展示了在这个过程中,个体通常如何放置。
2633 0
发布一个开源的c++网络事件库【转载Zark@cppthinker.com】
Chaos是一个基于Linux平台, reactor模式的网络事件库, 目前仅支持TCP传输协议, 仅在x86_64下编译, 并遵循3-clause BSD开源协议. 在使用上, 可以说它很像boost asio, 可能是由于我对boost asio的接口设计很有爱吧, 而且对于boost asio...
971 0
python网络编程
http://hi.baidu.com/showimg/blog/item/40586838c1c59e2b97ddd897.
564 0
LUA面向对象编程技巧
详文请见 http://ffown.sinaapp.com/?p=11 1. LUA中的对象 我们知道,对象由属性和方法组成。LUA中最基本的结构是table,So 必须用table描述对象的属性。
685 0
+关注
技术小能手
云栖运营小编~
7208
文章
9
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载