1. 引言
Segment Routing over IPv6 (SRv6) 是一种利用 IPv6 数据平面的源路由机制。SRv6 通过在 IPv6 首部中的扩展头部携带一系列 Segment 标识符(SID)来实现。这些 SIDs 可以指定流量需要经过的网络路径中的节点或执行特定操作的节点。SRv6 为网络提供了一种灵活且可编程的方式来管理流量工程、服务编排和网络功能虚拟化。
BGP-LS(Border Gateway Protocol - Link State)协议扩展了 BGP 的功能,允许通过 BGP 广播链路状态信息和拓扑信息。这些信息包括节点、链路和网络前缀的详细描述。BGP-LS 使得控制器可以通过 BGP 收集整个网络的拓扑视图,从而进行优化的路径计算和流量工程。
本文档介绍了 BGP-LS 如何扩展以支持 SRv6 的链路状态信息广播。这些扩展包括广播 SRv6 节点的能力、链路的 SRv6 特性以及前缀的 SRv6 属性。这些信息对于 SRv6 网络的路径计算和流量工程优化至关重要。
2.BGP-LS 对 SRv6 的扩展
BGP-LS(边界网关协议-链路状态)定义了节点、链路和前缀链路状态NLRI(网络层可达性信息)类型,并通过BGP广播其属性。当BGP-LS路由器从底层链路状态路由协议中获取拓扑信息并进行广播时,它会根据 IS-IS(中间系统到中间系统)或OSPFv3(开放最短路径优先版本 3)的SRv6扩展来派生相应的SRv6信息。这种派生过程包括简单地将IS-IS或OSPFv3 TLV/sub-TLV中的相关字段复制到相应的BGP-LS TLV/sub-TLV中。
当BGP-LS路由器从BGP路由协议(例如,用于EPE,即出口对等工程)中广播拓扑信息或使用Direct作为协议ID广播与节点关联的SRv6 SID(段标识符)时,它会从本地节点派生 SRv6 信息。此类信息仅代表本地路由器进行广播,与通过链路状态路由协议源自IGP域中所有节点的信息广播不同。
节点相关的 SRv6 信息通过 BGP-LS Node NLRI 使用 BGP-LS Attribute TLV 进行广播,如下所示:
- 节点的SRv6能力通过SRv6 Capabilities TLV进行广播。
- 为SRv6引入的最大SID深度(MSD)类型通过Node MSD TLV进行广播。
- SRv6 的算法支持通过 SR-Algorithm TLV 进行广播。
链路相关的SRv6信息通过BGP-LS Link NLRI使用BGP-LS Attribute TLV进行广播,如下所示:
- IGP邻接SID(IGP Adjacency SID)或BGP EPE Peer Adjacendy SID的SRv6 SID通过SRv6 End.X SID TLV进行广播。
- 到非指定路由器(DR)或非指定中间系统(DIS)的IGP邻接SID的SRv6 SID通过SRv6 LAN End.X SID TLV进行广播。
- 为SRv6引入的MSD类型通过Link MSD TLV进行广播。
前缀相关的 SRv6 信息通过BGP-LS Prefix NLRI使用BGP-LS Attribute TLV进行广播,如下所示:
- SRv6定位器通过SRv6 Locator TLV进行广播。
- SRv6定位器的属性通过Prefix Attribute Flags TLV进行广播。
与节点关联的SRv6 SID通过本文档中引入的BGP-LS SRv6 SID NLRI进行广播。这使BGP-LS编码能够扩展,以覆盖节点上实例化的潜在大量SRv6 SID,具有单个SID的粒度,并且不会影响BGP-LS更新的大小和可扩展性。如果SRv6 SID在现有节点NLRI关联的BGP-LS链路属性中进行了广播,随着节点上SRv6 SID的增加,BGP-LS更新将变得相当大,并且即使是单个 SRv6 SID的更改也需要生成大型更新消息。本文档中为SRv6 SID NLRI引入的BGP-LS属性TLV如下所示:
- SRv6 SID 的端点行为通过SRv6端点行为TLV(SRv6 Endpoint Behavior TLV)进行广播。
- BGP EPE 对等节点上下文的 PeerNode SID 和 PeerSet SID 的对等集上下文通过 SRv6 BGP PeerNode SID TLV 进行广播。
本文档的后续部分指定了这些扩展的编码和使用。引入的所有 TLV 均遵循参考 RFC 中提供的格式和通用字段定义。
3. SRv6 节点属性
节点的SRv6属性通过BGP-LS节点NLRI关联的BGP-LS属性TLV进行广播。
3.1 SRv6 Capabilities TLV
此BGP-LS属性TLV用于与BGP-LS节点NLRI一起声明节点的SRv6能力,并指示节点对SRv6的支持。每个SRv6-capable节点的BGP-LS属性中只能包含一个该TLV实例。映射到此BGP-LS TLV的IS-IS SRv6 Capabilities sub-TLV和OSPFv3 SRv6 Capabilities TLV能够携带可选的sub-sub-TLV和sub-TLV。然而,目前没有定义任何此类扩展。此外,下面定义的SRv6 Capabilities TLV不是可扩展的。因此,预计任何扩展将作为BGP-LS属性中的顶级TLV引入。SRv6 Capabilities TLV的格式如下:
类型:1038
长度:4
标志:2 字节字段。这些标志从 IS-IS SRv6 Capabilities sub-TLV 或 OSPFv3 SRv6 Capabilities sub-TLV 中复制。
保留:2 字节字段。应在生成时设置为 0,接收时忽略。
3.2 SRv6 Node MSD 类型
节点 NLRI 的 BGP-LS 属性中的节点 MSD TLV 也用于广播由 SRv6 节点支持的限制和 SRH (Segment Routing Header,分段路由报头)操作。用于 SRv6 的 MSD 类型在 BGP-LS 节点 MSD TLV 中使用,这些代码点在 IS-IS、OSPF 和 BGP-LS 协议之间共享。这些新 MSD 类型在 BGP-LS 中的描述和语义与在 IS-IS 或 OSPFv3 节点 MSD 广播中指定的相同。
每个 MSD 类型在 BGP-LS 节点 MSD TLV 中编码为一个一字节的类型,后跟一个一字节的值,如 IS-IS 或 OSPFv3 节点 MSD 广播中所规定的那样。
4. SRv6 链路属性
与链路或邻接关联的 SRv6 属性和 SID 通过 BGP-LS Link NLRI 使用 BGP-LS Attribute TLV 进行广播。
4.1 SRv6 End.X SID TLV
SRv6 End.X SID TLV 用于广播与 IGP Adjacency SID 行为关联的 SRv6 SID,该行为对应于运行 IS-IS 或 OSPFv3 协议的节点的点对点或点对多点链路或邻接。通过该 TLV 广播的信息来源于 IS-IS SRv6 End.X SID sub-TLV 或 OSPFv3 SRv6 End.X SID sub-TLV。这种 TLV 还可以用作 L2 捆绑成员属性 TLV 的sub-TLV,以广播基础层 2 成员链路的 SRv6 SID。
此TLV也用于BGP-LS广播SRv6的BGP EPE对等邻接SID,与 SR-MPLS 中的指定方式类似。用于 BGP 对等邻接的 SRv6 SID 使用 End.X 行为(如 End.X、End.X 带 PSP、End.X 带 USP 和 End.X 带 PSP & USP)表示到特定 BGP 会话对等(邻居)的特定 Layer 3 链路的交叉连接。
可以在 BGP-LS 属性中包含该 TLV 的多个实例(每个 SRv6 End.X SID 一个)。
TLV 的格式如下:
类型:1106
长度:可变
端点行为:2 字节字段。此 SRv6 SID 的端点行为代码点。
标志:1 字节的标志。标志从 IS-IS SRv6 End.X SID sub-TLV 或 OSPFv3 SRv6 End.X SID sub-TLV 复制,分别用于 IS-IS 或 OSPFv3。在 BGP EPE 对等邻接 SID 的情况下,标志如第 7.2 节所定义。
算法:1 字节字段。与 SID 关联的算法。
权重:1 字节字段。值表示 SID 的负载均衡权重。
保留:1 字节字段。应在生成时设置为 0,接收时忽略。
SID:16 字节字段。该字段将广播的 SRv6 SID 编码为 128 位值。
sub-TLV:用于广播特定 SRv6 SID 的附加属性。
4.2 SRv6 LAN End.X SID TLV
对于 LAN 接口,IGP 节点通常仅宣布其到 IS-IS 伪节点(或等效的 OSPF DR)的邻接。通过该 TLV 广播的信息来源于 IS-IS SRv6 LAN End.X SID sub-TLV 或 OSPFv3 SRv6 LAN End.X SID sub-TLV。SRv6 LAN End.X SID TLV 允许节点在单个 BGP-LS 链路 NLRI 实例中宣布其到所有其他(即非 DIS 或非 DR)连接到 LAN 的节点的邻接 SRv6 SID。如果没有这个 TLV,则需要生成多个 BGP-LS 链路 NLRI,每个邻居一个,以广播这些非 DIS/非 DR 邻居的 SRv6 End.X SID TLV。用于这些 IGP 邻接的 SRv6 SID 使用 End.X 行为(如 End.X、End.X 带 PSP、End.X 带 USP 和 End.X 带 PSP & USP)进行广播。
可以在 BGP-LS 属性中包含该 TLV 的多个实例(每个 SRv6 LAN End.X SID 一个)。
BGP-LS IS-IS SRv6 LAN End.X SID 和 BGP-LS OSPFv3 SRv6 LAN End.X SID TLV 的格式如下:
类型:1107(用于 IS-IS)和 1108(用于 OSPFv3)
长度:可变
端点行为:2 字节字段。此 SRv6 SID 的端点行为代码点。
标志:1 字节的标志。标志从 IS-IS SRv6 LAN End.X SID sub-TLV 或 OSPFv3 SRv6 LAN End.X SID sub-TLV 复制。
算法:1 字节字段。与 SID 关联的算法。
权重:1 字节字段。值表示 SID 的负载均衡权重。
保留:1 字节字段。应在生成时设置为 0,接收时忽略。
邻居 ID:6 字节的 IS-IS 系统 ID 或 4 字节的 OSPFv3 路由器 ID。
SID:16 字节字段。该字段将广播的 SRv6 SID 编码为 128 位值。
sub-TLV:用于广播特定 SRv6 SID 的附加属性。
4.3 SRv6 Link MSD 类型
BGP-LS 链路 NLRI 的 BGP-LS 属性中的链路 MSD TLV 也用于广播 SRv6 节点在特定链路上支持的限制和 SRH 操作。用于 SRv6 的 MSD 类型在 BGP-LS 链路 MSD TLV 中使用,这些代码点在 IS-IS、OSPF 和 BGP-LS 协议之间共享。这些新 MSD 类型在 BGP-LS 中的描述和语义与在 IS-IS 或 OSPFv3 链路 MSD 广播中指定的相同。
每个 MSD 类型在 BGP-LS 链路 MSD TLV 中编码为一个一字节的类型,后跟一个一字节的值,如 IS-IS 或 OSPFv3 链路 MSD 广播中所规定的那样。
5. SRv6 Prefix Attributes
具有 IPv6 前缀的 SRv6 属性通过 BGP-LS 前缀 NLRI 使用 BGP-LS 属性 TLV 进行广播。
5.1 SRv6 Locator TLV
SRv6 SID 由定位器(locator)、功能(function)和参数(argument)部分组成。
一个节点被配置了一个或多个该节点支持的定位器。定位器是节点上配置的一组 SID 的覆盖前缀。每个定位器作为 BGP-LS 前缀 NLRI 对象进行广播,并在其 BGP-LS 属性中包含 SRv6 定位器 TLV。
通过该 TLV 广播的信息来源于 IS-IS SRv6 定位器 TLV 或 OSPFv3 SRv6 定位器 TLV。
与定位器匹配的 IPv6 前缀也可以由底层路由协议作为前缀可达性进行广播。在这种情况下,前缀 NLRI 还将与携带该前缀路由度量的前缀度量TLV(Prefix Metric TLV)相关联。已通过 SRv6 定位器 TLV 广播的前缀 NLRI 也被视为正常的路由前缀(即前缀可达性),只有当其还有 IGP 度量 TLV(TLV 1095)与之关联时,否则只被视为 SRv6 定位器广播。
SRv6 定位器 TLV 的格式如下:
类型:1162
长度:可变
标志:1 字节的标志。标志从 IS-IS SRv6 定位器 TLV 或 OSPFv3 SRv6 定位器 TLV 复制。
算法:1 字节字段。与 SID 关联的算法。
保留:2 字节字段。应在生成时设置为 0,接收时忽略。
度量:4 字节字段。定位器的度量值从 IS-IS SRv6 定位器 TLV 或 OSPFv3 SRv6 定位器 TLV 中复制,分别用于 IS-IS 或 OSPFv3。
sub-TLV:用于广播给定 SRv6 定位器的附加属性。目前尚未定义任何sub-TLV。
6. SRv6 SID NLRI
在RFC 7752中定义的链路状态 NLRI(Link-State NLRI)扩展为携带 SRv6 SID 信息。
本文档定义了以下新的链路状态 NLRI 类型用于 SRv6 SID 信息:SRv6 SID NLRI(类型 6)。
与节点关联的 SRv6 SID 使用 BGP-LS SRv6 SID NLRI 进行广播。
这种新的 NLRI 类型的格式如下:
协议 ID:1 字节字段,指定信息来源协议。
标识符:8 字节值,如 RFC 7752 中定义。
本地节点描述符 TLV:本地节点的一组节点描述符 TLV,如 RFC 7752 中为 IGP、直接协议 ID 和静态配置协议 ID 定义的那样,或如 RFC 9086 中为 BGP 定义的那样。
SRv6 SID 描述符:一组 SRv6 SID 描述符 TLV。此字段可以包含单个 SRv6 SID 信息 TLV(第 6.1 节)和多拓扑标识符 TLV。
本文档中定义的新 TLV,用于在 BGP-LS 属性中广播 SRv6 SID 的属性,如第 7 节所述。
6.1 SRv6 SID Information TLV
使用SRv6 SID Information TLV编码一个与节点相关联并使用SRv6 SID NLRI发布的SRv6 SID。
在广播来自 IGP 的 SRv6 SID 时,SID 信息来源于 IS-IS SRv6 End SID sub-TLV 或 OSPFv3 SRv6 End SID sub-TLV。
当启用 SRv6 BGP EPE 功能时,TLV 携带与 BGP PeerNode 和 PeerSet SID 对应的 SRv6 SID。
TLV 的格式如下:
类型:518
长度:16
SID:16 字节字段。此字段将广播的 SRv6 SID 编码为 128 位值。
7. SRv6 SID 属性
本章节指定了与 BGP-LS SRv6 SID NLRI 关联的 BGP 链路状态属性中承载的 TLV。
7.1 SRv6 端点行为 TLV(Rv6 Endpoint Behavior TLV)
每个在 SRv6 支持的节点上实例化的 SRv6 SID 都绑定了特定的指令(称为“行为”)。RFC 8986 描述了如何将行为绑定到 SID,并定义了一组初始的众所周知的行为。
SRv6 端点行为 TLV 是一个强制性的 TLV,必须包含在与 BGP-LS SRv6 SID NLRI 关联的 BGP-LS 属性中。
在广播来自 IGP 的 SRv6 SID 时,端点行为Endpoint behavior、标志Flags,和算法Algorithm来源于 IS-IS SRv6 End SID sub-TLV 或 OSPFv3 SRv6 End SID sub-TLV。
在广播与 BGP EPE 功能对应的 SRv6 SID 时,端点行为对应于 End.X 及类似行为。当使用Direct作为协议ID在节点上发布本地实例化的SRv6 SID时,Endpoint行为对应于与该节点相关的任何SRv6 Endpoint行为。目前未定义任何flags。除非算法与分配SID的SRv6 Locator本地关联,否则算法值为0。
TLV 的格式如下:
类型:1250
长度:4
端点行为:2 字节字段。此 SRv6 SID 的端点行为代码点。值来自 "SRv6 端点行为" IANA 注册表。
标志:1 字节的标志。广播与 IGP 关联的 SRv6 SID 时,标志映射到 IS-IS 或 OSPFv3 编码。对于 BGP EPE 或使用 Direct 作为协议 ID 的 SRv6 SID 广播,当前未定义标志。未定义的标志应在生成时设置为 0,接收时忽略。
算法:1 字节字段。与 SID 关联的算法。
7.2 SRv6 BGP 对等节点 SID TLV
SR-MPLS 的 BGP PeerNode 和 PeerSet SID 如 RFC 9086 中所指定。使用带有 END.X 行为的 SID 可以实现类似的 Peer Node 和 Peer Set 功能。附录 A 提供了 SR-MPLS 和 SRv6 中这些 SID 信令之间的一些差异。SRv6 BGP PeerNode SID TLV 是一个强制性的 TLV,用于 BGP 为 EPE 功能广播的 SRv6 SID NLRI 中的 BGP-LS 属性。该 TLV 必须与关联 BGP PeerNode 或 PeerSet 功能的 SRv6 SID 一起包含。
TLV 的格式如下:
类型:1251
长度:12
标志:1 字节的标志,定义如下:
B-标志:备份标志。如果设置,则 SID 有资格使用快速重路由(FRR)进行保护。备份转发路径的计算及其与对等 BGP 标识符的转发条目的关联是特定于实现的。
S-标志:集标志。设置 S-标志表示 SID 指代一组 BGP 对等会话(即 BGP Peer Set SID 功能),因此必须分配给与 BGP 对等会话关联的一个或多个 End.X SID。
P-标志:持久标志。设置 P-标志表示 SID 是持久分配的,即值在路由器重启和/或会话波动期间保持一致。
其他位保留供将来使用,应在生成时设置为 0,接收时忽略。上述定义的标志也用于广播 SRv6 BGP 对等邻接 SID(第 4.1 节)。
权重:1 字节字段。值表示 SID 的负载均衡权重。权重的使用在 RFC 8402 中定义。
保留:2 字节字段。应在生成时设置为 0,接收时忽略。
对等 AS 编号:对等路由器的 4 字节 BGP AS 编号。
对等 BGP 标识符:对等路由器的 4 字节 BGP 标识符(BGP 路由器 ID)。
对于 SRv6 BGP EPE PeerNode SID,该 TLV 的一个实例与 SRv6 SID 关联。对于 SRv6 BGP EPE PeerSet SID,该 TLV 的多个实例(每个对等一个)与 SRv6 SID 关联,并设置 S-标志。
8. SRv6 SID 结构 TLV
SRv6 SID 结构 TLV 用于广播 SRv6 SID 每个部分的长度,如 RFC 8986 中定义的那样。它是 BGP-LS 属性中用于 SRv6 SID NLRI 的可选 TLV,也是 SRv6 End.X SID、IS-IS SRv6 LAN End.X SID 和 OSPFv3 SRv6 LAN End.X SID TLV 的sub-TLV。
在广播来自 IGP 的 SRv6 SID 时,SRv6 SID 结构信息来源于 IS-IS SRv6 SID 结构sub-sub- TLV 或 OSPFv3 SRv6 SID 结构sub-TLV,分别用于 IS-IS 或 OSPFv3。
在广播与 BGP EPE 功能对应的 SRv6 SID 或使用 Direct 作为协议 ID 的 SRv6 SID 时,SRv6 SID 结构信息来源于本地配置的 SRv6 SID。
TLV 的格式如下:
类型:1252
长度:4
LB 长度:1 字节字段。SRv6 SID 定位块的长度(以位为单位)。
LN 长度:1 字节字段。SRv6 SID 定位节点的长度(以位为单位)。
功能长度:1 字节字段。SRv6 SID 功能的长度(以位为单位)。
参数长度:1 字节字段。SRv6 SID 参数的长度(以位为单位)。
LB 长度、LN 长度、功能长度和参数长度的总和必须小于或等于 128。
9. IANA 考虑事项
根据本文档,IANA 已在“边界网关协议 - 链路状态 (BGP-LS) 参数”注册组中分配了代码点,如下小节所述。
9.1 BGP-LS NLRI 类型
IANA 在“BGP-LS NLRI 类型”注册表中分配了以下代码点:
类型 | NLRI 类型 | 参考文献 |
6 | SRv6 SID NLRI | RFC 9514 |
9.2 BGP-LS NLRI 和属性 TLV
IANA 在“BGP-LS NLRI 和属性 TLV”注册表中分配了以下 TLV 代码点:
TLV 代码点 | 描述 | 参考文献 |
518 | SRv6 SID 信息 | RFC 9514 |
1038 | SRv6 能力 | RFC 9514 |
1106 | SRv6 End.X SID | RFC 9514 |
1107 | IS-IS SRv6 LAN End.X SID | RFC 9514 |
1108 | OSPFv3 SRv6 LAN End.X SID | RFC 9514 |
1162 | SRv6 定位器 | RFC 9514 |
1250 | SRv6 端点行为 | RFC 9514 |
1251 | SRv6 BGP 对等节点 SID | RFC 9514 |
1252 | SRv6 SID 结构 | RFC 9514 |
9.3 SRv6 BGP EPE SID 标志
根据本文档,IANA 在“边界网关协议 - 链路状态 (BGP-LS) 参数”注册组下创建了一个新的注册表,名为“SRv6 BGP EPE SID 标志”。该注册表的分配策略根据 RFC 8126 是“标准行动”。注册表初始内容如下:
位 | 描述 | 参考文献 |
0 | 备份标志 (B-标志) | RFC 9514 |
1 | 集标志 (S-标志) | RFC 9514 |
2 | 持久标志 (P-标志) | RFC 9514 |
3-7 | 未分配 |
后续九章十章分别为可管理性考虑以及安全性考虑,在此不过多赘述。