# 0. 为什么需要 SR
1、简化底层控制平面,以 MPLS VPN 举例,需要部署 IGP、BGP、MPLS LDP 协议
2、网络发展诉求,SDN 化
1、简化控制平面,不存在 LDP 与 IGP 同步问题
2、IP 骨干网可能有流量工程需求,需要部署 MPLS-TE,通过 RSVP 在端到端设备之间维护大量状态信息
# 1.IGP 与 LDP 同步
正常情况通过主 LSP 转发,如果主链路故障通过备 LSP 转发
ospf timer lsp-sync hold-max-cost ldp 不同步时发布最大开销的 LSA
SR 将 OSPF,ISIS,BGP 与标签结合,不存在同步问题,路由计算和标签分发都通过 IGP 或 BGP 实现,也称为 SR-MPLS BE(best effort),在控制平面移除了 LDP
SR-MPLS TE(流量工程)对标 MPLS TE,控制平面移除了 RSVP 协议
# 2.SR - 分段路由 - 基本概念
SR 域(Segment Routing Domain):SR 节点的集合。
SID:即 Segment ID,用来标识唯一的段。在转发层面,可以映射为 MPLS 标签。
SRGB(Segment Routing Global Block):用户指定的为 Segment Routing MPLS 预留的全局标签集合。
SRLB(Segment Routing Local Block):用户指定的为 Segment Routing MPLS 预留的本地标签集合。这些标签在本地配置,仅在本地有效,但是会通过 IGP 对外发布,所以是全局可见。SRLB 当前主要用于配置 Binding SID。
segement : 节点对数据包要执行的指令
Segment ID :IPV4 中为标签,IPV6 中为 ipv6 地址。用于标识 Segment。网络中的每个节点,链路都可以称为 Segment id
源路由 :源节点选择一条路径并压入有序的 Segment List,其他节点按照 segmeng list 转发
通过对 IGP,BGP 扩展之后,可以实现源路由转发
prefix segment : 用于标识网络中的某个目的地址前缀,全局有效
SRGB :用户指定的为 Segment Routing MPLS 预留的全局标签集合
Adjacency Segment : 用于标识网络中的某个邻接,本地有效
# 3.segment 分类

Node SID + adjacent SID
# 4.ospf for SR-MPLS
配置:
1. 配置接口地址
2. 使能 MPLS
3. 全局使能 segment-routing
4. 配置 IGP/BGP 路由协议
5. 配置 IGP/BGP 对 SR 支持
1 | undo DCN //使用DCN功能实现网管通过网关网元对网元的远程管理 |
扩展:通过 type 10 LSA
type 10 LSA 使用 TLV 架构,携带三种 segment ID
其中 type 10 中又包含了 type-4,7,8 满足对于 SR 相关信息的携带

1 | type:opq-Area |


# 5.MPLS BE 隧道建立
SR 转发模型,类似 MPLS 环境,一条 SR MPLS BE 隧道包含入节点、交换节点、出节点、也具备倒数第二跳弹出
节点不会再通告,基于去往目的前缀的下一跳 SRGB 初始值 + 该前缀的 prfix id index 值得到 out Lable
存在倒数第二跳弹出,实际 19040 会变为 3

1 | tracert lsp segment ip 4.4.4.4 32 ver d |

每台设备通过扩展的路由协议通告自己的 SRGB。
节点通过扩展的路由协议通告前缀 SID 索引 (Index) 后,各台设备分别根据 SRGB 计算入站及出站 SID。
1、建议每台设备配置一样的 SRGB
2、基于全局的 prefix SID 统一标签值,方便管理一些。此时每台设备 index 需要唯一
MPLS-BE 场景
1. 基于 prefix-segment

2. 基于 adjacency segment
segment-routing auto-adj-sid disable 命令关闭动态邻接标签

3. 基于 adjacency segment+prefix-segment

使用承载业务

1 | tunnel policy to_pe4 |
# 6.prefix SID sub tlv flag
特殊标签同样适用于 SR 场景
NP:No-PHP(Penultimate Hop Popping,倒数第二跳弹出)标志。如果置位,不启用倒数第二跳弹出特性,倒数第二跳在转发报文给 Egress 节点时,不能弹出 Egress 节点标签。
M:Mapping Server 标记。如果置位,表示 SID 是由一个 Mapping Server 发布。
E:显式空标签(Explicit-Null)标志。如果置位,则启用显式空标签特性,上游邻居在转发报文时,必须把标签替换为显式空标签。
1 | mpls //egress |
V:Value 标志。如果置位,则 Prefix-SID 携带 Value,代替索引(Index)。缺省未置位。
L:Local 标志。如果置位,表示 Prefix-SID 携带的 Value/Index 具有本地意义。缺省未置位。
如果 NP 标志置位,然后:E 标志未置位,则任何 Prefix-SID 生成者的上游邻居必须保留对应的 Prefix-SID 标签在标签栈顶。这种方式可能用于路径粘连,比如 Prefix-SID 生成者可能使用该标签将报文转到其他的 MPLS LSP 中。E 标志置位,则任何 Prefix-SID 生成者的上游邻居必须将对应的 Prefix-SID 标签替换为显式空标签。此种方式下可以保留 MPLS EXP 标志位,如果 Prefix-SID 生成者就是报文的目的地址,则可以接收到原始 MPLS EXP。MPLS EXP 标志可以用于 QoS 服务。
# SR-MPLS BE 解决 BGP 路由黑洞问题
1 | route recursive tunnel |
其他参考 MPLS-LDP 场景
# 7.ISIS 对于实现 SR-MPLS 支持
配置
1 | [ISIS] |
1、ospf 大部分 LSA 报文结构设计相对固定,无法扩展,引入其它 tlv 能力的 LSA 实现扩充
2、IS-Is 所有报文包括 LSP 天然支持扩充能力,有大量灵活的 tlv,有扩展需求,挂载 tlv 即可


# 8.SR-BE 与 LDP 互通
1 | segment-routing |

1 | [HUAWEI-mpls]dis cu |
# 9. 粘连标签与标签栈
当标签栈深度超过转发器所支持的标签栈深度时,控制器需要为转发器分配多个标签栈,在合适的节点下发标签栈的同时分配一种特殊的标签,然后将这些标签栈关联起来,实现逐段转发。

# 10.MPLS-TE
MPLS TE 隧道所使用的 LSP 称为基于一定约束条件建立的 LSP (Constraint-based Routed Label Switched Path) ,简称为 CR-LSP。
约束条件主要包括带宽约束和路径约束两个方面,只有隧道所经过的链路满足约束条件才能成功地建立 CR-LSP,凭借约束条件可以更好地根据现有网络的情况规划业务。
CR_LSP 单向,一般是在头结点部署
1 | isis |
# 10.1CSPF 算法
根据以下信息来进行 CSPF 算法:
1. 带宽(链路的最大可预留带宽,BC 带宽,CT 带宽)不满足带宽需求的节点不会出现在最短路径中
2. 链路属性,可选(链路颜色,隧道颜色) 需要手工配置,用于选路。通过配置隧道颜色来约束选路。隧道接口、设备之间互联链路都需要配置隧道颜色,即亲和属性
3. 根据 1,2 步骤计算最短路径拓扑之后,出现了两条路径。比较 TE-cost 执行选路。
通过 CSPF 算法计算后,一旦出现等价路径,采用 CSPF 最高仲裁选择 — 条到尾节点路径
# 10.2 路径选择 - 松散 / 严格显式路径
松散显示路径:
松散方式可以指定路径上必须经过哪些节点,但是该节点和前一跳之间可以存在其他路由器。
严格显示路径:
所谓的严格显式路径,就是下一跳与前一跳直接相连。通过严格显式路径,可以最精确地控制 LSP 所经过的路径。
混合显示路径:
严格与松散结合
# 10.3 管理组、亲和属性
1 | 管理组(Administration Group) |
也称链路颜色,用来描述链路的属性。由 32 个 Bit 组成,每一位都可以单独表示链路的一个属性,用于管理拥有这些特征的链路,在物理接口下配置。
1 | 亲和属性(Affinity Attributes) |
是用来描述 TE 隧道所需链路的 32 位向量值,与管理组属性类似,在这里可以理解为隧道颜色,在隧道的首节点配置实施(隧道信息,不通过 IGP 发布)。
1 | 掩码(Mask) |
由 32 个 Bit 组成,决定了设备需要检查的链路属性,只有隧道颜色和链路颜色匹配才能进行正常的数据转发。实际应用中,就是通过修改掩码来选择链路。
掩码为 0 的位,不限制链路管理组属性。
掩码为 1 的位,如果亲和属性为 0,链路管理组属性也必须为 0;如果亲和属性为 1,链路管理组属性至少 1 位是 1 即可。
在 Tunnel 进行路径选择时,首先需要满足带宽需求,再根据接口(链路)的管理组属性需匹配其亲和属性才有资格被选择。只有带宽匹配不能进行选择
亲合属性 10101 掩码 11011 管理组属性可能的值为 10001 10000 00001 10101 10100 00101
1 | [R1-GigabitEthernet1/0/0]mpls te link administrative group 10001 //配置管理组 |
由于 LSP 中携带亲和属性,因此亲和属性和管理组的匹配都在头结点进行
有多条隧道时,可以通过隧道优先级来设置优先选择隧道 mpls te priority ,在头结点隧道接口配置
验证: tracert lsp te tunnel 0/0/1
# 10.SR-MPLS-TE
SR-MPLS TE(Segment Routing-MPLS Traffic Engineering)是使用 SR 作为控制协议的一种新型的 TE 隧道技术。SR-MPLS TE 支持采用集中式架构,控制器收集全局网络拓扑信息和 TE 信息,集中算路,然后把算路结果下发给网络设备。
集中式 SR-MPLS TE:
1. 扩展 IS-IS/OSPF 携带 TE 信息,在域内泛洪 IGP 和 TE 信息,生成 TEDB。
2. 通过 BGP-LS 收集网络信息,建立全局 TE 数据库。
3. 控制器基于约束全局算路。
4. 使用 PCEP 或 BGP SR Policy 将算路结果下发设备。
网络拓扑收集
1.IGP 协议收集网络拓扑信息
转发器的 IGP 协议收集网络拓扑信息,收集 SR 的邻接标签和节点标签。
2.BGP-LS 上报网络拓扑信息
BGP-LS 将带有 SR 标签信息的网络拓扑和 TE 信息上报给控制器。
使用多个 SID 进行组合来指导数据转发,这种工作机制可以对数据的转发路径进行一定约束,从而满足流量工程的需求,因此被称为 SR-MPLS TE
SR TE SID 的组合形式:
使用多个 Adjacency SID。
使用 Node SID 与 Adjacency SID 组合

# SP-MPLS TE 单域
1 | 1、SR、Is-is规划 |
# SP-MPLS TE 跨域 (E2E 跨域)
1. 配置思路
1、AS10、20 内部规划 IGP IS-IS,并配置 SR-MPLS
2、端到端配置 MPLS,MPLS TE,每个 AS 内配置 SR-MPLS TE 隧道;PE 之间建立跨域 E2E SR-MPLS TE 隧道
3、ASBR 之间配置 EBGP 邻居,要求 BGP 可以分配 sID
4、PE 之间建立 SR-MPLS TE E2E 跨域隧道,使用 tunnel3
不直接在 PE 之间建立隧道,在 AS 内部 PE 和 ASBR 之间建立隧道,减少标签栈深度
1 | IP MPLS IGP TE |
Binding SID
SR-MPLS TE 隧道可以做为一种转发邻接。如果将 SR-MPLS TE 隧道做为转发邻接分配一个邻接 SID(Adjacency SID),则该 SID 可以标识 SR-MPLS TE 隧道,利用这个 SID 就可以将数据流量导入 SR-MPLS TE 隧道,实施 TE 策略
Binding SID 意味着将使用该 SID 的流量与一个 SR-MPLS TE 隧道或者一个 TE 策略绑定。Binding SID 在 AS 域内的转发器上配置,一个 Binding SID 代表一条域内 SR-MPLS TE 隧道
# SRv6
使用 IPv6 数据平面,基于 IPv6 路由扩展头进行扩展
通过在 IPV6 报头中增加 SRH 扩展头实现 SRv6
该扩展头指定一个 IPv6 的显式路径,存储的是 IPv6 的 Segment List 信息,其作用与 SR MPLS 里的 Segment List 一样。

Segment List : 有序的 SRv6 SID 列表
Segments Left(SL) : SRv6 激活的 SID 为 Slist [SL]。转发过程中通过修改 SL,同时更换 DIP 为活跃的 SID 来分段完成转发。
Tag : 用于对数据包分组,可以实现基于组的策略。
SRH TLVs (NSH metadata,HMAC TLV,Padding TLv 等)︰可以作为 Segment List 的 sID 共同使用的全局参数。
通过扩展头 SRH 中内容确定 IPV6destination address。
在 SRv6 中,IPv6 DA 仅标识当前报文的下一个节点,是不断变换的。
<Segment List [0], Segment List [1], …, Segment List [n-1], Segment List [n]>:SRv6 报文的段列表,类似于 SR-MPLS 中的 MPLS 标签栈信息,在入节点生成。Segment List [n] 是 SRv6 路径上第一个需要被处理的 Segment List;Segment List [n-1] 是第二个;Segment List [1] 是倒数第二个;Segment List [0] 是倒数第一个。
SRv6 按照从栈底从栈顶处理 segment list,和 SR 相反
在 SRv6 中,每经过一个 SRv6 节点,Segments Left(SL)字段减 1,IPv6 DA 信息变换一次。Segments Left 和 Segment List 字段共同决定 IPv6 DA 信息。
segment 在处理后也不弹出

# SRv6 三层可编程能力
第一层是 segment List。它可以将多个 Segment 组合,形成 SRv6 路径。这一点和 MPLs 标签栈类似。
第二层是对 SRv6 SID 128 bit 地址的运用。MPLs 标签中四个段是定长的 (20 bit 标签、8 bit TTL、3 bit Tc 和 1 bit 栈底标识)。而 SRv6 SID 的 128 bit 可以灵活分段,并且每个段的长度也可以变化。由此 SRv6 具备更灵活的可编程能力。
第三层是紧接在 Segment Llist 后的可选 TLV。报文在网络中传送时,如果需要在转发平面封装一些非规则类的信息,可以通过在 SRH 中 TLv 的灵活组合来完成。

节点配置 Locator 之后,系统会生成一条 Locator 网段路由,并且通过 IGP 在 SR 域内扩散。网络里其他节点通过 Locator 网段路由就可以定位到本节点,同时本节点发布的所有 SRv6 SID 也都可以通过该条 Locator 网段路由到达。
Function 代表设备的指令(Instruction),这些指令都由设备预先设定,Function 部分用于指示 SRv6 SID 的生成节点进行相应的功能操作。
指令就是转发信息,他与 SRv6 SID 相关,每一个 SID 代表隐含的转发指令,生成 SRv6 SID 的设备会生成 SID 表,存储了与本 SRv6 SID 相关指令
Function 部分还可以分出一个可选的参数段(Arguments),此时 SRv6 SID 的格式变为 Locator:Function:Arguments,Arguments 占据 IPv6 地址的低比特位,通过 Arguments 字段可以定义一些报文的流和服务等信息。
end,end.x Locator 需要手动配置,.DT4 或.DT6 Locator 可以手动配置或 BGP 自动生成
3. 第三层是紧接在SegmentList后的可选TLV
# SRv6 SID
1 | End SID |
标识某个节点,类似于 node SID,通过 IGP 扩散

1 | End.x SID |
End.X SID 表示三层交叉连接的 Endpoint SID,用于标识网络中的某条链路。类似 SR-MPLS 中的 Adjacency SID。

1 | End.DT4 SID |
End.DT4 SID 表示 PE 类型的 Endpoint SID,用于标识网络中的某个 IPv4 VPN 实例。End.DT4 SID 对应的转发动作是解封装报文,并且查找 IPv4 VPN 实例路由表转发。End.DT4 SID 在 L3VPNv4 场景使用,等价于 IPv4 VPN 的标签。End.DT4 SID 也可以用于标识公网实例。
End.DT4 SID 可以通过静态配置生成,也可以通过 BGP 在 Locator 的动态 SID 范围内自动分配。
只需要在 PE 节点生成环回路由和 locator 路由,中间节点不需要
1 | End.DT6 SID |
End.DT6 SID 表示 PE 类型的 Endpoint SID,用于标识网络中的某个 IPv6 VPN 实例。End.DT6 SID 对应的转发动作是解封装报文,并且查找 IPv6 VPN 实例路由表转发。End.DT6 SID 在 L3VPNv6 场景使用,等价于 IPv6 VPN 的标签。End.DT6 SID 也可以用于标识公网实例。
End.DT6 SID 可以通过静态配置生成,也可以通过 BGP 在 Locator 的动态 SID 范围内自动分配。
1 | 配置end.dt4 |
配置:
1 | 配置接口地址 |
对于不支持 SRv6 的设备可以通过 Multi topology reachable ipv6 prefixes 计算 locator 路由(TLV 237)
对于支持的设备通过 locator 携带,TLV 27
SID 谁生成谁传播,DT4 SID 只能由 BGP 传播