1. SRv6 SID基础概念从IPv6地址到网络指令第一次接触SRv6 SID时很多人会被它IPv6地址的外表迷惑。我刚开始配置时就犯过这个错误——把SID当成普通IPv6地址来规划结果导致整网转发异常。实际上SRv6 SID更像是一个穿着IPv6马甲的网络指令集。Locator相当于快递收件人的城市地址比如北京市海淀区而Function则是具体的门牌号和操作指令比如送到3号楼快递柜放入302箱。举个例子当我们在设备上配置2001:db8:abcd::1/128这个SID时2001:db8:abcd::/64是Locator部分全网唯一标识::1是Function部分本地有效指令实测中我发现个有趣现象用ping 2001:db8:abcd::1测试连通性时如果这个SID配置的是End.DT4类型用于IPv4 VPN解封装即使能ping通也不代表VPN业务正常因为普通ping测试不会触发Function的完整处理流程。这个坑我踩过三次才长记性。2. Locator实战配置你的网络身份证2.1 Locator规划要点在华为设备上配置Locator时我习惯用以下命令模板segment-routing ipv6 locator test1 ipv6-prefix 2001:db8:cafe:: 64 static 32这里static 32表示保留后32位给Function使用相当于给这个Locator分配了2³²个可能的Function ID。实际项目中遇到过因位数分配不当导致的SID冲突——某运营商网络就因配置static 16导致Function ID耗尽不得不半夜割接修改。Locator通告有个隐藏技巧通过IS-IS扩展的TLV 22IPv6 SID传播时如果配置no-php参数可以强制保留最后一跳的SRH信息。这在金融专线场景特别有用能完整记录路径信息供审计使用。2.2 常见Locator故障排查去年处理过一个典型故障某企业分支间SRv6隧道时通时断。抓包发现目的地址在2001:db8:100::/64和2001:db8:101::/64之间跳变。最终定位到是两台核心设备配置了相同的Locator前缀但属于不同Anycast组。解决方法很简单但很有效检查IS-IS数据库中的Locator冲突使用display segment-routing ipv6 local-sid核对本地SID分配通过tracert -6观察路径变化点3. Function深度解析网络的行为指令集3.1 Function类型实战对比这个表格是我整理的常用Function类型对比SID类型等效MPLS标签典型应用场景转发行为示例EndNode SID基础节点标识查找下一跳SID并转发End.XAdj SID指定出接口转发从GigabitEthernet1/0/0接口发出End.DT4VPNv4标签IPv4 VPN业务解封装后查IPv4路由表转发End.DX6-IPv6专线直连从指定VRF接口转发原始IPv6报文最让我头疼的是End.DT4和End.DX4的区别前者走路由表后者直连转发。有次客户要求将MPLS VPN迁移到SRv6我错误地将所有PE配置成End.DT4结果CE设备收到的全是解封装后的IP报文丢失了原始VLAN信息。后来改用End.DX4才解决问题。3.2 动态Function分配技巧在大型金融网络部署时手动配置Function效率太低。我推荐用BGP动态分配方案bgp 100 segment-routing ipv6 locator vpn1 auto-sid-allocation range 10000 20000这个配置会让BGP在10000-20000范围内自动分配Function ID。但要注意两个坑范围不要与静态配置冲突不同Locator间的ID空间独立实测发现动态分配比手动配置节省80%工时但在跨厂商环境要特别注意华为和思科的BGP SID分配算法不同混网时需要预留足够大的ID池。4. SRv6转发全流程拆解4.1 数据包变形记以典型的3节点转发为例A→B→C带你看懂SRv6报文的七十二变入口节点A封装外层IPv6头目的地址第一个SID B添加SRH扩展头Segment List[C,B], SL1原始报文作为Payload中间节点B匹配Local SID表执行FunctionSL减1变为0目的地址更新为C从指定接口转发如果是End.X类型终点节点C识别SL0剥离SRH和IPv6头根据End.DT4等指令处理原始报文抓包分析时有个诀窍在华为设备用capture-packet interface xxx命令时要加上layer2-head参数才能看到完整的SRH内容。我第一次做故障排查时没加这个参数白白浪费两小时看残缺的报文。4.2 转发优化实战建议MTU问题SRv6头部会增加至少40字节开销建议interface GigabitEthernet0/0/0 ipv6 mtu 1500 sr-ipv6 traffic-mtu 1440TCAM优化在核心节点启用SID压缩segment-routing ipv6 locator core compression故障溯源开启OAM增强功能segment-routing ipv6 oam end-op-sid 2001:db8::ffff5. 典型组网场景实战5.1 云专线场景配置某政务云项目要求通过SRv6实现多租户隔离我的配置模板如下# 租户A的配置 segment-routing ipv6 locator tenant-a ipv6-prefix 2001:db8:a:: 64 static 32 opcode ::100 end-op opcode ::200 end-dt4 vpn-instance VPN-A opcode ::300 end-x interface GigabitEthernet1/0/0 nexthop 2001:db8:1::1关键点在于用不同Function区分业务类型::200用于VPN::300用于专线Locator按租户划分便于管理OAM SID(::100)单独分配5.2 跨域互联方案运营商级部署常遇到AS边界问题我的经验是在ASBR上配置End.X SID指向对端opcode ::500 end-x interface GigabitEthernet2/0/0 nexthop 2001:db8:peer::1通过BGP-LU传播跨域SIDbgp 100 address-family ipv6 unicast peer 2001:db8:peer::1 advertise-ext-community使用Flex-Algo实现跨域TEflex-algo 128 metric-type delay这个方案在某跨国企业实施时将端到端时延从187ms降至92ms。关键是要在ASBR上做好SID转换避免Function语义丢失。