*本文系SDNLAB编译自《A Survey on P4 Challenges in Software Defined Networks: P4 Programming》一文。
在过去的十年中,SDN (软件定义网络) 极大地提高了网络的可编程性。SDN 理念的核心是将应用、控制和数据平面解耦,以提高网络的可编程性。与控制平面和应用平面相比,数据平面受到的关注较少。传统上,数据平面依赖于固定功能,仅能使用有限数量的协议来转发数据包。P4(独立于编程协议的数据包处理器)语言的出现使得对SDN数据平面进行编程成为可能,这将SDN推向了一个新的水平。
本文回顾了网络从传统网络到可编程数据平面的演变,解释了可编程交换机的基本原理,并总结了从传统网络到可编程网络的发展历程。作者从P4 的角度出发探讨了 SDN的发展,共分为六个部分:
1.TB 级带宽时代的 SDN 和 P4 连接;
2.SDN 的演进以及P4 在网络技术中的兴起;
3.对P4 的详细解析;
4.数据平面的可编程性;
5.研究的挑战和机遇;
6.总结以及未来的趋势。
网络的发展历程
在开始之前,我们需要先了解导致数据平面可编程性需求产生的一系列发展动态。本节将进一步介绍网络如何从传统网络转变为可编程网络,以及P4 在 SDN 中的重要性。
传统网络
传统网络运行于诸如路由器、交换机和应用交付控制器等固定功能设备之上,通常采用专用设备来执行特定任务。SDN则为网络提供了灵活性,使其能够适应不断增长的网络规模和安全需求。传统网络一直面临灵活性方面的挑战,且部署和管理成本较高。在传统网络中,控制平面和数据转发平面紧密耦合且功能较为固化。传统网络是面向硬件的,SDN是面向软件的。
图1 传统的可编程网络
软件定义网络
SDN由控制器、南向和北向API组成,已在网络行业应用超过十年。当网络需要具备可编程能力时,便会实施SDN策略。网络控制平面和数据转发平面解耦,控制平面可以控制多台设备。如上图所示,控制平面内嵌有SDN技术,因此具有可编程性,但数据转发平面尚不具备灵活性,因为可编程性尚未完全覆盖到这一层面。不过,管理和配置工作已转移到集中式控制台进行。目前,SDN已被亚马逊、Facebook和谷歌数据中心等广泛采用。下面将带大家了解SDN的演化历程,以及数据转发层是如何逐渐变得更加灵活的。
OpenFlow
随着SDN技术的成熟稳定,OpenFlow协议开始流行并被证明是最具影响力的SDN协议之一。OpenFlow协议用于配置支持SDN的设备,是开发SDN解决方案中的关键组件。作为SDN控制器中的通信协议,OpenFlow协议直接与数据转发平面中的网络设备进行交互。所有与SDN控制器通信的设备都必须兼容OpenFlow协议。近年来,协议标准变得越来越复杂。通过此接口,SDN控制器将变更发送至交换机/路由器的流表,从而允许网络管理员对流量进行分段、管理流以获得最佳性能以及配置和应用新信息。
SDN的演进
SDN 也经历了许多试错方法。SDN 1.0版本引入了OpenFlow协议。由于第一版存在一些局限性,SDN 2.0版本解耦了overlay。最后,SDN 3.0版本采用了n-centric 。随着IT和SDN的发展。然后,技术领域发生了很多变化。
为了理解可编程网络的演变,我们需要理解图1。在图1中,可以看到从传统架构(左侧)向SDN架构(中间)以及采用P4的具有可编程数据平面的SDN架构(右侧)的转变过程。在传统架构中,控制平面和数据平面紧密绑定,被称为“紧耦合”。随着SDN的出现,控制平面和数据平面被分离,形成了自下而上的设计方式,两者之间的信息通过OpenFlow协议进行共享。当前,新型架构追求的是在SDN中使用可编程数据平面,它采取了自上而下的设计方法。这种可编程芯片可以根据用户需求进行配置,而传统的SDN架构则具备固定的一组功能。
在SDN虚拟化演进的过程中,虚拟化之王“VMware”收购了Nicira,并将其更名为VMware NSX。NSX代表SDN,在全球数据中心内的数以十万计的虚拟机中得到了广泛应用。
表1 IT 和 SDN 的演变
SDN现状如何?
SDN并未消亡,相反,它依然活跃并且在应对当前网络市场的需求方面表现出色。尽管许多研究者认为SDN已经不存在了,但这并不准确。实际上,SDN存在于所有的虚拟化网络和软件定义网络之中,并通过包含SDN的理念和技术实现了对前代产品的超越。这与分析师过去对SDN未来的预测类似:**虽然不再单独强调“SDN”这个术语,但SDN的概念已经被融入到各类网络工具与解决方案之中。**因此,我们会在诸如SD-WAN(软件定义广域网)等具体工具或技术中会看到SDN的身影。
SDN为什么需要P4?
SDN面临着诸多挑战。首先,实现新协议和扩展现有协议的功能需要耗费时间。其次,像SDN中的“OpenFlow”等协议在操作和管理界面方面存在不足。最重要的一点在于,在OpenFlow协议中添加新协议是一个耗时的研究驱动过程。
相比之下,P4的可编程性为网络堆栈的灵活性带来了全新的可能性,使其可以从7层OSI模型或5层TCP/IP模型中获得前所未有的改变。其次,对于升级性需求(硬件解决方案无法满足),通过更新运行在设备上的P4软件,可以在不购买新交换机及其框架的情况下,向网络设备添加功能和协议。总之,SDN已成为一种颇具前景的集中化管理网络架构的方法,使得网络变得动态化、集中化、灵活且可编程。因此,在SDN环境中集成P4技术是必要的。
数据平面编程
可编程数据平面是一种灵活的转发数据包的方式,可以处理多种格式和协议。在实现交换机执行复杂数据包操作的过程中,可编程数据平面是一个关键的步骤。然而,它们不能单独执行所有任务。
P4 是一种编程语言,允许用户编写自定义协议、构建复杂的匹配/动作pipeline并在代码中引入外部函数。P4可用于配置转发动作,是为数据平面编程而创建的。因此,P4定义了能够在数据包上执行的动作,此时控制平面和应用平面已经具备了可编程性,而数据平面编程则是缺失的一环,P4填补了这一空白。
P4的崛起
随着数据流量的急剧增长、新协议的涌现以及公有云和私有云的普及,网络世界的创新速度正在加速。从传统交换机过渡到灵活可编程交换机的过程现已基本完成,而这需要一种新的标准语言来支撑。这种新语言应满足以下三个基本要求:
1.该语言应使网络具备灵活性,能够根据需求快速适应变化。
2.使用的语言应具有表达力强、涵盖面广的特点,能够全面描述和控制网络行为。
3.这种语言必须具有良好的移植性,能在不同架构之间平滑迁移和使用。
P4是一种特定领域语言,用于控制发送至网络设备数据平面的数据包。它由计数器、寄存器、报头字段规范以及匹配-动作表支持等结构组成。P4专门设计用于数据平面,用以检查SDN交换机行为的正确性。
通过P4,可以定义自定义的报头格式,并能执行动态的报头解析。P4程序采用特定格式编写,必须包括以下部分:报头、解析器、逆解析器、匹配-动作、校验和验证、入口处理(ingress)、出口处理(egress)以及校验和计算。程序中各个部分相互依赖,共同完成相应的功能。
图2描绘了P4语言的演变和发展历程。P4语言草案于2014年提交,并于2015年5月首次在全球推出。2016年,经过许多误解后,P4社区明确了OpenFlow与P4语言之间的区别。同年5月,推出了P4语言的第二个版本,即P416;在此之前的老版本被称为P414。2017年7月,为了运行P4程序,P4Runtime被引入并嵌入到了控制平面中。由于其可扩展性、可行性和可重新配置性,许多大规模网络都已采用P4语言。P4Runtime v1.0在2019年发布,P4Runtime v1.2在2020年发布。
图2 P4语言的演变和历史
如表2所示,自2013年以来已经开发了多个版本的P4。这一初始构想始于一个研究团队,他们在2013年5月开始着手研究。最终,在2014年7月,该团队向SIGCOMM提交了首个P4草案提议。获得批准后,他们对论文进行了修订并于同年8月再次提交。最终,P4作为一种可编程语言被接受,这个版本被称为P414。P414共发布了四个不同的版本。然而,为了填补P414中的漏洞,后续推出了包含新的数据类型和控制语句的P416版本。
表2 P4 版本
为什么社区青睐 P4?
P4 能够描述利用可编程转发细节处理的数据包,它是一种允许网络设备使用新功能进行编程的编程语言。P4 提供了一组简单的工具,使得开发者能够在交换硬件上实施自定义协议栈。
P4并不理解以太网或IP头部的具体结构,只有开发者才能告知硬件如何解析、匹配和生成以太网头部,以及最终应将数据包转发到哪个端口。相较于传统的固定功能,这种可编程性为网络堆栈带来了新的灵活性机会。通过P4,网络设备可以通过添加新功能和协议进行升级,而不是购买全新的交换机,从而开启了新的可能性。
P4生态系统
本节将对P4进行深入探讨。在编写P4程序时,需要满足三个主要目标:
目标独立性:P4编译器在将与目标无关的P4描述转化为针对特定交换机配置的与目标相关的程序时,应当考虑交换机的实际功能和性能。
协议独立性:交换机不需要受特定数据包格式的约束。但是,控制器应能够指定以下内容:数据包嗅探器可以提取具有特定名称和类型的报头字段;这些报头区域是使用“匹配-动作”表的集合进行处理的。
可重配置性:控制器应该能够细化数据包的包分析过程和包头区域的处理过程,以便根据需求进行调整和重新配置。
P4架构
P4 会进入并处理不同的功能块,而理解P4如何进入不同功能处理块至关重要。图3和图4描述了数据包在各种转发设备(如以太网交换机、负载均衡器、路由器)上的传输情况。目前存在两种不同的架构:P414架构和P416架构。
P414架构
P414架构被称为“P4抽象转发模型”。P414主要针对类似于PISA的设备,而P416则超出了 PISA 的范围。在P4~14 ~架构中,PISA 架构是一种与协议无关的交换机架构,采用single-pipeline转发设计。该架构的局限性在于,它不知道如何表达在pipeline中被处理的数据包的具体过程。
图3 P414 架构图
P416架构
P416采用了一种可移植的交换机架构,使其能够针对具有不同架构的多个可编程设备进行目标设定。P416使用可编程解析器并执行多阶段匹配动作过程来转发传入数据包。
P416遵循可移植交换架构,可以在任何交换机目标上实现。PSA 中实现的多个网络功能被组合到一个pipeline中。该pipeline具有以下组件:解析器、校验和验证、入口匹配操作、数据包缓冲区、出口匹配操作、校验和更新、解析器和缓冲区排队引擎。
图4 P416 架构图
P4 工作流程
本节将详细讨论P4的工作流程。P4程序主要包括两个操作:配置和下发。配置操作决定了“匹配执行动作”各阶段的顺序,并指定了各阶段要处理的协议头区域。通过配置交换机,可以确定支持哪些网络协议以及如何处理数据包。发出的操作包括向“匹配-动作”表中添加或移除条目。该表本身也是配置操作期间明确指定的一部分。发出操作的过程决定了在任何给定时刻数据包执行策略的选取。
图5 P4程序的工作流程
P4程序的工作流程如图5所示。P4程序的每个部分都与执行特定功能的不同块关联。P4程序分为四个主要部分:数据声明、解析逻辑、具有控制流的匹配-动作表和逆解析逻辑。成功运行 P4 程序需要解析器、入口处理、调度器、出口处理和逆解析器。
数据包解析器首先处理到达的数据包并从数据包报头中搜索特定区域,从而确定交换机所支持的协议。该模型不对协议头的含义做出任何假设。相反,解析后的数据包表示定义了一组报头区域,在这些报头区域上执行“匹配执行动作”过程。
数据包中包含元数据,这是一种可以在处理阶段之间传递的额外信息。元数据也可以用作数据包标头区域。元数据的示例包括入口端口号、传输目的地和队列信息、用于数据包调度的时间戳,以及在不同表之间传递的数据。简言之,元数据是对数据包内容之外的辅助信息进行描述,它们在数据包的处理过程中起到关键作用,但不影响数据包的基础传输属性。
匹配-动作表接收解析出的报头区域。匹配-动作表中有两个部分:入口表和出口表。入口表决定了数据包将被放入哪一个队列中。数据包可以根据入口处理的流控机制进行转发、复制、丢弃或其他操作。当数据包通过多播方式进行复制时,对于数据包头部上的每一个动作目标,都会分别修改出口“匹配-动作”规则。
研究差距和挑战
作者审查了75篇论文,发现在P4可编程交换机领域存在着研究空白,他们计划通过展示基于P4的解决方案来填补这些空白,这些方案针对DDoS检测、负载均衡、数据包聚合与解聚。
图6展示了研究论文在不同类别中的分布情况。这些论文广泛涉及以下类别:SDN、P4、大规模网络、数据平面编程、P4 交换机、数据平面负载平衡、数据中心网络和网络性能。
图6 基于不同类别的研究论文分布
研究差距
从审阅的论文中发现的研究缺口主要包括以下几点:
大多数研究人员在非功能性 BMv2 交换机上测试其操作,因为这些交换机不支持诸如OpenConfig、gNMI和gNOI等配置、监控和运行协议。此外,与物理硬件交换机相比,BMv2交换机的计算能力相当有限。而基于Stratum等生产就绪平台的交换机将使得研究社群能够测试基于P4的解决方案。Stratum这类平台的支持将促进更接近真实环境的实验,提高研究成果的实用性和可迁移性到实际网络部署中。
当前可用的基于P4的解决方案无法有效区分突发流量(flash traffic)与攻击流量,这让攻击者有机会利用低频次的DDoS攻击来规避安全防护措施。
一些DDoS防御方案依赖于本地流量生成工具产生的合成数据集,但目前缺乏既包含恶意流量也包含正常流量的参考数据集。这导致了评估和比较不同防御方法时缺乏真实性和全面性。此外,部分研究论文在实验中使用了较小的网络拓扑结构,这限制了其研究成果的适用性和有效性验证,使得在更大规模的实际网络环境中难以实施和验证这些方案的效果。
对于交换机ASIC,一些研究者已经使用P4实现了负载均衡算法。然而,数据连接需要在交换机中占用大量内存进行存储。另一个研究方向是针对数据平面交换机,尤其是在内存资源有限的情况下,开发高效的负载均衡解决方案。
尽管基于P4的解决方案能够减少控制平面的计算和通信开销,但它可能会增加或减少数据平面中交换机的复杂性。仍需进一步研究来确定如何在交换机中部署基于P4的算法,同时有效地最小化其复杂性。
目前,研究重点集中在可编程交换机上。然而,完全部署这些解决方案面临的真正挑战在于用具有固定功能的可编程交换机替换所有现有交换机。如何在保持固定功能交换机与可编程交换机并行工作的同时整合它们,并检验网络性能,仍然是一个未解决的研究问题。
挑战
在本节中,我们将根据最前沿的文献讨论研究中面临的一些挑战。
P4的设计问题
P4 最初不支持循环结构、指针、引用或动态内存分配。因此,需要深度包检测的算法很难实现。此外,由于P4不支持算术对数函数,因此DDoS检测算法是通过估计熵值而非利用最长前缀匹配表计算精确熵值来实现的。
成本和 P4 可编程交换机的可用性
目前只有少数公司生产 P4 ASIC ,而且用可编程设备替换固定功能设备的成本要高于在现有网络中添加传统设备。此外,还需要P4专业人员来定义可编程交换机的行为,而将SDN(软件定义网络)与传统网络的集成仍然是一个研究挑战。随着可编程数据平面的加入,SDN网络的复杂性也在增加。为了解决这些问题,采用增量部署的方式至关重要,即逐步将可编程及固定功能的SDN设备作为可行选项引入到传统网络中。
Paxos协议是多个容错分布式系统和服务的基础,其在P4上的实现是一个关键应用场景,有助于塑造一般数据平面语言的需求。PISCES是一款源于OpenvSwitch (OVS)的软件交换机,它借助P4可以自定义原本硬连线的hypervisor交换机行为。PISCES并未硬编码绑定任何特定协议,因此很容易添加新特性。
数据平面安全
上世纪90年代末,主动网络是首次对可编程网络进行研究的尝试。因此,可编程网络的概念相对较新。但由于存在安全性问题,这一技术并未得到广泛采纳。类似地,P4可编程数据平面也存在一些安全问题。相较于硬件应用,在软件应用中bug更为常见。另外,通常是由经验较少且较为轻率的最终用户而非供应商来决定数据平面的转发行为。其次,攻击者可能会利用可编程性改变设备的转发行为以发起新的攻击方式。因此,有必要在程序中添加断言并通过验证来提高可编程数据平面的安全性。
为了保护基于P4的SDN交换机之间的网络链路,计划部署MACsec——一种广泛应用于保障第2层基础设施安全的IEEE标准。MACsec得到了众多交换机和路由器制造商的支持,并且相较于IPsec等VPN技术,在这些设备上的性能影响相对较小。P4-MACsec是一项关于MACsec数据平面实施的提议。
可重构性
从OpenFlow转向P4的是为了灵活且高效地展现交换机的处理能力,包括可编程的数据包解析以及通用调度和队列系统。这超出了数据包处理规则在数据平面的建模方式,包括数据包如何与特定的处理操作进行关联。特别是,在不影响数据包处理的情况下,要在运行时改变数据平面行为是非常困难的。
数据平面漏洞
当前的问题还涉及到从意图层向下映射数据平面。面对网络环境的变化,自动化调整网络的难度与验证配置调整的正确性及其预期效果密切相关。在这个过程中,控制流程不仅要能从意图层向下映射数据平面,同时也要确保数据平面的安全运行,因为可编程功能可能会引入潜在的安全漏洞。
最新的研究发现表明,在设计和构建网络时,应从一开始就充分考虑安全性和可验证性。这意味着需要采用新的抽象方法,并保证其安全执行,因为更高的可编程性会增加引入漏洞和额外攻击面的风险。
结论和未来趋势
本文对可编程数据平面进行了调查,并简要介绍了 P4 语言,以及该领域的研究空白和未来趋势。本次调查详细考察了从传统网络到SDN,再到利用P4实现可编程SDN的过渡过程。接下来,文章详细讨论了网络的演变和数据平面可编程性的重要性。在研究挑战部分,我们讨论了多种未来发展趋势和创新举措。由此得出结论,在未来,开源架构和数据网络编程将在网络领域占据主导地位。因此,SDN+P4 将成为未来几年的理想环境。
原文链接:
https://ieeexplore.ieee.org/document/10130445
-
寄存器
+关注
关注
31文章
5288浏览量
119780 -
交换机
+关注
关注
20文章
2609浏览量
99044 -
sdn
+关注
关注
3文章
254浏览量
44728 -
可编程网络
+关注
关注
0文章
6浏览量
5203
原文标题:P4 还有未来吗?
文章出处:【微信号:SDNLAB,微信公众号:SDNLAB】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论