3. SRv6 数据平面与 SRH 扩展头
SRv6 的核心思想是把 IPv6 地址直接当作 SID(Segment Identifier)使用,转发面不再依赖 MPLS 标签,而是依赖 IPv6 报头与路由扩展头完成路径编程。理解 SRv6 数据平面,关键要抓住三件事:SID 如何编码、SRH 如何组织 Segment List、节点收到报文后如何根据 SID 与 SRH 状态决定下一步转发行为。
一、IPv6 地址即 SID:定位与功能合一
在 SRv6 中,一个 128 位 IPv6 地址既承担传统“定位”语义,又承担“指令”语义。通常把 SID 划分为 Locator 与 Function 两部分:Locator 是路由可达前缀,用于把报文引导到执行该 SID 的节点;Function 是节点本地定义的指令,例如 End、End.X、End.DT4、End.DX6 等。节点收到目的地址属于本地 Locator 的报文后,会取出 Function 部分执行对应行为。
例如某节点 Locator 为 2001:db8:1:1::/64,则 2001:db8:1:1::100 可表示一个 End SID,2001:db8:1:1::101 可表示一个 End.X SID。这里的 ::100 与 ::101 是示例编码,实际工程中 Function 的位宽与取值由规划决定。需要强调的是:SID 不是“随便一个地址”,它必须与节点上的本地 SID 表项绑定,否则报文到达后无法触发预期行为。
二、SRH 扩展头:Segment List 的载体
当路径需要显式指定多个 SID 时,SRv6 使用 SRH(Segment Routing Header)承载 Segment List。SRH 是 IPv6 路由扩展头的一种,Next Header 值为 43。其关键字段包括:
- Segments Left (SL):指向当前应处理的 Segment List 条目,初始值通常为 Segment List 长度减一,每经过一个 End 或 End.X 行为递减。
- Last Entry:Segment List 最后一个条目的索引,用于界定有效范围。
- Segment List[0..n]:按逆序排列的 SID 列表,报文实际转发时从 Segment List[SL] 开始取用。
- Flags、Tag:用于标记与策略关联,通常不改变基本转发逻辑。
- 可选 TLV:如 HMAC TLV 用于完整性校验,其他 TLV 可承载路径标识、OAM 信息等。
SRH 本身不改变 IPv6 逐跳转发的基本规则,它只是把“接下来该去哪个 SID”显式写在报文里。节点处理 SRH 时,会检查 IPv6 目的地址是否为本节点 SID,再结合 SL 决定是否更新目的地址并继续转发。
三、解析 SRv6 报文:从字段到转发动作
实际解析一份 SRv6 报文时,可以按以下顺序定位转发行为。首先看 IPv6 基本头中的目的地址是否属于本节点 Locator;若是,则继续检查 Next Header 是否为 43。若为 43,则读取 SRH 中的 Segments Left 与 Segment List。若 SL 大于 0,节点执行 End 或 End.X 行为:把 IPv6 目的地址替换为 Segment List[SL-1],同时把 SL 减 1,然后按新目的地址查表转发。若 SL 等于 0,说明已到达路径末端,节点根据 SID 的 Function 执行 End.DT4、End.DX6 等末端行为,或弹出 SRH 后按普通 IPv6 转发。
下面给出一个简化的解析示例,假设节点 A 的 Locator 为 2001:db8:1:1::/64,收到报文目的地址为 2001:db8:1:1::100,SRH 中 Segment List 为 [2001:db8:3:3::100, 2001:db8:2:2::100, 2001:db8:1:1::100],SL 初始为 2。节点 A 判断目的地址属于本地 Locator,执行 End 行为:将目的地址改为 2001:db8:2:2::100,SL 减为 1,然后按新目的地址转发到节点 B。节点 B 重复同样逻辑,把目的地址改为 2001:db8:3:3::100,SL 减为 0,最终报文到达节点 C 并交付。
四、可选 TLV 与 HMAC:安全与扩展
SRH 允许携带可选 TLV,其中 HMAC TLV 用于对 SRH 及部分 IPv6 字段做完整性校验。HMAC TLV 包含 Key ID、HMAC 算法标识与 HMAC 值。启用后,节点在转发前可校验 HMAC,防止 Segment List 被篡改。需要注意的是,HMAC 校验会增加处理开销,通常只在安全要求较高的域内或跨域边界启用。其他 TLV 还可用于携带路径标识、OAM 探测信息或网络切片标识,但并非所有节点都必须支持,实际部署时要确认设备能力与互操作性。
五、工程判断要点
在工程中定位 SRv6 转发行为,可以按以下检查项快速判断:
| 检查项 | 预期值/现象 | 异常提示 |
|---|---|---|
| IPv6 目的地址 | 属于本节点 Locator | 不属于则不会触发本地 SID 行为 |
| Next Header | 43(SRH) | 非 43 则按普通 IPv6 处理 |
| Segments Left | 初始为 Segment List 长度减一 | SL 异常会导致路径错乱 |
| Segment List 顺序 | 逆序存放,SL 指向当前条目 | 顺序错误会导致转发到错误节点 |
| HMAC TLV | 按需启用,校验通过 | 校验失败则丢弃或告警 |
掌握以上结构后,SRv6 数据平面就不再神秘:IPv6 地址是 SID,SRH 是 Segment List 的容器,SL 是路径游标,节点根据 SID 与 SL 执行 End、End.X 或末端行为。解析报文时,先看目的地址,再看 SRH,最后看 SL 与 Segment List,即可定位当前转发动作与下一跳方向。