为了基于IPv6数据平面实现Segment Routing,IPv6路由扩展报文头新增了一种类型,称为SRH(Segment Routing Header,段路由扩展报文头)。该扩展报文头用于指定一个SRv6的显式路径,存储的是SRv6的路径信息[即段列表(Segment List),也称为SID List]。
因为头节点在IPv6报文中增加了一个SRH,由此中间节点就可以按照SRH里包含的路径信息进行转发。SRH的格式如图1-2所示。
IPv6 SRH的关键信息有如下几个部分。
● 当Routing Type类型值为4时,表明路由扩展头是SRH。
● Segment List(Segment List [0], Segment List [1], Segment List [2],…,Segment List [ n ])是网络路径信息。
● Segments Left(SL)是一个指针,指示当前活跃的Segment。
图1-2 SRH的格式
为了便于叙述转发原理,SRH可以抽象成图1-3所示的格式,其中图1-3(a)里的SID排序是正序,使用<>标识;图1-3(b)里的SID排序是逆序,使用()标识,逆序更符合SRv6的实际报文封装情况。
图1-3 SRH的抽象格式
SID在SR-MPLS里是标签形式,在SRv6里换成了IPv6地址形式。SRv6通过对SID栈的操作来完成转发,因此它是一种源路由技术。那么SRv6的SID具有哪些特殊之处呢?要回答这个问题,就得从SRv6 SID的结构说起。
SRv6 SID虽然是IPv6地址形式,但不是普通意义上的IPv6地址。SRv6的SID有128 bit,这样长的一个地址,如果仅仅用于路由转发,显然是很浪费的。因此,SRv6的设计者对SID进行了更加巧妙的处理。
如图1-4所示,SRv6 SID由Locator、Function和Arguments(简称Args)3部分组成,其中Arguments是可选的,如果Locator、Function和Arguments这3部分长度不足128 bit,需要在Arguments后补0,即增加Padding字段,确保字节对齐。
图1-4 SRv6 SID的结构
● Locator具有定位功能,所以一般在SRv6域内要唯一。但是在一些特殊场景,比如Anycast保护场景,多个设备可能配置相同的Locator。一个节点配置Locator之后,系统会生成一条Locator网段路由,并且通过IGP在SRv6域内扩散。网络里其他节点就可以通过Locator网段路由定位到该节点,同时该节点发布的所有SRv6 SID也都可以通过该Locator网段路由到达。
● Function代表设备的指令(Instruction),这些指令都由设备预先设定,Function部分用于指示SRv6 SID的生成节点进行相应的功能操作。Function通过Opcode(Operation Code,操作码)来显性表征。
● Arguments是变量段,占据IPv6地址的低比特位。支持某些服务的时候需要的一些变量参数可以放在Arguments里面。当前一个重要应用是在EVPN(Ethernet Virtual Private Network,以太网虚拟专用网)VPLS(Virtual Private LAN Service,虚拟专用局域网业务)的CE(Customer Edge,用户边缘设备)多归场景中,转发BUM(Broadcast & Unknown-unicast & Multicast,广播、未知单播、组播)流量时,利用Arguments携带剪枝信息,以实现水平分割。
在RFC 8986中定义了很多行为(Behavior) [2] ,它们也被称为指令。每个SID都会与一个指令绑定,用于指明在处理SID时需要执行的动作。典型的Behavior有End和End.X等。另外,RFC 8986中还定义了SID的一些附加特征(Flavor)。这些附加特征是可选项,它们将会增强End系列指令的执行动作,满足更丰富的业务需求。常见的附加特征包括PSP(Penultimate Segment Pop of the SRH,倒数第二段弹出SRH)、USP(Ultimate Segment Pop of the SRH,倒数第一段弹出SRH)、USD(Ultimate Segment Decapsulation,倒数第一段解封装)等。除了以上常规的附加特征,为了支持SRv6提升传输效率,IETF草案draft-ietf-spring-srv6-srh-compression中还定义了REPLACE-C-SID、NEXT-C-SID、NEXT&REPLACE-C-SID等附加特征 [4] ,关于这些附加特征的详细介绍可以参考2.2节。
一个有序的SID列表构成了SRH。SRH为报文提供转发、封装和解封装等操作。下面以End SID和End.X SID为例来说明SRv6 SID的结构,并简单说明SRv6 SID的行为。
End SID表示Endpoint SID,用于标识网络中的某个目的节点(Node)。如图1-5所示,在各个节点上配置Locator,然后为节点配置Function的Opcode。Locator和Function的Opcode组合就能得到一个SID,这个SID可以代表一个节点,称为End SID。End SID可以通过IGP扩散到其他网元,并全局可见。
图1-5 End SID
End.X SID表示三层交叉连接的Endpoint SID,用于标识网络中的某条邻接。如图1-6所示,在节点上配置Locator,然后为各个方向的邻接配置Function的Opcode。Locator和Function的Opcode组合就能得到一个SID,这个SID可以代表一个邻接,称为End.X SID。End.X SID可以通过IGP扩散到其他网元,并全局可见。
图1-6 End.X SID
End SID和End.X SID分别代表节点和邻接,都是路径SID,二者组合编排的SID栈足够表征任何一条SRv6路径。SID栈代表了路径信息,在IPv6 SRH中携带,SRv6就是通过这种方式实现了TE。
此外,也可以为VPN/EVPN实例等分配SID,这种SID就代表业务。由于IPv6地址空间足够大,所以SRv6 SID能够支持足够多的业务。
当前SRv6 SID主要包括路径SID和业务SID两种类型,例如End SID和End.X SID分别代表SRv6路径所需要的节点和邻接,而End.DT4 SID和End.DT6 SID分别代表IPv4 VPN和IPv6 VPN等。
SRv6节点的FIB(Forwarding Information Base,转发信息库)中包含所有在本节点生成的SRv6 SID信息,例如End SID、End.X SID等。除了SRv6 SID,FIB里还包含绑定到这些SID的指令信息,以及这些指令相关的转发信息。
在SRv6的SRH里,SL和Segment List信息共同决定报文头部的IPv6 DA(Destination Address,目的地址)。SL最小值是0,最大值为SRH里的SID个数减1。如图1-7所示,在SRv6中,每处理完一个SRv6 SID,SL字段就减1,IPv6 DA的信息随之变换一次,其取值是指针当前指向的SID的值。在图1-7中,Segment List中包含 n +1个SID,SL初始为 n 。
● 如果SL值是 n ,则IPv6 DA取值就是SID [ n ]的值。
● 如果SL值是 n -1,则IPv6 DA取值就是SID [ n -1]的值。
…………
● 如果SL值是1,则IPv6 DA取值就是SID [1]的值。
● 如果SL值是0,则IPv6 DA取值就是SID [0]的值。
如果节点不支持SRv6或者本节点的SID不在Segment List中,则不执行上述动作,仅按照最长匹配查找普通IPv6路由转发表进行处理。
图1-7 SRv6 SRH的处理过程
从以上描述可见,节点对SRv6 SRH是从下到上进行逆序操作,而且SRv6 SRH中的Segment在经过节点处理后也不会弹出。
SRv6有SRv6 Policy和SRv6 BE(Best Effort,尽力而为)两种工作模式。这两种模式都可以承载常见的传统业务,例如,BGP(Border Gateway Protocol,边界网关协议)L3VPN(Layer 3 Virtual Private Network,三层虚拟专用网)、EVPN L3VPN、EVPN VPLS/VPWS(Virtual Private Wire Service,虚拟专用线路业务)、IPv4/IPv6公网等。SRv6 Policy既可以实现流量工程,也可以配合控制器更好地响应业务的差异化需求,做到业务驱动网络。SRv6 BE是一种简化的SRv6实现,正常情况下不含SRH,只能提供尽力而为的转发,不具备流量工程能力。SRv6 BE仅使用一个业务SID来指引报文转发到生成该SID的节点,并由该节点执行业务SID的指令。
SRv6可以兼容IPv6路由转发,也可以基于聚合路由转发。SRv6 BE只需要在网络的头尾节点部署,在中间节点仅支持IPv6转发即可,这种方式对部署普通VPN具有独特的优势。比如视频业务在省级中心和市中心之间传送,需要跨越数据中心网络、城域网络、国家IP骨干网络,如果以传统方式部署MPLS VPN,则不可避免地需要跟国省干线的相关主管单位进行协调,各方配合执行部分操作才能成功,开通时间比较慢;如果采用SRv6 BE承载VPN,只需要在省级中心和市中心部署两台支持SRv6 VPN的PE(Provider Edge,运营商边缘设备),基于IPv6路由的可达性很快就可以开通业务。
在SRv6发展早期,基于IPv6路由的可达性,利用SRv6 BE快速开通业务,具有明显优势;在后续演进中,可以按需升级网络的中间节点,部署SRv6 Policy,满足高价值业务的需求。
SRv6 BE与SRv6 Policy的对比如表1-1所示。
表1-1 SRv6 BE与SRv6 Policy的对比
SRv6丰富的网络编程能力能够更好地满足新的网络业务的需求,而其兼容IPv6的特性也使得网络业务部署更为简便。SRv6打破了云和网络的边界,可以促进云网融合,实现应用级的SLA保障,使千行百业受益。
SRv6也提供了丰富的编程空间,具备强大的编程能力来应对新业务的发展。
如图1-8所示,SRv6支持三重编程空间。
图1-8 SRv6的三重编程空间
● Segment List编程空间:SRv6 SID可以自由组合并进行路径编程,由业务提出需求,控制器响应业务需求、定义转发路径。
● SID编程空间:SRv6 Segment的长度是128 bit,相比32 bit的MPLS标签封装,有了一个更大的空间,并且可以灵活分段,提供比MPLS丰富、灵活的编程功能。
● Optional TLV(Type Length Value,类型长度值)编程空间:SRH里还有可选TLV,可以用于进一步自定义功能。SRH TLV提供了更好的扩展性,可以携带长度可变的数据,例如,加密、认证信息和性能检测信息等。
SRv6是基于IPv6数据平面的SR技术,结合了SR源路由优势和IPv6简洁、易扩展的特质,具有其独特的优势。SRv6技术特点及价值可以归纳为以下几点。
● 智慧:SRv6具有强大的可编程能力。SRv6支持三重可编程空间,能满足大量业务的不同诉求,契合了业务驱动网络的大潮流。
● 极简:如图1-9所示,SRv6不再使用LDP(Label Distribution Protocol,标签分发协议)/RSVP-TE(Resource Reservation Protocol-Traffic Engineering,资源预留协议流量工程),也不需要MPLS标签,既简化了协议,又使管理变得简单。EVPN和SRv6的结合,可以使得IP承载网络简化、归一。SRv6打破了MPLS跨AS(Autonomous System,自治系统)边界,部署简单,还提升了跨AS的体验。
图1-9 SRv6简化网络协议
● 纯IP化:SRv6可以基于Native IPv6进行转发。SRv6是通过扩展报文头来实现的,没有改变原有IPv6报文的封装结构,因此SRv6报文依然是IPv6报文,普通的IPv6设备也可以转发SRv6报文。SRv6设备能够和普通IPv6设备共同部署,对现有网络具有更好的兼容性,可以支撑业务快速上线、平滑演进。SRv6具有易于增量部署的优点,可以最大限度地保护用户的投资。也因为IP化,SRv6可以使用聚合路由工作,相比于MPLS,大大减少了表项数量,提升了可扩展性。
基于以上特点,SRv6不仅成为简化IP网络架构的利器,也为IPv6的发展带来了新的发展机遇。