SR-MPLS简介
SR&SR-MPLS
SR(segment routing,段路由),其核心思想是将网络报文转发路径切割为不同的分段,并在路径起始点往报文中插入分段信息指导报文转发。目前,Segment Routing支持 MPLS 和 IPv6 两种数据平面,对应着两种技术方案:基于MPLS数据平面的Segment Routing称为SR-MPLS;基于IPv6数据平面的Segment Routing称为SRv6。本文主要介绍SR-MPLS。
- IP承载网的孤岛问题。MPLS统一了承载网,但是IP骨干网、城域网、移动承载网之间是独立的MPLS域,是相互分离的,需要使用跨域VPN等复杂的技术来互联,导致端到端业务的部署非常复杂。 而且在L2VPN、L3VPN多种业务并存的情况下,设备中可能同时存在LDP、RSVP、IGP、BGP等协议,管理复杂,不适合大规模业务部署。
- IPv4与MPLS的可编程空间有限。当前很多新业务需要在转发平面加入更多的转发信息,但IETF已经发表声明,停止为IPv4制定更新的标准,另外MPLS只有20bit的标签空间,且标签字段固定、长度固定,缺乏可扩展性,导致很难满足未来业务的网络编程需求。
- 应用与承载网隔离。目前应用与承载网的解耦,导致网络自身的优化困难,难以提升网络的价值。当前运营商普遍面临被管道化的挑战,无法从增值应用中获得相应的收益;而应用信息的缺失,也使得运营商只能采用粗放的方式进行网络调度和优化,造成资源的浪费。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网络。
SR-MPLS基本概念
segment
Segment表示网络指令,用来指引报文去哪,怎么去。根据生成方式不同,Segment分为3类,分别是Prefix Segment、Node Segment、Adjacency Segment。
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。
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
Prefix SID分配与传递
如下图所示,以P4为目的节点,在P4节点上手工配置Prefix SID,通过IGP协议扩展到其他网元之后,其他网元会解析Prefix SID,并根据自己的SRGB计算标签值。此后各节点使用IGP协议收集的拓扑信息,根据最短路径算法计算标签转发路径,并将计算的下一跳及出标签(OutLabel)信息下发转发表,指导数据报文转发。
使用Prefix SID表示的路径也是SR-MPLS BE LSP。
在P4上配置SRGB,在P4的Loopback口配置Prefix SID,生成转发表项并下发。之后P4将SRGB和Prefix SID封装到LSP报文,并将LSP报文通过IGP向全网扩散。
网络中其他节点接收到LSP报文后,解析P4发布的Prefix SID,根据自己的SRGB计算标签值,同时根据下一跳节点发布的SRGB计算出标签值(OutLabel)。使用IGP拓扑计算标签转发路径,然后生成转发表项。
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。
P2计算过程与P3类似,Label=26000+100=26100,OutLabel=36000+100=36100。
P1计算过程与P3类似,Label=20000+100=20100,OutLabel=26000+100=26100。
由于Prefix SID通过手工配置生成,不同设备上的配置可能发生标签冲突。标签冲突分为前缀冲突和SID冲突,前缀冲突是指相同的前缀关联了两个不同的SID,SID冲突是指相同的SID关联到不同的前缀。
标签冲突处理原则:当冲突产生后,优先处理前缀冲突,之后根据处理结果再进行SID冲突处理,并按如下规则进行优选。
- 前缀掩码更大者优选;
- 前缀更小者优选;
- 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
使用冲突处理原则后效果如下:
- 先进行前缀冲突处理,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
- 再根据上一步处理结果进行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隧道,能更好地实现流量工程。
- 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隧道的另一种形式。
例如在上图,P1到P8,标签栈中只有一个Adjacency SID,即固定了P4->P5这个路径,而P1如何到P4,可以走最短路径,也可以走等价路径,这便是松散路径。
转发过程
基于Prefix SID 转发(BE)
- P1节点收到数据报文,添加标签值26100并转发。
- P2节点收到该标签报文,进行标签交换,将标签26100弹出,换成标签36100。
- P3节点收到该标签报文,进行标签交换,将标签36100弹出,换成标签16100。
- P4节点收到该标签报文后,将标签16100弹出,继续查路由转发。
基于Adjacency SID转发(TE)
- P1节点收到数据报文,添加标签栈<1002,2004, 4005,5007,7009>,然后根据栈顶的标签1002匹配邻接,找到对应的转发出接口P1->P2邻接,之后将标签1002弹出。报文携带标签栈<2004, 4005,5007,7009>,通过P1->P2邻接向下游节点P2转发。
- P2节点收到报文后,根据栈顶的标签2004匹配邻接,找到对应的转发出接口为P2->P4邻接,之后将标签2004弹出。报文携带标签栈<4005,5007,7009>,通过P2->P4邻接向下游P4转发。
- P4、P5、P7节点收到报文后的处理方式与P2相同,直到P7弹出最后一个标签7009,数据报文转发至节点P9。
- 出节点P9收到的报文不带标签,通过查找路由表继续转发。
基于Adjacency SID + Node SID的数据报文转发(TE)
严格路径方式的SR-MPLS TE在存在等价路径的情况下,也无法进行负载分担,在SR-MPLS TE路径里引入Node SID后,可以弥补上述不足。
在头节点手工指定Node SID、Adjacency SID混合标签栈,转发器基于该标签栈,逐跳查找出接口弹出标签,指导数据报文进行转发到隧道目的地址。如图所示,报文转发流程如下:
- 在P1节点根据栈顶邻接标签1003,找到对应的转发出接口为P1->P3邻接,将1003标签弹出,然后将剩余报文发送到下一跳P3节点;
- 在P3节点类似P1节点动作,根据栈顶标签1006,找到对应出接口,将1006标签弹出转发出去,发送到下一跳P2节点;
- 在P2节点类似P1节点动作,根据栈顶标签1005,找到对应出接口,将1005标签弹出转发出去,发送到下一跳P4节点;
- 在P4节点上,处理栈顶节点标签101,在P4节点标签101为到P7节点的链路负载分担标签,流量报文根据其IP五元组,哈希到相应链路上;
- 在P5、P6节点上,收到节点标签101后,根据对应的标签做对应动作,交换为下一跳的节点标签,由于这两个节点为倒数第二跳,直接将标签弹出后报文发送给P7节点,完成端到端路径的流量转发。
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。
如上图,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 BE和SR-MPLS TE两种方式。
- SR-MPLS BE是转发器直接基于域内IGP SID信息进行动态计算得到的,而BGP EPE分配的Peer SID信息并不能被IGP使用,因此当前无法支持跨域SR LSP。
- SR-MPLS TE可以通过静态指定路径的方式来建立一条E2E隧道,也可以由网络控制器编排,只要指定的路径里包含AS域间的链路信息即可。
故障联动
见上图,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无法感知,可能产生流量黑洞。
当前有两种方式解决上述问题:
- 当ASBR1-ASBR3间链路故障时,BGP EPE联动本AS域内SBFD for SR-MPLS TE隧道状态置Down,从而使SR-MPLS TE隧道头节点快速感知故障,将数据流量切换到其他正常路径转发,如Tunnel2。
- 当ASBR1-ASBR3间链路故障时,ASBR1将SR报文的BGP EPE标签剥掉(Pop),利用报文的目的地址查找IP路由表转发,这样报文可能从ARBR1-ASBR2-ASBR3这个IP链路绕行到达ASBR3。这种方式适用于网络里不存在备份跨域SR-MPLS TE隧道场景。
- 上述两种方式不可同时配置,用户可以根据实际网络情况选择其中一种。
- 配置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
- PE2上配置IP地址前缀,LDP为该前缀分配标签,并向上游P3发送标签映射消息。
- P3为该前缀分配标签,并向上游P2发送标签映射消息。
- P2接收到标签映射消息后,创建到PE2的LDP LSP。
- P2上配置Mapping Server,将IP地址前缀携带的LDP标签映射为SID。
- P2发布Mapping TLV到上游P1。
- P1发布Mapping TLV到上游PE1。
- PE1解析Mapping TLV,创建到P2的SR LSP。
- P2上建立SR LSP与LDP LSP的映射关系。
在数据转发时,P2设备上没有到PE2的SR-MPLS Label,所以P2根据Prefix与SID映射关系,SR-MPLS封装映射为LDP封装。
LDP->SR-MPLS
- PE1上配置IP地址前缀,并为该前缀配置SID。然后将前缀和SID通过IGP向P1发布。
- P1将前缀和SID通过IGP向P2发布。
- P2接收到前缀和SID后,创建到PE1的SR LSP。
- P2上配置代理LDP Egress,将IP地址前缀携带的SID映射为LDP标签。只要配置了代理LDP Egress,而且对端路由可达,就会向上游发布Mapping消息。
- P2发送标签映射消息到上游P3,P3发送标签映射消息到上游PE2。
- PE2解析标签映射消息,创建到P2的LDP LSP。
- P2上建立SR LSP与LDP LSP的映射关系。
数据转发时,P2设备上没有到PE1的LDP Label,所以P2根据Prefix与SID映射关系,LDP封装映射为SR-MPLS封装。