SR-MPLS简介

SR&SR-MPLS

SR(segment routing,段路由),其核心思想是将网络报文转发路径切割为不同的分段,并在路径起始点往报文中插入分段信息指导报文转发。目前,Segment Routing支持 MPLS IPv6 两种数据平面,对应着两种技术方案:基于MPLS数据平面的Segment Routing称为SR-MPLS;基于IPv6数据平面的Segment Routing称为SRv6。本文主要介绍SR-MPLS。

为什么需要SR?
  • IP承载网的孤岛问题。MPLS统一了承载网,但是IP骨干网、城域网、移动承载网之间是独立的MPLS域,是相互分离的,需要使用跨域VPN等复杂的技术来互联,导致端到端业务的部署非常复杂。 而且在L2VPN、L3VPN多种业务并存的情况下,设备中可能同时存在LDP、RSVP、IGP、BGP等协议,管理复杂,不适合大规模业务部署。
  • IPv4与MPLS的可编程空间有限。当前很多新业务需要在转发平面加入更多的转发信息,但IETF已经发表声明,停止为IPv4制定更新的标准,另外MPLS只有20bit的标签空间,且标签字段固定、长度固定,缺乏可扩展性,导致很难满足未来业务的网络编程需求。
  • 应用与承载网隔离。目前应用与承载网的解耦,导致网络自身的优化困难,难以提升网络的价值。当前运营商普遍面临被管道化的挑战,无法从增值应用中获得相应的收益;而应用信息的缺失,也使得运营商只能采用粗放的方式进行网络调度和优化,造成资源的浪费。MPLS也曾试图更靠近主机和应用,但因为其本身网络边界多、管理复杂度大等多方面的原因,均以失败告终。
传统MPLS的瓶颈?
  • 虽然MPLS因其标签交换的思想使其转发平面广受好评,但是MPLS控制平面却因为协议复杂、扩展性差、部署维护困难等问题受到诟病。
  • LDP是基于IGP算路结果完成标签分发,LDP存在的主要问题是:
    • 依赖IGP,但是LDP与IGP实际是两个独立的协议,会存在不同步问题,导致流量黑洞。
    • 只能通过最短路径转发,不支持流量工程,缺乏路径规划能力。
  • RSVP-TE虽然实现了流量工程,可以根据业务需要灵活地选择转发路径,但是也存在明显问题:
    • 配置、维护复杂,RSVP-TE协议状态复杂,设备需要交互大量报文来维持隧道状态,使得该协议难以规模部署。
    • 不支持负载分担,难以充分利用网络资源。

SR-MPLS的使命就是既需要保留传统MPLS网络的优点,还需要解决传统网络的困局。

SR-MPLS伴随着 SDN 思潮应运而生,SR-MPLS技术能够使网络更加简化,并具有良好的可扩展能力,主要体现在以下方面:

  • 更简单的控制平面:无需部署LDP/RSVP-TE协议,只需要设备通过IGP/BGP协议扩展来实现标签分发或同步,或者由控制器统一负责SR标签的分配,并下发和同步给设备。
  • 易扩展的转发平面:SR-MPLS复用了已有的MPLS转发平面,网络设备不做改动或者进行简单升级就可以支持SR的转发,在SR-MPLS中,Segment可以映射为MPLS标签,路径就是标签栈。

SR-MPLS以其简单、高效、易扩展的特点,使其具有很多优势:

  • 具备网络路径可编程能力:SR-MPLS具备源路由优势,仅在源节点对报文进行标签操作即可任意控制业务路径,且中间节点不需要维护路径信息,设备控制平面压力小。
  • 简化设备控制平面,减少路由协议数量,简化运维成本;标签转发表简单,标签占用少,设备资源占用率低。
  • 更好的向SDN网络平滑演进:面向SDN架构设计的协议,融合了设备自主转发和集中编程控制的优势,能够更好地实现应用驱动网络。同时,支持传统网络和SDN网络,兼容现有设备,保障现有网络平滑演进到SDN网络。
image-20220808152705281

SR-MPLS基本概念

segment

Segment表示网络指令,用来指引报文去哪,怎么去。根据生成方式不同,Segment分为3类,分别是Prefix Segment、Node Segment、Adjacency Segment。

image-20220808155719521

SID(Segment ID)

用于标识唯一的段,对应segment的三类,分为Prefix SID、Node SID、Adjacency SID

  • Prefix SID,也可称之为前缀标签,是针对目的IP地址映射的标签。
  • Node SID,也可称之为节点标签,是针对设备Loopback口IP地址映射的标签,可以看作是特殊的Prefix SID
  • Adjacency SID,也可称之为邻接标签,是每台设备针对自己的接口邻居发布的,用来显示指定数据包的外发链路,且具有方向性,例如P2分配的16024邻接标签,代表需要从本地Interface1接口外发给P4。
image-20220808160037388

Prefix SID/Node SID和Adjacency SID可以分别类比于传统IP转发中的目的地址和出接口。

Segment List

Segment List表示报文转发路径的一个有序的Segment列表。在转发层面,可以理解为MPLS标签栈。

SRGB

SRGB表示用户指定的为SR-MPLS预留的全局标签集合,需要手工配置,并且该集合内的标签值只能分配给Prefix SID和Node SID,而Adjacency SID是SRGB范围外的本地SID。

SR-BE(Best Effort)

利用Prefix SID、Node SID分配和传递,实现IGP和LDP的最短路径转发

SR-TE(Traffic Engineering)

利用Adjacency SID(有些情况还会用上Node SID)分配和传递,实现TE隧道工程(对转发路径、转发带宽等进行约束)

其中还包括严格显示和松散显示路径两种。例如基于Node SID和Adjacency SID的SR-TE便是松散路径,而使用Adjacency SID则是严格路径,严格固定了转发路径。具体 后文 会提到

工作原理

转发路径建立

SR-MPLS LSP本质上是一种使用依靠Segment Routing技术建立的标签转发路径,因此实际转发路径的建立就是三类SID分配和传递的过程。

Node SID分配与传递

如下图所示,以P4为目的节点,在P4节点上手工配置Node SID,通过IGP协议扩展到其他网元之后,整个IGP域的其他节点学习到P4节点的Node SID,然后使用SPF算法得出一条到P4的标签转发路径,然后生成转发表项。

使用Node SID表示的路径就是SR-MPLS BE LSP

image-20220808161947732

Prefix SID分配与传递

如下图所示,以P4为目的节点,在P4节点上手工配置Prefix SID,通过IGP协议扩展到其他网元之后,其他网元会解析Prefix SID,并根据自己的SRGB计算标签值。此后各节点使用IGP协议收集的拓扑信息,根据最短路径算法计算标签转发路径,并将计算的下一跳及出标签(OutLabel)信息下发转发表,指导数据报文转发。

使用Prefix SID表示的路径也是SR-MPLS BE LSP。

image-20220808162100851
标签值计算过程
  1. 在P4上配置SRGB,在P4的Loopback口配置Prefix SID,生成转发表项并下发。之后P4将SRGB和Prefix SID封装到LSP报文,并将LSP报文通过IGP向全网扩散。

    网络中其他节点接收到LSP报文后,解析P4发布的Prefix SID,根据自己的SRGB计算标签值,同时根据下一跳节点发布的SRGB计算出标签值(OutLabel)。使用IGP拓扑计算标签转发路径,然后生成转发表项。

  2. P3解析P4发布的Prefix SID,根据自己的SRGB=[36000–65535]计算标签值,计算公式是:Label=SRGB的起始值+Prefix SID值,所以Label=36000+100=36100。

    使用IS-IS拓扑计算出标签(OutLabel),计算公式是:OutLabel=下一跳设备发布的SRGB的起始值+Prefix SID值,在本例中,下一跳设备为P4,P4发布的SRGB范围是[16000–65535],所以OutLabel=16000+100=16100。

  3. P2计算过程与P3类似,Label=26000+100=26100,OutLabel=36000+100=36100。

  4. P1计算过程与P3类似,Label=20000+100=20100,OutLabel=26000+100=26100。

冲突问题

由于Prefix SID通过手工配置生成,不同设备上的配置可能发生标签冲突。标签冲突分为前缀冲突SID冲突,前缀冲突是指相同的前缀关联了两个不同的SID,SID冲突是指相同的SID关联到不同的前缀

标签冲突处理原则:当冲突产生后,优先处理前缀冲突,之后根据处理结果再进行SID冲突处理,并按如下规则进行优选。

  1. 前缀掩码更大者优选;
  2. 前缀更小者优选;
  3. SID更小者优选。

假设现在有四个路由(前缀/掩码 SID):

  • a. 1.1.1.1/32 1
  • b. 1.1.1.1/32 2
  • c. 2.2.2.2/32 3
  • d. 3.3.3.3/32 1

使用冲突处理原则后效果如下:

  1. 先进行前缀冲突处理,a和b为前缀冲突,根据标签冲突处理原则,a的SID比b的SID小,优选a,则处理后:
    • a. 1.1.1.1/32 1
    • c. 2.2.2.2/32 3
    • d. 3.3.3.3/32 1
  2. 再根据上一步处理结果进行SID冲突处理,a和d为SID冲突,根据标签冲突处理原则,a的前缀比d的前缀小,优选a。冲突解决后,最终优选出两条路由:
    • a. 1.1.1.1/32 1
    • c. 2.2.2.2/32 3

Adjacency SID分配与传递

如下图所示,P2节点为其每个邻居分配一个Adjacency SID,IGP默认为邻居自动生成Adjacency SID,也可以支持手工配置。Adjacency SID也是通过IGP协议扩展到其他网元,但是仅在分配的节点生成转发表项,其余节点不针对Adjacency SID生成转发表项,例如此例中仅在P2生成了转发表项。

通过在头节点定义一个包含多个Adjacency SID的Segment List,还可以实现路径的精细规划,因此使用Adjacency SID表示的路径可以称之为SR-MPLS TE隧道,能更好地实现流量工程。

image-20220808162442592
  • Prefix SID和Node SID用来标识一个节点,从转发平面可以将其理解为沿着支持ECMP的最短路径到此节点,由此可见,基于Prefix SID或Node SID的转发路径并不是一条固定路径,头节点无法控制报文的整条转发路径,因此基于Prefix SID或Node SID建立的转发路径称之为SR-MPLS BE LSP
  • Adjacency SID是本地针对自己的接口邻居分配的,从转发平面可以将其理解为沿着指定出接口或下一跳转发报文,当在头节点定义一个或多个Adjacency SID的Segment List,则可以严格指定任意一条显式路径,因此基于Adjacency SID建立的转发路径称之为SR-MPLS TE隧道,这种方式能更好的配合实现SDN。另外对于严格指定的显式路径又称之为严格路径,这是SR-MPLS TE隧道的其中一种形式

在实际应用中Prefix SID、Node SID、Adjacency SID可以单独使用,也可以结合使用,如下图所示,还可以基于Adjacency SID + Node SID建立转发路径。通过Adjacency SID,可以强制整条路径包含某一个邻接。而对于Node SID,节点可以使用SPF算法计算最短路径,也可以负载分担。这种方式的路径并不是严格固定,所以也称作松散路径,这是SR-MPLS TE隧道的另一种形式

image-20220808162730167

例如在上图,P1到P8,标签栈中只有一个Adjacency SID,即固定了P4->P5这个路径,而P1如何到P4,可以走最短路径,也可以走等价路径,这便是松散路径。

转发过程

基于Prefix SID 转发(BE)

  1. P1节点收到数据报文,添加标签值26100并转发。
  2. P2节点收到该标签报文,进行标签交换,将标签26100弹出,换成标签36100。
  3. P3节点收到该标签报文,进行标签交换,将标签36100弹出,换成标签16100。
  4. P4节点收到该标签报文后,将标签16100弹出,继续查路由转发。
image-20220808164454171

基于Adjacency SID转发(TE)

  1. P1节点收到数据报文,添加标签栈<1002,2004, 4005,5007,7009>,然后根据栈顶的标签1002匹配邻接,找到对应的转发出接口P1->P2邻接,之后将标签1002弹出。报文携带标签栈<2004, 4005,5007,7009>,通过P1->P2邻接向下游节点P2转发。
  2. P2节点收到报文后,根据栈顶的标签2004匹配邻接,找到对应的转发出接口为P2->P4邻接,之后将标签2004弹出。报文携带标签栈<4005,5007,7009>,通过P2->P4邻接向下游P4转发。
  3. P4、P5、P7节点收到报文后的处理方式与P2相同,直到P7弹出最后一个标签7009,数据报文转发至节点P9。
  4. 出节点P9收到的报文不带标签,通过查找路由表继续转发。
image-20220808164623962

基于Adjacency SID + Node SID的数据报文转发(TE)

严格路径方式的SR-MPLS TE在存在等价路径的情况下,也无法进行负载分担,在SR-MPLS TE路径里引入Node SID后,可以弥补上述不足。

在头节点手工指定Node SID、Adjacency SID混合标签栈,转发器基于该标签栈,逐跳查找出接口弹出标签,指导数据报文进行转发到隧道目的地址。如图所示,报文转发流程如下:

  1. 在P1节点根据栈顶邻接标签1003,找到对应的转发出接口为P1->P3邻接,将1003标签弹出,然后将剩余报文发送到下一跳P3节点;
  2. 在P3节点类似P1节点动作,根据栈顶标签1006,找到对应出接口,将1006标签弹出转发出去,发送到下一跳P2节点;
  3. 在P2节点类似P1节点动作,根据栈顶标签1005,找到对应出接口,将1005标签弹出转发出去,发送到下一跳P4节点;
  4. 在P4节点上,处理栈顶节点标签101,在P4节点标签101为到P7节点的链路负载分担标签,流量报文根据其IP五元组,哈希到相应链路上;
  5. 在P5、P6节点上,收到节点标签101后,根据对应的标签做对应动作,交换为下一跳的节点标签,由于这两个节点为倒数第二跳,直接将标签弹出后报文发送给P7节点,完成端到端路径的流量转发。
image-20220808164709921

BGP for SR-MPLS

IGP for SR-MPLS解决了自治系统AS域内分配SID,通过对AS域内SID的合理编排,可以规划出AS域内的最优路径。为了组建大规模网络,通常需要跨越多个AS,此时IGP for SR-MPLS无能为力。BGP for SR-MPLS是BGP针对Segment Routing的扩展,能够针对BGP的Peer相关信息分配BGP Peer SID,并将该信息上报给控制器。之后SR-MPLS TE在编排路径时,使用BGP Peer SID作为编排路径中的一环,从而得到跨域E2E SR-MPLS TE最优路径。BGP for SR-MPLS主要包括BGP EPE(Egress Peer Engineering)扩展和BGP-LS扩展

BGP EPE

BGP EPE可为域间路径分配BGP Peer SID,Peer SID可以通过BGP-LS扩展直接传递给网络控制器。而对于没有与控制器建立BGP-LS邻居的转发器设备,可以先通过BGP-LS将Peer SID信息传递给BGP邻居,然后再由BGP邻居通过BGP-LS传递给网络控制器。如下图所示,BGP EPE能够针对对等体分配Peer Node Segment(Peer-Node SID)、Peer Adjacency Segment(Peer-Adj SID)和Peer-Set SID

  • Peer-Node SID用于指示一个对等体节点。每一个BGP会话都会分配Peer-Node SID。对于基于Loopback接口建立的EBGP邻居,其对应的物理链路可能有多条,那么针对该邻居的Peer-Node SID就会对应多个出接口。
  • Peer-Adj SID用于指示到达对等体的一个邻接。对于基于Loopback接口建立的EBGP邻居,其对应的物理链路可能有多条,则每个邻接都会分配一个Peer-Adj SID,转发时只能使用指定的链路(对应指定的出接口)进行转发。
  • Peer-Set SID用于指示一组邻居。BGP支持将一组邻居规划为一个Set,然后基于该组分配SID,这个SID称为Peer-Set SID,Peer-Set SID在转发时可以对应多个出接口。一个Peer-Set由众多Peer-Node和Peer-Adj组成,那么针对该Peer-Set分配的SID就会对应到多个Peer-Node SID和Peer-Adj SID。
image-20220808171326575

如上图,ASBR1-ASBR3间存在两条直连物理链路,二者通过LoopBack接口建立EBGP邻居,BGP EPE针对Peer分配了Peer-Node SID 28001,为物理链路分配了Peer-Adj SID 18001和18002。而对于使用直连物理接口建立的EBGP邻居,则BGP EPE只分配Peer-Node SID,不再分配Peer-Adj SID,如图中的ASBR1-ASBR5,ARBR2-ASBR4,以及ASBR2-ASBR5,BGP EPE分别仅分配了Peer-Node SID 28002,28003和28004。

Peer-Node SID和Peer-Adj SID均是局部标签,在本机有效。不同设备的Peer-Node SID和Peer-Adj SID可以重复。当前BGP EPE仅支持EBGP邻居场景,对于多跳EBGP邻居,也必须是通过物理链路直连。

BGP EPE只是针对BGP邻居节点及相关链路分配SID,并不能构建一个用于转发的隧道,BGP Peer SID信息还需要与IGP SID配合才能形成E2E的隧道。当前的IPv4 SR主要有SR-MPLS BESR-MPLS TE两种方式。

  • SR-MPLS BE是转发器直接基于域内IGP SID信息进行动态计算得到的,而BGP EPE分配的Peer SID信息并不能被IGP使用,因此当前无法支持跨域SR LSP
  • SR-MPLS TE可以通过静态指定路径的方式来建立一条E2E隧道,也可以由网络控制器编排,只要指定的路径里包含AS域间的链路信息即可。

故障联动

image-20220809095704281

见上图,AS 65001内配置域内SR-MPLS TE隧道,并且配置SBFD for SR-MPLS TE隧道。ASBR1、ASBR2与ASRB3之间配置BGP EPE功能。

CSG1到ASBR3之间建立两条跨域SR-MPLS TE隧道,隧道由域内SID和域间BGP SID编排而成。如果ASBR间BGP EPE对应的链路发生故障,SR-MPLS TE隧道头节点CSG1无法感知,可能产生流量黑洞。

当前有两种方式解决上述问题:

  1. 当ASBR1-ASBR3间链路故障时,BGP EPE联动本AS域内SBFD for SR-MPLS TE隧道状态置Down,从而使SR-MPLS TE隧道头节点快速感知故障,将数据流量切换到其他正常路径转发,如Tunnel2。
  2. 当ASBR1-ASBR3间链路故障时,ASBR1将SR报文的BGP EPE标签剥掉(Pop),利用报文的目的地址查找IP路由表转发,这样报文可能从ARBR1-ASBR2-ASBR3这个IP链路绕行到达ASBR3。这种方式适用于网络里不存在备份跨域SR-MPLS TE隧道场景。
注意
  1. 上述两种方式不可同时配置,用户可以根据实际网络情况选择其中一种。
  2. 配置BGP Peer-Set后,同样支持上述功能,只是触发条件变为:BGP Peer-Set SID对应的所有链路都发生故障。

SR-MPLS与LDP互通

尽管SR-MPLS能解决MPLS LDP的一些瓶颈困境,但它如今仍然是承载网的主要隧道技术,这样在SR-MPLS逐渐替代LDP的过程中,LDP和SR-MPLS会在很长的一段时间内共存。LDP网络和SR-MPLS网络之间的互通成为一个必须面对的问题。

要实现LDP网络和SR-MPLS网络之间互通,则SR-MPLS网络必须有设备代替不支持Segment Routing的LDP设备发布SID,这个设备也称为Mapping Server。

  • Mapping Server: 可以配置Prefix与SID的映射关系,并且发布给Mapping client。
  • Mapping Client:接收Mapping Server发布的Prefix与SID的映射关系,创建映射表项。

由于LSP是单向的,因此互通分为两个部分

SR-MPLS->LDP

image-20220809100925408
  1. PE2上配置IP地址前缀,LDP为该前缀分配标签,并向上游P3发送标签映射消息。
  2. P3为该前缀分配标签,并向上游P2发送标签映射消息。
  3. P2接收到标签映射消息后,创建到PE2的LDP LSP。
  4. P2上配置Mapping Server,将IP地址前缀携带的LDP标签映射为SID。
  5. P2发布Mapping TLV到上游P1。
  6. P1发布Mapping TLV到上游PE1。
  7. PE1解析Mapping TLV,创建到P2的SR LSP。
  8. P2上建立SR LSP与LDP LSP的映射关系。

在数据转发时,P2设备上没有到PE2的SR-MPLS Label,所以P2根据Prefix与SID映射关系,SR-MPLS封装映射为LDP封装。

LDP->SR-MPLS

image-20220809101203902
  1. PE1上配置IP地址前缀,并为该前缀配置SID。然后将前缀和SID通过IGP向P1发布。
  2. P1将前缀和SID通过IGP向P2发布。
  3. P2接收到前缀和SID后,创建到PE1的SR LSP。
  4. P2上配置代理LDP Egress,将IP地址前缀携带的SID映射为LDP标签。只要配置了代理LDP Egress,而且对端路由可达,就会向上游发布Mapping消息。
  5. P2发送标签映射消息到上游P3,P3发送标签映射消息到上游PE2。
  6. PE2解析标签映射消息,创建到P2的LDP LSP。
  7. P2上建立SR LSP与LDP LSP的映射关系。

数据转发时,P2设备上没有到PE1的LDP Label,所以P2根据Prefix与SID映射关系,LDP封装映射为SR-MPLS封装。

参考文章

SR-MPLS是什么?SR-MPLS是如何工作的? - 华为 (huawei.com)

Segment Routing MPLS原理描述 - IP新技术专题 - 华为 (huawei.com)