探索通用可编程数据平面

引言:相比传统网络数据平面,通用可编程数据平面让网络用户可以自定义数据包的完整处理流程,实现理想的协议无关网络数据处理。作为一种理想的SDN数据平面,通用可编程数据平面还不够完善,还需要在不断的尝试中摸索前进。
本文选自《重构网络:SDN架构与实现》。

  相比传统网络数据平面,通用可编程数据平面让网络用户可以自定义数据包的完整处理流程,实现理想的协议无关网络数据处理。而当下的OpenFlow模型还无法成为一种完全的通用可编程数据转发模型,还无法实现协议无关的转发。只有实现了真正的通用可编程数据平面,才会真正释放网络的可编程能力,从而逐步实现网络的软件化和程序化。

  对于网络用户和网络服务供应商,通用可编程数据平面使得他们可以快速地开发新网络功能及部署新网络服务。网络用户可以从软件产业过去几十年已发展成熟的软件编程理论、软件工程实践和工具中受益。计算机软件工程师也能够很容易对网络数据平面设备进行编程、测试和调试,以一个完全可编程的方式来管理整个网络。

  对于网络芯片供应商,通用可编程数据平面使他们能专注于设计及改进那些可重用的数据包处理架构和基本模块,而不是纠缠特定协议里错综复杂的细节和异常行为。而且,一旦证明这些架构和基本模块可行,供应商就可以在多代交换芯片的设计中重复使用它们,不必为客户不断产生的新需求而反复修改。

  对于网络研究人员,通用可编程数据平面为他们验证新想法提供了新的契机。OpenFlow数据平面设备早期被广泛用于网络科研领域这一事实也证明了这一点。网络研究人员基于通用可编程数据平面可以快速搭建满足新实验需求的网络系统,不需要等待设备厂商的产品升级。

  从OpenFlow Switch通用转发模型诞生至今,学术界和产业界在通用可编程数据平面领域做了很多努力,持续推动了SDN数据平面的发展。其中典型的通用可编程数据平面设计思路是The McKeown Group的可编程协议无关交换机架构PISA(Protocol-Independent Switch Architecture)。

        
                        PISA架构

  PISA是在2013年的RMT(Reconfigurable Match Tables)架构基础上发展起来的一种新的SDN数据平面。到达PISA系统的数据包先由可编程解析器解析,再通过入口侧一系列的Match-Action阶段,然后经由队列系统交换,由出口Match-Action阶段再次处理,最后重新组装发送到输出端口。

  其中可编程协议解析器模型是Glen Gibb等在2013年提出的一种新的通用抽象模型,实现了协议无关的网络数据包协议解析处理,改进了OpenFlow Switch在支持新网络协议方面的不足。可编程的Match-Action模型实现了协议无关的网络数据转发处理,包括匹配逻辑和行动逻辑两部分。匹配逻辑是通过静态随机存储器(SRAM)和三态内容寻址存储器(TCAM)的混合查找表,以及计数器、流量统计表和通用哈希表组合实现的。行动逻辑是通过一组ALU标准布尔和算数运算单元、数据包头修改操作和散列操作组合实现的。PISA还提供了一条回流路径使一些特殊数据包能够被多次反馈到解析器和转发处理流水线。PISA 实现了一个可编程数据包生成器,使控制平面可以将频繁或周期性的数据包生成操作交给数据包生成器来完成。

  可以看出,PISA通用可编程数据平面在可编程协议解析处理和可编程数据包处理操作两个方面进行了扩展。但是中间数据包调度部分还是采用传统的设计思路,不支持用户可编程的数据包队列管理和调度处理。Sivaraman等在2015年提出了一种通用可编程包调度处理模型,实现了用户可编程的包调度处理,改进了PISA在数据包调度处理可编程性方面的不足。

  但是,相比通用计算数据平面,PISA在可编程生态上还有不足。通用计算数据平面就是通用处理器,就是我们所熟悉的如何在通用处理器上编程、基于高级编程语言描述具体的应用,以及编译这些程序并在通用处理器上运行。计算机领域的数据平面可编程生态系统已经非常成熟,而在网络领域里,这样的故事才刚刚开始。

  网络数据平面编程语言的出现,使得用户可以自定义网络数据包的处理流程,进一步提升了通用可编程数据平面的可编程能力。P4(Programming Protocol-Independent Packet Processors)语言是网络数据平面编程语言中的典型例子。用户通过编写一段P4程序来定义数据包的处理流程,然后利用P4编译器将这段程序翻译成指定网络数据平面的配置信息,从而实现用户可编程的网络数据处理。

             
                           P4语言

  P4数据平面编程语言框架是否能成为一种成功的通用可编程数据平面,其关键在于P4语言的建模能力和P4开发工具的完善程度。P4语言的建模能力依赖于语言本身的发展和功能库的完善。每个P4程序包含Header、Parser、Table、Action和Control Programs五部分。P4联盟创建了一个开源社区,发布了广受支持的1.0.2版本和最新的1.1.0版本语言规范,也维护了一组P4程序案例。

  现有的开源P4开发工具主要包括P4编译器、P4交换机参考模型和测试框架。P4编译器需要从P4程序的Header和Parser部分导出数据平面解析器的配置信息,从Table、Action和Control Programs中导出Match-Action表中的配置信息和所有依赖关系。同时,编译器还需要考虑目标数据平面硬件的功能和特性,尽可能支持更多的目标硬件。需要注意的是,通过编译P4程序,不仅可以生成数据平面设备的配置信息,还可以生成运行API,来实现控制平面与数据平面之间的交互。在这些开发工具的支持下,用户可以很容易地编写和编译自己的P4程序,使用参考模型来运行和调试程序。

  除此之外,在OpenFlow Switch通用转发模型的基础上,研究人员尝试建立更加通用的网络数据处理抽象模型。华为美国研究所的宋浩宇等提出了协议无关转发(Protocol Oblivious Forwarding,POF)框架,通过对网络转发处理行为进行再次抽象,实现协议无关转发处理。具体来说,对任意报文,其报文解析和匹配域读取都可以抽象为在报文特定位置读取特定长度比特串{offset, length},转发面仅需要知道偏移量和长度就可以完成处理。同样,对于报文的处理也可以抽象为在报文特定位置的比特串的插入、删除、拷贝和修改等操作。在POF架构中,POF交换机并没有协议的概念,它仅在POF控制器的指导下通过{offset, length}来定位待匹配的数据,从而完成网络数据转发处理。

  针对OpenFlow Switch不支持描述有状态网络处理的问题,罗马杜维嘉大学的Giuseppe Bianchi等在OpenFlow Switch基础上增加了新的抽象子模型State Table,创建了支持有状态网络处理的新通用数据平面模型OpenState。明尼苏达大学的Hesham Mekky等提出的应用感知SDN架构,在OpenFlow Switch基础上增加了新的应用Table子模块,增强了数据平面支持有状态网络处理的抽象能力。普林斯顿大学研究团队提出了一种新的网络数据处理原语FAST(Flow-level State Transitions),使得用户可以通过SDN控制器对数据平面设备的有状态处理流程进行编程。这些新的研究思路都对OpenFlow Switch通用转发模型的抽象能力做了进一步扩展。

  此外,日本的NEC公司在OpenFlow Switch通用转发模型基础上设计网络领域的专用指令集处理器(ASIP,Application Specific Instruction Set Processor)。在网络数据平面发展过程中,网络处理器(NP,Network Processor)与通用可编程数据平面非常相似。网络处理器是一种可编程的网络处理硬件,它结合了RISC处理器的低成本、灵活性及定制芯片(ASIC)的高性能。网络处理器并不受限于某种具体的网络协议,可以适应任意一种网络协议。网络处理器类似于通用处理器,硬件架构保持固定,由软件决定网络处理器如何处理数据包。相比通用可编程数据平面,网络处理器的设计与实现已经非常成熟,有很多完善的设计工具和案例可供参考。

  任何技术的发展都不是一帆风顺的,也不可能一蹴而就。作为一种理想的SDN数据平面,通用可编程数据平面还不够完善,还需要在不断的尝试中摸索前进。

  本文选自《重构网络:SDN架构与实现》,点此链接可在博文视点官网查看此书。
                    
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                       

你可能感兴趣的:(架构,sdn)