第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)逐跳转发

七、思考

  1. SRv6 的 SID 是多少位?分为哪几部分?
  2. SRH 在 IPv6 扩展头中的 Type 值是多少?
  3. SRv6 转发过程中,路由器如何判断一个 SID 是自己的?
  4. Segment List 在 SRH 中如何排列?Segments Left 的作用是什么?
  5. SRv6 相比 SR-MPLS 的核心优势是什么?

下篇预告:第187篇《SRv6 转发流程与 End/End.X SID》——详细解释 SRv6 的各种 SID 行为类型及其转发流程。