基于P4的Segment Routing设计方案

2021-06-28 19:40陈梅苏晨赵静雅高震宇
电脑知识与技术 2021年10期
关键词:软件定义网络

陈梅 苏晨 赵静雅 高震宇

摘要:本文结合Segment Routing业内常使用的SR-MPLS转发平面的规则,设计了基于P4的Segment Routing方案。P4程序部分包括了基本转发逻辑和Segment Routing标签处理逻辑,用于在P4交换机上编译运行实现数据平面功能。使用ONOS控制器做Segment Routing的控制平面指導流表的下发,底层P4交换机从ONOS控制器的通告中得知对每个Segment的处理方法。

关键词:Segment Routing;P4;软件定义网络;协议无关

中图分类号:TP393      文献标识码:A

文章编号:1009-3044(2021)10-0223-03

1引言

当前基于互联网的业务发展速度非常迅猛,这一现象给网络基础架构发出了很大的挑战,业界需要一种全新的技术来支撑越来越被人们重视的基于业务和应用的超大规模流量工程。路由收敛速度的主要问题往往不在于控制平面和路径计算算法,而是在于路由处理器往线卡发送FIB更新的时间,以及从线卡CPU往线卡硬件转发表写入这些更新的时间。Segment Routing正是将这一个问题进行了思想的革新[1]。Segment Routing是在SDN环境下一种全新的应用驱动网络思想,它将网络中的指令抽象成Segment,直接使用报文头部的字段指导交换机的动作[2]。SDN控制器由于其具有的集中式管控的全局视角很适合作为Segment Routing的控制平面,但是在使用SDN交换机作为转发工具时,会存在硬件限制,白盒交换机不足以支持Segment Routing灵活的标签栈需求[3]。在这种情况下,使用可以自定义转发规则的P4交换机就可以更好地支持Segment Routing和SDN控制器的结合[4]。

P4(Programming Protocol-Independent Packet Processors可编程协议独立数据包处理语言,以下简称P4)是一种开源的数据面高级编程语言。P4是专为编程可重构网络架构而设计出来的一种协议无关的语言[5],自其诞生之日起就引起学术界的广泛关注与工业界的积极实现:P4相关的学术论文如雨后春笋现于各大顶级会议和期刊上,AT&T、谷歌、Cisco、华为等超过100家世界知名设备商、运营商、互联网企业等大型公司也已加入了P4语言联盟,产业界在这场革新狂欢下正在掀起P4探索和应用的浪潮。

2设计方案

在SR和P4相互结合可以完善SR的扩展性和灵活性的基础上,设计了基于P4的Segment Routing实现方案,本内容将从转发平面、控制平面和数据平面的三个角度详细分析每一个部分的需求和针对各需求的设计方案。

2.1 SR转发平面的选择

参考Segment Routing Architecture (RFC 8402 July 2018)给出了两种SR转发平面并根据调研结果做出设计:

1) MPLS转发平面:

Segment list体现为MPLS标签,其优点是:(1)SR可以利用现有MPLS数据平面;(2)Segment即MPLS标签;(3)可以用于IPv4和IPv6两种情况下地址协议族,扩展性强。

2) IPv6转发平面(即SRv6):

Segment list体现为路由扩展报头SRH(中存在多个IPv6 地址),其特点是:SRv6的交换机需要支持SRH的节点读取报头、更新指针、交换目标地址并转发。

由以上两种转发平面的特性可以看出,在核心网中这两种转发平面几乎都不需要基础设备本身进行路由,因为数据包中已经嵌入了转发的指令。而在进入核心网之前都需要在边缘路由器或是控制器为数据包创建路径并以标签的形式将发放到入口交换机进而封装到数据包头部。

在研究中发现,SR-MPLS数据平面目前在服务提供商中已经得到了一定的采用,但SRv6的采用却一直处于滞后的状态。这样发展的差异主要来源于硬件。

由于SR-MPLS转发平面是由传统MPLS转发平面升级而来,当涉及转发时,SR-MPLS没有任何特殊的ASIC要求。尽管需要特定于SR-MPLS的控制平面软件,但这并不影响ASIC转发数据包的能力。因此,SR-MPLS的采用成本相对较低。

相比之下,SRv6对ASIC提出了一些特殊的要求。即SRH是一个新的IPv6报头,仍处于IETF的草案。SRv6节点必须沿SR路径执行多个操作,包括读取SRH,将IPv6目标字段重写到路径中的下一个节点,更新指针以及执行特定于节点的操作。这些要求并不是不可克服的,但是很少有人会将这种少用的功能加入硅片中。简而言之,SRv6的大规模部署需要设备芯片的更新,这就造成了SRv6发展的滞后。

在这种情况下,P4天然的可编程性在硬件中的应用可以极大程度解决SRv6的窘境,所以,本文在完成常用的SR-MPLS转发平面的基础上,做了简单的SRv6开发论证,在p4语言和控制器简单实现的基础上留下一些可供今后发展的接口。

2.2 SR控制平面的设计

2.2.1 P4runtime作为控制平面

P4runtime是一种对内置对象(表和值集)、便携式交换机架构(PSA),以及外部(如计数器、仪表、动作配置文件等)进行控制访问的架构,它的对外接口是一套特别开发的基于GRPC的API。在P4Runtime的架构中,要控制的设备位于底层,顶部可以是一个或多个控制器。P4Runtime允许多个控制器参与,但是需要确保只有一个控制器对每个读/写实体或管道配置本身具有写访问权。任何控制器都可以对任何实体或管道配置执行读访问。

使用p4的工作流程中,编译P4源程序以生成P4设备配置和P4Info元数据。P4Info中的元数据描述了整个程序本身(PkgInfo)以及从P4程序派生的所有实体实例——表和外部实例。每个实体实例都有一个由P4编译器分配的相关数字ID,作为简洁“处理”的凭证,用于API调用。P4Runtime的API则定义了客户端和服务器之间接口的消息和语义,供外部控制使用。

P4Runtime的API支持多种语言,本方案中ONOS使用Java进行开发也是使用了P4runtime的扩展API,本方案除了使用ONOS作为控制平面以外,也编写python对p4程序进行验证,python由于其简单使用的特点,可以比较方便的实现大规模p4程序及p4交换机组网的仿真和驗证。本文中的方案通常在实现用python描述的p4逻辑验证之后使用ONOS控制器作为集中控制细化控制方案,因此这里只对控制层面使用的p4runtime API做一说明,后文中不再赘述。

2.2.2 ONOS控制器作为控制平面

SR可以使用路由协议或SDN控制器在网络中分发Segment信息,支持的协议包括域内的ISIS、OSPF和域间的BGP协议。为了更好地将SR的分布式转发控制和SDN控制器的集中式调度控制相结合,本设计方案中采用ONOS作为控制器,它可以具有全局网络拓扑、使用算法规划段路由以及对设备进行流表和标签栈下发。

另外,本方案在全局标签规格的选择上,仿照IGP作为控制的标准,参考其全局标签(Prefix Segments,下文中称Prefix-SID)和邻接标签(Adjacency Segments,下文中称Adj-SID)进行设计,Prefix-SID和Adj-SID的主要特点如下:

?Prefix-SID

– SR域的任一节点都明白该Segment的相关指令

– SR域的每个节点的转发表中都安装了该Segment相关指令

– 在MPLS SR中:为段路由全局块(SRGB)中的全局标签值

? Adj-SID

– 只有该Segment的始发节点明白它的相关指令

– 在SR-MPLS中:为设备本地分发的标签

在ONOS控制层需要做出的设计有:

1) 标签(Prefix-SID和Adj-SID)的分配和分发:

a. Prefix-SID的分配由设备监听服务(Device Service和Device Listener)监听到新设备上线开始,本设计中采用的是在给定SRGB的基础上,取每个设备的标识ID中从第一位非0的字段开始一直到ID字段结束作为index(索引),将这一index加在代表全局块的SRGB值上作为Prefix-SID,即Prefix-SID为【“SRGB+index”】。

例如device.Id为device:bmv2:s2;全局块SRGB为16000;则index为2;Prefix-SID 为16002。

这一操作在交换机上线时,ONOS中由一Prefix映射函数完成,控制器中具有网络内所有交换机的Prefix-SID。

b. Adj-SID的分配由设备监听服务(Device Service和Device Listener)监听到新设备上线开始。对于这个新上线的设备,Adj-SID指的是它的每一个出端口,因此本方案将Adj-SID设计为:本交换机的index通过某端口连接到另一交换机的index中加一个0来表示,即Adj-SID为【“index1” + “0” + “index2”】。

例如device.Id为device:bmv2:s2,该交换机的2端口和device.Id为device:bmv2:s3 的交换机相连;则代表2端口的Adj-SID为203。

这一操作在交换机上线时,ONOS中由一Adjacency映射函数完成,控制器中具有网络内所有交换机中各端口对应的Adj-SID,并将属于每个交换机的Adj-SID及其对应端口通告各交换机。

2) 标签(Prefix-SID和Adj-SID)转发表的建立:

a. Prefix-SID的转发表在新交换机上线时完成,设备监听器(Device Listener)监听到新交换机上线时,对这个交换机和当前所有已知Prefix-SID的交换机进行路由规划,采用最短路径,将每个Prefix-SID对应的转发端口port生成协议无关流表,下发给本交换机,即下发内容如下的流表。

b. Adj-SID的转发表同样在新交换机上线时完成,设备监听器(Device Listener)监听到新交换机上线时,对这个交换机和当前所有和本交换机相邻的交换机进行遍历,找到对应端口进行端口对Adj-SID的映射,并将这个映射关系以流表的形式下发给本交换机,即下发内容如下的流表。

3) 路径(Segments)的标识和建立

SR实现的路由又被称为大跳路由,因此SR只是在网络中选取交换机作为需要映射标签的节点,形成一个有序的segment列表(在MPLS中为标签栈),交换机将这一封装标签的动作以流表的形式下发给边缘P4交换机,P4交换机通过数据层面定义好的逻辑将标签栈封装在数据包的包头,然后进入P4交换机分布的网络中,即下发内容如下的流表。

2.3 SR数据平面的设计

P4交换机作为设计的数据层面,需要对数据格式、报文处理逻辑等进行定义。本方案中设计了IPv4基本转发功能、SR基本转发功能、以及一些适合后期扩展的功能。

2.3.1数据包的解析(parser模块)

P4代码中的解析器本质上是一个状态转移的逻辑,按照包头遇到的情况进行解析,并把一层一层的解析结果对应放在一个新的标准报头实例中,本方案中,SR-MPLS头部位于二三层之间,但是为了后期扩展,解析了一些可能不存在的包头类型,并且一直做到四层TCP的解析,但是由于P4程序的特性,这些操作并不会影响普通数据包进行SR功能的验证。

2.3.2数据报入口处理流程(control模块)

a. Action

action是table中可以调用动作的具体实现,类似编程语言中的函数实现,但是可以执行的基本动作比较有限,需要根据需求设计出精炼的动作集。

b. Table

经过对P4语言的学习,可以发现,Table的设计原则就是Action的逻辑性。Table的逻辑性和其他编程语言中建立一个class很像,需求的根本是“Match +Action”匹配对应关系,给一组Match,需要得到一个Action,这就是像是传递参数得到返回值一样。然而不一样的是,一个Table可以匹配很多的Match也可以不匹配Match域,但是都只能调用一个Action。

因此,一个精简有效的Table是需要反复测试修正设计方案的。本设计方案在多次修正后,对Table的需求分为以下几种:

(1)初始化标签栈:该table的目的是在match目的地址之后,将ONOS控制器返还的一组Segment数组封装进报文头部预留的自定义Segment Routing类型中。

(2)标签的转发:按照SR-MPLS的设计方案,标签存在三种标准action,其中push动作即是初始化标签栈,因此转发table中,需要有如下两种标准动作和一个自己定义的结束动作:

? Next:按照倒数第二跳弹出的规则弹出当前标签,并设置出端口;

? Continue:不弹出标签,按照当前标签对应的转发表设置出端口;

? Finish:弹出栈底标签,将以太网类型设置为Ipv4并给出转发端口。

(3)Ipv4转发:Ipv4的设计考虑了不适用SR的情况下需要仍然可以完成转发,因此本部分的交换机逻辑就是对目的Ip进行匹配,按照最短路径给出出端口即可。

c. Apply:apply是table执行的语句,可以写在一个判断语句内,调用table来完交换机内部的逻辑,流程图内阴影部分的判断将在这里实现,如图1所示。

3 P4代码设计思路

4结论

本文设计主要对Segment Routing网络架构进行研究,设计了更加符合当前网络现状、更灵活且易于扩展的SR方案。当前的SR方案比较少采用SDN控制器作为控制平面,而是使用IGP、BGP等协议进行控制,这样的做法不光沒有追上软件定义网络的广泛使用化,也缺少了全局视野在控制层面的优越性。因此本文使用ONOS控制器作为控制平面可以有效利用 SDN的集中控制管控能力,为SR规划更合理更科学地标签栈。

参考文献:

[1] 吴理炫.基于SDN的移动核心网流量管理的研究[D].北京:北京邮电大学,2018.

[2] 冯涛.软件定义网络(SDN)网络管理关键技术研究[D].北京:清华大学,2015.

[3] 赵敏,田野.P4与POF协议无关可编程网络技术比较研究[J].网络新媒体技术,2018,7(1):54-58.

[4] 林耘森箫,毕军,周禹,等.基于P4的可编程数据平面研究及其应用[J].计算机学报,2019,42(11):2539-2560.

[5] 陈果.基于P4的可编程数据交换原型系统的设计与实现[D].西安:西安电子科技大学,2018.

【通联编辑:唐一东】

猜你喜欢
软件定义网络
中国联通SDN的思考和应用实例
业务功能链技术及其应用探析
针对大规模软件定义网络的子域划分及控制器部署方法
一种新的SDN架构下端到端网络主动测量机制