admin管理员组

文章数量:1532240


2024年6月13日发(作者:)

ISSN1009-3044

ComputerKnowledgeandTechnology

第17卷第10期(2021年4月)

电脑知识

与技术

Vol.17,No.10

April

2021

E-mail:*************.cn

ComputerKnowledgeandTechnology

电脑知识

与技术

http://

Tel:+86-551-6569

基于P4的SegmentRouting设计方案

陈梅,苏晨,赵静雅,高震宇

(北京电子科技职业学院电信工程学院,北京100176)

摘要:本文结合SegmentRouting业内常使用的SR-MPLS转发平面的规则,设计了基于P4的SegmentRouting方案。P4程序

部分包括了基本转发逻辑和SegmentRouting标签处理逻辑,用于在P4交换机上编译运行实现数据平面功能。使用ONOS

控制器做SegmentRouting的控制平面指导流表的下发,底层P4交换机从ONOS控制器的通告中得知对每个Segment的处

理方法。

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

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

开放科学(资源服务)标识码(OSID):

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

1引言

当前基于互联网的业务发展速度非常迅猛,这一现象给网

络基础架构发出了很大的挑战,业界需要一种全新的技术来支

撑越来越被人们重视的基于业务和应用的超大规模流量工程。

路由收敛速度的主要问题往往不在于控制平面和路径计算算

法,而是在于路由处理器往线卡发送FIB更新的时间,以及从

线卡CPU往线卡硬件转发表写入这些更新的时间。Segment

Routing正是将这一个问题进行了思想的革新

[1]

。SegmentRout⁃

ing是在SDN环境下一种全新的应用驱动网络思想,它将网络

中的指令抽象成Segment,直接使用报文头部的字段指导交换机

的动作

[2]

。SDN控制器由于其具有的集中式管控的全局视角很

适合作为SegmentRouting的控制平面,但是在使用SDN交换机

作为转发工具时,会存在硬件限制,白盒交换机不足以支持

SegmentRouting灵活的标签栈需求

[3]

。在这种情况下,使用可

以自定义转发规则的P4交换机就可以更好地支持Segment

Routing和SDN控制器的结合

[4]

P4(ProgrammingProtocol-IndependentPacketProcessors可

编程协议独立数据包处理语言,以下简称P4)是一种开源的数

据面高级编程语言。P4是专为编程可重构网络架构而设计出

来的一种协议无关的语言

[5]

,自其诞生之日起就引起学术界的

广泛关注与工业界的积极实现:P4相关的学术论文如雨后春笋

现于各大顶级会议和期刊上,AT&T、谷歌、Cisco、华为等超过

100家世界知名设备商、运营商、互联网企业等大型公司也已加

入了P4语言联盟,产业界在这场革新狂欢下正在掀起P4探索

和应用的浪潮。

转发平面、控制平面和数据平面的三个角度详细分析每一个部

分的需求和针对各需求的设计方案。

2.1SR转发平面的选择

2设计方案

在SR和P4相互结合可以完善SR的扩展性和灵活性的基

础上,设计了基于P4的SegmentRouting实现方案,本内容将从

参考SegmentRoutingArchitecture(RFC8402July2018)给

出了两种SR转发平面并根据调研结果做出设计:

1)MPLS转发平面:

Segmentlist体现为MPLS标签,其优点是:(1)SR可以利用

现有MPLS数据平面;(2)Segment即MPLS标签;(3)可以用于

IPv4和IPv6两种情况下地址协议族,扩展性强。

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

Segmentlist体现为路由扩展报头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目标字段重写到

路径中的下一个节点,更新指针以及执行特定于节点的操作。

收稿日期:2021-01-05

基金项目:北京电子科技职业学院科技一般项目(基金号:2020Z068-KXY)

本栏目责任编辑:梁书

计算机工程应用技术

223

ComputerKnowledgeandTechnology

电脑知识

与技术

这些要求并不是不可克服的,但是很少有人会将这种少用的功

能加入硅片中。简而言之,SRv6的大规模部署需要设备芯片

的更新,这就造成了SRv6发展的滞后。

在这种情况下,P4天然的可编程性在硬件中的应用可以极

大程度解决SRv6的窘境,所以,本文在完成常用的SR-MPLS转

发平面的基础上,做了简单的SRv6开发论证,在p4语言和控制

器简单实现的基础上留下一些可供今后发展的接口。

2.2SR控制平面的设计

2.2.1P4runtime作为控制平面

架构(

P4runtime

PSA),以及外部

是一种对内置对象

(如计数器、

(表和值集)

仪表、动作配置文件等

、便携式交换机

)进行

控制访问的架构,它的对外接口是一套特别开发的基于GRPC

的API。在P4Runtime的架构中,要控制的设备位于底层,顶部

可以是一个或多个控制器。P4Runtime允许多个控制器参与,

但是需要确保只有一个控制器对每个读/写实体或管道配置本

身具有写访问权。任何控制器都可以对任何实体或管道配置

执行读访问。

使用p4的工作流程中,编译P4源程序以生成P4设备配置

和P4Info元数据。P4Info中的元数据描述了整个程序本身

PkgInfo)以及从P4程序派生的所有实体实例——表和外部实

例。每个实体实例都有一个由P4编译器分配的相关数字ID,

作为简洁“处理”的凭证,用于API调用。P4Runtime的API则定

义了客户端和服务器之间接口的消息和语义,供外部控制

使用。

进行开发也是使用了

P4Runtime的API支持多种语言,本方案中ONOS使用Java

ONOS

python

作为控制平面以外,

P4runtime的扩展API,本方案除了使用

程序及

由于其简单使用的特点,

也编写

p4交换机组网的仿真和验证。本文中的方案通常在实

可以比较方便的实现大规模

python对p4程序进行验证,

p4

现用python描述的p4逻辑验证之后使用ONOS控制器作为集

中控制细化控制方案,

time

因此这里只对控制层面使用的p4run⁃

2.2.2

API

ONOS

做一说明,

控制器作为控制平面

后文中不再赘述。

ment

SR

议。为了更好地将

信息,

可以使用路由协议或

支持的协议包括域内的

SDN

SR的分布式转发控制和

ISIS

控制器在网络中分发

、OSPF

Seg⁃

SDN

和域间的

控制器的集中

BGP协

式调度控制相结合,本设计方案中采用ONOS作为控制器,它

可以具有全局网络拓扑、使用算法规划段路由以及对设备进行

流表和标签栈下发。

另外,本方案在全局标签规格的选择上,仿照IGP作为控

制的标准,

SID

参考其全局标签(PrefixSegments,下文中称

设计,

)和邻接标签

⚫Prefix-SID

Prefix-SID

Adjacency

Adj-SID的主要特点如下:

Segments,下文中称Adj-SID

Prefix-

)进行

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

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

指令

–在MPLSSR中:为段路由全局块(SRGB)中的全局标

签值

Adj-SID

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

224

计算机工程应用技术

第17卷第10期(2021年4月)

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

1)标签

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

vice

-SID

(Prefix-SID

的分配由设备监听服务

和Adj-SID)的分配和分发:

(DeviceService和De⁃

定SRGB

Listener

的基础上,

)监听到新设备上线开始,

取每个设备的标识

本设计中采用的是在给

ID中从第一位非0的字

段开始一直到ID字段结束作为index(索引),将这一index加在

代表全局块的SRGB值上作为Prefix-SID,即Prefix-SID为

【“SRGB+index”】。

index

例如为device:bmv2:s2;全局块SRGB为16000;

这一操作在交换机上线时,

为2;Prefix-SID为16002。

ONOS中由一Prefix映射函数完

成,控制器中具有网络内所有交换机的

vice

备,Adj-SID

Listener

-SID

Prefix-SID。

指的是它的每一个出端口,

监听到新设备上线开始。对于这个新上线的设

的分配由设备监听服务(DeviceService和De⁃

因此本方案将Adj-SID

设计为:

dex

dex2

中加一个

本交换机的

0来表示,

index

通过某端口连接到另一交换机的

Adj-SID为【“index1”+“0”+“

in⁃

in⁃

例如

】。

为device:bmv2:s2,该交换机的2端口和de⁃

SID为

为device:bmv2:s3的交换机相连;则代表2端口的Adj-

这一操作在交换机上线时,

203。

ONOS中由一Adjacency映射函

数完成,

SID

控制器中具有网络内所有交换机中各端口对应的Adj-

换机。

,并将属于每个交换机的Adj-SID及其对应端口通告各交

2)标签(Prefix-SID

器(Device

-SID

Listener

的转发表在新交换机上线时完成,

和Adj-SID)转发表的建立:

)监听到新交换机上线时,对这个交换机和当

设备监听

前所有已知Prefix-SID的交换机进行路由规划,采用最短路径,

将每个Prefix-SID对应的转发端口port生成协议无关流表,下

发给本交换机,即下发内容如下的流表。

表1全局标签转发流表的匹配域和动作域

DeviceId(下发流表设备)Match(匹配域)Action(动作域)

例如:device:bmv2:s2

Prefix-SID

16002

,例如:

PortNumber,例如:2

听器(

b.

Device

Adj-SID

Listener

的转发表同样在新交换机上线时完成,

)监听到新交换机上线时,对这个交换机和

设备监

当前所有和本交换机相邻的交换机进行遍历,找到对应端口进

行端口对Adj-SID的映射,并将这个映射关系以流表的形式下

发给本交换机,即下发内容如下的流表。

表2邻接标签转发流表的匹配域和动作域

DeviceId(下发流表设备)Match(匹配域)Action(动作域)

例如:device:bmv2:s2

3)路径(Segments)

Adj-SID,例如:203PortNumber,例如:2

选取交换机作为需要映射标签的节点,

SR实现的路由又被称为大跳路由,

的标识和建立

因此SR只是在网络中

ment

形成一个有序的seg⁃

作以流表的形式下发给边缘

列表(在MPLS中为标签栈

P4

交换机,

,交换机将这一封装标签的动

P4交换机通过数据层

面定义好的逻辑将标签栈封装在数据包的包头,然后进入P4

交换机分布的网络中,即下发内容如下的流表。

本栏目责任编辑:梁书

第17卷第10期(2021年4月)

表3

DeviceId(下发流表设备)

ComputerKnowledgeandTechnology

电脑知识

与技术

标签下发流表的匹配域和动作域

Match(匹配域)Action(动作域)

PushSegments(数据

层面

P4代码中定义的动作)

Parameter(动

作参数)

例如:device:bmv2:s2

device:bmv2:s8

dst,例如:Segs[],例如

{5,506,8}

2.3SR数据平面的设计

出转发端口。

(3)Ipv4转发:Ipv4的设计考虑了不适用SR的情况下需要

仍然可以完成转发,因此本部分的交换机逻辑就是对目的Ip进

行匹配,按照最短路径给出出端口即可。

:apply是table执行的语句,可以写在一个判断语

句内,调用table来完交换机内部的逻辑,流程图内阴影部分的

判断将在这里实现,如图1所示。

P4交换机作为设计的数据层面,需要对数据格式、报文处

理逻辑等进行定义。本方案中设计了

IPv4基本转发功能、SR基本转发功能、

以及一些适合后期扩展的功能。

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

3P4代码设计思路

P4代码中的解析器本质上是一个

状态转移的逻辑,按照包头遇到的情况

进行解析,并把一层一层的解析结果对

应放在一个新的标准报头实例中,本方

案中,SR-MPLS头部位于二三层之间,

但是为了后期扩展,解析了一些可能不

存在的包头类型,并且一直做到四层

TCP的解析,但是由于P4程序的特性,

这些操作并不会影响普通数据包进行

SR功能的验证。

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

模块)

action是table中可以调用动作的具

体实现,类似编程语言中的函数实现,

但是可以执行的基本动作比较有限,需

要根据需求设计出精炼的动作集。

经过对P4语言的学习,可以发现,

Table的设计原则就是Action的逻辑性。Table的逻辑性和其他

编程语言中建立一个class很像,需求的根本是“Match+Action”

匹配对应关系,给一组Match,需要得到一个Action,这就是像

是传递参数得到返回值一样。然而不一样的是,一个Table可

以匹配很多的Match也可以不匹配Match域,但是都只能调用

一个Action。

因此,一个精简有效的Table是需要反复测试修正设计方

案的。本设计方案在多次修正后,对Table的需求分为以下

几种:

(1)初始化标签栈:该table的目的是在match目的地址之

后,将ONOS控制器返还的一组Segment数组封装进报文头部

预留的自定义SegmentRouting类型中。

(2)标签的转发:按照SR-MPLS的设计方案,标签存在三种

标准action,其中push动作即是初始化标签栈,因此转发table

中,需要有如下两种标准动作和一个自己定义的结束动作:

⚫Next:按照倒数第二跳弹出的规则弹出当前标签,并设

置出端口;

⚫Continue:不弹出标签,按照当前标签对应的转发表设

置出端口;

⚫Finish:弹出栈底标签,将以太网类型设置为Ipv4并给

本栏目责任编辑:梁书

图1交换机逻辑设计思路流程图

4结论

本文设计主要对SegmentRouting网络架构进行研究,设计

了更加符合当前网络现状、更灵活且易于扩展的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.

【通联编辑:唐一东】

计算机工程应用技术

225


本文标签: 交换机平面标签控制