第187篇:SRv6 转发流程与 End/End.X SID

关键词

End SID、End.X SID、PSP、USP、SRv6 转发、SRH 处理


一、SRv6 SID 行为类型

SRv6 定义了一系列标准 SID 行为,每种行为对数据包执行特定操作:

SID 行为 代码 用途
End End 终点处理:弹出 SRH 并将包转发到目的地
End.X End.X 带出接口的终点处理:指定从某个接口转发
End.T End.T 带 MPLS 隧道终点
End.DX6 End.DX6 IPv6 解封装(L3VPNv6 场景)
End.DT6 End.DT6 IPv6 解封装并查 VRF 表
End.DX4 End.DX4 IPv4 解封装(L3VPNv4 场景)
End.DT4 End.DT4 IPv4 解封装并查 VRF 表
End.DX2 End.DX2 二层解封装(L2VPN 场景)
End.DT2 End.DT2 二层解封装并查 Bridge Domain 表

本文聚焦最基础的 EndEnd.X


二、End SID

2.1 定义

End SID(Endpoint SID) 是 SRv6 最基本的 SID 类型,类似 SR-MPLS 的 Node-SID:

End SID 的语义:
  当 IPv6 目的地址匹配本地 End SID:
  1. Segments Left = Segments Left - 1
  2. 如果还有一个或多个 SID 未处理:
     将 IPv6 目的地址更新为 Segment List[Segments Left] 指向的 SID
  3. 如果没有剩余 SID:
     执行 PSP(Penultimate Segment Pop)弹出 SRH
  4. 转发到下一跳(根据新的目的地址查路由)

2.2 转发过程

R1 到 R4,经过 R2 → R3 → R4:

R1 构造的包: IPv6 目的地址 = FC00:2::A(R2 的 End SID) SRH Segment List = [FC00:4::A, FC00:3::A, FC00:2::A] Segments Left = 2

R2 处理:

① 目的 IP = FC00:2::A ② 匹配本地 End SID ③ Seg Left = 2-1 = 1 ④ 新目的 IP = SL[1] = FC00:3::A ⑤ 查路由到 FC00:3::A → R3

R3 处理:

① 目的 IP = FC00:3::A ② 匹配本地 End SID ③ Seg Left = 1-1 = 0 ④ 已经到达最后一个 SID ⑤ PSP:弹出 SRH 头部 ⑥ 剩余 IPv6 包 → 目的 IP = FC00:4::A ⑦ 查路由 → R4

R4 处理:

收到普通 IPv6 包 目的 IP = FC00:4::A 普通 IPv6 转发


三、End.X SID

3.1 定义

End.X SID(Endpoint with Layer-3 Cross-connect) 比 End SID 多一个约束——指定出接口

End.X SID 的语义:
  当 IPv6 目的地址匹配本地 End.X SID:
  1. Segments Left = Segments Left - 1
  2. 更新 IPv6 目的地址为下一个 SID
  3. 从**指定的接口**转发(不查路由表!)

  类似 SR-MPLS 的 Adj-SID

3.2 转发过程

R1 需要精确路径 R2 → R5 → R3 → R4:

R1 指定:
  Segment List = [FC00:2::B(End.X), FC00:5::B(End.X), FC00:4::A(End)]

  FC00:2::B = R2 上的 End.X SID(指定出接口到 R5)
  FC00:5::B = R5 上的 End.X SID(指定出接口到 R3)
  FC00:4::A = R4 的 End SID

R2 收到:
  目的 IP = FC00:2::B → 匹配 End.X
  Seg Left - 1 = 1
  目的 IP = FC00:5::B
  从指定的 GE0/0/1(到 R5)转发(不是查路由!)

R5 收到:
  目的 IP = FC00:5::B → 匹配 End.X
  Seg Left - 1 = 0
  目的 IP = FC00:4::A
  从指定的 GE0/0/2(到 R3)转发

R3 收到:
  目的 IP = FC00:4::A → 不是本地
  按 IPv6 路由转发到 R4

四、PSP(Penultimate Segment Pop)

4.1 概念

PSP 是 End/End.X SID 的可选行为。当 Segments Left = 0 时,倒数第二个节点(Penultimate)弹出 SRH:

PSP 的效果:
  不带 PSP(完整 SRH):
    R3 → R4:IPv6 + SRH(但已经不需要了)

  带 PSP(弹出 SRH):
    R3 → R4:仅 IPv6(无 SRH)

  好处:减少包开销,减小路径 MTU 问题

4.2 PSP 流程

无 PSP:
  R3(SL=0)→ SRH 留在包中
  R4 收到:IPv6 + SRH(但 SRH 已无用)

有 PSP:
  R3(SL=0)→ 弹出 SRH
  R4 收到:纯 IPv6(无 SRH 开销)

4.3 USP(Ultimate Segment Pop)

USP 是在最后一跳(Ultimate)才弹出 SRH:

USP 流程:
  R3(SL=0,不弹出 SRH)→ 发送 IPv6 + SRH
  R4(SL=0,执行 USP)→ 弹出 SRH → 处理数据

适用场景:需要 R4 查看 SRH 信息的场景
弹出模式 执行节点 说明
PSP 倒数第二跳(Penultimate) 减少路径开销
USP 最后一跳(Ultimate) 最后一跳可查看 SRH
No PSP/USP 不弹出 SRv6 域内保留 SRH

五、配置示例(华为)

5.1 基本 SRv6 配置

# 全局使能 SRv6
segment-routing ipv6
 locator LOC1 ipv6-prefix FC00:100:: 48    # 定义 Locator
 #
 opcode 1 end                             # End SID: FC00:100:0:0:1::
 opcode 2 end-x interface GE0/0/0         # End.X SID: FC00:100:0:0:2::
!
interface GigabitEthernet0/0/0
 isis ipv6 enable
 segment-routing ipv6
  locator LOC1

5.2 验证

# 查看本地 SID
<HUAWEI> display segment-routing ipv6 local-sid

SRv6 Local SID Table:

SID                          Function Type   Interface
FC00:100:0:0:1::             End     End     -
FC00:100:0:0:2::             End.X   End.X   GE0/0/0
FC00:100:0:0:3::             End.X   End.X   GE0/0/1

# 查看 SRv6 转发
<HUAWEI> display segment-routing ipv6 forwarding

六、End 与 End.X 对比

对比维度 End SID End.X SID
类似 Node-SID(SR-MPLS) Adj-SID(SR-MPLS)
出接口 查路由表确定 指定接口
路由决定 是(查 IGP 表) 否(固定接口)
转发模式 IGP 最短路径 精确指定
应用场景 普通转发 TE 路径控制

七、总结

知识点 核心要点
End SID 节点级 SID,按路由表转发到下一 SID
End.X SID 带出接口约束的 SID,指定转发端口
PSP 倒数第二跳弹出 SRH,减少开销
USP 最后一跳弹出 SRH
Segments Left 控制 SID 处理进度
SRH 更新 每处理一个 SID,Seg Left - 1,更新目的 IP

八、思考

  1. End SID 和 End.X SID 的最大区别是什么?
  2. PSP 和 USP 分别在哪里弹出 SRH?为什么需要 PSP?
  3. Segments Left 在 SRv6 转发中起什么作用?
  4. End.X SID 为什么可以不查路由表直接转发?
  5. 当 Segments Left 变为 0 时,End SID 执行什么操作?

下篇预告:第188篇《SRv6 TE Policy 与 Color 选路》——在 SRv6 网络中进行流量工程,Color 如何引导流量走不同路径?