核心概念

  • 段路由扩展报文头(SRH,Segment Routing Header)

    • Segment List: 有序的SRv6 SID列表,SID(Segment Identifier),Locator:Function(Opcode):Arguments

    • Segments Left(SL): SRv6激活的SID为SList[SL]。在SRv6转发过程中每经过一个SRv6 Endpoint节点,Segments Left(SL)字段减1,IPv6报文头中的目的IPv6地址变换一次(当SL=0的SID类型为END/END.X/END.DT时,默认在倒数第二段会弹出SRH头部)(SRv6 SRH是从下到上逆序操作,SRH中的Segment在经过节点后也不会被弹出)(类似编程,从上到下顺序是0-n)

The SRH is defined as follows:

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Next Header   |  Hdr Ext Len  | Routing Type  | Segments Left |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Last Entry   |     Flags     |              Tag              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 |            Segment List[0] (128-bit IPv6 address)             |
 |                                                               |
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 |                                                               |
                               ...
 |                                                               |
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 |            Segment List[n] (128-bit IPv6 address)             |
 |                                                               |
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 //                                                             //
 //         Optional Type Length Value objects (variable)       //
 //                                                             //
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  • SRv6 Segment命名规则

    • End:End是最基础的Segment Endpoint执行指令,表示中止当前指令,开始执行下一个指令。对应的转发动作是将SL值-1,并将SL指向的SID复制到IPv6报文头的目的地址中。(节点)

    • X:指定一个或一组三层接口转发报文。对应的转发行为是按照指定出接口转发报文。(接口)

    • T:查询路由表并转发报文。

    • D:解封装。移除IPv6报文头和与它相关的扩展报文头。

    • V:根据VLAN查表转发。

    • U:根据单播MAC查表转发。

    • M:查询二层转发表进行组播转发。

    • B6:应用指定的SRv6 Policy。

    • BM:应用指定的SR-MPLS Policy。

SRv6的END.DT4/6和END.DX4/6有什么区别

  • DT,剥离VPN标签后,根据路由表转发

  • DX,剥离VPN标签后,强行按照接口转发

  • SRv6节点通常通过扩展IGP(扩展OSPFv3或扩展IS-IS),将Locator相关路由扩散到网络节点上

SRv6 Policy

  • SRv6 SRH是从下到上逆序操作,SRH中的Segment在经过节点后也不会被弹出

    • 头端(headend):SRv6 Policy生成的节点,一般是全局唯一的IP地址。

    • 颜色(color):32比特扩展团体属性,用于标识某一种业务意图(例如低延时)。

    • 尾端(endpoint):SRv6 Policy的目的地址,一般是全局唯一的IPv6地址。

  • 一个SRv6 Policy可以包含多个候选路径(Candidate Path)。候选路径携带优先级属性(Preference)。优先级最高的有效候选路径为SRv6 Policy的主路径,优先级次高的有效路径为SRv6 Policy的备份路径。Segment List附带权重(Weight)来控制SRv6路径的负载分担

  • 路径建立

    • 在华为SRv6 Policy解决方案架构中,依赖控制器(iMaster NCE-IP)建立SRv6 Policy路径:

    • 控制器通过BGP-LS(Link-state)收集扩展IGP协议收集的拓扑信息,用于计算SRv6 Policy路径和状态呈现。

    • 控制器通过BGP IPv6 SR Policy协议向源节点下发SRv6 Policy信息(headend、color、endpoint等)。

    • 在华为SRv6 Policy解决方案中,还会使用NETCONF协议,该协议主要用于下发业务接口、路由策略(添加Color属性)等其他配置。除了通过iMaster NCE-IP下发SRv6 Policy之外,也可以通过手工的方式部署SRv6 Policy。

    • SRv6 Policy跨域路径建立:而在跨域场景中需要借助BGP帮助传递SID信息,这种通过BGP传递SID的技术叫做BGP EPE(Egress Peer Engineering)

  • SRv6的SRH头部有栈深的限制,因此对于大型网络可以部署SRv6路径粘连方案。路径粘连主要通过粘连SID与粘连节点实现:粘连SID也叫Binding SID,通过Binding SID可以表示一段SRv6 Policy转发路径。粘连节点会处理Binding SID,并压入SRH信息,粘连节点一般是ABR或ASBR设备。

    • SRv6粘连标签常用的有两种封装模式:Insert模式:在原始IPv6 报文头后插入一个 SRH,数据包基于原始IPv6头部与新SRH头指导转发。Encaps模式:在原始IPv6 报文头前插入外层IPv6头部与SRH头,数据包基于外层IPv6头部与SRH头部转发数据。

可靠性

  • SRv6隧道一般可以通过SBFD,Ping,Tracert等方式检测连通性。

  • SRv6隧道保护可以分为两大类:本地保护和端到端保护

  • TI-LFA(Topology-Independent Loop-free Alternate)FRR能为SRv6隧道提供链路及节点的保护。当某处链路或节点故障时,流量会快速切换到备份路径继续转发。

配置

L3EVPN over SRBE

#
sysname NE-1
#
ip vpn-instance vpna
 ipv4-family
  route-distinguisher 100:1
  apply-label per-instance
  vpn-target 111:1 export-extcommunity evpn
  vpn-target 111:1 import-extcommunity evpn
#
segment-routing ipv6
 encapsulation source-address 2001:DB8:1::1
 locator NE1_LOC ipv6-prefix 2001:DB8:100:: 64 static 32
#
isis 1
 is-level level-2
 cost-style wide
 network-entity 49.0001.0010.0000.0001.00
 #
 ipv6 enable topology ipv6
 segment-routing ipv6 locator NE1_LOC
 #
interface GigabitEthernet3/0/0
 undo shutdown
 ip binding vpn-instance vpna
 ip address 192.168.1.254 255.255.255.0
#
interface GigabitEthernet3/0/1
 undo shutdown
 ipv6 enable
 ipv6 address 2001:DB8:12::1/64
 isis ipv6 enable 1
#
interface LoopBack0
 ipv6 enable
 ipv6 address 2001:DB8:1::1/128
 isis ipv6 enable 1
#
bgp 100
 router-id 1.1.1.1
 peer 2001:DB8:2::2 as-number 100
 peer 2001:DB8:2::2 connect-interface LoopBack0
 #
 ipv4-family vpn-instance vpna
  import-route direct
  advertise l2vpn evpn 
//开启VPN实例发布EVPN的IP前缀路由功能(type50
  segment-routing ipv6 locator NE1_LOC evpn 
//在EVPN L3VPN场景中,如果用户希望使用SRv6隧道承载业务流量,则需要配置为将要发送的EVPN路由添加SID属性
//对端BGP EVPN邻居在收到EVPN路由后,可以根据路由中的SID迭代SRv6隧道,从而生成转发表项。
  segment-routing ipv6 best-effort evpn 
//在EVPN场景,如果用户希望设备可以根据EVPN路由中的SID属性迭代SRv6 BE隧道
 #
 l2vpn-family evpn
  peer 2001:DB8:2::2 enable
  peer 2001:DB8:2::2 advertise encap-type srv6 
//缺省情况下,本端设备向邻居发布的EVPN路由携带MPLS封装属性
#