Copyright © 2017新华三技术有限公司 版权所有,保留一切权利。 非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部, 并不得以任何形式传播。本文档中的信息可能变动,恕不另行通知。 |
云计算的发展对广域网提出了新的挑战,要求传统广域网进行变革,SD-WAN作为重构广域网的核心技术,通过自动部署、集中控制、智能调度、及可视化等手段,加速网络交付,优化应用体验,提高带宽利用率,简化网络运维,满足云计算对广域网的需求。
智能调度是新一代广域网的一个关键能力,对应用质量的保障、带宽资源的优化非常重要。现有的MPLS及RSVP-TE等流量工程技术可以满足应用对带宽的差异化保障需求,但存在协议种类多、部署复杂、管理困难、可扩展性差等问题,无法满足新一代广域网所要求的动态部署、灵活调度、快速、可扩展等方面的要求,因此,出现了一种新的协议Segment Routing,既很好的继承了MPLS技术的优势,又能够适应未来IPv6、SDN等技术的发展,为SD-WAN网络提供了一种灵活高效的控制手段,具有使用简单、容易扩展的特点,更好的实现流量调度和路径优化,提供应用驱动的网络服务,保障关键业务质量,均衡流量分布,提高专线利用率,降低线路成本,。
Segment Routing(后续简称SR)是一种源路由协议,也称为段路由协议,由源节点来为应用报文指定路径,并将路径转换成一个有序的Segment列表封装到报文头中,路径的中间节点只需要根据报文头中指定的路径进行转发。Segment是指导设备处理报文的任何指令,如:根据最短路径转发报文到目的地、通过指定接口转发报文、将报文转发到指定的应用/业务实例等。
Segment Routing能够使网络更加简化,并具有良好的可扩展能力,主要体现在以下方面:
对现在的控制平面进行简化,如,在MPLS网络中,不再需要部署复杂的LDP/RSVP-TE协议,只需要设备通过IGP路由协议对SR的扩展来实现标签分发和同步,或者由控制器统一负责SR标签的分配,并下发和同步给设备。
复用已有的MPLS和IPv6转发平面,网络设备不做改动或者进行小的修改就可以支持对Segment Routing的转发,如:在MPLS网络中,Segment就是MPLS标签,路径就是标签栈;在IPv6网络中,Segment就是IPv6 Address,路径就是封装在一个routing extension header中的IPv6 Address列表。
图1 Segment Routing示意图
Segment Routing以其简单、高效、易扩展的特点,使它具有很多不可比拟的优势:
1. 面向SDN架构设计的协议,融合了设备自主转发和集中编程控制的优势,能够更好的实现应用驱动的网络。同时,可以天然支持传统网络和SDN网络,兼容现有设备,保障网络平滑演进。
2. 简化设备控制平面,减少路由协议数量,简化运维管理,降低运营成本;标签转发表简单,容易扩展,规模也很小,一台设备上维护的转发表数为N(节点标签数量,一般为全网节点数量)+A(邻接标签数据,一般为设备接口数量),而传统MPLS网络则为N^2。
3. 支持广泛的部署场景,包括骨干网、DCI网络、及DC网络等场景,而且可以同时支持MPLS和IPv6网络。
4. 能以更简单的方式实现TE、FRR、OAM等功能,从而简化网络的设计和管理,快速获得网络服务,优化整个网络的性能。
Segment Routing由IETF SPRING(Source Packet Routing in Networking)工作组负责制定的标准协议,同时有多个工作组(如:ISIS、OSPF、IDR、PCEP、6MAN等)也在定义对Segment Routing的扩展,目前大约有40个相关的RFC和draft标准正在制定中,下面列出了一些主要的协议,这些协议越来越得到业界主流厂家和用户的支持。
Problem Statement and Requirements [RFC7855]
Segment Routing Architecture [draft-ietf-spring-segment-routing-11]
Segment Routing Use Cases [draft-filsfils-spring-segment-routing-use-cases-01]
SR Centralized Egress Peer Engineering [draft-ietf-spring-segment-routing-central-epe-03]
Segment Routing Policy for TE [draft-filsfils-spring-segment-routing-policy-00]
Resiliency use cases in SPRING networks [draft-ietf-spring-resiliency-use-cases-08]
IS-IS Extensions for SR [draft-ietf-isis-segment-routing-extensions-11]
OSPF Extensions for SR [draft-ietf-ospf-segment-routing-extensions-12]
OSPFv3 Extensions for SR [draft-ietf-ospf-ospfv3-segment-routing-extensions-09]
PCEP Extensions for SR [draft-ietf-pce-segment-routing-08]
Segment Routing Prefix SID extensions for BGP [draft-ietf-idr-bgp-prefix-sid-04]
Advertising Segment Routing Policies in BGP [draft-previdi-idr-segment-routing-te-policy-05]
Segment Routing BGP EPE BGP-LS Extensions [draft-ietf-idr-bgpls-segment-routing-epe-11]
BGP-LS Extensions for SR [draft-gredler-idr-bgp-ls-segment-routing-extension-02]
Carrying Binding Label/Segment-ID in PCE-based Networks [draft-sivabalan-pce-binding-label-sid-02]
Segment Routing with MPLS data plane [draft-ietf-spring-segment-routing-mpls-07]
Segment Routing interworking with LDP [draft-ietf-spring-segment-routing-ldp-interop-06]
Anycast Segments in MPLS based SR [draft-psarkar-spring-mpls-anycast-segments-02]
IPv6 Segment Routing Header (SRH) [draft-previdi-6man-segment-routing-header-08]
IPv6 SPRING Use Cases [draft-ietf-spring-IPv6-use-cases-09]
SRv6 Network Programming [draft-filsfils-spring-srv6-network-programming-00]
TI-FRR using Segment Routing [draft-francois-spring-segment-routing-ti-lfa-02]
OAM Requirements for SR Network [draft-ietf-spring-sr-oam-requirement-03]
A Scalable and Topology-Aware MPLS Dataplane Monitoring System [draft-ietf-spring-oam-usecase-06]
LSP Ping/Trace for SR Networks Using MPLS Dataplane [draft-ietf-mpls-spring-lsp-ping-02]
在详细讨论Segment Routing之前,先介绍一下主要的概念和术语。
SR节点的集合,可以是连接到相同物理架构的节点(如服务提供商网络)、也可以是远端互联的的节点(如企业VPN或overlay),SR域可以限定于某个IGP实例中,这种情况下称之为SR-IGP Domain。
SR节点的本地属性,在MPLS中,为全局segment预留的本地标签集合;在IPv6中,是一些用以表示全局segments的地址集合。在一个SR Domain中,建议所有节点使用相同的SRGB,以方便实际应用中的管理维护和故障排查等。
Segment是指导设备处理报文的任何指令,如:根据最短路径转发报文到目的地、通过指定接口转发报文、将报文转发到指定的应用/业务实例等,分为以下两类:
Global Segment:域内所有SR节点都能识别的相关指令,在MPLS中是一个全局唯一的索引index,每设备上的标签为[SRGB+index];在IPv6中是一个全局唯一的IPv6地址。
Local Segment:只被生成它的节点所识别的相关指令,在MPLS中是SRGB块外的本地标签;在IPv6中是未被任何路由协议通告过其可达性的任意IPv6地址。
Segment的标识,如:MPLS 标签、IPv6地址等。
用来表示报文转发路径的一个有序的Segment列表,在MPLS中为标签栈,在IPv6中为封装在一个Segment Routing Header(SRH)中的IPv6 Address列表。
收到报文的SR节点必须处理的segment,在MPLS中为标签栈的最外层标签,在IPv6中为携带了SRH头的报文的目的地址。
PUSH:在Segment List的顶部插入一个segment,在MPLS中为标签栈的最外层标签,在IPv6中为SRH头中的第一个IPv6地址。
NEXT:当前的active segment处理完时,the next segment变为active segment。
CONTINUE:当前的active segment还没有处理完,还继续保持active状态,在MPLS相当于SWAP操作,在IPv6为IPv6报文依据目的地址转发的常规操作。
在头节点上将Segment List封装到报文头中的隧道,可以由管理员手工创建,也可以是控制器通过NETCONF或PCEP等接口协议自动创建。一个SR隧道既可用于TE流量工程应用,也可用于OAM、FRR等目的。
一个SR隧道中能封装的segment数量,也就是Segment List的深度,创建SR隧道的节点应该清楚它能处理的Segment List最大深度。
在一个IGP域中,SR节点由IGP协议给其直连的前缀(Prefixes)或链接(Adjacencies)通告对应的segments,这些segments就叫做IGP Segment或IGP SID。这些segments在SR应用中起着非常关键的作用,通过一个segment或多个segments组成的列表来表示任何路径,从而能够灵活控制报文在网络中进行转发。
IGP协议需要支持SR的扩展,以便在IGP域内对IGP segment进行通告。
绑定到IGP prefix的IGP Segment,叫做IGP-Prefix Segment或Prefix-SID,通常情况下在一个SR域内是全局唯一的。
一般情况下,为一个IGP Prefix分配一个Prefix-SID,不能为多个IGP Prefix分配同一个Prefix-SID,但可以会为同一个IGP Prefix分配多个Prefix-SID,用以在同一拓扑中通过不同的算法计算出不一样的选路结果。
Prefix-SID可以由管理员或控制器根据策略来分配,分配后基本上不再变化。
在IGP协议对Prefix-SID进行通告时,会携带对应的算法信息,用来指明该Prefix-SID使用的路径算法,当前定义了两种算法,分别是默认的最短路径算法和严格的最短路径算法,其中严格的最短路径算法表明该计算结果需要严格执行而不能被中间节点的本地策略所改变。
在头节点,需要检查报文路径中的所有节点都要支持对应Prefix-SID通告的算法,当中间节点不支持该算法时,会丢弃对应的报文。
综上所述,Prefix-SID具有以下几个特点:
表示到IGP prefix的最短路径,且具备ECMP感知能力
SR域内全局唯一,即index,每个Prefix-SID为[SRGB+index]
由IS-IS/OSPF SR扩展协议或控制器在SR/IGP域内进行通告
图2 IGP-Prefix Segment示意图
一种IGP-Prefix Segment,用以标识一台节点设备(如:loopback),叫做IGP-Node Segment或Node-SID,同一Node-SID不能关联到多个节点通告过来的前缀。Node-SID用来指导到对应节点的最短路径报文转发,默认具备ECMP感知能力。
一种IGP-prefix Segment,用以标识一系列节点设备的集合,叫做Anycast Segment或Anycast-SID。Anycast-SID用以指导到相关集合节点的ECMP感知的最短路径报文转发。
一种IGP segment,代表单向的某个邻接或一组邻接,由节点通告给邻居,通常是本地有效,但若配置为全局的,也是可以的,叫做Adjacency Segment或Adj-SID。通常情况下,一个节点应该为它所有的每个邻接分配一个Adj-SID,当然也可以为同一个邻接分配多个Adj-SID,也可以为多个邻接分配同一个Adj-SID。
图1 IGP-Adjacency Segment示意图
Adj-SID用来指导一个节点将报文强制通过其对应的邻接转发,而不用受最短路径算法、及本地策略等因素的影响。当报文携带一个{SN, SNL}的segment list,其中SN表明节点N,SNL表明N上的link L,当报文到达N时,N上面会把SN NEXT 到SNL,不用考虑最短路径到下一跳的其它接口,直接将报文转发到link L上,如果L表明的是一系列的link,那么意味着节点N要在这些link上做负荷分担。
当节点上的Adj-SID V绑定到link L时,该节点的FIB表项为:
入口活动段: V
操作: NEXT
出接口: L
综上所述,Adj-SID具有以下几个特点:
报文通过其表示的邻接进行转发
节点本地有效
由IS-IS/OSPF SR扩展协议或控制器在SR/IGP域内进行通告
在两个相邻的节点间可以用一个Adj-SID来表示一系列的并行链路,叫做Parallel Adjacencies,为了在这些并行链路链路之间实现灵活的负载均衡,可以在通告Parallel Adjacencies时为每个邻接指明不同权重值。
当节点上的Adj-SID W表明一系列的链路B时,其FIB表:
入口活动段: W
入口操作: NEXT
出接口: 在链路集合B中进行负载均衡
在LAN子网中,OSPF的DR和IS-IS的DIS环境下,每个节点只给DR/DIS通告其连通性,而不互相通告,因此,定义了LAN Adjacency Segments,以保证节点之间互相通告其连通性。
在一个AS域中,SR节点由BGP协议给其直连的前缀(Prefixes)或对等体(Peers)通告对应的segments,这些segments就叫做BGP Segment或BGP SID。
BGP-LS协议需要支持SR的扩展,以便在AS域间对BGP segment进行通告。
和IGP Prefix Segment类似,绑定到BGP prefix的BGP Segment,叫做BGP Prefix Segment或BGP Prefix SID,通常情况下在一个SR域内是全局唯一的。BGP Prefix Segment用来指导到对应BGP前缀的最短路径报文转发,默认具备ECMP感知能力。
综上所述,BGP Prefix Segment具有以下几个特点:
表示到BGP prefix的最短路径,且具备ECMP感知能力
SR域内全局唯一,即index,每个Prefix-SID为[SRGB+index]
由BGP SR扩展协议或控制器进行通告
具有BGP Egress Peer Engineering (EPE)功能的节点通告一些segments以表示和其相连的BGP peers,这些segments叫做BGP peering segments或BGP peering SIDs,用来实现跨域之间的路径控制。
通过在一个AS域的入节点封装至少包含两个segments的segment list,一个是AS域指定出节点的 Node-SID,另一个是出节点对应的BGP peer或peering interface的BGP peering segment,来控制报文转发到指定的出节点后,再通过指定的BGP peer或peering interface转发。
BGP peering segments/SIDs分为PeerNode SID、PeerAdj SID、PeerSet SID 3种类型:
1. PeerNode SID:一种local segment,当节点通告该SID时,其FIB表:
入口操作: NEXT
出接口: 和该SID相关的对等体节点
2. PeerAdj SID:一种local segment,当节点通告该SID时,其FIB表:
入口操作: NEXT
出接口: 通过该SID指示的接口相连对等体节点
3. PeerSet SID:一种local segment,当节点通告该SID时,其FIB表:
入口操作: NEXT
出接口: 通过该SID指示的接口相连对等体节点组进行负载均衡
综上所述,BGP Peering Segment具有以下几个特点:
表示将报文转发到BGP peer
节点本地有效
由BGP-LS SR扩展协议或控制器进行通告
从控制平面来看,SR是对现有MPLS的简化和优化,网络只需要支持IGP协议,不再需要部署LDP或RSVP-TE协议,具体表现在以下几个方面:
1. 标签的分配和分发:传统的MPLS网络需要LDP等协议同步和分发各个节点的标签信息,SR不再需要LDP协议,只需要通过IGP协议(ISIS或OSPF)的SR扩展来同步,或者由控制器统一进行分配和下发,大大简化了设备运行的协议数量。
2. 标签转发表的建立:同样的传统MPLS需要通过LDP协议分发标签后形成标签转发表,而且标签转发表的规模会非常大,而SR只需要IGP协议就可以完成标签转发表的建立,并且非常容易扩展,规模也很小,条目数为N(节点标签数量,一般为全网节点数量)+A(邻接标签数据,一般为设备接口数量)。
3. 路径的标识和建立:在MPLS网络中,一个报文经过的路径为LSP,通过手工指定或使用LDP、RSVP-TE协议逐跳动态建立,非常复杂且难以维护。在SR协议中,路径是由一个有序的segment列表(在MPLS中为标签栈)来表示,且被封装在报文头中进行转发,因此,SR路径不再依赖于逐跳的信令协议(LDP或RSVP-TE)来建立,而是直接由报文源节点或者控制器指定一个标签栈即可,中间的转发设备只需按标签栈的信息进行转发,非常简单。
SR主要通过对现有IS-IS、OSPF等IGP协议较少改动来携带segment,实现全网segment信息的通告和交互,当然也可以通过控制器来作为集中式的控制平面实现segment的分发和同步。
在IS-IS协议中,通过定义一些新的IS-IS sub-TLV,用于SR来通告设备相关的能力和segments。
来通告SR的IGP-Prefix-SID,可以携带在RFC5305中的TLV135、RFC5120中的TLV235、RFC5308中的TLV236及RFC5120中的TLV237中。Prefix-SID在IGP域内必须是唯一的,并携带一个相对值index,接收设备用index来计算实际的Prefix-SID以指导报文转发。
来通告SR的IGP-Adjacency-SID,可选携带在IS-Neighbor TLVs中,这些TLV为RFC5305中的TLV-22、RFC5120中的TLV-222、RFC5311中的TLV-23、RFC5311中的TLV-223、RFC5316中的TLV-141。多个Adj-SID sub-TLVs可以关联到一个IS-neighbor中。
出现在Binding TLV或SR Capability sub-TLV中,包含了一个SID或MPLS标签。
可以由IS-IS域内的任何一个节点通告,有以下几类:(1)通告一个与FEC绑定的SID/Lable,类似于RSVP中的ERO,可以被用来表明是关联的最优还是备份路径的绑定。当和非SR节点交互的时候,就需要用到该TLV,通告一条显式路径,在获取到LDP或RSVP等地址信息后,用以表明自身代理通告了一些如LDP或RSVP 域的Prefix的SID,使相应SID的下一跳到自己,以完成拼接。(2)通告一个SID/Lable及其对应的主备路径,在一个单独的TLV中,既可以通告一条主路径、也可以通告一条备路径、或者同时通告主备路径。
用来支持多拓扑的FEC与SID/Lable的绑定,和SID/Label Binding TLV具有相同的格式。
SR要求网络中的每个节点通告它的SR相关能力,SR-Capabilities Sub-TLV用于给其它节点通告本节点的SR数据平面能力和SID/Lable范围。它随IS-IS Router Capability TLV-242携带,需在level内传播,不需要在level间传播
一个节点可以使用不同的路径算法计算到其他前缀或节点的路径,如:SPF、Strict SPF等,SR-Algorithm Sub-TLV用于给其它节点通告本节点支持的选路算法,随IS-IS Router Capability TLV-242携带,需在level内传播,不需要在level间传播。
一般情况下,Adjacency-SID由节点本地来分配,并通过IS-IS协议来通告给其他节点,但有些时候,需要控制器来为所有节点统一分配Adjacency-SID,这时,控制器就需要知道每个节点上用于分配Adjacency-SID的范围,SR Local Block Sub-TLV就是用来向控制器或其他组件通告本节点为本地SID/Lable预留的范围。
在OSPF协议中,通过定义一些新的Opaque LSAs,用来扩展包括SID、SR能力等的通告,其中Prefix-SID、Adjacency-SID、LAN Adjacency SID和Binding SID,通过RFC5250中的Opaque LSAs来携带,这些新的Opaque LSAs是对现有LSA的补充,而不是取代。
有些时候,需要通过一个消息来完成多个前缀对应SID的通告,OSPF Extended Prefix Range TLV就是为了满足这一需求而定义的,尤其当为多个连续地址进行SID通告的时候,该TLV可以大大节约控制面报文的数量,为RFC7684中定义的Extended Prefix LSA的top-level TLV,可以出现多次。
该TLV表示给哪个前缀段分配了以哪个SID开始的一段SID,主要用以携带在RFC7684中的 OSPF Extended Prefix TLV和OSPF Extended Prefix Range TLV中,可以出现多次。
邻接链路和LAN链路的SID通告,可选携带在RFC7684中的Extended Link TLV中,可能出现多次。
当和非SR节点交互的时候,就需要用到该TLV,可以通告一条显式路径,在获取到LDP或RSVP等地址信息后,用以表明自身代理通告了一些如LDP或RSVP 域的Prefix的SID,使相应SID的下一跳到自己,主要用以携带在RFC7684中的 OSPF Extended Prefix TLV和OSPF Extended Prefix Range TLV中,可以出现多次。
为表明节点支持SR,需要在OSPF域内通告给其它节点相关的SR能力信息,这些能力在RFC4970中定义的Opaque LSA(RI-Opaque LSA)中携带。
一个节点可以使用不同的路径算法计算到其他前缀或节点的路径,如:SPF、Strict SPF等,SR-Algorithm TLV用于给其它节点通告本节点支持的选路算法,为可选TLV,可能只在Opaque LSA中通告一次,若SID/Label Range TLV被通告,则该TLV必须被通告,否则,就认为该节点不具备SR能力。
SRGB块的通告,表明给SR预留的SID/Lable空间,该TLV为RI-Opaque LSA 中的top-level TLV,可以出现多次。
一般情况下,Adjacency-SID由节点本地来分配,并通过OSPF协议来通告给其他节点,但有些时候,需要控制器来为所有节点统一分配Adjacency-SID,这时,控制器就需要知道每个节点上用于分配Adjacency-SID的范围,SR Local Block Sub-TLV就是用来向控制器或其他组件通告本节点为本地SID/Lable预留的范围,该TLV为RI-Opaque LSA 中的top-level TLV,可以出现多次。
除了通过IS-IS和OSPF协议对SR的扩展来实现SID/Lable的通告外,在实际应用中,也可以通过控制器对网络中各节点的SID/Lable进行分配和通告,实现集中控制,统一管理,目前还没有相应的标准定义,需要在实践中不断探索和完善。
SR在数据平面包含两种封装,即MPLS封装和IPv6封装,MPLS数据平面不需要做任何修改就可以应用于SR网络;IPv6针对SR定义一个新的扩展头,叫Segment Routing Header(SRH),来提供基于源的路由能力。
SR可直接使用MPLS转发面,此时一个segment就是一个标签,segment list就是标签栈。当前活跃的segment位于栈顶,处理完的segment会从栈顶弹出,添加一个segment就是PUSH操作。
在MPLS转发平面中,利用标签栈作为路径,报文格式为:
图3 标签栈作为路径报文格式
这里标签与普通MPLS标签格式完全相同,Segment标签典型的有两种,一种是节点标签,一种是邻接标签。
节点标签(Prefix/Node Segment)是为设备本身分配的标签,一个设备即一个节点,标签全局唯一。每个设备有各自支持的MPLS标签范围,支持SR的设备需预留一段标签段作为全局节点标签SRGB(Segment Routing Global Block)。设备通过IGP扩展通告SRGB的标签段范围以及自己的全局Index,每个设备节点对应的节点标签即为 SRGB+Index。
如下图所示,R6节点通过IGP扩展发布了自己的Index为6,SRGB从7000开始,则R6的节点标签为7006。因此当网内其他设备收到栈顶标签为7006的报文时,会直接查找一条到R6的路由最短路将报文发送给R6。
图4 节点标签寻址示意图
如从R1开始到R6的报文,处理流程如下:
首节点(R1):根据SDN路径计算结果,确定报文需要经过R6,加入节点标签栈 7006。
转发节点(R2):与普通MPLS报文处理一致,进行标签交换处理,标签仍然为7006。
倒数第二跳(R3):如IGP通告SR信息时,通告需要进行倒数第二跳弹出,则在此节点进行标签弹出。
尾节点(R6):按照普通报文正常流程进行转发。
图5 报文转发示意图
邻接标签(Adjacent Segment)表示设备上某条链路的单跳路径,标签仅设备本地有效。每个设备向与自己一跳相邻的设备通过IGP扩展通告邻接标签,或者通过SDN控制器直接为SR域内的每条链路进行标签分配。
如从R1开始到R6的报文,处理流程如下:
首节点(R1):根据SDN路径计算结果,确定报文路径为图中绿色线。根据邻居标签信息在R1处打上【204,405,506】标签栈。
转发节点(R2、R4、R5): 弹出栈顶标签,根据此标签选择出口链路进行转发。
尾节点(R6):按照普通报文正常流程进行转发。
图6 邻接标签转发示意图
IPv6转发平面中,IPv6地址即Segment,通过IPv6地址序列来表示报文转发路径。基于IPv6报文的原有路由扩展头定义了新的SRH(Segment Routing Header),用于记录Segment相关信息。具体数据报文格式如下:
图7 Segment报文IPv6格式
通过这样只增加扩展头的方式,与原有IPv6转发平面平滑融合。
如从R1到R6的报文希望经过绿色线所指示的路径,在IPv6转发平面下处理流程如下:
首节点(R1):根据SDN路径计算结果,确定报文路径为R2,R4,R6,增加SRH报文头,用IPv6地址栈的方式指明中间需经过的路径为R2、R4、R6,此时需将IPv6目的地址改为下一个待SR处理的节点地址:R2,同时将路径中指示下一个待处理Segment为R4。
SR路径涉及转发节点(R2,R4):如果发现IPv6头中目的地是本节点,则查看SRH头,如果仍有下一个待处理Segment,则将目的地址改为SR路径的下一个节点,同时更新待处理Segment指针。
非路径涉及转发节点(R5):直接根据IPv6报文头中的目的地址进行IPv6报文转发,不修改报文内容。
尾节点:去掉SRH头,按照普通IPv6报文进行转发。
图8 IPv6转发示意图
从上述流程可以看出,对于非SR路径涉及的转发节点,完全无需支持Segment Routing,仅支持标准的IPv6转发即可。采用这种方式,对网内不支持Segment Routing的设备可以进行无缝兼容。
SR采用SRGB块的划分和SID的分配机制,保证了SID的唯一性,因此,SR可以和其它MPLS控制协议(如LDP、RSVP-TE、BGP 3107等)共存,支持与和现有IP/MPLS网络混合组网,保证网络的平滑演进。
下面以LDP为例介绍SR和LDP兼容互通的情况,RSVP-TE等协议和LDP类似。
如下图所示,PE1、PE2、PE3、PE4、P1、P2、P3是LDP和SR的混合网络,ODD VPN通过PE1、PE3连接,EVEN VPN通过PE2、PE4连接,用户希望 ODD VPN走SR转发,EVEN VPN走LDP转发。
图9 SR/LDP混合共存
要实现上述需求,中间节点P1、P2、P3节点同时支持LDP和SR两套标签,根据PE侧过来的不同的标签值来进行相应的标签匹配,使从PE1到PE3的ODD VPN报文走SR转发(绿色所示),从PE2到PE4的EVEN VPN报文走LDP LSP转发(紫色所示)。
图10 LDP over SR示意图
如上图所示,全网设备都具有LDP能力,只有一部分节点P2、P3、P4、P5具有SR能力,如果需要部署SR,可以通过LDP over SR的方式来实现,具体如下:
第一步:所有节点均启用LDP,为单一的LDP域,所有的报文转发都是走的LDP LSP的转发。
第二步:具备SR能力的设备作为一个SR域,按优先级构建full-mesh的SR隧道,形成SR overlay网络。
第三步:在SR隧道上启用LDP功能,使得LDP可以通过SR隧道分配LDP标签。
第四步:在SR设备上通过CBTS等将LDP流量引入到对应优先级的SR隧道上进行转发。
第五步:通过控制SR隧道上的路径来对SR域内的流量进行调度。
图11 LDP到SR的平滑迁移
如上图所示,从LDP迁移到SDR的详细过程如下:
第一步:所有节点均启用LDP,为单一的LDP域,所有的报文转发都是走的LDP LSP的转发。
第二步:所有节点使能SR功能,并分配相应的SID,同时支持LDP和SR转发,为LDP和SR共存域,但缺省仍然走LDP封装和转发。
第三步:使能SR封装和转发,(1)管理者通过在PE1上配置策略使SR封装替代原来的LDP封装,此时只有PE1过来的报文是SR封装并转发的,其它PE过来的报文仍是LDP封装并转发。(2)逐渐使能所有PE上的SR封装,此时LDP也仍然存在。
第四步:删除所有节点上的LDP配置,变为单一的SR域,最终完成LDP到SR的迁移。
图12 SR和LDP的无缝互通
如上图所示,网络中一部分节点P2、P3、P4、PE3、PE4是具有LDP能力,另一部分节点PE1、PE2、P1、P2是具有SR能力,它们的SRGB是[100, 200],对应的节点标签是201、202、101、102。
下面具体描述如何实现LDP和SR的互通,提供一条连续的MPLS隧道完成PE1和PE3之间的报文转发。
首先PE3学习到PE1通告过来的一条业务路由,下一跳是PE1。
PE3有从P4学习过来的FEC“PE1”的LDP标签,下一跳是P4,因此,PE3对业务报文进行LDP封装,并转发给P4。
P4有从P3学习过来的FEC“PE1”的LDP标签,下一跳是P3,因此,P4对业务报文进行LDP封装,并转发给P3。
P3也有从P2学习过来的FEC“PE1”的LDP标签,下一跳是P2,因此,P3对业务报文进行LDP封装,并转发给P2。
当报文到达P2时,由于P2上不存在FEC“PE1”的下一跳为P1的LDP标签,但却有PE1的SR节点标签,如此分析,在P2转发报文到P1,并将FEC“PE1”的本地LDP标签交换成P1的节点标签。
P1弹出节点标签,并转发给PE1。
最后,报文到达PE1,执行内层业务标签转发。
要实现SR到LDP的转发,需要在SR节点上面支持一个远端LDP节点的SR映射管理功能(假设配置P1为Segment Routing Mapping Server – SRMS) ,将P3、P4、PE3、PE4的映射信息(假设为103、104、203、204)发布给SR域内节点,对于其它SR节点来讲,意识不到SRMS的存在,以为该映射的SID为真实SR节点发出的信息。虽然远端节点对SR能力是不感知的,但需要在P1、P2上面识别远端的SR标识,比如远端PE3的SR标识203。
首先PE1学习到PE3通告过来的一条业务路由,下一跳是PE3。
PE1有一个PE3对应的节点标签203,IGP最短路由下一跳是P1,这样在PE1上对发往PE3的业务报文执行SR封装时,带两层标签,内层是业务标签,外层是203标签,并发往P1。
P1执行SR转发给P2(对于由远端绑定节点通告过来的SID,不允许倒数第二跳弹出)。
P2上知道通过IGP学习到的PE3的下一跳是不支持SR功能的,但P2上有从P3学习过来的FEC“PE3”的LDP标签(假设是1033),下一跳是P3,因此P2交换103的标签为1033,并将报文转发给P3。
P3执行LDP转发,交换LDP标签为从P4学习过来FEC“PE3”的LDP标签,并转发给P4。
P4执行PHP,弹出LDP标签,转发给PE3。
最后,报文到达PE3,执行内层业务标签转发。
随着业务云化的快速发展,数据中心越来越多,互访流量增加,并呈现出低时延、突发性和不均衡性等特点,承载这些流量的DCI网络变得越来越重要,同时面临的挑战也越来越多,如专线带宽利用率低,导致每Mbps成本很高;新业务不断产生的峰值流量,导致专线频繁扩容;传统流量工程复杂,很难全局端到端保障业务质量等,因此,急需对DCI网络的流量进行集中控制、统一调度, Segment Routing以其简单、灵活、扩展性好的特点,很好的解决了这个问题。
ADWAN(Application-driven WAN)是H3C基于SD-WAN核心理念和开放架构推出了新一代广域网解决方案,整个方案以应用为中心,构建一个开放、智能、高效、易用的新一代广域网来承载日益丰富的应用流量,实现应用按需驱动网络、网络动态适应应用,它将Segment Routing和SD-WAN结合起来,充分发挥两者的技术特点,为DCI和骨干网提供一个集中、灵活的流量工程手段。
如下图所示,首先将DCI网络由MPLS升级为Segment Routing,使其同时具有MPLS和SR的转发能力,保留原有MPLS控制平面。其次,部署SDN控制器及ADWAN APP,作为Segment Routing的控制平面,指导设备的Segment Routing转发。最后,整个网络形成集中的SR和分布的MPLS两套控制平面,集中的SR控制平面作为叠加,优先级高,用于指导设备的报文转发;分布的MPLS控制平面作为备份,优先级低,用于SR控制平面失效后的逃生。整个方案既具有全局灵活的控制能力,又保证故障情况下的可靠逃生能力。
图13 ADWAN DCI/骨干网流量调度方案
ADWAN方案在DCI/骨干网网络中,为用户提供了以下功能:
网络可视化:通过BGP-LS、SNMP/MIB、Netstream等手段收集网络拓扑、链路状态,及业务流量等信息,进行分析和整合,对网络和应用进行可视化呈现,并形成TE数据库,为流量调度提供输入。
资源统一管理:根据收集到的网络拓扑,统一为设备和链路分配Segment Routing标签,通过NETCONF下发给设备。
业务配置自动化:通过NETCONF自动创建SR-TE隧道,将不同流量自动引到对应的隧道上进行承载,改变传统人工配置设备的方式,降低出错风险,缩短上线周期。
流量智能调度:通过对全网的专线资源池化,集中调度,根据不同应用的带宽和SLA需求,动态为应用选择最优路径,并定期对全网流量进行全局优化,均衡流量分布,提高专线利用率,降低线路成本。将控制器计算的路径信息转化为Segment Routing标签栈,并通过NETCONF下发给设备,控制设备报文转发。
首先,将基础网络由MPLS升级为Segment Routing,使其同时具有LDP和SR的转发能力,保留原有LDP控制平面。
其次,部署SDN控制器及WAN APP,作为Segment Routing的控制平面,指导SR转发。
最后,整个网络形成集中的SR控制平面和分布的LDP控制平面两套控制平面,其中SR控制平面作为叠加在原有网络上的控制平面,优先级高,用于指导设备的报文转发,LDP控制平面作为备份,优先级低,用于SR控制平面失效后的逃生。
图14 MPLS/SR网络
系统部署完成后,控制器通过BGP-LS收集网络拓扑,根据网络拓扑为全网设备和链路分配SR标签(目前使用的是SR邻接标签),设备收到分配的SR标签后,自动生成SR标签转发表,用于指导报文转发。
图15 初始化流程
首先用户定义应用(五元组、VPN)、及其带宽和SLA需求,包括相关的选路策略等,控制器会自动解析用户输入,分解成网络配置,下发应用规则到边界节点上对应用进行分类和着色,同时在边界节点上为应用创建SR隧道,并通过路由、PBR、CBTS等方式将应用流量自动引到对应SR隧道上,最后,基于网络实时状况为应用计算最优路径,下发到设备上,指导报文转发。
图16 应用选路流程
当网络拓扑发生变化,如节点或链路故障,控制器会通过BGP-LS等方式感知到拓扑变化,会重新为应用计算最优路径,并将优化后的路径下发到设备上,指导后续报文转发。
图17 路径调整和重优化
ADWAN方案提供了从设备、路径、到控制器等多方面的可靠性机制,从整网的角度保障了整个方案的可靠性,设备通过IRF等虚拟化技术实现冗余备份,控制器提供主备/集群等功能保障控制器自身安全,下面详细描述路径可靠性机制,首先控制器会为每类应用计算两条主备路径,同时下发到设备上,设备通过BFD实时检测主备路径的连通性,一旦发现主路径发生故障,会由设备立即自主切换到备份路径,无需控制器干预,保证了主备切换的实时性。随后控制器通过BGP-LS会感知到拓扑变化,会重新为应用计算最优的主备路径,并将优化后的主备路径下发到设备上,这样设备上会一直同时存在两条路径,保证路径上的可靠性。
图18 路径可靠性机制
ADWAN方案采用SD-WAN开放架构,北向提供面向业务的RESTful API接口,第三方系统通过调用这些API接口,就可以很方便将ADWAN丰富的网络能力集成进来,而不用关心网络技术细节和设备上的差异,从而能更多的聚焦用户业务编排和创新上。
具体的API接口请参见H3C ADWAN方案API接口文档。
综上所述,Segment Routing属于一种不断演进的技术,是对现有源路由和流量工程的完善,只需要在边缘设备为应用指定路径,中间设备不用再维护路径和应用的状态,从而使网络边缘更智能、核心更简单,简化了网络的设计和管理。
对广泛应用的MPLS技术来说,Segment Routing是对现有MPLS网络的高效简化,同时又充分利用了MPLS的转发机制,能很好的兼容目前的MPLS网络,并帮助现有MPLS网络向SDN的平滑演进。