可编程数据平面(论文阅读)

可编程数据平面

原文 《A Survey on the Programmable Data Plane: Abstractions, Architectures, and Open Problems》

可编程交换机允许数据包处理行为应用于传输的数据包,包括处理操作的类型、顺序和语义,以系统的方式动态地重新配置。

随着5G移动标准、大规模云计算、无处不在的物联网、大规模机器学习和大数据应用的出现,运营商将需要采用全新的方式来构建通信网络,实现软件定义网络、边缘计算、网络功能虚拟化、服务链接规范。即将到来的应用需要网络接口卡(nic)和网络设备,如交换机和路由器,支持持续发展和异构的协议和功能集,包括基本的L2/L3/L4处理、隧道和VPN协议,负载均衡、拥塞控制和服务质量、防火墙和入侵检测系统等。

一方面,添加新功能需要一个漫长的开发过程和快速的设备升级周期。这就迫使供应商只在某个特性被广泛要求时才支持它,从而阻碍了创新。另一方面,在包处理逻辑中实现每一个网络协议和可能永远不会在操作中使用的特性会导致效率低下。

为了解决这些问题,最近引入了新一代的网络设备,允许设备实现的数据包处理功能可以动态地全面重新配置。新的基于软件的网络交换机,运行在通用CPU上,通过大量的处理原语集提供了可重构性,通过这些原语,可以使用标准编程技术构建各种管道。

可编程交换机的结构

传统的网络设备,无论实现(例如,纯软件或专用硬件)和功能(例如,交换机、边缘路由器或防火墙),通常都包括控制平面和数据平面,集成到一个单一的设备形式因素中。在这种情况下,控制平面负责建立报文的处理策略(如报文转发到哪里、如何重写报文头等),以及管理设备的操作(如检查设备的健康状态、维护操作等)。相反,数据平面只负责执行控制平面设置的报文处理策略。

网络设备可编程性的一个基本推动因素是控制平面与数据平面在逻辑和物理上的分离,通过一个标准和开放的API来允许两者之间的交互。

为了加强控制平面的决策,数据平面对接收到的数据包执行少量操作。首先,它解析数据包,以理解它们携带的控制信息。然后,提取的信息被用来确定需要应用到包的处理操作的顺序,如执行一些计算(例如,计算校验和),写入包的某些部分(例如,写入新的校验和),或者存储监视和状态信息(例如,在校验和错误时更新计数器)。最后,根据执行的操作的结果转发修改的数据包,这些操作通常包括输出端口的规范。

可编程性指的是交换机向控制平面公开数据包处理逻辑的能力,以便系统地、快速地、可理解地重新配置。强调的是全面性。

可编程交换机的分类

系统级视图

在上层,控制平面负责协调整个网络的操作。传统上,这需要详细说明每个交换机控制程序来设置设备级行为。然而,随着软件定义的网络范例的实现,控制平面逐渐向综合捕捉网络范围的策略(所谓的意图层)的更高层次的抽象转移,然后在单独的步骤中编译成常规设备级策略(中间表示)。

在较低的一层,网络的数据平面由控制平面共同管理的可编程交换机的分组处理逻辑共同表示。数据平面向控制平面公开其可配置功能的某些抽象,而控制平面又使用数据平面编程语言来配置静态包处理语义。在运行时,这个管道充满了动态策略。同时,通过数据平面不断收集状态信息和监控信息,将状态信息和监控信息呈现给控制平面,用于行为正确性验证、性能监控和故障处理。

在这个分层的视图中,数据平面编译是一种向下的映射,从高层次的网络行为描述到较低层的抽象,验证/监视是一种向上的映射,其中下层将其状态的一些聚合视图暴露给上层以进行检查和验证,两者之间的耦合是由数据平面采用的抽象创建的。

基于软件和基于硬件的交换机

数据平面处理设备接收到的每一个数据包,是网络中最关键的性能部分,因此,通常使用专门的硬件组件和复杂的软件加速方法来实现它。

在现实中,硬件和软件交换机之间的区别可能不是那么明显。基于硬件的设备可能仍然会调用通用CPU来运行不需要高性能或底层硬件不支持的某些功能。类似地,为了提高效率,现代软件切换也依赖于特定于领域的硬件辅助。

抽象和架构

数据平面技术之间的差异通常反映在暴露于控制平面的包处理原语和可用于访问这些原语的编程语言构造中。

数据流图抽象

数据流图将处理逻辑描述为一个图,其中节点表示基本计算阶段,边表示数据从一个计算阶段移动到另一个计算阶段的方式。这种抽象的一个很好的特性是它的简单性,允许程序员使用熟悉的面向图的心理模型将一组定义良好的处理节点组装成有意义的程序。这样,计算基元(节点)只开发一次,然后可以根据需要自由地重复使用多次,以生成新的模块化功能,创建一个具有平滑学习曲线的快速开发平台。

匹配操作管道抽象

匹配操作抽象使用一系列被组织成层次结构的查找表来描述数据平面程序。包的头字段是用来执行流表查找第一个表来确定相应的数据包处理行动,然后指示交换机重写的数据包内容,封装/解封隧道头,下发或转发数据包,或推迟数据包处理进一步流表。程序员反过来通过动态设置流表的内容,通过通过标准化的API添加、删除或修改关联的匹配规则和处理操作来配置包处理行为。这样做的好处是,可以将可重新配置的数据平面功能暴露给操作者,操作者使用熟悉的流概念,通过匹配某些报头字段上定义的规则来识别流,作为查找表的层次结构。

混合交换机抽象

可以很容易地将分层匹配操作管道定义为一种特殊的数据流图,其中查找表作为处理节点,转表指令作为边缘。

有状态的和无状态的

至关重要的是,网络设备内嵌存储器的内容可以在运行中被访问和修改。这些状态信息可以粗略地分为两类:包状态(或元数据)和全局状态。报文状态与单个报文相关联,每个报文都有自己的报文状态,这种状态只在处理关联的报文时才存在。相反,全局状态是与设备相关联的,它是全局的,在报文之间持久存在。虽然包状态只能在数据平面内访问和修改,但全局状态也可以通过控制平面访问。

基于这些考虑,可编程的数据平面技术通常被称为无状态,而允许从内部写入全局状态的数据平面称为有状态的。一般来说,无状态数据平面要简单得多,但提供的功能有限,而有状态数据平面则复杂得多。

开放问题

可编程交换机架构围绕着抽象展开。理想情况下,抽象应该足够简单,以捕获适当数量的可配置数据平面功能,以实现有效的硬件和软件实现,但又足够深刻,允许更高层次在上面综合复杂的包处理行为。此外,理想的抽象应该借本身容易被暴露在控制平面作为一种安全、有效的数据平面API,它应该充分处理全局状态嵌入到数据平面,并提供一个定义良好的一致性模型,它应该承认分析性能模型,它应该将静态语义和动态行为分开,最后,它应该包含一个网络操作员和程序员熟悉的方便的心理模型。毫不奇怪,该领域的许多开放问题都与为数据平面功能找到正确的抽象有关。

一、全面可重构性的抽象

抽象和开发交换机可能执行的处理功能的每个方面已经变得至关重要。这不仅限于数据包处理策略在数据平面中表示的方式,包括数据包与相应的处理操作相关联的方法,而且扩展到进一步的关键数据包处理操作及其可重构性,从可编程数据包解析到通用调度和排队方案。

但是,对数据层面上更全面的可重构性的追求不应该止步于此。事实上,还有多路径路由、动态负载平衡、数据平面级隔离和加密的新抽象,网络加速键值存储和分布式共识协议,基于数据平面神经网络的网络范围机器学习,可编程监测和测量等。

开放问题

找到新的抽象以使数据平面功能可配置,并使用简单的API将这些抽象公开给控制平面、

二、用于公开全局状态的抽象

扩展系统以处理大量工作负载的需求,越来越多地促使设计者探索更复杂的解决方案,以处理交换机数据平面中的某些状态。虽然目前可以认为无状态包处理的抽象相当可靠,但有状态抽象仍在探寻。

有状态抽象的复杂性在于需要以程序员友好的方式处理状态管理问题(例如一致性),同时仍然保证支持高性能实现的能力。目前的建议遵循三种不同的方法:一致性、执行器和基于应用程序的内存抽象。

基于一致性的内存抽象根据所需的一致性属性组织内存。一些抽象可能提供一致性模型的子集。在基于执行程序的内存抽象中,程序员可以看到底层执行程序体系结构的简化视图。最后,基于应用程序的内存抽象公开对状态的访问,遵循网络应用程序中常见的编程抽象。

这三种方法实现了不同的权衡。例如,基于执行者的抽象为程序员提供了最大的灵活性,但代价是增加了编程的复杂性并降低了执行者体系结构之间的可移植性,因为程序员需要清楚地了解如何在不同的内存区域中划分其应用程序的状态。另一方面,基于应用程序的抽象提供了符合大多数网络应用程序的状态访问模型,因此简化了程序员的开发,但没有留下多少灵活性来试验非常规的解决方案。

开放问题

找到一个表达力强但简单的模型来处理数据平面中的状态操作,在确保能够支持高性能实现的同时简化应用程序编程和编排。

三、基于意图的网络的抽象

基于意图的网络标志着最近的一种趋势,即根据更高层次的业务策略来设计和操作网络,并让网络以自动化、敏捷、安全和可验证的方式处理低层次的问题。然而,基于意图的网络在可编程交换机设计中提出了许多关键问题。

尽管最近在高级网络编程语言方面,以高效的语言构造和模块化组合框架的形式的进展已经为实现基于意图的网络愿景提供了重要的见解。目前还不清楚如何最好地将数据平面功能暴露给操作者,以提供最大的编程自由,同时有效地掩盖底层的复杂性。理想情况下,基于意图的数据平面编译器应该积极地尝试寻找数据平面表示,以最小的数据平面占用空间获得最高的性能,并建立在优化数据平面程序和性能推理的坚实理论基础上。

开放问题

设计一个基于优化意图的数据平面编译器,将高级业务策略(以及相应的全局状态)映射到底层物理基础设施,建立在数据平面程序转换和性能建模的良好理论基础上。

抽象的可验证性

数据平面编译,即从意图层向下映射到数据平面只是一方面。为了关闭控制回路,还需要一个向上的映射,这将允许控制平面监视和验证数据平面的操作。事实上,最近的结果表明,网络的架构应该从头开始,注重可验证性,这可能需要定义新的抽象。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值