Segment Routing笔记(一)

SR | 理论(一)

 

MPLS TE缺点

  1. RSVP-TE大部分都是为了FRR的目的
  2. 不支持ECMP
  3. 所有流量都需要在隧道里
  4. 诞生了“战术型”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

 

MPLS标签格式
MPLS标签格式

 

  • 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复制来的。可选择对本地生成数据包有效,也可选择对转发的数据包有效。
MPLS 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应用分配本地标签。

  1. 每个节点保留一个范围的本地标签,用于全局segment的SGRB
  2. Prefix-SID是SRGB中的唯一索引
  3. 前缀始发节点使用Prefix-SID通告索引

 

posted @ 2020-12-08 08:38  人生何处是归途  阅读(1649)  评论(0编辑  收藏  举报