第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 表 |
本文聚焦最基础的 End 和 End.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 |
八、思考
- End SID 和 End.X SID 的最大区别是什么?
- PSP 和 USP 分别在哪里弹出 SRH?为什么需要 PSP?
- Segments Left 在 SRv6 转发中起什么作用?
- End.X SID 为什么可以不查路由表直接转发?
- 当 Segments Left 变为 0 时,End SID 执行什么操作?
下篇预告:第188篇《SRv6 TE Policy 与 Color 选路》——在 SRv6 网络中进行流量工程,Color 如何引导流量走不同路径?