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

相关文章
|
7天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
1月前
|
Java Spring
【编程笔记】在 Spring 项目中使用 RestTemplate 发送网络请求
【编程笔记】在 Spring 项目中使用 RestTemplate 发送网络请求
94 0
|
1月前
|
机器学习/深度学习 算法 数据库
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
|
3月前
|
负载均衡 网络协议 算法
【计算机网络】网络层(控制平面)
【计算机网络】网络层(控制平面)
66 0
【计算机网络】网络层(控制平面)
|
3天前
|
SQL 安全 Java
Java安全编程:防范网络攻击与漏洞
【4月更文挑战第15天】本文强调了Java安全编程的重要性,包括提高系统安全性、降低维护成本和提升用户体验。针对网络攻击和漏洞,提出了防范措施:使用PreparedStatement防SQL注入,过滤和转义用户输入抵御XSS攻击,添加令牌对抗CSRF,限制文件上传类型和大小以防止恶意文件,避免原生序列化并确保数据完整性。及时更新和修复漏洞是关键。程序员应遵循安全编程规范,保障系统安全。
|
19天前
|
缓存 网络协议 数据库连接
【底层服务/编程功底系列】「网络通信体系」深入探索和分析TCP协议的运输连接管理的核心原理和技术要点
【底层服务/编程功底系列】「网络通信体系」深入探索和分析TCP协议的运输连接管理的核心原理和技术要点
20 0
|
1月前
|
缓存 网络协议 SDN
计算机网络:网络层上(数据平面)
计算机网络:网络层上(数据平面)
|
1月前
|
资源调度 JavaScript 前端开发
|
2月前
|
C++
MFC -- 网络通信编程
MFC -- 网络通信编程
12 0
|
2月前
|
网络协议 Unix Linux
Linux应用开发基础知识——网络通信编程(九)
Linux应用开发基础知识——网络通信编程(九)
54 0
Linux应用开发基础知识——网络通信编程(九)