第186篇:SRv6 基础——IPv6 扩展头与 SID
关键词
SRv6、IPv6 扩展头、SRH、SID、Locator、Function、Args
一、从 SR-MPLS 到 SRv6
1.1 SR-MPLS 的局限
| 局限 | 说明 |
|---|---|
| 需要 MPLS | 底层需要 MPLS 转发能力 |
| 标签空间有限 | 20 位标签,SID 数量受限 |
| 不支持 IPv6 原生 | MPLS 对 IPv6 的支持需要额外处理 |
| MPLS 硬件绑定 | 需要专用 MPLS 转发芯片 |
1.2 SRv6 的核心思想
SRv6(Segment Routing over IPv6) 将 Segment Routing 直接应用在 IPv6 数据面上:
SR-MPLS:
Segment = MPLS 标签
数据面 = MPLS 转发
SRv6:
Segment = IPv6 地址(128 位 SID)
数据面 = IPv6 转发 + 路由扩展头(SRH)
不需要 MPLS!只需要 IPv6!
二、SRv6 SID
2.1 SID 结构
SRv6 的 SID 是 128 位的 IPv6 地址,分为三部分:
|←──────────── 128 bits ────────────→| | Locator (IPv6 前缀,标识 SRv6 节点) | | | --- | --- | | Locator (前64位) N=1.1.1.1:: | Function (后64位) End/End.X/... |
更细的划分: | Locator (可变长度) | Function (可变) | Args (可选) | | --- | --- | --- |
| 组件 | 作用 | 说明 |
|---|---|---|
| Locator | 标识 SRv6 节点(路由器) | 类似 Prefix-SID 的全局路由前缀 |
| Function | 标识节点上的指令 | End(终点)、End.X(指定出接口)等 |
| Args | 可选参数 | 携带额外信息 |
2.2 SID 示例
SID: A:B:C:D:E:F:G:H(IPv6 地址格式)
示例:
FC00:100::1 ← Locator
FC00:100:0:0:1:: ← Locator + Function 1 (End)
FC00:100:0:0:2:: ← Locator + Function 2 (End.X)
SID 本质上就是一个可路由的 IPv6 地址!
三、SRH(Segment Routing Header)
3.1 IPv6 扩展头
SRv6 使用 IPv6 路由扩展头(Routing Header, Type 4) 作为 SRH:
IPv6 标准头部(40 字节):
┌──────────────────────────────┐
│ Version=6, Traffic Class, │
│ Flow Label, Payload Length, │
│ Next Header=43(Routing), │
│ Hop Limit, │
│ Source IP = 1::1 │
│ Destination IP = SID1 │
└──────────────────────────────┘
│
▼
SRH(Segment Routing Header,类型 4):
┌──────────────────────────────┐
│ Next Header, Hdr Ext Len, │
│ Routing Type = 4 (SRH), │
│ Segments Left, │
│ Last Entry, │
│ Flags, Tag, │
│ Segment List[0] = SID_final │ ← 最终目的 SID
│ Segment List[1] = SID_3 │
│ Segment List[2] = SID_2 │
│ Segment List[3] = SID_1 │ ← 栈顶(第一跳 SID)
│ Optional TLVs │
└──────────────────────────────┘
3.2 SRH 关键字段
| 字段 | 作用 |
|---|---|
| Segments Left | 剩余未处理的 SID 数量(类似 MPLS TTL) |
| Last Entry | Segment List 中最后一个条目的索引 |
| Segment List | 有序的 SID 数组(从尾到头排列) |
3.3 SRH 的作用
SRH 在 IPv6 数据面中承载了 SRv6 的完整路径信息:
SRv6 数据包结构:
| IPv6 头 | SRH | IPv6 头 | Payload |
|---|---|---|---|
IPv6 头的目的地址 = 当前要处理的 SID SRH 中的 Segment List = 剩余的 SID 路径
四、SRv6 转发过程
4.1 简单路径
拓扑:R1 ─ R2 ─ R3 ─ R4
R1 发往 R4(SID = FC00:4::1,代表 End Function):
R1:
目的 IP = FC00:4::1
查路由:FC00:4::/48 → 下一跳 R2
发送到 R2
R2:
目的 IP = FC00:4::1
查路由:FC00:4::/48 → 下一跳 R3
不支持 SRv6 → 按普通 IPv6 转发
R3:
目的 IP = FC00:4::1
本地的 Locator 匹配!→ 执行 End Function
弹出 SRH 或处理完毕 → 发送到 R4
R4:
收到普通 IPv6 包
4.2 Segment List 路径
R1 发往 R4,经过指定路径 R2 → R5 → R3 → R4:
SID List = [FC00:2::1(End), FC00:5::1(End), FC00:3::1(End), FC00:4::1(End)]
R1:
目的 IP = FC00:2::1(第一个 SID)
SRH Segment List = [FC00:4::1, FC00:3::1, FC00:5::1, FC00:2::1]
Segments Left = 3
R2:
目的 IP = FC00:2::1 → 本地 Locator 匹配
Segments Left - 1 = 2
目的 IP = Segment List[Segments Left] = FC00:5::1
查路由 → 发送到 R5
R5:
目的 IP = FC00:5::1 → 本地 Locator 匹配
Segments Left - 1 = 1
目的 IP = FC00:3::1 → 发送到 R3
R3:
目的 IP = FC00:3::1 → 本地 Locator 匹配
Segments Left - 1 = 0
目的 IP = FC00:4::1 → 发送到 R4
R4:
收到普通 IPv6 包
五、SRv6 vs SR-MPLS
| 对比维度 | SR-MPLS | SRv6 |
|---|---|---|
| 数据面 | MPLS 标签栈 | IPv6 + SRH |
| SID 大小 | 20 位 | 128 位 |
| SID 语义 | 仅标签(数字) | IPv6 地址(包含位置和功能) |
| 网络要求 | 支持 MPLS 转发 | 纯 IPv6 转发 |
| 编程能力 | 有限(仅 Push/Swap/Pop) | 灵活(End/End.X 等功能) |
| 学习成本 | 需要 MPLS 知识 | 需要 IPv6 知识 |
| 当前部署 | 成熟 | 早期,正在快速发展 |
六、总结
| 知识点 | 核心要点 |
|---|---|
| SRv6 | Segment Routing over IPv6 数据面 |
| SID | 128 位 IPv6 地址 = Locator + Function |
| SRH | IPv6 路由扩展头(Type 4),承载 Segment List |
| Locator | 标识节点的 IPv6 前缀(路由可达) |
| Function | 节点上的指令 |
| 转发 | 根据 IPv6 目的地址(SID)逐跳转发 |
七、思考
- SRv6 的 SID 是多少位?分为哪几部分?
- SRH 在 IPv6 扩展头中的 Type 值是多少?
- SRv6 转发过程中,路由器如何判断一个 SID 是自己的?
- Segment List 在 SRH 中如何排列?Segments Left 的作用是什么?
- SRv6 相比 SR-MPLS 的核心优势是什么?
下篇预告:第187篇《SRv6 转发流程与 End/End.X SID》——详细解释 SRv6 的各种 SID 行为类型及其转发流程。