「SRV6」- 概念术语

SRv6 Segment ID | SRv6 SID

SRv6 Segment,通常亦称为 SRv6 SID(Segment Identifier)

组成部分

SRv6 SID 表现形式为 IPv6 Address(是 IPv6 地址格式的、是经过精心构造的、每部分具有特殊用途的、)

SRv6 SID 其分为三部分组成:Locator、Function、Arguments
如果没有 Arguments 字段,则是 Locator:Function 格式。Locator 占据 IPv6 地址的高比特位,Function 部分占据 IPv6 地址的剩余部分。

格式:Locator:Function:Arguments
长度:最大 128bit 长度;如果 Locator + Function + Arguments 长度小于 128bit 时,保留位用 0 补齐;

注意,针对该图示,其仅为 IPv6 报文示例,其 SRH 包括 3 个 SID,每个 SID 为 128bit 长度,每个 SID 由 Locator、Function、Arguments 三部分组成。第一次看到该图示的时候,我们将示例中的 3 个 SID 误以为 SID 的三个组成部分。

根据我们的理解与猜测:

  • 虽然 SRv6 SID 具有 Locator + Function + Arguments 三部分,且其他设备将收到来自 IGP SRv6 SID 通告的 SRv6 SID 信息,但是其他设备只会将 SRv6 SID 当作 IPv6 Address 地址对待,并不理解其中的 Function、Arguments 信息,其中的 Function、Arguments 仅本地有效,即本地设备读取其中的 Function + Arguments 并进行相关操作。
  • 另外,通过抓包观察 IGP 通告的 SRv6 SID 信息,其中,仅包含 Locator 信息,并未通告 Function 和 Arguments 部分。
  • 另外,在 Wireshark 中,显示的字段名称为“SRv6 Locator”而非“SRv6 SID”,进一步佐证 IGP 传递的是 Locator 部分,而 Function、Arguments 仅具有本地意义。

Locator

在网络拓扑中,Locator 用于标识一个网络节点,用于路由和转发报文到该节点,实现网络指令的可寻址。

在 SR Domain 中,鉴于 Locator 具有定位功能,所以一般要唯一。在某些特殊场景,比如 Anycast 保护场景,多个设备可能配置相同的 Locator 参数。

Locator 标识的位置信息由两个重要的属性:

  • 可路由:节点配置 Locator 之后,系统会生成一条 Locator 网段路由,并且通过 IGP 在 SR Domain 中扩散。
  • 可聚合:网络内其他节点通过 Locator 网段路由就可以定位到本节点,同时本节点发布的所有 SRv6 SID 也都可以通过该条 Locator 网段路由到达;

在华为设备中,配置 2001:DB8:ABCD:: 前缀,其为 64 bit 长度

[Huawei] segment-routing ipv6
[Huawei-segment-routing-ipv6] locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD:: 64

Function

在 SRv6 网络编程中,不同的转发行为由不同的 Function 来标识,Function 用来标识该指令要执行的转发动作。例如,在 RFC 中,定义公认的 Function,例如 End、End.X、End.DX4、End.DX6、……

例如 End.x 类似 SR-MPLS 中的 Adjacency SID,用于标识某条链路,配置如图:

[Huawei-segment-routing-ipv6] locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD:: 64
[Huawei-segment-routing-ipv6] opcode ::1 end-x interface G3/0/0 next-hop 2001:DB8:200::1

// 此 Function 对应的 opcode 为 ::1,且此时没有 Arguments,那么 SRv6 SID 值为 2001:db8:abcd::1;
// 此 Function 的行为表示将报文从指定接口(G3/0/0),转发给对应的邻居节点(2001:DB8:200::1);

Function 类型及功能:

类型 功能描述 发布协议 类型
End 表示 Endpoint SID,用于标识网络中的某个目的节点(Node)。
对应的转发动作(Function)是:更新 IPv6 DA,查找 IPv6 FIB 进行报文转发。
IGP 路径 SID
End.X 表示三层交叉连接的 Endpoint SID,用于标识网络中的某条链路。
对应的转发动作是:更新 IPv6 DA,从 End.X SID 绑定的出接口转发报文。
IGP 路径 SID
End.DT4 表示 PE 类型的 Endpoint SID,用于标识网络中的某个 IPv4 VPN 实例。
对应的转发动作是:解封装报文,并且查找 IPv4 VPN 实例路由表转发。
End.DT4 SID 在 L3VPNv4 场景使用,等价于 IPv4 VPN 的标签。
BGP 业务 SID
End.DT6 表示 PE 类型的 Endpoint SID,用于标识网络中的某个 IPv6 VPN 实例。
对应的转发动作是:解封装报文,并且查找 IPv6 VPN 实例路由表转发。
End.DT6 SID 在 L3VPNv6 场景使用,等价于 IPv6 VPN 的标签
BGP 业务 SID
End.DX4 表示 PE 类型的三层交叉连接的 Endpoint SID,用于标识网络中的某个 IPv4 CE。
对应的转发动作是:解封装报文,并且将解封后的 IPv4 报文在该 SID 绑定的三层接口上转发。
End.DX4 SID 在 L3VPNv4 场景使用,等价于连接到 CE 的邻接标签。
BGP 业务 SID
End.DX6 表示 PE 类型的三层交叉连接的 Endpoint SID,用于标识网络中的某个 IPv6 CE。
对应的转发动作是:解封装报文,并且将解封后的 IPv6 报文在该 SID 绑定的三层接口上转发。
End.DX6 SID 在 L3VPNv6 场景使用,等价于连接到 CE 的邻接标签。
BGP 业务 SID
End.OP End.OP SID(OAM Endpoint with Punt)是一个 OAM 类型的 SID。
对应的转发动作是:对 OAM 报文实现上送操作。
End.OP SID 主要用于 Ping/Tracert 场景;主要作用时用于 SRv6 运维所用
   

除了承载 L3VPN 之外,SRv6 也能承载 L2VPN,L2 VPN 的相关 SID 信息如下:

  • End.DX2:表示二层交叉连接的 Endpoint SID,用于标识一个端点。如果网络中存在 Bypass 隧道,则会自动生成 End.DX2L SID。对应的转发动作是:解封装报文,去掉 IPv6 报文头及其扩展头,然后将剩余报文转发到 SID 对应的出接口。End.DX2 SID 可以用于 EVPN VPWS 场景;
  • End.DT2U:表示二层交叉连接且进行单播 MAC 表查找功能的 Endpoint SID,用于标识一个端点。如果网络中存在 Bypass 隧道,则会自动生成 End.DT2UL SID。End.DT2UL SID 可以用于本地双归 PE 发送 Bypass 单播流量。对应的转发动作是:去掉 IPv6 报文头及其扩展头,然后使用剩余报文的目的 MAC 地址查找 MAC 表,根据 MAC 表项将报文转发到对应的出接口。End.DT2U SID 可以用于 EVPN VPLS 单播场景;
  • End.DT2M:表示二层交叉连接且进行广播泛洪的 Endpoint SID,用于标识一个端点。对应的转发动作是:End.DT2M SID 对应的转发动作是去掉 IPv6 报文头及其扩展头,然后将剩余报文在 BD 内广播泛洪。End.DT2M SID 可以用于 EVPN VPLS BUM 流量转发场景;

针对 Function 命名,其遵循一定规则,以便于从命名组合中快速判断指令功能:

  • End:End 是最基础的 Segment Endpoint 执行指令,表示中止当前指令,开始执行下一个指令。对应的转发动作是将 SL-1,并将 SL 指向的 SID 复制到 IPv6 DST Address 中;
  • X:指定一个或一组三层接口转发报文。对应的转发行为是按照指定出接口转发报文;
  • T:查询路由表并转发报文;
  • D:解封装。移除 IPv6 报文头和与它相关的扩展报文头;
  • V:根据 VLAN 查表转发;
  • U:根据单播 MAC 查表转发;
  • M:查询二层转发表进行组播转发;
  • B6:应用指定的 SRv6 Policy;
  • BM:应用指定的 SR-MPLS Policy;

Arguments

在一些场景下,一个 SRv6 的 Endpoint 可以要求额外的动作,此时需要 Arguments 相关字段一起被封装。例如,在 EVPN VPLS 的 CE 多归场景转发 BUM 流量时,Function 字段为 End.DT2M,Arguments 字段用于提供本地对于 ESI 的映射以实现水平分割;

Function 和 Arguments 都是可以由工程师定义的,这也反映出 SRv6 SID 的结构更有利于对网络进行编程。在多数场景下,不配置 Arguments 参数;

配置示例

SRv6 SID 配置分为两种方式:

  • 动态配置:
    • 配置方法:仅需配置 locator 命令,opcode 由 IGP 动态分配;
    • 取值方法:动态分配 SID 时,SID 会占用动态段和静态段范围,动态段取值从 1 开始,静态段取值从 0 开始;
    • 取值范围:动态段起始值: 2001:DB8:ABCD:0000:0000:0001:0000:0000;动态段结束值: 2001:DB8:ABCD:0000:FFFF:FFFF:FFFF:FFFF
  • 静态配置:
    • 配置方法:管理员配置对应类型 SID 的 opcode;
    • 取值方法:静态配置 SID 时,SID 只占用静态段范围,动态段设置为 0 值,静态段取值从 1 开始;
    • 取值范围:静态段起始值: 2001:DB8:ABCD:0000:0000:0000:0000:0001;静态段结束值: 2001:DB8:ABCD:0000:0000:0000:FFFF:FFFF

若设备重启,动态生成的 SID 会变化,不利于维护。所以,推荐静态配置 End SID 和 End.X SID 信息。

Locator 命令的参数关系简示如下:

|--Locator--|--------------Function--------------|--Args--|
|--Locator--|--Dynamic Opcode--|--Static Opcode--|--Args--|

[Huawei-segment-routing-ipv6] locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD:: 64 static 32

// 本配置示例 Locator 是 2001:DB8:ABCD::,长度占用 64 位,静态段占用 32 位,动态段占用 32 位,args 字段占用 0 位;

节点类型

RFC8754 中定义了 SR 有三种类型节点:

  • 源节点(SR Source Node):生成 SRv6 报文的源节点;
  • 中转节点(Transit Node):转发 SRv6 报文,但不进行 SRv6 处理的 IPv6 节点;
  • Endpoint 节点(SR Segment Endpoint Node):接收并处理 SRv6 报文的任何节点,其中该报文的 IPv6 DST Address 必须是本地配置的 SID 或者本地接口地址;