SR | 理论(一)
MPLS TE缺点
- RSVP-TE大部分都是为了FRR的目的
- 不支持ECMP
- 所有流量都需要在隧道里
- 诞生了“战术型”TE,只在需要的时候使用。
术语
TI-LFA
:与拓扑无关的无环路备份,能保证备份路径的最优性即备份路径是收敛后路径,并且是针对每个目的地单独计算的。特点:
- 小于50ms链路、节点和SRLG保护
- 100%覆盖率
- 基于IGP自动计算
- 是PLR本地机制
- 可增量部署
- 适用于IP、LDP、SR流量
PLR
:本地修复点
SRv6
:把SR架构应用到IPV6数据平面称为SRV6
LFIB
:MPLS转发表
LSD
:标签交换数据库,用于管理本地标签的分配。
SR定义
基于源路由,节点选择路径并引导数据包沿着该路径转发,做法是在数据包报头插入带顺序的segment list,而segment可以表示任何类型的指令,转发路径上的节点不需要维护流状态信息,除了源节点之外其他节点不需要存储和维护任何流状态信息,流量引导只在于节点。
segment和SID
segment
是节点针对所接受到的数据包要执行的指令,包含在数据包报头中。
SID
(segment标识segment Identifier)用于标识segment,格式可自行实现。
Segment List
(SID List)是segment的有序列表,每个条目是一条指令。
segment list支持的操作
PUSH
:在SID list头部压入一个或多个segment,并将第一个设为活动segment;
CONTINUE
:表示segment还没处理完成,继续保持活动状态;
NEXT
:活动segment已完成,segment列表中的下一个segment将成为活动segment;
全局和本地segment
全局:表示所有启用SR的节点均质池与全局segment相关联的指令,每个节点转发表中均装载全局segment的指令。
本地:只有生成本地segment的节点支持与该segment相关的指令。不一定只在本地有效
SR控制平面
可由IGP或BGP分发segment,、
IGP segment
IS-IS和OSPF都支持分发SID的扩展,IGP segment分为IGP前缀segment(IGP prefix segment)和邻接segment(IGP Adjacency segment),分别对应IGP前缀和IGP邻接。
IGP Prefix Segment
Prefix-SID是由IS-IS或OSPF通告的全局segment,特点:
- 全局性,SR域中所有节点都知道如何处理prefix segment为活动segment的数据包
- 多跳的,并且允许使用跨多跳ECMP
- 支持ECMP
- 由动态路由协议自动维护和计算
- 自动50ms保护
要求:prefix-SID
是全局唯一的,最典型的是分配Loopback地址,使用的是SPF的最短路径算法,但支持松散最短路径和严格最短路径两种模式。一个算法中一个prefix只能关联一种prefix-SID。
IGP节点segment
即Node segment
Node-SID,也是一种IGP prefix segment,通常用于该节点环回地址的主机前缀,类似路由器ID
Node-SID是prefix-SID的子类型,所以二者的指令相同,不同点在于Node-SID仅与主机前缀相关联,即N-flag
被置位,其他被通告时不会有该指示。
IGP anycast segment
域中多个节点上分配相同的单播前缀,该单播前缀构成anycast segment
,该前缀在语法上和单播IP前缀无区别,Anycast-SID
是与anycast前缀相关联的特殊类型IGP prefix segment,Anycast segment是Prefix segment的子类型,因此指令相同。不标识特定节点,而是标识一组节点。通告时N-flag`不置位。
一个prefix-SID即使关联到一个loopback地址上的主机前缀也不一定总是标识一个节点,也可能是一个anycast-SID
IGP Adjacency Segment
Adj-SID
是单向邻接segment,指令为“引导流量由与该segment相关联的邻接链路(集合)转发出去”而不再遵循最短路径如何。
一般Adj-SID用于通告它的节点的本地segment。虽然协议允许全局,但一般用在本地使用。
可以给一条特定的链路分配多个Adj-SID,使得每个Adj-SID具有不同的属性。
Adj-SID只能被始发它的路由器识别。但不支持ECMP。
二层Adj-SID
用于引导流量到单个LACP成员组的一个成员链路上。
组Adj-SID
group Adj-SID
用于实现ECMP的方式下在组内链路上转发流量
BGP Prefix segment
BGP Prefix-SID
与BGP前缀相关联,属于全局segment,指令为“引导流量沿着支持ECMP的BGP多路径去往该segment相关联的前缀”。BGP prefix-SID可以把流量负载均衡到可用的BGP多路径上。
BGP anycast segment
效果与IGP anycast segment效果相同,简写为BGP Anycast-SID。
BGP 对等体segment
与BGP peer特定邻居或一组邻居相关联,为本地segment。通常由BGP speaker分配给其对等体会话,并通过BGP通告出去。
还有BGP 对等体节点segment,对等体邻接segment。
SR数据平面
SR的MPLS数据平面利用MPLS架构,SID表现为MPLS标签或MPLS标签中的索引。segment列表在MPLS数据包中被表示为MPLS标签栈。
SR的IPV6数据平面被称为SRv6
,在SRv6中,segment体现为IPv6地址,SRv6无需网络支持MPLS就可以提供SR功能。
SID在数据平面被编码为MPLS标签,在SR中前缀到FEC的映射方式与传统MPLS基本相同,唯一的区别为对应该FEC的标签是从Prefix-SID(IGP/BGP作为信令协议)获得,而不是从LDP分发获得。
SRGB
SR的全局块SRGB
是用于全局segment的SID集合。SID是一个标签值或标签块的一个索引,本地segment的SID是本地标签值,而全局segment的SID是全局唯一的索引。SRGB是给特定节点分配全局segment的一个本地标签集合
每个节点都可独立决定分配SRGB的预留范围。
SID索引从0开始,指向每个节点本地SRGB中的一个本地标签值,一般SRGB中的第一个标签值加上SID索引数字,就可计算出全局segment的本地标签值。
SRGB只本地有效,所以每个节点需向其他节点通告它的SRGB。但SRGB不适用于本地segment,SID也是SRGB外的标签范围分配的。
SR MPLS标签栈操作
segment列表 | MPLS标签栈 |
---|---|
PUSH | PUSH |
CONTINUE | SWAP |
NEXT | POP |
倒数第二跳
倒数第二跳弹出会导致MPLS的EXP(SR中称为TC字段)在倒数第二跳被弹出,导致COS信息无法到达最后一跳节点,解决方案为倒数第二跳将顶层标签交换为显式空标签
,而不是弹出。代价就是最后1跳必须先弹出空标签,再进行二次查找。
最后一跳
该跳可以是不带任何标签,直接按照报头进行查找。
Adj-SID和MPLS
Adj-SID的MPLS标签动作总是弹出,和Prefix-SID的倒数第二跳不同。
Adj-SID与邻接相关联,而不是和前缀相关联。因此流量不会自动被压入Adj-SID标签。Adj-SID被用于引导流量到特定链路,不管是不是最短,比如TI-LFA,SRTE
MPLS TTL和TC/EXP

- LABEL: 20bit标签值;
- TC: 3bit TC字段,也叫EXP位;
- TTL:8bit TTL字段;
- S:1bit 是否栈底;
当SR MPLS域在入口收到去往隧道的报文,压入Perfix-SID标签,并将IP TTL减一后复制到MPLS标签的MPLS TTL字段,或把MPLS TTL字段设置为255,默认是复制(可通过命令改变默认行为),在压入多个标签时(TE, TI-LFA,L3VPN等)所有标签的MPLS TTL都一样,都是从IP TTL复制来的。可选择对本地生成数据包有效,也可选择对转发的数据包有效。
当最后一个标签被弹出且IP报头暴露时,默认行为是将MPLS TTL减一后再将其复制到IP TTL(仅当MPLS TTL小于IP TTL时才会发生,防止环路导致IP TTL不会递减到0),也可配置不复制,这样数据包在MPLS网络中的所有跳数不会被计入。
MPLS到MPLS 的TTL
交换

入向顶层标签被交换的话,默认只有顶层的标签MPLS TTL减一
交换+压栈

入向顶层被交换同时有一个或多个标签被压入,则顶层标签的MPLS TTL减一,然后复制到交换之后的MPLS TTL字段以及 所有新压入标签的MPLS TTL字段
弹出
顶层标签要被弹出,则顶层MPLS TTL减一后复制到新暴露出标签的MPLS TTL字段,仅当顶层MPLS TTL小于新暴露标签的MPLS TTL值时才会发生。
MPLS TC/EXP
当入向数据包压入一个或多个标签时,默认将IP报头的优先级复制到所有新压入标签的MPLS TC字段,如果IP DSCP的6个比特都被占用了则将DSCP的前三个比特复制。
当弹出最后一个标签时,默认不会将MPLS TC字段复制到暴露出的IP优先级或DSCP位。
当顶层标签被交换时,则MPLS TC字段复制到交换后的标签上。
当顶层标签被交换且又有新压入的标签时,则顶层标签的TC字段复制到交换后的和新压入的。
当弹出时,默认顶层TC字段不会复制到新暴露出的TC字段。
MPLS 负载均衡
为实现用数据包的MPLS报头下的IP头负载均衡,设备需要深入数据包报头中查看,不同设备可以深入的能力不一样,如果标签栈过深则会有一定影响。
MPLS MTU
PTU(Protocol Data Unit)规定了该协议层最大数据包,如二层以太网MTU为1514字节(二层头开销14字节,三层1500字节,不含前导码、帧定界符、FCS等)。而PPP/HDLC则二层开销为4字节。
所有接口IP MTU默认1500字节,而MPLS MTU默认也是1500,单个MPLS头4字节。为保持IP MTU的默认,则MPLS MTU要增加4*N字节。N为MPLS报头中最大标签数量。最后应用到接口上还必须增加二层MTU。
为考虑到Jumbo帧,还经常使用9216字节。
SRGB
SRGB用于指定全局Segment标签范围,SRGB范围的大小在SR域中所有节点上应当相同,否则受限于最小的范围。SRGB大小决定了全局segment的SID索引的最大值。
思科默认16000-23999,共8000个segment。可修改
SRGB与anycast segment
同一anycast集合中的所有节点应适用相同SRGB来简化操作。最好网络中使用相同的SRGB。
SRGB为节点属性,与SR协议无关,修改SRGB会导致流量中断
SGRB配置的优先级应用顺序:每个IGP实例的配置>全局配置>默认
BGP仅使用全局SRGB,无默认值,必须显式的配置。
- 标签空间默认划分范围:
- 0~15:特殊用途保留
- 16~15999:静态MPLS
- 16000~23999:默认SRGB
- 大于24000,用于动态标签分配
动态标签的例子:LDP 、RSVP、L2VPN、BGP、TE、 ISIS、OSPF
在路由器启动时,LSD会优先让SR的控制平面协议(ISIS, OSPF和BGP)优先发起注册,并执行SRGB的分配。
LSD首先等待SR协议客户端去注册,比如ISIS或OSPF,等他们激活分配标签后,再为其他MPLS应用分配本地标签。
- 每个节点保留一个范围的本地标签,用于全局segment的SGRB
- Prefix-SID是SRGB中的唯一索引
- 前缀始发节点使用Prefix-SID通告索引