SR-MPLS TE Policy
SR-MPLS TE Policy是在SR技术基础上发展的一种新的隧道引流技术。SR-MPLS TE Policy路径表示为指定路径的段列表(Segment List),称为SID列表(Segment ID List)。每个SID列表是从源到目的地的端到端路径,并指示网络中的设备遵循指定的路径,而不是遵循IGP计算的最短路径。如果数据包被导入SR-MPLS TE Policy中,SID列表由头端添加到数据包上,网络的其余设备执行SID列表中嵌入的指令。
头端:SR-MPLS TE Policy生成的节点。
Color:SR-MPLS TE Policy携带的扩展团体属性,携带相同Color属性的BGP路由可以使用该SR-MPLS TE Policy。
尾端(End Point):SR-MPLS TE Policy的目的地址。
Color和End Point信息通过配置添加到SR-MPLS TE Policy。SR-MPLS TE Policy在算路时按照代表业务SLA要求的Color属性计算转发路径,业务网络头端通过路由携带的Color属性和下一跳信息来匹配对应的SR-MPLS TE Policy实现业务流量转发。Color属性定义了应用级的网络SLA策略,可基于特定业务SLA规划网络路径,实现业务价值细分,构建新的商业模式。
SR-MPLS TE Policy模型
SR-MPLS TE Policy模型如图2-81所示。一个SR-MPLS TE Policy可以包含多个候选路径(Candidate Path)。候选路径携带优先级属性(Preference)。优先级最高的有效候选路径做为SR-MPLS TE Policy的主路径,优先级次高的有效路径做为SR-MPLS TE Policy的热备份路径。
一个候选路径可以包含多个Segment List,每个Segment List携带Weight属性(当前不支持设置,默认为1)。每个Segment List都是一个显式标签栈,Segment List可以指示网络设备转发报文。多个Segment List之间可以形成负载分担。
BGP SR-MPLS TE Policy扩展
- 控制器上动态生成的SR-MPLS TE Policy需要通过BGP扩展传递给转发器。该功能通过新定义的SAFI,即BGP SR-MPLS TE Policy地址族来实现。在控制器和转发器之间建立BGP SR-MPLS TE Policy地址族邻居,可以让控制器下发SR-MPLS TE Policy给转发器,提高了网络自动化部署SR-MPLS TE Policy的能力。
- 支持新增的扩展团体属性(Color属性),并且可以在BGP邻居之间传递。该功能通过BGP NLRI(Network Layer Reachability Information)扩展来实现。
+------------------+ | NLRI Length | 1 octet +------------------+ | Distinguisher | 4 octets +------------------+ | Policy Color | 4 octets +------------------+ | Endpoint | 4 or 16 octets +------------------+其中,各个字段解释如下:
- NLRI Length:NLRI的长度。
- Distinguisher:NLRI的标识。
- Policy Color:SR-MPLS TE Policy的Color。
- Endpoint:SR-MPLS TE Policy的尾端。
包含SR-MPLS TE Policy的NLRI在BGP Update消息中携带,Update消息也必须携带BGP必选属性,另外,也可以携带任何BGP可选属性。
SR-MPLS TE Policy SAFI NLRI: <Distinguisher, Policy Color, Endpoint> Attributes: Tunnel Encaps Attribute (23) Tunnel Type: SR-MPLS TE Policy Binding SID Preference Priority Policy Name ... Segment List Weight Segment Segment ... ...其中,各个字段解释如下:
- Binding SID:SR-MPLS TE Policy的BSID。
- Preference:SR-MPLS TE Policy的选择优先级,用于优选SR-MPLS TE Policy。
- Priority:SR-MPLS TE Policy的收敛优先级,用于区分拓扑变化时SR-MPLS TE Policy重新计算的先后顺序。
- Policy Name:SR-MPLS TE Policy名称。
- Segment List:Segment列表,Segment列表下包含权重(Weight)信息以及Segment信息。一个SR-MPLS TE Policy可以包含多个Segment List,一个Segment List里可以包含多个Segment。
Tunnel-Type TLV包含有多个Sub-TLV。
Preference sub-TLV
字段名 |
长度 |
含义 |
---|---|---|
Type |
8比特 |
TLV类型。 |
Length |
8比特 |
报文长度。 |
Flags |
8比特 |
标志位。当前未使用。 |
Preference |
32比特 |
SR-MPLS TE Policy的优先级。 |
Binding SID Sub-TLV
字段名 |
长度 |
含义 |
---|---|---|
Type |
8比特 |
TLV类型。 |
Length |
8比特 |
报文长度。不包含Type和Length字段。取值如下:
|
Flags |
8比特 |
标志位。格式如下:
图2-84 Flags字段格式
|
Binding SID |
32比特 |
SR-MPLS TE Policy的Binding SID。格式如下:
图2-85 Binding SID格式
其中Label代表标签,占20比特。其他字段合计12比特,暂未使用。 |
Segment List Sub-TLV
字段名 |
长度 |
含义 |
---|---|---|
Type |
8比特 |
TLV类型。 |
Length |
16比特 |
报文长度。 |
sub-TLVs |
可变长度 |
包含一个可选的Weight sub-TLV和若干Segment sub-TLV。 Weight sub-TLV格式如下:
图2-87 Weight sub-TLV格式
其中:
Segment sub-TLV格式如下:
图2-88 MPLS标签方式Segment sub-TLV格式
其中:
|
Policy Priority Sub-TLV
字段名 |
长度 |
含义 |
---|---|---|
Type |
8比特 |
TLV类型。 |
Length |
8比特 |
报文长度。不包含Type和Length字段。 |
Priority |
8比特 |
SR-MPLS TE Policy的优先权。 |
Extended Color Community
字段名 |
长度 |
含义 |
---|---|---|
CO |
8比特 |
Color-Only标记,表示Extended Color Community用于将流量导入SR-MPLS TE Policy。当前取值为00,表示BGP路由迭代SR-MPLS TE Policy时严格匹配EndPoint + Color。 |
Color Value |
32比特 |
Color扩展团体属性值。 |
- SR-MPLS TE Policy NLRI必须包含Distinguisher、Policy Color和Endpoint。
- SR-MPLS TE Policy NLRI的Update消息必须包含NO_ADVERTISE团体属性,或者包含IPv4地址形式的route-target扩展团体属性。
- SR-MPLS TE Policy NLRI的Update消息必须包含隧道封装属性(Tunnel Encapsulation Attribute),而且必须有一个隧道封装属性(Tunnel Encapsulation Attribute)。
SR-MPLS TE Policy的MTU
如果一个SR-MPLS TE Policy的实际转发路径中有不同的物理链路类型,可能不同的链路支持的MTU各不相同,就需要在头节点做好MTU控制,防止报文在传输过程中被切片或丢弃。目前IGP/BGP并没有实现对MTU的传递或协商的机制,用户可以为SR-MPLS TE Policy单独配置MTU。
SR-MPLS TE Policy的MBB与慢删机制
SR-MPLS TE Policy支持MBB(make before break)。在SR-MPLS TE Policy的Segment List更新过程中,转发器在拆除老的Segment List之前先把新的Segment List建立起来,这期间流量先保持按照老的Segment List转发,防止路径切换导致流量丢失。
SR-MPLS TE Policy支持慢删机制。配置Segment List延迟删除时间后,如果SR-MPLS TE Policy下有更优的Segment List,系统可能会进行Path切换,此时SR-MPLS TE Policy下原有处于Up状态的Segment List仍旧可以使用,系统将等待延迟时间超时以后才进行删除,防止Path切换震荡导致流量不通。
慢删机制仅对SR-MPLS TE Policy下处于Up状态的Segment List(包含备份Segment List)生效。如果SBFD检测到Segment List故障,或者没有获取到Segment List真实状态,则系统认为Segment List不可用,此时会立即删除Segment List,而不进行任何延时。
SR-MPLS TE Policy创建
- SR-MPLS TE Policy的来源(Protocol-Origin):通过BGP接收的SR-MPLS TE Policy默认取值是20,静态配置的SR-MPLS TE Policy默认取值是30。取值越大,优先级越高。
- SR-MPLS TE Policy的<ASN, node-address>:其中ASN是AS编号。ASN和node-address都是取值越小,优先级越高。对于静态配置的SR-MPLS TE Policy,目前ASN固定取值是0;node-address固定取值是0.0.0.0。
- Discriminator:取值越大,优先级越高。对于静态配置的SR-MPLS TE Policy,Discriminator固定取preference的值。
静态配置SR-MPLS TE Policy
控制器下发SR-MPLS TE Policy
- 控制器通过BGP-LS收集网络拓扑和标签信息。
- 控制器与头端转发器之间建立IPv4 SR-MPLS TE Policy地址族的BGP邻居。
- 控制器计算SR-MPLS TE Policy,然后通过BGP邻居下发给头端。头端生成SR-MPLS TE Policy表项。
SR-MPLS TE Policy流量导入
路由着色
路由着色是指通过路由策略对路由增加扩展团体属性Color,携带Color的路由可以根据Color与下一跳地址迭代SR-MPLS TE Policy。
配置路由策略,匹配特定路由,设置特定的Color属性。
将路由策略应用到BGP邻居,或者应用到整个VPN实例,可以做为入口策略,也可以做为出口策略。
Color引流
- 通过控制器向头端设备A下发SR-MPLS TE Policy,SR-MPLS TE Policy的Color是123,EndPoint是设备B的地址10.1.1.3。
- 在设备B上配置BGP出口策略或者VPN出口策略(也可以在设备A上配置BGP入口策略或者VPN入口策略),为路由前缀10.1.1.0/24设置扩展团体属性Color 123,路由下一跳是设备B的地址10.1.1.3。然后路由通过BGP邻居发送给设备A。
- 在头端设备A上配置隧道策略,然后当设备A接收到BGP路由10.1.1.0/24后,根据路由的扩展团体属性123和下一跳10.1.1.3迭代到SR-MPLS TE Policy。转发时,为到10.1.1.0/24的报文添加一个具体的标签栈<C,E,G,B>。
DSCP引流
DSCP引流时,不支持按照Color进行路由迭代,而是根据路由的目的地址迭代隧道策略,利用Endpoint匹配到SR-MPLS TE Policy Group,然后再根据报文携带的DSCP查找到对应的SR-MPLS TE Policy转发。DSCP引流过程如图2-94所示。
- 通过控制器向头端设备A下发SR-MPLS TE Policy,SR-MPLS TE Policy 1的Color是123,EndPoint是设备B的地址10.1.1.3;SR-MPLS TE Policy 2的Color是124,EndPoint也是设备B的地址10.1.1.3。
- 设备B通过BGP邻居关系将BGP路由10.1.1.0/24发送给头端设备A。
- 在头端设备A上进行隧道策略配置。具体实现是:新配置一个SR-MPLS TE Policy Group,其Endpoint是设备B的地址10.1.1.3,另外,Color 123映射为DSCP 10,Color 124映射为DSCP 20。之后在头端设备A上配置隧道策略,将SR-MPLS TE Policy Group与路由下一跳目的地址绑定。
- 头端设备A上根据报文的目的地址迭代到隧道策略,进而关联到SR-MPLS TE Policy Group,然后根据报文的DSCP匹配到具体的Color,再根据Color匹配到SR-MPLS TE Policy Group里具体的某一个SR-MPLS TE Policy,从而实现报文的DSCP引流。
SR-MPLS TE Policy数据转发
域内数据转发
- 控制器下发SR-MPLS TE Policy给头端A设备。
- 尾端B设备发布BGP路由10.1.1.0/24给头端A设备,BGP路由的下一跳是B设备的地址10.1.1.3/32。
- 在头端A设备上配置隧道策略。A设备在接收到BGP路由以后,利用路由的Color和下一跳迭代到SR-MPLS TE Policy,SR-MPLS TE Policy的标签栈是<20003,20005,20007,20002>。
跨域数据转发
跨域数据依赖于跨域SR-MPLS TE Policy转发表项的建立,跨域SR-MPLS TE Policy建立过程如图2-97所示。
- 控制器向AS 200头端设备ASBR3下发域内的SR-MPLS TE Policy,SR-MPLS TE Policy的Color是123,EndPoint是PE1的地址10.1.1.3,Binding SID是30028。
- 控制器向AS 100头端设备CSG1下发跨域的E2E SR-MPLS TE Policy,SR-MPLS TE Policy的Color是123,EndPoint是PE1的地址10.1.1.3。其中Segment List将AS 100域内标签,域间BGP Peer-Adj标签和AS 200的Binding SID标签组合起来,也即<102,203,3040,30028>。
- 在PE1上配置BGP出口策略或者VPN出口策略,为路由前缀10.1.1.0/24设置Color属性123,路由下一跳是PE1的地址10.1.1.3。然后路由通过BGP邻居发布给CSG1。
- 在头端设备CSG1上配置隧道策略。CSG1接收到BGP路由10.1.1.0/24后,利用路由的Color和下一跳迭代到E2E SR-MPLS TE Policy,SR-MPLS TE Policy的标签栈是<102,203,3040,30028>。
跨域数据转发过程如图2-98所示。
跨域SR-MPLS TE Policy数据转发过程概述如下:
入节点CSG1为数据报文添加标签栈{102,203,3040,30028}。然后根据102标签查找转发出接口,对应为CSG1->AGG1邻接,之后将标签102弹出。报文携带标签栈{203,3040,30028},通过CSG1->AGG1邻接向下游节点AGG1转发。
AGG1收到报文后,根据栈顶的标签203匹配邻接,找到对应的转发出接口为AGG1->ASBR1邻接,之后将标签203弹出。报文携带标签栈{3040,30028},通过AGG1->ASBR1邻接向下游节点ASBR1转发。
ASBR1收到报文后,根据栈顶的标签3040匹配邻接,找到对应的转发出接口为ASBR1->ASBR3邻接,之后将标签3040弹出。报文携带标签栈{30028},通过ASBR1->ASBR3邻接向下游节点ASBR3转发。
ASBR3收到报文后,根据栈顶的标签30028查表,30028是Binding SID标签,对应标签栈{405,506}。然后根据405标签查找转发出接口,对应为ASBR3->P1邻接,之后将标签405弹出。报文携带标签栈{506},通过ASBR3->P1邻接向下游节点P1转发。
P1收到报文后,根据栈顶的标签506匹配邻接,找到对应的转发出接口为P1->PE1邻接,之后将标签506弹出。报文此时不携带标签,通过P1->PE1邻接向目的节点PE1转发。PE1收到报文后根据报文的目的地址做进一步处理。
SBFD for SR-MPLS TE Policy
与RSVP-TE可以通过转发器相互发送Hello消息维持隧道状态不同,SR-MPLS TE Policy不会通过转发器之间互相发送消息来维持自身状态。只要头节点标签栈下发,SR-MPLS TE Policy就会建立成功,且除了撤销标签栈之外,SR-MPLS TE Policy不会出现Down的情况。所以SR-MPLS TE Policy故障检测需要依靠部署SBFD检测,通过SBFD故障检测切换备份路径。SBFD for SR-MPLS TE Policy是一种端到端的快速检测机制,用于快速检测SR-MPLS TE Policy所经过的链路中所发生的故障。
- 头节点使能SBFD for SR-MPLS TE Policy后,头节点默认将EndPoint地址(只支持IPv4地址)作为对应Segment List的SBFD的远端描述符。SR-MPLS TE Policy下存在多个Segment List时,则多个SBFD会话的远端描述符相同。
- 头节点对外发送SBFD报文,SBFD报文封装SR-MPLS TE Policy对应的标签栈。
- 尾节点收到SBFD报文后,通过IP链路按照最短路径发送回应报文。
- 头节点如果收到SBFD回应报文,则认为SR-MPLS TE Policy的Segment List正常,否则会认为Segment List故障。如果一个候选路径下所有Segment List都发生故障,则SBFD触发候选路径切换。
由于SBFD返程走IP转发,所以当两点间有多个SR-MPLS TE Policy主路径因为约束条件各不相同的时候,SBFD检测报文返程走的路径却是共路的,返程的路径故障容易引起所有经过的SBFD报Down,进而导致两点间的所有SR-MPLS TE Policy Down。同一个SR-MPLS TE Policy下多个Segment List的SBFD会话存在同样问题。
默认情况下,如果SR-MPLS TE Policy没有使能HSB保护,SBFD仅检测SR-MPLS TE Policy里优先级最高的Candidate Path里的所有Segment List。使能HSB保护以后,SBFD可以同时检测SR-MPLS TE Policy里优先级最高和次高的两条Candidate Path里的所有Segment List,如果优先级最高的Candidate Path里所有Segment List都产生故障,将触发HSB切换。
SR-MPLS TE Policy故障切换
通过SBFD For SR-MPLS TE Policy可以检测Segment List的可靠性,如果Segment List发生故障,将触发SR-MPLS TE Policy的故障切换。
- 当故障点1、3、5故障时:PE1、P1、P2上TI-LFA局部保护生效。PE1上对应Segment List1的SBFD如果在局部保护恢复流量之前就检测到故障,则SBFD联动将Segment List1置Down,并且通知SR-MPLS TE Policy1切换到备份Path Segment List2。
- 当故障点2、4故障时:无局部保护,依赖SBFD感知节点故障,并将Segment List1置Down,SR-MPLS TE Policy1切换到备份Path Segment List2。
- 当PE2节点故障时:SR-MPLS TE Policy1的所有候选Path都不可用,则SBFD可以感知,并且将SR-MPLS TE Policy1置Down,同时触发VPN FRR切换到SR-MPLS TE Policy2。
SR-MPLS TE Policy OAM
SR-MPLS TE Policy OAM(Operations, Administration, and Maintenance)主要用于监控SR-MPLS TE Policy的连通性和快速进行故障检测。SR-MPLS TE Policy OAM当前主要通过Ping/Tracert来实现。
- Policy层次的检测:一个SR-MPLS TE Policy下面可以配置多条候选路径(Candidate Path),优先级最高的有效路径是主Path,优先级次高的有效路径是备份Path。在同一个Candidate Path中多条Segment List进行负载分担。多个SR-MPLS TE Policy也可能配置相同的Candidate Path。SR-MPLS TE Policy层次的检测,实际是检测SR-MPLS TE Policy的主Path和备Path。
- Candidate Path层次的检测:属于基础的检测,不涉及上层Policy的策略业务,仅仅检测某条Candidate Path路径是否正常。
基于Policy层次的检测,只要找到优选的主备Path,检测方案就等同于Candidate Path层次的检测。主备Path里面如果有多条Segment List,Ping和Tracert会对所有Segment List采用相同的流程进行遍历检测,而且都会生成检测结果。
SR-MPLS TE Policy Ping
如图2-102所示,公网PE和P设备都具有SR(Segment Routing)能力,PE1到PE2方向建立的是SR-MPLS TE Policy隧道,SR-MPLS TE Policy隧道仅有一个主Path,其Segment List是PE1->P1->P2->PE2。
从PE1节点上发起对该SR-MPLS TE Policy隧道Ping检测的工作过程如下:
PE1构造MPLS Echo Request报文,该报文的IP首部目的地址为127.0.0.0/8,源IP地址是MPLS LSR ID,MPLS标签按照SR-MPLS TE Policy显式路径配置的SID标签栈进行封装。
需要注意的是,在Adjacency SID场景下,头节点PE1感知的FEC仅是P1的,Ping报文到达尾节点PE2后,PE2校验FEC会失败。所以在这种场景下,为了保证能尾节点FEC校验能够通过,检测报文需要封装nil_FEC。
PE1将报文按照SR-MPLS TE Policy显式路径标签栈逐跳转发给PE2。
P2将收到报文的最外层标签弹出,然后将报文转发给PE2,此时标签都已弹出,报文将上送主机收发进行处理。
PE2将报文将上送主机收发进行处理,然后构造MPLS Echo Reply报文返回给PE1,其中报文目的地址是PE1的MPLS LSR ID。由于返程报文没有绑定SR-MPLS TE Policy,所以走IP转发。
PE1收到回程IP报文后,生成Ping检测结果。
如果存在主备Path,且主备Path下有多条Segment List,Ping会对所有Segment List进行遍历检测。
SR-MPLS TE Policy Tracert
在图2-102中,从PE1节点上发起对该SR-MPLS TE Policy隧道Tracert检测的工作过程如下:
PE1构造MPLS Echo Request报文,该报文的IP首部目的地址为127.0.0.0/8,源IP地址是MPLS LSR ID,MPLS标签按照SR-MPLS TE Policy显式路径配置的SID标签栈进行封装。
PE1将报文转发给P1,P1判断最外层标签TTL-1是否为0:
TTL-1等于0:MPLS TTL超时上送主机收发进行处理。
TTL-1大于0:将最外层MPLS标签弹出,缓存下最外层MPLS标签(TTL-1);把缓存下的最外层MPLS标签(TTL-1)复制到当前的最外层MPLS标签中,查转发表出接口,将报文转发给P2。
P2的处理同P1,P2判断最外层标签TTL-1是否为0:
TTL-1等于0:MPLS TTL超时上送主机收发进行处理。
TTL-1大于0:将最外层MPLS标签弹出,缓存下最外层MPLS标签(TTL-1);把缓存下的最外层MPLS标签(TTL-1)复制到当前的最外层MPLS标签中,查转发表出接口,将报文转发给PE2。
报文转发给PE2,PE2将最外层MPLS标签弹出,报文将上送主机收发进行处理,PE2将MPLS Echo Reply报文返回给PE1,其中报文目的地址是PE1的MPLS LSR ID。由于返程报文没有绑定SR-MPLS TE Policy,所以走IP转发。
PE1收到回程IP报文后,生成Tracert检测结果。
如果存在主备Path,且主备Path下有多条Segment List,Tracert会对所有Segment List进行遍历检测。