一种基于SRv6的随路网络测量方法

文档序号:26483047发布日期:2021-08-31 17:39阅读:177来源:国知局
一种基于SRv6的随路网络测量方法

本发明属于网络技术领域,特别涉及一种基于srv6的随路网络测量方法。



背景技术:

互联网新业务的蓬勃发展、新需求的不断涌现,5g、云、泛在智联时代的到来,给网络信息技术的创新变革以及信息基础设施的升级带来了新的挑战。作为全球互联网发展基石的国际互联协议(internetprotocol,ip)网络不断用技术创新和持续演进来应对挑战。

分段路由(segmentrouting,sr)是一种源路由技术,由源节点来为应用报文指定路径,并将路径转换成一个有序的分段列表(segmentlist)封装到报文头中,路径的中间节点只需要根据报文头中指定的路径进行转发。这样的分段被称为“segment”,并通过sid(segmentidentifier,段标识符)来标识。目前segmentrouting支持多协议标签交换(multi-protocollabelswitching,mpls)和互联网协议第6版(internetprotocolversion6,ipv6)两种数据平面,基于ipv6数据平面的segmentrouting被称为srv6,其sid为128比特的二进制数值,通常也称为srv6sid,通过一个sid可以定义任何的网络功能,如end,end.x,end.dt4,国际互联网工程任务组(theinternetengineeringtaskforce,ietf)已经定义了多种网络功能指令,可以实现灵活的网络编程。为了实现srv6转发,定义了新的srv6扩展头部,被称为segmentroutingheader(srh),用于进行segment的编程组合形成srv6路径。在srv6网络中存在多种类型的节点角色,基本可以分为三类:srv6源节点,中转节点,endpoint节点,其中源节点用于将数据包引导到srv6segmentlist中;中转节点是在srv6报文转发路径上不参与srv6处理的ipv6节点;endpoint节点是指在srv6报文转发过程中,节点接受的报文的ipv6目的地址是本地配置的sid。由这些srv6网络节点构成的网络区域称为srv6域。

网络遥测(telemetry)技术是一种自动化的网络测量和数据采集技术,它可以在远端收集网络节点的数据,为网络分析提供实时,可靠,丰富的数据来源。随路网络测量是网络遥测技术的其中一种,它是数据平面遥测所使用的的关键技术,可以提供基于包的信息,基于收集数据的处理方式不同,分为两种基本模式,即passport和postcard模式,对于passport模式,入节点需要为被测量报文添加一个指令头,中间节点根据指令,逐跳收集沿途数据,并将数据记录在报文里,在出节点上送收集的沿途数据,并剥离指令头和数据,还原数据报文。postcard模式区别于passport模式,每个节点在收到包含指令头的数据报文时,不会将采集数据记录在报文里,而是直接将采集数据上送。

现阶段基于srv6的随路网路测量方法将指令头封装在ipv6逐跳选项扩展报文中或封装在srh可选的类型长度值(typelengthvalue,tlv)中。封装在ipv6逐跳选项扩展报文中的指令可以被所有的ipv6节点处理,在松散路径的场景下,转发路径并不固定,使用这种封装方式可以知道报文经过的每一个节点,在网络出现故障时方便对问题进行定位。封装在srh中的指令只会由具有srv6处理能力的节点处理,通过这种方式,可以在指定的节点上运行随路网络测量,从而兼容传统网络,在严格路径场景下,该封装效果等同于在ipv6逐跳选项扩展报文头中的封装。

目前基于srv6的随路网路测量方法的封装模式会增加节点的处理时间并降低节点的处理效率。当指令头封装在ipv6逐跳选项扩展报文中,节点需要解析ipv6逐跳扩展选项扩展和srh;当指令头封装在srh的tlv中,因为tlv封装在segmentlist之后,所以节点需要解析完整的segmentlist后,才能解析tlv的值。



技术实现要素:

本发明用于解决目前基于srv6的随路网路测量方法的封装模式会增加节点的处理时间并降低节点处理效率的问题,具体将指令头当做srv6sid直接封装在srh的segmentlist中,同时采用postcard模式,节点不需要对每一个数据包进行插入数据,重新计算校验和等操作,且采集数据的长度也不再受限于报文的长度。

本发明提出了基于srv6的随路网络测量方法。采用随路网络测量postcard模式,将随路网络测量中的指令头封装于srh的segmentlist[0]中,提高了节点的处理效率。

本发明设计了新的oam-isid,sid包含pathid,vpnid,flowid,sequencenumber等字段,其中pathid用于唯一标识路径,vpnid用于唯一标识vpn实例,flowid用于唯一标识流,sequencenumber用于唯一标识报文序号,该sid适用于普通srv6网络场景及srv6l3vpn网络场景下的随路网络测量。

本发明设计了新的sid附加行为usd+和usp+,当srh中的segmentleft为1且flags第2比特位为1时,上传采集数据并移除外层ipv6头部及所有扩展头部。

本发明设计了新的上传采集数据报文格式,报文包括oam-isid及采集数据。

具体技术方案如下:

一种基于srv6的随路网络测量方法,基于新的数据格式,命名为oam-isid,用于将指令头封装在srh中,oam-isid包括pathid、vpnid、ioam-trace-type、reserved、flowid以及sequencenumber;

其中,

pathid:长度16比特,用于唯一地区别不同的路径,

vpnid:长度16比特,用于srv6三层虚拟专用网l3vpn场景,唯一地区别不同的vpn用户,设置为全0时代表忽略该值,

ioam-trace-type:长度24比特,用于描述收集的数据,每一个比特代表一种需要收集的数据类型,ietf在[i-d.ietf-ippm-ioam-data]中定义了具体的值,

reserved:长度8比特,保留字段,必须设置为全0,

flowid:长度32比特,用于唯一地标识测量的流信息,

sequencenumber:长度32比特,用于标记测量流的报文顺序,每发送一个报文,该值加1,

oam-isid封装于segmentlist[0],即最后一个segment,同时为了区别于普通srv6数据包,将srh中的flags的第2比特位置1;

基于新的上传采集数据报文封装格式,便于分析采集数据,具体将oam-isid封装在上传采集数据报文中,控制端通过pathid来确定路径沿途节点是否上传了采集信息,同时控制端通过vpnid,flowid,sequencenumber唯一确定上传的采集数据属于哪条流的第几个报文;

具体测量方法如下:

(1)源节点收到数据包,对进入srv6域的数据报文封装srh,在srh中flags的第2比特位设置为1,segmentlist[0]设置为oam-isid,剩余segmentlist封装转发路径;在oam-isid中pathid设置为转发路径所对应的id,pathid与转发路径的对应关系由控制平面定义,vpnid设置为数据报文所属vpn实例对应的id,vpn实例与vpnid的对应关系控制平面定义,如无vpn实例则设置为0,ioam-trace-type设置所需要的收集数据对应的比特位,flowid设置为数据报文所对应的id,flowid与数据报文的对应关系由控制平面定义,sequencenumber设置为数据报文在flow中的顺序值,初始值为1;封装完srh后,源节点查找srh中flags第2比特位为1,则复制该数据报文,读取复制数据报文的srh至segmentlist[0]的位置,从中提取oam-isid,根据oam-isid中的ioam-trace-type字段提取需要采集的信息数据,之后将oam-isid和采集的数据上传给可配置的收集节点;最后根据srh,将原始数据报文转发到下一个endpoint节点;

②endpoint节点收到数据报文后,检查srh中flags第2比特位为1,则复制该数据报文,读取复制数据报文的srh至segmentlist[0]的位置,从中提取oam-isid,根据oam-isid中的ioam-trace-type字段提取需要采集的信息数据,之后将oam-isid和采集的数据上传给可配置的收集节点;最后检查segmentsleft是否为1,如果为1,则根据sid携带的附加行为usd+或usp+,弹出原始数据报文中srh或移除原始数据报文外层ipv6头部和所有的扩展头部,然后将原始数据报文转发出srv6域,如果不为1,则根据srh,将原始数据报文转发到下一个endpoint节点;

③收集节点根据收到的节点上传信息中的oam-isid来重组数据流,从而进行进一步的分析和展示。

进一步,oam-isid是随路网络测量方法中的指令头,节点根据oam-isid收集相应的沿途数据并上送数据;oam-isid执行的动作是在执行ipv6头部目的地址对应sid动作之前。

进一步,sid附加行为包括倒数第一跳弹出usp+和倒数第一跳解封装usd+,用于实现剥离指令、弹出srh和解封装功能;

其中,usp+指在最后一个endpoint节点执行移除srh的动作,usp+与end、end.x和end.t结合使用,是附着在它们之上的额外动作;该行为执行的动作是在执行相应的end动作之前,检查当前的segmentsleft是否为1和flags第2比特位是否为1,若匹配,则执行oam-isid的动作,然后删除该srh;

usd+指在最后一个endpoint节点执行解封装外层ipv6报文头的动作,usd+与end、end.x、end.t结合使用,是附着在它们之上的额外动作;该行为执行的动作是在执行相应的end动作之前,检查当前的segmentsleft是否为1和flags第2比特位是否为1,若匹配,则跳过对该srh的处理,直接处理下一个报文头,当下一个报文头是ipv4报文头或者ipv6报文头时,则执行oam-isid的动作,然后移除外层ipv6头部和所有的扩展头部。

有益效果

本发明通过将随路网络测量指令头当做srv6sid直接封装于srh的segmentlist中,提高了在srv6随路网络测量场景下节点的处理效率,有利于srv6技术的推广。

附图说明

图1oam-isid格式

图2srh格式

图3上传采集数据报文封装格式

图4oam-isid逻辑流程图

图5usp+逻辑流程图

图6usd+逻辑流程图

图7方法流程图

图8为srv6l3vpn场景下的拓扑示意图。

图9控制平面示意图

图10pe1数据平面示意图

图11p1数据平面示意图

图12pe2数据平面示意图

具体实施方式

以下结合附图对本发明所述技术方案进行详细说明。

(1)数据格式

本发明为了将指令头封装在srh中,设计了新的srv6sid,命名为oam-isid,图1给出了oam-isid的数据格式。

pathid:长度16比特,用于唯一地区别不同的路径。

vpnid:长度16比特,用于srv6三层虚拟专用网(l3vpn)场景,唯一地区别不同的vpn用户,设置为全0时代表忽略该值,。

ioam-trace-type:长度24比特,用于描述收集的数据,每一个比特代表一种需要收集的数据类型,ietf在[i-d.ietf-ippm-ioam-data]中定义了具体的值。

reserved:长度8比特,保留字段,必须设置为全0。

flowid:长度32比特,用于唯一地标识测量的流信息。

sequencenumber:长度32比特,用于标记测量流的报文顺序,每发送一个报文,该值加1。

为了减少节点读取segmentlist的深度,本发明将oam-isid封装于segmentlist[0],即最后一个segment,同时为了区别于普通srv6数据包,将srh中的flags的第2比特位置1,图2给出了srh的封装格式,其中srh中segmentsleft为剩余的segment数目,简称为sl,segmentlist中封装了sid。

本发明为了便于分析采集数据,设计了新的上传采集数据报文封装格式,图3给出了封装格式。

将oam-isid封装在上传采集数据报文中,有利于控制端进行采集数据的分析,控制端可通过pathid来确定路径沿途节点是否上传了采集信息,同时控制端可通过vpnid,flowid,sequencenumber唯一确定上传的采集数据属于哪条流的第几个报文。

(2)sid指令功能

oam-isid是随路网络测量方法中的指令头,节点会根据oam-isid收集相应的沿途数据并上送数据。oam-isid执行的动作是在执行ipv6头部目的地址对应sid动作之前,图4给出了oam-isid的逻辑流程图。

(3)sid附加行为

为了实现剥离指令、弹出srh和解封装功能,本发明新定义了两种附加行为,倒数第一跳弹出srh+(ultimatesegmentpopofthesrh+,usp+)和倒数第一跳解封装+(ultimatesegmentdecapsulation+,usd+)。

usp+是指在最后一个endpoint节点执行移除srh的动作,usp+需要与end、end.x和end.t结合使用,是附着在它们之上的额外动作。该行为执行的动作是在执行相应的end动作之前,检查当前的segmentsleft是否为1和flags第2比特位是否为1,若匹配,则执行oam-isid的动作,然后删除该srh,图5给出了usp+逻辑流程图。

usd+是指在最后一个endpoint节点执行解封装外层ipv6报文头的动作,usd+需要与end、end.x、end.t结合使用,是附着在它们之上的额外动作。该行为执行的动作是在执行相应的end动作之前,检查当前的segmentsleft是否为1和flags第2比特位是否为1,若匹配,则跳过对该srh的处理,直接处理下一个报文头,当下一个报文头是ipv4报文头或者ipv6报文头时,则执行oam-isid的动作,然后移除外层ipv6头部和所有的扩展头部。图6给出了usd+逻辑流程图。

本发明不能使用附加行为倒数第二跳弹出srh(penultimatesegmentpopofthesrh,psp),因为在倒数第二跳弹出srh后,最后一个endpoint节点收到的数据包中不包含oam-isid,那么最后一个endpoint就无法上传采集信息,从而导致采集数据的不完整,因此在本发明中,应禁止任何节点分配的sid携带psp行为。

(4)方法流程

本发明方法的具体流程如下:

①源节点收到数据包,对进入srv6域的数据报文封装srh,在srh中flags的第2比特位设置为1,segmentlist[0]设置为oam-isid,剩余segmentlist封装转发路径;在oam-isid中pathid设置为转发路径所对应的id,pathid与转发路径的对应关系由控制平面定义,vpnid设置为数据报文所属vpn实例对应的id,vpn实例与vpnid的对应关系控制平面定义,如无vpn实例则设置为0,ioam-trace-type设置所需要的收集数据对应的比特位,flowid设置为数据报文所对应的id,flowid与数据报文的对应关系由控制平面定义,sequencenumber设置为数据报文在flow中的顺序值,初始值为1。封装完srh后,源节点查找srh中flags第2比特位为1,则复制该数据报文,读取复制数据报文的srh至segmentlist[0]的位置,从中提取oam-isid,根据oam-isid中的ioam-trace-type字段提取需要采集的信息数据,之后将oam-isid和采集的数据上传给可配置的收集节点。最后根据srh,将原始数据报文转发到下一个endpoint节点。

②endpoint节点收到数据报文后,检查srh中flags第2比特位为1,则复制该数据报文,读取复制数据报文的srh至segmentlist[0]的位置,从中提取oam-isid,根据oam-isid中的ioam-trace-type字段提取需要采集的信息数据,之后将oam-isid和采集的数据上传给可配置的收集节点。最后检查segmentsleft是否为1,如果为1,则根据sid携带的附加行为usd+或usp+,弹出原始数据报文中srh或移除原始数据报文外层ipv6头部和所有的扩展头部,然后将原始数据报文转发出srv6域,如果不为1,则根据srh,将原始数据报文转发到下一个endpoint节点。

③收集节点根据收到的节点上传信息中的oam-isid来重组数据流,从而进行进一步的分析和展示。

图7给出了本发明方法的流程图。

(5)应用场景

本发明可应用于数据平面为srv6的网络环境,下面通过一个例子来说明本发明的具体机制。图8为srv6l3vpn场景下的拓扑示意图。

参照图8,pe1、p1、pe2启用了srv6功能,与控制器相连,三个节点组成了测量域,图9给出了控制平面的示意图。

参照图9,控制平台的主要流程如下:

第一步:在pe1,p1,pe2上完成ipv6地址,路由协议等配置,保证底层网络的连通性,其中ce1的ipv4地址为1.1.1.1/32,pe1的ipv6地址为a1::1/128,ce2的ipv4地址为2.2.2.2/32。

第二步:在p1节点上配置srv6sid,设置为endsidb1::1,并通过路由协议通告给其他节点和控制器。

第三步:在pe2节点上配置vpn和srv6sid,该节点的环回接口地址为c1:1::1/128,配置vpn实例vpn-a,接入ce2,为该vpn实例配置end.dt4sid,并为该sid附加动作usd+,设置sid为c1:1::100,pe2通过路由协议将sid信息通告给其他节点和控制器。

第四步:pe2学习到来自ce2的私网路由2.2.2.2/32后,将路由以及对应的vpnsid通告给控制器。

第五步:控制器依据pe2上传的信息,形成vpnid1与vpn-a实例、flowid1与流的对应表项,并为该流设定相应路径pe1->p1->pe2,每条路径都分配唯一的pathid值,该路径分配pathid1

第六步:控制器为pe1下发转发表项,当数据匹配源ip地址为1.1.1.1,目的ip地址为2.2.2.2,且属于vpn-a实例时,添加ipv6头部,源地址为a1::1,目的地址为b1::1,添加srh,设定转发路径为p1,pe2,封装segmentlist为(oam-isid,c1:1::100,b1::1),oam-isid中pathid为1,vpnid为1,flowid为1。

控制平面构建完成之后,就可以支持数据平面流量的转发了,图10给出了pe1的数据平面示意图。

参照图10,ce1发出数据包,封装ipv4源地址为1.1.1.1,目的地址为2.2.2.2,发往pe1。pe1查找并匹配控制器下发的转发表项后,首先封装srh,其中flags第2比特位设置为1,segmentsleft设置为2,segmentlist为(oam-isid,c1:1::100,b1::1,),oam-isid中pathid设置为1,vpnid设置为1,ioam-trace-type第2比特位设置为1,指示节点需要上传数据包进入节点的时间戳,flowid设置为1,sequencenumber设置为1,因为是收到的第一个报文;然后封装外层ipv6头部,设置源地址pe1ipv6地址a1::1,设置目的地址为segmentsleft指向的segment,即segmentlist[2]=b1::1。封装完毕后,pe1向控制器上传采集数据,本例子中采用udp进行传输,pe1将原始数据包复制,然后从中提取oam-isid,根据oam-isid中的指示,提取数据包入节点时间戳,之后封装ipv4头部,udp头部,oam-isid和数据包入节点时间戳,上送之控制器。最后pe1依据外层ipv6头部目的地址查找转发表项,将原始数据包发送至p1。

图11给出了p1的数据平面示意图,参照图11,p1收到pe1发来的数据包后,查找外层ipv6目的地址b1::1,为自身的endsid,进入srh处理流程。首先,判断flags第2比特位为1,则p1需上传采集数据到控制器,将原始数据包复制,然后从中提取oam-isid,根据oam-isid中的指示,提取数据包入节点时间戳,之后封装ipv4头部,udp头部,oam-isid和数据包入节点时间戳,上送之控制器。然后p1执行endsid功能,将原始数据包中segmentsleft减1,并替换外层ipv6地址为segmentlist[1]=c1:1::100,之后查找转发表项,将原始数据包发送至pe2。

图12给出了pe2的数据平面示意图,参照图12,pe2收到p1发来的数据包后,查找外层ipv6目的地址c1:1::100,为自身的end.dt4sid,附加动作为usd+,进入srh处理流程。查找segmentleft为1且flags第2比特位为1,跳过srh头部,查看下一协议头部为ipv4,则pe2需上传采集数据到控制器并移除外层ipv6头部和srh。首先pe2将原始数据包复制,从中提取oam-isid,根据oam-isid中的指示,提取数据包入节点时间戳,封装ipv4头部,udp头部,oam-isid和数据包入节点时间戳,上送之控制器;之后pe2移除外层ipv6头部和srh,在c1:1::100所对应的vpn-a实例路由表中查找ipv4目的地址2.2.2.2匹配项,最终发送数据包到ce2。

此时控制器从pe1,p1,pe2分别收到了采集信息,控制器通过pathid所对应的路径可以判断所有节点都上传了采集信息,之后控制器可以通过vpnid,flowid,sequencenumber确定采集信息属于哪条流中的第几个报文,并向用户展示相关的采集数据信息。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1