SR-MPLS TE
分段路由流量工程SR-MPLS TE(Segment Routing-MPLS Traffic Engineering)是使用SR作为控制协议的一种新型的TE隧道技术。控制器负责计算隧道的转发路径,并将与路径严格对应的标签栈下发给转发器。在SR-MPLS TE隧道的入节点上,转发器根据标签栈,即可控制报文在网络中的传输路径。
SR-MPLS TE优势
随着SDN的发展,普通的RSVP-TE存在的不足已经不能满足快速发展的需求,而SR-MPLS TE作为一种新型的MPLS TE隧道技术,有着独特的优势,具体如表2-19所示。
比较项 |
SR-MPLS TE |
RSVP-TE |
---|---|---|
标签分配 |
通过IGP协议扩展进行标签分配和扩散。每条链路仅分配一个标签,所有的LSP共用这一个标签,减少了标签资源的占用,减轻了标签转发表的维护工作量。 |
通过MPLS协议扩展进行标签分配和扩散。每条LSP分配一个标签,当有多条LSP时,同一条链路上需要分配多个标签,标签资源占用的多,标签转发表的维护工作量大。 |
控制平面 |
信令控制协议为IGP协议扩展,无需专门的MPLS的控制协议,减少协议数量。 |
需要RSVP-TE作为MPLS的控制协议,控制平面较复杂。 |
可扩展性 |
网络中间设备不感知隧道,隧道信息携带在每个报文中,无需维护隧道状态信息,只需维护转发表项,可扩展性强。 |
需要维护隧道状态信息,也需要维护转发表项,可扩展性差。 |
路径调整和控制 |
网络中间设备不感知隧道,仅通过对入节点的报文进行标签操作即可任意控制业务路径,无需逐节点下发配置。 当路径中的某个节点发生故障,由控制器重新计算路径并更新入节点的标签栈,即可完成路径调整。 |
无论是正常业务调整还是故障场景的被动路径调整,都需逐节点下发配置。 |
相关概念
标签栈
标签栈是标签的排序集合,用于标识一条完整的标签交换路径LSP(Label Switched Path)。标签栈中每一个邻接标签标识一条具体的邻接,整个标签栈标识了整条转发路径LSP的所有邻接。在报文转发过程中,通过标签栈中每个邻接标签查找对应的邻接,并将标签弹出后转发,将标签栈中所有邻接标签弹出后,报文就走完了整条LSP,到达SR-MPLS TE隧道的目的地。
粘连标签与粘连节点
当标签栈深度超过转发器所支持的标签栈深度时,一个标签栈无法携带整条LSP的邻接标签,控制器需要为转发器分配多个标签栈,在合适的节点下发标签栈的同时分配一种特殊的标签,然后将这些标签栈关联起来,实现逐段转发。这种特殊的标签称为粘连标签,这个合适的节点称为粘连节点。
控制器为粘连节点分配粘连标签,并将其压在标签栈底,当报文转发至粘连节点时,根据粘连标签与标签栈的关联关系,用新的标签栈交换该粘连标签,继续指导下一段转发。
拓扑收集与标签分配
网络拓扑收集方式
BGP-LS上报网络拓扑信息:转发器的IGP协议收集网络拓扑信息,通过BGP-LS将网络拓扑信息上报给控制器。
IGP协议上报网络拓扑信息:转发器的IGP协议收集网络拓扑信息,当控制器与转发器均配置IGP协议后,转发器通过IGP协议将网络拓扑信息上报给控制器。
标签分配方式
转发器的IGP协议分配标签,并通过BGP LS将分配的标签上报给控制器。SR-MPLS TE主要使用邻接标签(Adjacency Segment),也可以使用节点标签。邻接标签是源节点分配的,只在本地有效,并且具有一定的方向性。节点标签手工配置,全局有效。邻接标签和节点标签都可以通过IGP协议扩散出去。如图2-31所示,邻接标签9003对应邻接PE1->P3,9003是由PE1分配的;邻接标签9004对应邻接P3->PE1,9004是由P3分配的。
在PE1、P1、P2、P3、P4和PE2设备上分别使能IGP SR能力,相互之间建立邻居。对于使能了SR能力的IGP实例,会对所有使能IGP协议的出接口分配SR邻接标签。邻接标签通过IGP的SR协议扩展,泛洪到整个网络中。如图2-31所示,以P3设备为例,IGP分配标签的具体过程如下:
- P3的IGP协议为其邻接申请本地动态标签。例如,P3为邻接P3->P4分配的邻接标签为9002。
- P3的IGP协议发布邻接标签,泛洪到整个网络。
- P3上生成邻接标签对应的标签转发表。
- 网络中的其它设备的IGP协议学习到P3发布的邻接标签,但是不生成标签转发表。
PE1、P1、P2、P3、P4按照P3的方式分配和发布邻接标签,生成标签转发表。当设备与控制器之间配置BGP LS协议,建立了邻居关系后,BGP LS引入带有SR标签信息的拓扑,向控制器上报。
SR-MPLS TE隧道创建
SR-MPLS TE隧道
SR-MPLS TE(Segment Routing Traffic Engineering)是指基于TE的约束属性,利用SR协议创建的隧道。
如图2-32所示,有两条LSP,其中一条路径PE1->P1->P2->PE2作为主路径,另外一条PE1->P3->P4->PE2作为备份路径,而两条LSP隧道都对应同一个隧道ID的SR-MPLS TE隧道。LSP的起始节点称为入节点,位于LSP中间的节点称为中间节点,LSP的末节点称为出节点。
SR-MPLS TE隧道创建包括隧道配置和隧道建立。在SR-MPLS TE隧道创建之前,需要在各转发器之间建立IS-IS/OSPF邻居关系,实现网络层互通,完成标签的分配以及网络拓扑信息的收集,并将标签和网络拓扑信息上送给控制器,供控制器进行路径计算。如果没有控制器,也可以在SR-MPLS TE隧道的头节点使能CSPF算路功能,这样转发器也可以使用CSPF完成路径计算。
SR-MPLS TE隧道配置
SR-MPLS TE隧道的属性是创建隧道的依据。SR-MPLS TE隧道可以在控制器上配置,也可以在转发器上配置。
控制器上配置隧道
在控制器上进行SR-MPLS TE隧道配置后,控制器将隧道属性通过NETCONF下发给转发器(如图2-33所示),转发器通过PCEP协议将隧道托管给控制器进行管理。
转发器上配置隧道
在转发器上进行SR-MPLS TE隧道配置后,转发器将隧道托管给控制器进行管理。
SR-MPLS TE隧道建立
当配置了某种业务(VPN)时,该业务需要绑定到SR-MPLS TE隧道,将按照以下过程建立SR-MPLS TE隧道,如图2-33所示。
控制器基于SR-MPLS TE的隧道约束属性,通过路径计算单元PCE(Path Computation Element)进行类似普通TE的路径计算,计算出来的路径根据拓扑和邻接标签,将整条路径的邻接标签整合在一起,生成一个标签栈(即算路结果)。
当标签栈深度超过转发器所支持的标签栈深度时,一个标签栈无法携带所有的邻接标签,则控制器需要将整条路径分为多个标签栈携带。
如图2-33所示,控制器计算出SR-MPLS TE隧道路径为PE1->P3->P1->P2->P4->PE2,对应2个标签栈{1003,1006,100}和{1005,1009,1010},其中100为粘连标签,其他为邻接标签。
控制器通过NETCONF和PCEP分别将隧道配置信息和标签栈下发给转发器。
如图2-33所示,控制器下发标签栈的过程如下:- 控制器将标签栈{1005,1009,1010}下发给粘连节点P1,并分配一个100的粘连标签与该标签栈关联,将100作为PE1上标签栈的栈底。
- 控制器将标签栈{1003,1006,100}下发给入节点PE1。
- 转发器根据控制器下发的隧道配置和标签栈信息建立SR-MPLS TE隧道LSP。
SR-MPLS TE隧道不支持MTU的协商,因此必须由用户保证路径上MTU的一致性。对于手工配置的SR-MPLS TE隧道,可以在Tunnel下手工配置MTU,如果不手工配置MTU,取MTU的默认值1500bytes。手工SR-MPLS TE隧道,取下列值中的最小值:Tunnel的MTU、Tunnel的MPLS MTU、出接口的MTU和出接口的MPLS MTU。
SR-MPLS TE数据转发
转发器上根据SR-MPLS TE隧道LSP对应的标签栈,对报文进行标签操作,并根据栈顶标签逐跳查找转发出接口,指导数据报文转发到隧道目的地址。
SR-MPLS TE的数据转发(基于邻接标签)
入节点A为数据报文添加标签栈{1003,1006,100},然后根据栈顶的标签1003匹配邻接,找到对应的转发出接口为A->B邻接,之后将标签1003弹出。报文携带标签栈{1006,100},通过A->B邻接向下游节点B转发。
- 中间节点B收到报文后,根据栈顶的标签1006匹配邻接,找到对应的转发出接口为B->C邻接,之后将标签1006弹出。报文携带标签栈{100},通过B->C邻接向下游节点C转发。
- 粘连节点C收到报文后,通过查询粘连标签表项识别出栈顶标签100为粘连标签,将粘连标签100交换为与其关联的标签栈{1005,1009,1010},然后根据新的栈顶标签1005匹配邻接,找到对应的转发出接口为C->D邻接,之后将标签1005弹出。报文携带标签栈{1009,1010},通过C->D邻接向下游节点D转发。关于粘连节点和粘连标签的详细介绍,请参考SR-MPLS TE。
- 节点D、E收到报文后,以与中间节点B相同的方式继续转发。直到节点E弹出最后一个标签1010,数据报文转发至节点F。
- 出节点F收到的报文不带标签,通过查找路由表继续转发。
从以上描述可以看出,通过手工指定邻接标签,设备将严格按照标签栈里指定的显式路径逐跳转发,所以这种也称作严格路径方式的SR-MPLS TE。
SR-MPLS TE的数据转发(基于节点+邻接标签)
严格路径方式的SR-MPLS TE在存在等价路径的情况下,也无法进行负载分担,在SR-MPLS TE路径里引入节点标签后,可以弥补上述不足。
在A号节点根据栈顶邻接标签1003,查找对应的A-B的出接口,将1003标签弹出剩余报文转发出去,发送到下一跳B节点;
- 在B节点类似A节点动作,根据栈顶标签1006,找到对应出接口,将1006标签弹出转发出去,发送到下一跳C节点;
- 在C节点类似A节点动作,根据栈顶标签1005,找到对应出接口,将1005标签弹出转发出去,发送到下一跳D节点;
- 在D节点上,处理栈顶节点标签101,在D节点标签101为到F节点的链路负载分担标签,流量报文根据其IP五元组,哈希到相应链路上;
- 在E、G节点上,收到节点标签101后,根据对应的标签做对应动作,交换为下一跳的节点标签,由于这两个节点为倒数第二跳,直接将标签弹出后报文发送给F节点,完成端到端路径的流量转发。
从以上描述可以看出,通过手工指定节点标签+邻接标签,设备在处理节点标签时,可以按照最短路径进行转发,也可以进行负载分担,其路径并不是严格固定,所以这种也称作松散路径方式的SR-MPLS TE。
SR-MPLS TE隧道可靠性
SR-MPLS TE隧道可靠性技术除了TI-LFA FRR外,还有HotStandby技术。
SR-MPLS TE Hot-Standby
热备份(Hot-Standby)是指创建主LSP后随即创建备份LSP,备份LSP始终处于热备状态。热备份LSP提供整条LSP的保护,是一种端到端的流量保护措施。
如图2-36所示,首节点A上配置Hot-Standby,这样节点A在创建完Primary LSP后,立即创建Hot-Standby LSP,也即一条SR-MPLS TE隧道里包含两条LSP。当首节点感知到Primary LSP故障,会将流量切换到Hot-Standby LSP;如果Primary LSP故障恢复,流量回切到Primary LSP,整个过程中,SR-MPLS TE隧道始终是Up状态。
BFD for SR-MPLS TE
- BFD for SR-MPLS TE LSP:通过配置BFD for SR-MPLS TE LSP,如果主路径故障可以快速切换到备份路径。BFDFor SR-MPLS TE LSP支持静态和动态的:
- 静态BFD会话:本端标识符和对端标识符都需要手工指定,两端标识符必须匹配,否则会话无法建立。会话建立后,发送和接收时间间隔参数可以修改。
- 动态BFD会话:不需要指定本端标识符和对端标识符。SR-MPLS TE隧道Up后,会触发BFD建立会话,会话通过协商来确定本端标识符、对端标识符、发送和接收时间间隔参数。
BFD会话与LSP绑定,即在入节点和出节点之间建立BFD会话。BFD报文从源端开始经过LSP转发到达宿端;宿端再对该BFD报文进行回应,通过此方式在源端可以快速检测出LSP所经过链路的状态。
当检测出链路故障以后,BFD将此信息上报给转发层面。转发平面查找备份LSP,然后将业务流量切换到备份LSP上。
- BFD for SR-MPLS TE Tunnel:SR-MPLS TE隧道状态要结合BFD for SR-MPLS TE Tunnel与BFDfor SR-MPLS TE LSP检测。
- BFD for SR-MPLS TE LSP用来控制主备LSP的切换状态,BFD for SR-MPLS TE Tunnel用来保证Tunnel的真实状态。
如果不配置BFD for SR-MPLS TE Tunnel,Tunnel默认状态只为UP,Tunnel的真实状态不确定。
如果配置了BFD for SR-MPLS TE Tunnel,但是BFD的状态被置为管理Down,则BFD实际未工作,隧道接口状态是unknown。
如果配置了BFD for SR-MPLS TE Tunnel,且BFD没有被置为管理Down,则隧道接口状态与BFD状态一致。
SR-MPLS TE隧道的接口状态依赖于BFD for SR-MPLS TE Tunnel的检测,即SR-MPLS TE Tunnel的接口状态与BFD状态一致,而BFDUp的时间由于BFD协议协商的要求会比较慢。一般情况下,当Tunnel状态为Down时下发新标签栈,到BFD Up需要十几秒的时间,这样会导致Tunnel在没有其他保护的情况下,硬收敛的时间较慢。
BFD for SR-MPLS TE(单臂模式):由于BFD for SR-MPLS TE无法实现与其他厂商设备进行互通,当其他厂商设备作为出节点时,无法创建BFD会话。单臂模式的BFDfor SR-MPLS TE可以解决上述问题。
在入节点配置使能BFD检测的同时指定单臂检测模式,建立BFD会话。会话建立后,在入节点发出BFD报文,通过SR-MPLS TE遂道经中间节点到达出节点后,转发平面接收到BFD报文后,将MPLS标签剥离后,通过头节点的目的IP地址进行查找路由,出节点在转发平面直接将报文进行环回发回给入节点,入节点进行检测报文处理,实现单臂环回的检测机制。
下面以VPN迭代到SR-MPLS TE LSP为例,描述BFD for SR-MPLS TE LSP的应用场景,具体如图2-37所示。
A、CE1、CE2、E部署在同一个的VPN中,CE2发布一条到E的路由。PE2为E分配VPN标签。PE1安装到E的路由,VPN标签。PE1到PE2的SR-MPLS TETunnel的路径为PE1->P4->P3->PE2,标签栈为{9004,9003,9005}。当A发送目的地为E的报文时,报文在PE1时根据9004找到出接口,发出时被打上三层标签,9003、9005和最内层的VPN标签为PE2分配的。应用了BFD检测后,当主路径某条链路或者某台P设备发生故障时,PE1和PE2会快速检测到故障发生,并使数据流量切换到PE1->P1->P2->PE2。
SR-MPLS TE负载分担
SR-MPLS TE负载分担
SR-MPLS TE使用头节点在数据包中封装的标签栈信息指导转发,默认情况下,每个邻接标签标识一个确定的邻接,即使网络中存在等价链路,也无法进行负载分担。为了解决上述问题,SR-MPLS TE引入了并行邻接标签,来标识网络中的多个等价链路。
如图2-38所示,节点B和C,与节点B和D之间共存在三条等价链路,可以为三条链路配置相同的邻接SID(比如图2-38中的1001),称为并行邻接标签。并行邻接标签像普通邻接标签一样参与路径计算。
当数据包经过节点B,且数据包使用并行邻接标签时,节点B解析并行邻接标签,然后将数据通过HASH算法在三条等价链路上进行负载分担,从而有效利用网络资源,避免网络拥塞。
并行邻接标签的生成,不影响IGP邻居间原有邻接标签的正常分配,即配置并行邻接标签后,设备会为同一邻接发布多个邻接标签。
对BFD For SR-MPLS TE,如果SR-MPLS TE路径使用了并行邻居标签,转发时同样会形成负载分担,但是每个BFD报文只会HASH到某一条链路上,如果这条链路故障,BFD可能检测到链路Down,存在误报故障风险。