软硬件融合 · 2021年11月02日

软件定义网络:从Openflow到P4-DSA

编者按:
虽然上层的网络协议让人眼花缭乱,但最底层软硬件处理,其实可以简单分为三部分:

  1. 软硬件接口:完成CPU软件和NIC硬件的网络数据包的交互,如EFA。
  2. 网络包处理:完成网络协议处理,纯硬件的网络包处理,如Barefoot PISA处理引擎;网络包处理可能在软硬件接口之前也可能之后。
  3. 高性能网络,主要负责网络数据包在网络中的传输。例如RDMA/SRD等。

而网络包处理,则是这里的最核心的部分。最开始网络包处理是完全ASIC的实现,无法编程,SDN兴起后,逐渐实现了控制面可编程Openflow,以及数据面可编程P4以及相关的DSA架构的支持P4的处理引擎。

接下来几期文章会重点关注网络包处理领域,特别是硬件包处理相关的技术。

(标题)软件定义网络:从Openflow到P4-DSA

软件定义网络从控制面扩展到数据面:

  • 控制面最重要的协议是Openflow,OVS是支持Openflow协议的开源虚拟交换机;
  • 数据面则是通过P4语言编程,实现用户自定义网络协议的处理。

1 软件定义网络概念

传统网络体系结构已经不能适应企业、运营商和网络端用户的需求。ONF(Open Networking Foundation,开放网络基金会)提出的SDN(Software Defined Network,软件定义网络)将会改变当前的体系结构。采用SDN体系结构,企业和运营商拥有前所未有的可编程能力、自动化和网络控制能力,从而可以构建一个高可扩展性且足够灵活的网络,以适应自己不断变化的商业需求。

SDN是一种新的网络体系结构,网络的控制面从数据面分离出来且直接可编程。控制面的这种变化,从之前紧耦合特定网络设备,到现在却更接近计算设备,使得底层网络设施成为上层应用和网络服务的通用抽象,网络成为一个逻辑或虚拟的实体。

如图1,是SDN体系结构的逻辑层次。网络的控制部分逻辑上集中在软件实现的SDN控制器上,在控制器上维护一个网络全局视图。整个网络类似单个包含应用和策略机制的逻辑交换机。利用SDN,企业和运营商能在一个逻辑点上控制整个网络,不受设备厂商的限制,从而简化网络设计和运维。SDN体系结构也能让网络设备尽可能的简单通用,不再需要理解、处理和实现大量的网络协议,只需要从SDN控制器动态接收指令。

964fb53386f1a8198f01fd731419d9a6.png

图1 软件定义网络体系结构

网络运维工程师能像软件编程一样配置这个简单的网络抽象,而不是依靠人工编码去配置分散的大量网络设备。同时因为SDN控制器的集中智能管控,使得网络运维工程师能实时改变网络行为,短时间内部署新的网络应用和服务。在控制层把网络状态集中起来,使得网络运维依赖动态自动的软件程序,就可灵活的配置、管理、部署安全策略和优化网络资源。他们可以直接编写这些程序,不用等设备厂商在专用网络中的封闭式软件环境中实现。

除了抽象网络,SDN支持一系列用来实现通用网络服务的API,包括路由、多播、安全、访问控制、带宽管理、能耗利用率、任意形式的策略管理,以及商业目标的定制化服务。比如,采用SDN可以在校园网的无线和有线网络之间实施统一的控制策略。再比如,SDN使得可以通过智能服务和自适应系统管理整个网络。ONF正在研究能管理多家厂商设备的开放API,打开一扇门:按需分配网络资源,服务自适应系统,真正意义上的网络虚拟化,安全的云服务。而SDN控制层和应用层之间的开放API,使得商业应用能运行在网络抽象之上,充分利用网络的服务和能力,却不需要关注网络实现的细节。总之,SDN使得网络不必“应用感知”且“应用定制”,应用也不必“网络感知”和“网络容量感知”。只有这两者之间完全逻辑隔离,计算、存储和网络资源才能真正做到最优化利用。

2 网络控制面可编程:Openflow

OpenFlow是SDN体系结构中控制面和数据面之间定义的第一个标准化通信接口,允许直接访问并操作网络设备(交换机和路由器等,不论物理还是虚拟设备)的数据面,数据面的开放接口使得目前网络设备变得参数可配置化。OpenFlow好比是CPU的指令集,协议指定了软件应用编程网络设备数据面的基本原语。

OpenFlow协议在网络设备和SDN控制软件两边的接口都要实现,采用Flow的概念来识别基于预定义规则匹配的网络流量,而SDN控制软件可以静态或动态编程这些规则。IT管理就能通过使用方式、应用和云资源等参数定义流量通过网络设备的方式。由于OpenFlow允许在Per-Flow基础上进行网络编程,基于OpenFlow的SDN体系结构能提供更细粒度的网络控制,使得网络能实时响应应用级、用户级和会话级的变化需求。

OpenFlow协议是SDN的一个关键驱动因素,也是唯一允许直接操作设备数据面的SDN标准协议。初始应用在以太网中时,OpenFlow式交换能扩展更多的应用实例。基于OpenFlow的SDN能部署在现有网络上,不论是物理网络还是虚拟网络。支持OpenFlow转发的网络设备也能进行传统转发,这样企业和运营商很容易逐步引进基于OpenFlow的SDN,即使多厂商设备的网络环境。

基于OpenFlow的SDN已经部署在很多网络设备上,给企业及运营商带来的好处有

  • 可以集中管理和控制不同厂商的网络设备;
  • 通过通用的API,抽象底层网络细节,作为系统和应用的调用接口,以此来提升网络的自动化管理能力;
  • 加快了网络部署新服务和功能的创新速度,不需要像过去一样配置每一个设备或等待厂商发布新产品;
  • 可供运营商、企业、第三方软件供应商和网络用户使用的通用编程环境,给产业链上各方提供了更多实现差异化的机会;
  • 通过自动化的集中式网络设备管理,统一的部署策略和更少的配置错误,可提升网络的可靠性和安全性;
  • 更细颗粒度的网络控制,具备在会话层级、用户级、设备和应用级实施简单、清晰且宽泛的控制策略;
  • 网络应用可以利用集中式的网络状态信息,使得网络行为紧贴用户需求,从而提供更加良好的终端用户体验。

3 Openflow案例:开源虚拟网络交换机OVS

OVS(Open Virtual Switch)是Apache 2许可下的开源的软件交换机。OVS的目标是实现一个生产环境的交换机平台,支持标准管理界面,并为程序扩展和控制开放转发功能。OVS非常适合在VM环境中用作虚拟交换机,除了向虚拟网络层公开标准控制和可见性接口之外,它还旨在支持跨多个物理服务器的分发。OVS支持多种基于Linux的虚拟化平台,包括Xen、KVM等。

最新的OVS版本支持以下功能

  • 具有主干和接入端口的标准的802.1Q VLAN模型;
  • NIC绑定在上行交换机上,可以支持LACP也可以不支持;
  • 通过NetFlow,sFlow(R)和镜像来增强可视性;
  • QoS(服务质量)配置以及策略;
  • Geneve, GRE, VxLAN, STT和LISP隧道;
  • 802.1ag连接故障管理;
  • OpenFlow 1.0以及众多扩展;
  • 支持C和Python的事务配置数据库;
  • 基于Linux内核的高性能转发模块。

如图2,OVS分为三层:

  • 管理层,即:ovs-dpctl、ovs-vsctl、ovs-ofctl、ovsdb-tool。
  • 业务逻辑层,即:vswitchd、ovsdb。
  • 数据处理层,即:datapath。

9d178a1b6e384752a49cc46d4c51d1a5.png

图2 OVS架构图

对具体的OVS所处服务器而言,管理层是远程控制。业务逻辑层是用户态应用程序,数据处理层是内核态应用程序。OVS主要包括以下模块和特性:

  • ovs-vswitchd:实现交换功能的守护程序(daemon),和Linux内核模块一起,实现基于流的交换;
  • ovsdb-server:提供轻量级数据库查询服务。其保存了整个OVS的配置信息,包括接口,流表,VLAN等。ovs-vswitchd从其查询配置信息;
  • ovs-dpctl:dapapath控制。用来配置switch内核模块,可以控制转发规则;
  • ovs-vsctl:用于查询和更新ovs-vswitchd的配置的实用程序。
  • ovs-appctl:用来将命令发送到正在运行的OVS守护进程的实用程序。

Open vSwitch还提供了一些工具

  • ovs-ofctl:用于查询和控制OpenFlow交换机和控制器的实用程序。
  • ovs-pki:用于创建和管理OpenFlow交换机的公共密钥基础设施的实用程序。
  • ovs-testcontroller:一个简单的OpenFlow控制器,可能对测试有用(尽管不适用于生产)。
  • tcpdump的补丁程序,使它能够解析OpenFlow消息。

4 网络数据面可编程:P4-DSA

上面我们介绍了SDN和OpenFlow,里面讲了很多OpenFlow的优点。但是随着SDN技术的进一步发展,也逐步的发现了OpenFlow的一些局限之处。最大的局限,就是OpenFlow没有做到协议无关,OpenFlow只能依据现有的协议来定义流表项。

OpenFlow接口一开始很简单,只抽象了单个规则表,并且表中只能在数据包特定的十二个包头字段上进行匹配(比如MAC地址、IP地址、载荷协议类型、TCP/UDP端口等等)。在过去的几年中,协议标准已经演进得越来越复杂,OpenFlow1.4的时候字段增加到41个。归结起来就是支持匹配越来越多的首部区域和支持多级的规则表,由此能够允许交换机向控制器暴露出它们更多的能力。

新的包头字段增多,而且没有表露出任何即将结束的迹象。相比持续地扩展OpenFlow 的协议标准,未来的交换机应该为包解析和包头字段匹配支持灵活的机制,允许控制器应用通过一个通用的开放的接口利用交换机的这些能力。

P4(Programming Protocol-Independent Packet Processors,可编程的协议无关的包处理器)是一种面向网络数据面编程的高级语言。图3展示了P4和已有的协议接口之间的关系。P4用来配置交换机,告诉它们应该如何处理数据包。已有的协议接口(例如OpenFlow)负责将转发表送入固定功能的交换机。

P4提升了网络编程的抽象等级,可以作为控制器和交换机之间的通用接口。未来的OpenFlow协议应该允许控制器“告诉交换机如何去做”,而不受交换机设计的局限。关键的挑战是要找到一个平衡点,它既能够“灵活表达多种控制意愿的特性需求”,还能够“在大范围的软硬件交换机上低难度的实现”。

a23cad03ad06e2ed6b02bacebc7ac3c1.png

图3 P4是用来配置交换机的语言

P4有三个主要的目标

  • 重配置能力:控制器应该能够重新定义数据包的包解析过程和对包头字段的处理过程。
  • 协议无关性:交换机不应该与特定的包格式绑定。相反地,控制器应该能够指定:一个能提取出特定名称和类型的包头字段的包解析器;一个类型化的“匹配–动作”表的集合,用于处理包头字段。
  • 目标无关性:控制器的开发者不必知道底层交换机的细节。而是P4编译器将目标无关的P4描述转换成目标相关的用来配置交换机的程序时,才应该去考虑交换机的能力。

如图4中P4的抽象转发模型(接下来简称P4模型),交换机通过一个可编程的解析器和随后的多阶段的“匹配–执行动作”的流程组合转发数据包,其中“匹配–执行”的过程可以是串行的、并行的或者是二者结合的。

a7ebd89cfc1243265d7c99a5e311e367.png

图4 P4的抽象转发模型

与OpenFlow对比,P4模型包含三个特点

  • OpenFlow假设有一个固定的包解析器,P4模型能够支持可编程的包解析器,允许定义新的包头字段;
  • OpenFlow假设“匹配–执行”的各个阶段是串行的,而P4模型允许并行或串行;
  • P4模型假设“动作”是使用交换机所支持的协议无关的原语编写而成的。

P4模型将数据包如何在不同的转发设备上(例如以太网交换机、负载均衡器、路由器)被不同的技术(例如固定功能的ASIC交换芯片、NPU、可重配置的交换机、软件交换机、FPGA等)进行处理的问题通用化。这就使得能够用一门通用的语言来描绘通用的P4模型来处理数据包。因此,开发者可以开发目标无关的程序,开发者可以映射P4程序到不同的转发设备中,这些设备可以是相当慢的软件交换机,也可以是最快速的基于ASIC芯片的交换机。

5 P4案例:Barefoot PISA架构

Barefoot(已经被Intel收购)基于PISA架构,设计了面向数据中心的、支持P4数据面编程的ASIC交换芯片。其目标是使对网络的编程与和CPU编程一样简单。当网络是完全可编程的(即控制平面和数据平面都在最终用户的控制之下)时,网络行业将享有与软件一样飞速的发展。

在Barefoot看来,虽然已经存在NPU和FPGA,可以修改网络协议和编辑数据包,并为那些知道如何编写微代码或RTL的人员提供适度的可编程性,但是它们跟ASIC的性能不在一个数量级。因此,NPU和FPGA只能在性能不敏感的地方找到用武之地。Barefoot为网络行业提供两全其美的解决方案:可编程性数据平面协议,并且达到行业最高速度。Barefoot不仅开发了全球第一个比传统ASIC还要更快的可编程交换机芯片,而且还使得网络编程变得容易并且通用。

Barefoot与Google、Intel、Microsoft、Princeton及Stanford合作,开发了用于编程网络的开源网络编程语言P4。程序员可以基于P4编程一次来描述网络行为,然后编译程序以在各种不同的平台上运行。P4为网络设备制造商和网络所有者提供了差异化的手段,可以使产品或整个网络比竞争对手更好。

这与当前的情况形成了鲜明对比,如果用户想向网络添加新功能,则必须与芯片供应商共享该功能,并看到它也出现在竞争对手的网络中,从而打败了差异化的目的。设备制造商也不愿意添加新功能。添加新功能需要花费几年的时间,然后竞争优势却很短暂。这导致一些公司倾向于开发特有的固定功能ASIC,以保持领先地位。

如图5所示,可编程性长期存在于计算、图形、数字信号处理以及特定领域处理器中,从而使蓬勃发展的开发人员社区能够快速创新并编写以最终用户为中心的解决方案。Barefoot的PISA架构可以像DSP、GPU以及TPU那样,它将完全控制权交给网络所有者。

e84bd4d532a7d4a6397d7425fffd9304.png

图5 像CPU编译器一样的网络编译器

为此,Barefoot首先确定了一个小规模的原语指令集来处理数据包,总共约11条指令。以及非常统一的可编程流水线(PISA架构),来快速连续地处理数据包头。程序使用领域特定语言P4编写,然后由Barefoot Capilano编译器进行编译,并经过优化以在PISA架构的设备上全线速运行。Barefoot的目标是使网络更加敏捷、灵活、模块化且成本更低。

Barefoot认为,网络系统正朝着由三层构成的方向发展:在底部是一个P4可编程的Tofino交换机,在上面是一个基于Linux的操作系统,运行专有的控制平面应用程序。Barefoot为整个行业提供最快的、最高可编程性、经过P4优化的交换机硬件。

(正文完)


作者:Chaobowx
来源:https://mp.weixin.qq.com/s/vHbpZcMnWsnCqx4dtzCZGA
微信公众号:
软硬件.jpg

相关文章推荐

更多软硬件技术干货请关注软硬件融合专栏。
推荐阅读
关注数
2800
内容数
103
软硬件融合
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息