目录
SR-MPLS基础概念
使用Segment Routeing MPLS技术的优点
Segment Routeing MPLS的基本原理
SRGB
Segment ID
Bind SID 粘连标签
OSPF对于SR-MPLS的扩展
OSPF对邻接SID做了细分
10类LSA定义的TLV类型
10类LSA定义的TLV的报文格式
ISIS对SR-MPLS的扩展
ISIS对邻接SID做了细分
ISIS定义的Sub-TLV的类型
ISIS定义的Sub-TLV的报文格式
数据转发隧道建立方式
SR-MPLS BE
SR-MPLS TE
SR-MPLS TE Policy
数据转发路径的类型
基于Perfix Segment的转发路径
基于Adjacency Segment的转发路径
基于Adjacency + Node Segment的转发路径
SR-MPLS与LDP共存
SR与LDP互通场景
SR与LDP共存场景
SR-MPLS基础概念
SR-MPLS的标签不是基于LDP下发的,是基于OSPF/ISIS/BGP下发的
使用Segment Routeing MPLS技术的优点
简化了MPLS网络的控制平面
SR可以使用控制器或者IGP进行集中算路和分发标签,不再需要RSVP-TE、LDP等隧道协议(SR可以直接应用于MPLS架构,转发平面没有变化)
通过SR可以实现TI-LFA(Topology-Independent) FRR保护(即拓扑无关的备份路径)
在SR的基础上结合RLFA FRR算法,形成高效的TL-LFA FRR算法
可以支持任意拓扑的节点和链路保护,能够弥补传统隧道保护技术的不足
SR技术更具有网络扩展的能力
SR技术仅在头节点对报文进行标签操作既可以控制业务路径,中间节点不需要维护路径信息(SR技术的标签数量为 全网节点数+本地邻接数,只与网络规模有关,与隧道数量和业务规模无关)
SR技术同时支持传统网络和SDN网络
SR同时支持控制器的集中控制模式和转发器的分布控制模式
Segment Routeing MPLS的基本原理
SR域(SR Domain)
SR节点(运行了SR技术)的集合
SID(Segment ID)
用于标识唯一的段;在转发平面可以映射为MPLS标签
SRGB(SR Global Block)
用户指定的为SR MPLS预留的全局标签集合(即全局标签的范围)
全局可见,全局有效(LDP的标签是本地有效的,也只有本地才可以看到)
SRLB(SR Local Block)
用户指定的为SR MPLS预留的本地标签集合(即本地标签的范围)
全局可见,但是只在本地有效,主要用于配置Binding SID
SRGB
每台设备通过扩展的IGP路由协议通告自己的SRGB和前缀SID的索引(index)
然后设备自己分别根据SRGB和index计算出入站以及出站SID
在实际部署中,建议设备采用统一的SRGB
设备如何生成出、入站标签——索引需要保证全局唯一
入站标签是通过自己的SRGB+收到的索引生成的
出站是通过收到的别人的SRGB+收到额索引生成的
in和out是根据路由来看的(与路由相反)
实例
当设备配置的SRGB是16000 ~17000
配置的前缀SID为16003
会将前缀SID的索引3传递给路由(这个前缀是全局一样的,出入标签不一定全局一样)
所以入标签不一定是全部一样的,但是建议全部一样,即配置相同的SRGB
Segment ID
SID主要分为Prefix SID、Node SID、Adjacency SID三种ID方式
Prefix SID(前缀SID)——手工配置
Prefix SID用于标识网络中某个目的地址前缀(每个网段一个Prefix SID)
Prefix SID通过IGP协议扩散到其它网元,全局可见,全局有效
Node SID(节点SID)——手工配置
Node SID是一种特殊的Prefix SID,用于标识SR节点(即SR节点都有唯一的Node SID)
在节点的Loopback接口下配置IP地址作为前缀
这个LoopBack地址的前缀SID就是Node SID
Adjacency SID(邻接SID)——可以手工配置,可以动态生成
Adj SID也可以手工配置(通过手工配置SRLB生成)
Adj SID用于标识网络种的某个邻接(可以理解为接口SID,每个接口都有一个Adj SID)
Adj SID通过IGP协议扩散到其它网元,全局可见,本地有效(只在本地生成标签转发表)
注意事项
在实际配置过程中,默认情况下,我们一般将Prefix SID都理解为Node SID(因为只有节点SID才可以唯一标识一台设备,Prefix SID不行)
通过按序组合Prefix SID和邻接SID,可以构建出网络内的任何路径
Prefix SID全网唯一,邻接SID只需要本地唯一就可以
Bind SID 粘连标签
Bind SID的作用
Bind SID通过指定一个本地标签,使用此本地标签关联本地的一个SR-MPLS TE隧道或者一个SR-MPLS TE Policy(即Bind SID 6000可以代表标签栈<16001,16003>)
也可以减少设备封装的标签栈层数,可以将多个SR-MPLS TE隧道或者SR-MPLS TE Policy连接
注意事项
Bind SID一般压在标签栈的最底层
当设备收到与Bindingd SID后,查找本地此标签对应的隧道,然后将数据迭代到这条隧道,可以将两个隧道粘连起来
OSPF对于SR-MPLS的扩展
OSPF为了支持SR-MPLS(通过OSPF下发拓扑信息、前缀信息、SRGB和标签信息的通告)
新增了10类LSA(在10类LSA中又新增了TLV和Sub-TLV)
注意事项:
To-Way的邻居状态也可以分配标签
运行OSPF的接口不需要再开启MPLS,只需要全局开启MPLS就可以
OSPF对邻接SID做了细分
在OSPF中,将Adj SID细分为LAN Adj SID和Adj SID
什么情况下产生
当设备为DR时,产生的Adj SID类型就为LAN Adj SID
当设备为非DR或P2P网络类型时,产生的Adj SID类型就为Adj SID
两者的报文有什么区别(具体在TLV的报文格式有介绍)
Adj SID直接通过Link ID表明DR的router id地址,知道自己的直连设备
LAN Adj SID的Link ID是自己,无法知道自身和哪些设备相连,需要会多携带 Neighbor ID,表明此接口的邻居是谁
10类LSA定义的TLV类型
10类LSA (Opaque LSA,即不透明的LSA)通过定义TLV和Sub-TLV来完成对SR-MPLS技术的支持
SR Local Block TLV 用于通告自己SRLB范围
10类LSA的Type 8下定义了2个TLV和1个Sub TLV支持SR-MPLS
SR-Algorithm TLV(TLV 8) 用于对外通告自己使用的算法
SID/Label Range TLV(TLV 9) 用于通告自己的SRGB范围
SID/Label Sub-TLV(TLV9的Sub TLV1) 与TLV9一起确定SRGB的范围
10类LSA的Type 7下定义了1个TLV和1个Sub-TLV支持SR-MPLS
OSPFv2 Extended Prefix TLV(TLV 1) 用于通告自身的前缀信息
Prefix SID Sub-TLV(TLV1的Sub Tlv 2) 用于通告节点SID信息
10类LSA的Type 7下定义了1个TLV和2个Sub-TLV支持SR-MPLS
OSPFv2 Extended Link TLV(TLV1) 用于通告自身的链路状态信息
Adj-SID Sub-TLV(TLV1的Sub TLV2) 用于通告自身的Adj信息(非DR)
LAN Adj-SID Sub-TLV(TLV1的Sub-TLV3)用于通告自身的LAN Adj SID信息(DR)
10类LSA定义的TLV的报文格式
10类LSA的头部信息
LS Type:标识LSA的类型(10类LSA可以细分为3大类型)
Opq-Link (分别代表链路上泛洪)
Opq-Area (OSPF区域内泛洪)
Opq-AS (AS域内泛洪)
Link State ID:由Type和ID两部分组成(共8字节)
常见的1类等LSA此字段为4字节,只有Link State ID部分(无Type)
Advertising Router:产生此LSA的设备的Router-id
10类LSA的Type 4下的TLV
SR-Algorithm TLV
SR-Algorithm:算法类型
SID/Label Range TLV
Range Size:标识SRGB的范围,与SID.Label共同决定一个SRGB的空间范围
SID/Label Sub-TLV
TLV Length:3标识此字段最右边的20位用于标记MPLS标签值
4标识此字段代表32位的SID
10类LSA的Type 7下的TLV
OSPFv2 Extended Prefix RLV
Atttach: 只有在多区域的时候才会用得到(单区域为0)
Node Flag : 1表示是Node SID,0表示不是Node节点
(手动配置Prefix节点时,默认都是Node节点)
Prefix SID Sub-TLV
NP:No-PHP,倒数第二条弹出标志(默认0)
1表示不用倒数第二条弹出,0表示要倒数第二跳弹出
E:Explicit-Null,显式空标签标志(默认0)
1表示启用显式空标签特性,0表示启用隐藏空标签特性
V:Value/Label标志(默认0)
1表示Prefix-SID携带完整标签值而不是索引值,0表示携带索引值
L:Local标志(默认0)
1表示Prrfix SID携带的标签值/索引值只具有本地意义,0表示全局意义
SID/Lavel:
此处表示索引值为1,即针对前缀1.1.1.1分得的索引值为1
10类LSA的Type 8下的TLV
OSPFv2 Extended Link TLV
Link ID:DR的Router ID
Link Data:产生此TLV1的接口IP地址
Adj SID Sub-TLV
V:Value/Index字段(默认为1)
1表示Adj-SID携带完整标签值而不是索引值,0表示携带索引值
L:Local/Global字段(默认为1)
1表示Adj SID携带的标签值/索引值只具有本地意义,0表示全局意义
P:表示标签是否是永久的(即是动态生成的还是手工配置的)默认0
0表示动态生成的,1表示手工配置的(永久的)
LAN Adj SID Sub-TLV同Adj SID Sub-TLV字段(多了个Neighbor ID字段)
ISIS对SR-MPLS的扩展
ISIS通过在原有的TLV的基础上添加子的TLV(Sub-TLV)来支持SR-MPLS
使用ISIS为SR-MPLS分配标签时,带宽模式必须改为Wide模式(因为窄带不支持Sub-TLV)
ISIS对邻接SID做了细分
在ISIS中,将Adj SID细分为LAN Adj SID和Adj SID
什么情况下产生
当链路为广播链路时,产生的Adj SID类型就为LAN Adj SID
当链路为P2P链路时,产生的Adj SID类型就为Adj SID
ISIS定义的Sub-TLV的类型
ISIS常用TLV的含义可参考下文
ISIS——图解9种报文与TLV讲解_静下心来敲木鱼的博客-CSDN博客_isis几种报文https://blog.csdn.net/m0_49864110/article/details/126069383?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166988209516782390546976%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166988209516782390546976&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-5-126069383-null-null.nonecase&utm_term=LSP&spm=1018.2226.3001.4450
Prefix-SID Sub-TLV
通告Prefix SID;存在于TLV 135(Extended IPv4 Reachability)、TLV 235(Multitopology IPv4 Reachability)、TLV 236(IPv6 IP Reachability)、TLC 237(Multitopology IPv6 IP Reachability)
LAN Adj-SID Sub-TLV
在广播网络通告Adj SID;存在于TLV 22(Extended IS reachability)、TLV 23(IS Neighbor Attribute)、TLV 141(Inter-AS reachability information)、TLV 222(Multitopology IS)、TLV 223(Multitopology IS)
Adj-SID Sub-TLV
在P2P网络通告Adj SID;目前仅支持携带在TLV 22中
SR-Capabilities Sub-TLV
通告自己的SRGB范围;存在于TLV 242(Router Capability)
SR-Algorithm Sub-TLV
通告自己使用的算法;存在于TLV 242(Router Capability)
Local Block Sub-TLV
通告自己的SRLB算法;存在于TLV 242(Router Capability)
SID/Label Binding TLV
通告前缀和SID的映射信息;TLV 149(一般用于SR为LDP设备分配前置SID)
OSPF通告前缀和SID的映射信息通过Prefix SID Sub-TLV实现
ISIS定义的Sub-TLV的报文格式
Prefix-SID Sub-TLV
Flags字段
R:重发布标志位,有没有做泄露
1表示此前缀是从其它协议引入或者从其它Level级别泄露而来的
0表示就是本地产生的
N:Node-SID标志(默认为1)
1表示是Node SID,0表示不是Node节点
(手动配置Prefix节点时,默认都是Node节点)
P:No-PHP,倒数第二条弹出标志(默认为0)
1表示不用倒数第二条弹出,0表示要倒数第二跳弹出
E:Explicit-Null,显式空标签标志(默认0)
1表示启用显式空标签特性,0表示启用隐藏空标签特性
V:Value/Label标志(默认0)
1表示Prefix-SID携带完整标签值而不是索引值,0表示携带索引值
L:Local标志(默认0)
1表示Prrfix SID携带的标签值/索引值只具有本地意义,0表示全局意义
LAN-Adj-SID Sub-TLV
F:地址簇标志
1表示IPv6,未置位表示IPv4
V:Value/Index字段(默认为1)
1表示Adj-SID携带完整标签值而不是索引值,0表示携带索引值
L:Local/Global字段(默认为1)
1表示Adj SID携带的标签值/索引值只具有本地意义,0表示全局意义
S:序列标志
1表示Adj-SID是一个Adjacency序列
P:表示标签是否是永久的(即是动态生成的还是手工配置的)默认0
0表示动态生成的,1表示手工配置的(永久的)
Weight:代表Adj-SID的权重,可以用于负载分担
SR-Capabilities Sub-TLV
I:MPLS IPv4标志
1表示可以处理从所有接口接收到的SR-MPLS IPv4报文
V:MPLS IPv6标志
1表示可以处理从所有接口接收到的SR-MPLS IPv6报文
通过Range和Label字段共同确定SRGB的范围(范围为Label值~Label值+Range值)
SID/Label Binding TLV
数据转发隧道建立方式
SR-MPLS BE
不需要创建隧道口,只需要将路由迭代进SR建立的标签隧道就可以(同LDP的LSP)
SR-MPLS BE LSP的创建(两步)
1、进行标签分配/网络拓扑上报(基于控制器创建LSP)
2、进行路径计算
一般手工创建SR-MPLS BE隧道
在SR节点配置SRGB,然后再Loop口配置Prefix SID
之后通过IGP协议携带自己的SRGB+Index向全网扩散
通过接收到的SRGB+Index+自己的SRGB生成相应的出、入标签
SR-MPLS BE如何指导数据转发
通过SR技术建立标签转发路径, 然后基于Prefix SID转发(只使用一层Prefix SID实现转发),通过IGP使用最短路径算法计算得到的最优SR LSP
SR-MPLS BE LSP的数据转发(数据转发图在转发路径类型有讲解)
同MPLS,包括标签栈压入(Push)、标签栈交换(Swap)和标签弹出(Pop)
Push:当报文进入SR LSP时,入节点设备在二层首部和IP首部之间插入一个标签(或者根据需要在标签栈顶增加一个新的标签)
Swap:当报文在SR域内转发时,根据标签转发表,用下一跳分配的标签替换SR报文的栈顶标签
Pop:当报文在离开SR域时,根据栈顶的标签查找转发出接口之后,将SR报文的栈顶标签剥掉
具体SR-MPLS BE隧道数据转发的例子(以SRGB不同情况为例子)
A设备:A收到数据报文,添加26100并转转发
B设备:B节点收到26100标签,进行标签交换,将26100标签弹出,替换为标签36100
C设备:C节点收到36100标签,进行标签交换,将36100标签弹出,替换为标签16100
D设备:将标签16100弹出,然后继续查找路由转发
注意事项
SR-MPLS BE是一种替代“LDP+IGP方案“的一种新方案
只使用IGP协议就可以完成标签的分发与路径的计算
一般SR-MPLS BE也会作为逃生路径
SR-MPLS TE
SR-MPLS TE(段路由流量工程)是使用SR作为控制协议的一种新型的TE隧道技术(取代了传统的RSVP-TE技术)
SR-MPLS TE是通过Tunnel接口来建立和管理的,因此需要在隧道的入节点上配置SR-MPLS TE的隧道接口(将流量引导到隧道口)
SR-MPLS TE 隧道的创建
控制器算路创建SR-MPLS TE隧道
1、控制器收集网络拓扑信息(有两种方式)
IGP的方式(不推荐)
如果IGP有多个区域,控制器无法知道其它区域的拓扑(域间传递路由信息)
因此控制器还需要与其它区域再相连才可以获得到网络完整的拓扑信息(或者控制器只收集ABR的信息—ABR两边区域的拓扑都有)
BGP -LS的方式(控制器和转发器建立BGP-LS邻居)
2、转发器进行标签分配,并将分配的标签信息上报给控制器
转发器的IGP协议来分配标签,全网通告
转发器与控制器建立BGP-LS邻居信息,并通过BGP-LS将分配的标签上报给控制器
3、控制器计算路径并下发到转发器
控制器通过收集到的网络拓扑信息和标签信息计算出转发路径(标签栈)
然后将标签栈通过PCEP下发到转发器
4、转发器根据控制器下发的路径进行数据转发
转发器根据控制器下发的标签栈信息进行数据转发
手工配置显式路径实现SR-MPPS TE隧道的建立
转发器上通过IGP协议分配标签,然后手工配置显式路径(标签栈)来实现数据转发
SR-MPLS TE如何指导数据转发
SR-MPLS TE可以通过多个SID(多层标签)进行组合来指导数据的转发
- 使用多个Prefix SID实现转发(基于Prefix Segment的转发路径)
- 使用多个Adj SID实现转发(基于Adj Segment的转发路径)
- 使用多个Prefix SID + Adj SID实现转发(基于Prefix + Adj Segment的转发路径)
SR-MPLS TE的数据转发(数据转发图在转发路径类型有讲解)
可以基于Prefix SID转发、基于邻接SID转发、基于邻接SID+Prefix SID转发
SR-MPLS TE Policy
传统SR-MPLS TE的不足
- 沿用RSVP-TE的“隧道接口“概念,采用隧道接口实现SR,部分场景无法实现ECMP
- 隧道接口和流量导入独立实现,造成引流方式复杂,性能不高
- 隧道需要预先配置部署
SR Policy介绍
SR Policy是在SR技术基础上发展的一种新的隧道引流技术,抛弃了隧道接口的概念,是当前最主流的实现SR的方式
SR Policy是一段有序的段列表(Segment List),每个段列表是从源到目的地址的端到端路径,并指示网络中的设备遵循此指定路径
SR Policy的分类
SR Policy分为SR-MPLS TE Policy和SRv6 Policy,下文介绍的都是SP-MPLS TE Policy
SR-MPLS TE Policy创建
可以在转发器上静态配置(通过CLI或Netconf)
也可以由控制器动态生成然后传递给转发器(通过PCEP或BGP SR Policy传递)
当存在多个方式产生的相同SR-MPLS TE Policy时,转发器按照如下原则选择SR-MPLS TE Policy
比较Policy的来源:
值越大越优先(通过BGP接收到的默认值为20,静态配置的默认值为30)
比较Policy的<ASN,node-address>:
ASN为AS编号,ASN和Node-address都是值越小越优先(对于静态配置的Policy,ASN为0,Node-address为0.0.0.0)
比较Discriminator:
值越大越优先(对于静态配置的Policy,此值为Preference的值)
SR MPLS TE Policy所包含的三元组
头端:HeadEnd 生成SR-MPLS TE Policy的节点
颜色:Color SR-MPLS TE Policy携带的扩展团体属性(通过BGP NLRI扩展实现)
尾端:EndPoint SR-MPLS TE Policy的目的地址
SR-MPLS TE Policy模型
一个SR-MPLS TE Policy可以包含多个候选路径(Candidant path),候选路径携带优先级,高优先级的为主路径,次高优先级的作为热备份路径
一个候选路径可以包含多个Segment List,List携带权重,不同的List形成负载分担
不同候选路径之间做主备,不同List之间做负载
SR-MPLS TE Policy如何控路
将节点SID、邻接SID加入到Segment List中进行选路(具体的转发路径同SR-MPLS TE(基于邻接、邻接+Prefix、Prefix转发)
只是数据进入隧道的方式有所改变(将匹配Color和目的地址的流量引导进相关SR-MPLS TE Policy隧道中)
数据转发路径的类型
基于Perfix Segment的转发路径
基于Prefix Segment的转发路径是由IGP通过最短路径算法计算得出的
如果网络中存在等价路径,则可以实现负载分担(ECMP)
如果网络中不存在等价路径,则可以形成链路备份
所以基于前缀的并不是一条固定路径,头节点无法精准控制报文的整条转发路径
基于Adjacency Segment的转发路径
给网络中每个邻接(接口)分配一个Adjacency SID
然后在头节点定义一个包含多个Adj SID的Segment list
通过这种方式可以严格指定一条显式路径,可以更好的配置实现SDN
基于Adjacency + Node Segment的转发路径
将Adj SID和Node SID结合起来,通过Adjacency Segment,可以强制整条路径包含某一个邻接。而对于Node Segment,节点可以使用 SPF算法计算最短路径,也可以负载分担。
这种方式的路径并不是严格固定,所以也称作松散路径(Loose Explicit)。
SR-MPLS与LDP共存
SR与LDP互通场景
SR与LDP互通,让Segment Routing和LDP协议在同一网络中共同工作
可以在NE3设备帮助NE4、NE5设备下发Prefix SID,使得全网互通
此时要注意,在NE3设备下发Prefix SID时不要进行次末跳弹出,否则会出现路由黑洞
相关配置
NE1、NE2、NE3配置Segment Routing协议(建立MPLS BE隧道)
NE3、NE4、NE5配置MPLS LDP协议
NE3上配置路由前缀和Prefix SID的映射关系(即SR为LDP设备分配Prefix SID)
Segment Routing
Mapping-server prefix-sid 4.4.4.4 32 4
分配的是索引信息,Prefix SID=NE3设备上的SRGB + 此索引信息
NE3上使能本地通告SID标签映射信息的能力
IGP协议下
Segment-routing mapping-server send
NE3上配置触发建立LDP LSP的策略
Mpls
Lsp-trigger segment-routing-interworking best-effort host
NE3上配置向倒数第二跳正常分配标签
Mpls
Label advertise non-null
SR与LDP共存场景
LDP和SR同时存在的时候,默认先走LDP隧道(MPLS VPN的场景,可以使用SR代替LDP)
可以通过配置使流量优先走SR隧道
相关配置
NE1、NE2、NE3、NE4、NE5同时配置Segment Routing协议和MPLS LDP协议(前提配置好隧道迭代功能 route recursive-lookup tunnel)
在设备上配置使得流量优先迭代仅SR隧道
Segment-routing
Tunnel-prefer segment-routing