SRv6
一、定义和概念:
A、基本概要:
1、何为 SRv6:
Segment Routing(SR)是基于源路由理念而设计的在网络上转发数据包的一种协议。它将网络路径分成一个个段,并且为这些段和网络节点分配Segment ID(SID)。通过对SID进行有序排列(Segment List), 就可以得到一条转发路径。而传统路由中,数据包本身是不知道路径的,它被路由器转发时,路由器知道下一跳的地址。
举个例子,从南昌坐高铁到长沙,中途会经过宜春和萍乡北两站。传统路由模式需要在南昌买票到宜春,到达宜春后买票去萍乡北,到萍乡北后再买票到长沙。但在SRv6模式,可以直接买从南昌到长沙的票,可以预知所经过的节点,到达各站点只需出示一下我买的票即可。
SRv6(Source Routing in IPv6)是一种IPv6扩展,结合了Segment Routing(SR)和IPv6两种技术。它允许数据包的发送者指定其路径,而不是依赖于网络的中间节点来确定数据包的路径。SRv6的核心原理是在IPv6数据包头部的扩展标头中指定数据包的路径,从而使网络节点可以根据这些指示来转发数据包。这个扩展部分称为SRH(Segment Routing Header),而这部分扩展没有破坏标准的IP头,因此可以认为SRv6是一种native的IPv6技术。所以普通的 IPv6 设备也可以识别 SRv6 报文(其实是识别 IPv6 报文)。SRv6 设备能够和普通 IPv6 设备共同部署,对现有网络具有更好的兼容性。
SRv6(Segment Routing v6,基于IPv6转发平面的段路由)是基于源路由理念而设计的在网络上转发数据包的一种协议。其核心思想是将报文转发路径切割成不同的段,再为其分配 SID(Segment Identifier,段标识符)进行标识从而以段指导报文转发。
SR-MPLS基于MPLS转发平面,SRv6 的一个重要特点是不再使用 LDP/RSVP-TE 协议,也不需要 MPLS 标签,简化了协议。
2、SRH简介:
SRv6是直接在IPv6的IP扩展头中进行新的扩展,这个扩展部分称为SRH(Segment Routing Header),而这部分扩展没有破坏标准的IP头,因此可以认为SRv6是一种native的IPv6技术。下图是IPv6报文的示意:

IPv6 报文基本头字段解析:
Version:固定为6表示 IPv6。
Traffic class:类似 IPv4 的 TOS,用于 QOS 为报文分配优先级。
Flow Label:流标签。该字段用来标记 IP 数据包的一个流。
Payload Length:IPv6 有效载荷的长度,包括扩展头长度。
Next header: IPv6 基本报头后的那一个扩展报头的信息类型。一个 IPv6 可以有多个扩展头,通过在扩展头中指定下一个头部信息。
4:IPv4封装;41:IPv6封装;43:IPv6-Route(IPv6路由扩展头);58:ICMPv6;59—:Next Header为空
取值为43,表明下一个报文头为路由扩展头。路由扩展头的路由类型字段取值为4,表明该路由扩展头为SRH
Hop limit:跳数限制。与 IPv4 报文的 TTL 字段作用相同。
Source Address:IPv6 源地址。
destination Address:IPv6 目的地址。
SRH 报文字段解析:
Next Header:8bits,用来标识下一个报文头的类型。
Hdr Ext Len:8bits,表示以8个字节为单位的SRH头的长度,不包括前8个字节。
Routing Type:8bits,路由类型字段,取值为4,表示携带的是SRH。
Segments Left:8bits,标识需要查看的下一个SID的编号,初始取值为n-1(n表示路由扩展头中SID的数目),每经过一个节点减1。
Last Entry:8bits,SRH头中报文转发路径最后一个SID的编号,取值为0。
Flags:8bits,标志位信息。
Tag:16bits,用来标记具有相同特性的一组报文。
Segment List:SID列表。按照报文转发路径上节点从远到近的顺序进行排列,即Segment List [0]表示路径的最后一个SID,Segment List [1]表示路径的倒数第二个SID,以此类推。
2、SRv6 的 SID(节点):
支持IPv6 SR功能的设备被称为SR节点。其中,负责选择路径,并将路径转换成一个有序的SID列表封装到扩展报文头中的节点称为源节点(Ingress结点);负责传输封装报文的节点称为中间节点(Transit结点);负责剥离封装的扩展报文头、并将报文转发给目的网络的出口节点称为尾节点(End Point结点)。
如果Segment list中只包含一个sid,并且不需要在SRH中携带信息,则需要将IPV6头部的目的地址设置为这个SID,不需要插入SRH头部
如果segment list中包含了多个SID,则需要插入SRH
源节点可以是产生SRV6报文的主机,也可以是SRV6的边缘设备
同一设备可以同时是源节点和中转节点或Endpoint节点
SID(Segment Identifier)由locator、function、argument三部分组成,SRv6 SID=Locator+Function+Arguments。这三个部分共同构成一个128位的 ipv6 地址,其中argument字段是可选的,可以不带。locator一般是手工配置,function可以手工配置,也可以由IGP/BGP动态分配
locator(位置标识):网络中分配给一个网络节点的标识,可以用于路由和转发数据包。Locator有两个重要的属性,可路由和聚合。在SRv6 SID中Locator是一个可变长的部分,用于适配不同规模的网络。
Function(功能):设备分配给本地转发指令的一个ID值,该值可用于表达需要设备执行的转发动作,相当于计算机指令的操作码。在SRv6网络编程中,不同的转发行为由不同的功能ID来表达。一定程度上功能ID和MPLS标签类似,用于标识VPN转发实例等。
Args(变量):转发指令在执行的时候所需要的参数,这些参数可能包含流,服务或任何其他相关的可变信息。
SID有很多种不同类型:
End SID(ndpoind SID):这种SID代表网络中的一个目的节点,他给设备的指令是处理srh,更新ipv6目的地址字段,然后查找ipv6路由表进行报文转发
end.x SID:代表的是网络中的一个邻接,他给设备的指令是处理srh,更新ipv6目的地址字段,然后从end.x sid指定的出接口转发报文
end.dt4(6) sid:是一种pe类型的sid,主要用于ipv4(6)场景,标识网络中的VPN实例,他给设备的指令是解封装报文,去除外层的srh和ipv4(6)报文头,然后根据剩余报文里的目的地址查找ipv4(6) vpn实例路由表进行转发
end.dx4(6) sid:用于标识网络中的某个IPv4(6) CE,他给设备的指令是解封装报文,并将解封装后的IPv4(6)报文在该SID绑定的三层接口上转发。假如有多个接口绑定相同的IPv4(6)实例,可以通过End.DX4(6)来决定走那个接口,将其送到VRF对应的接口
End.OP SID:是一个OAM类型的SID,主要用于测试(Ping、Tracert场景)。SRv6中,直接ping End SID是ping不同的,由于报文中的Flag中O没有置位,End SID收到后是不会响应的,此时就需要End.OP SID,直接ping End.OP SID是可以ping通的。End.OP SID一般手动配置
二、SRv6转发过程:
A、转发解析:

上图展示了SRv6转发的一个范例。在这个范例中,结点R1要指定路径(需要通过R2-R3、R4-R5的链路转发)转发到R6,其中R1、R2、R4、R6为有SRv6能力的的设备,R3、R5为不支持SRv6的设备。
步骤一:Ingress结点处理:R1将SRv6路径信息封装在SRH扩展头,指定R2和R4的END.X SID,同时初始化SL = 2,并将SL指示的SID A2::11拷贝到外层IPv6头目的地址。R1根据外层IPv6目的地址查路由表转发到R2。
步骤二:End Point结点处理:R2收到报文以后,根据外层IPv6地址A2::11查找本地Local SID表,命中END.X SID,执行END.X SID的指令动作:SL—,并将SL指示的SID拷贝到外层IPv6头目的地址,同时根据END.X关联的下一跳转发。
步骤三:Transit结点处理:R3根据A4::13查IPv6路由表进行转发,不处理SRH扩展头。具备普通的IPv6转发能力即可。
步骤四:End Point结点处理:R4收到报文以后,根据外层IPv6地址A4::13查找本地Local SID表,命中END.X SID,执行END.X SID的指令动作:SL—,并将SL指示的SID拷贝到外层IPv6头目的地址,由于SL = 0, 弹出SRH扩展头,同时根据END.X关联的下一跳转发。
步骤五:弹出SRH扩展头以后,报文就变成普通的IPv6头,由于A6::1是1个正常的IPv6地址,遵循普通的IPv6转发到R6。
三、相关路由协议扩展支持:
A、IS-IS 路由协议:
为了支持SRv6,IS-IS协议需要发布两类SRv6信息:Locator信息与SID信息。Locator信息用于帮助网络中的其他节点定位到发布SID的节点;SID信息用于完整描述SID的功能,如SID绑定的Function信息。
SRv6 SID Advertisement:节点使用IS-IS扩展来通告其支持的SRv6 SID。每个SRv6SID代表一个特定的操作或路径片段。IS-IS扩展确保这些SID在网络中正确分发和识别。
在SRv6网络中,IS-IS协议通过两个TLV来发布Locator的路由信息:SRv6 Locator TLV和IPv6 Prefix Reachability TLV。SRv6的Locator 必须通过 SRv6 Locator TLV 发布出去,其他具备 SRv6 能力的 IS-IS 设备接收到 TLV 以后,下发对应的Locator网段路由到本机转发表中,没有SRv6能力的则不下发到转发表。
SRv6 Locator TLV包含Locator的前缀和掩码,用于发布Locator前缀。通过该TLV,网络中其他SRv6节点能学习到Locator的路由;SRv6 Locator TLV除了携带用于指导路由的信息外,还会携带不需要关联IS-IS邻居节点的SRv6 SID,例如End SID。

IPv6 Prefix Reachability:Locator对应的网段路由也可以通过Prefix Reachability TLV 236/237发布出去,以便不支持SRv6的设备能够下发转发表项,进而支持与SRv6节点共同组网。如果设备同时收到Prefix Reachability TLV和SRv6 Locator TLV,则Prefix Reachability TLV优先使用。
IPv6 Prefix Reachability TLV与SRv6 Locator TLV拥有相同的前缀和掩码。IPv6 Prefix Reachability TLV是IS-IS协议已有的TLV,普通IPv6节点(不支持SRv6的节点)也能处理该TLV。因此,普通IPv6节点也能够通过此TLV生成Locator路由(指导报文转发到发布Locator的节点的路由),进而支持与SRv6节点共同组网。
**发布EndPoint Function信息:**IS-IS协议的另一个功能就是将SRv6 SID信息和SID对应的SRv6 Endpoint节点行为信息通过IS-IS协议的各类SID Sub-TLV扩散出去,用于路径/业务编程单元对网络进行编程, IS-IS发布的SRv6 Endpoint Function。

B、ospf v3 路由协议:
为了支持SRv6(Segment Routing over IPv6),OSPFv3(Open Shortest Path First version 3)协议进行了相应的扩展。这些扩展主要涉及到新的LSA(Link-State Advertisement)类型和TLV(Type-Length-Value)结构,用于通告和管理SRv6相关的信息。以下是具体的扩展和LSA的变化
1. SRv6 Capabilities Advertisement:OSPFv3节点需要通告其SRv6能力,这些信息通常包括节点可以支持的SRv6 SID类型和行为。这些信息通过新的LSA类型进行传播。
2. SRv6 SID Advertisement:OSPFv3使用特定的LSA和TLV结构来通告SRv6 SID。每个SID代表一个特定的操作或路径片段,这些信息对于路径计算和流量工程至关重要。
3. SRv6 Locator Advertisement:SRv6 Locator是一个IPv6前缀,用于标识一个节点或一组节点的SRv6 SID集合。OSPFv3扩展使得这些Locator能够在网络中进行通告和识别。
4. Prefix-SID Sub-TLV:OSPFv3引入了Prefix-SID Sub-TLV,用于在LSA中携带与IPv6前缀关联的SRv6 SID。这个Sub-TLV包含了SRv6 SID以及其相关属性,如SID类型和行为。
5. SRv6 SID and Locator TLVs:OSPFv3添加了新的TLV类型,以支持SRv6 SID和Locator的广告。这些TLV类型包含了详细的SRv6信息,确保网络中的每个节点都能正确理解和处理这些段。
6. SRv6 SID Structure:OSPFv3扩展定义了SRv6 SID的结构和格式。这些SID通常具有特定的长度和格式,以确保它们在网络中可以正确解析和处理。
7. SRv6 Topology Information:OSPFv3协议扩展支持SRv6拓扑信息的分发,这允许节点知道其他节点的SRv6能力以及如何通过SRv6段访问它们。
8. Extended Prefix Opaque LSA:OSPFv3使用扩展前缀不透明LSA(Opaque LSA)来分发SRv6相关信息。这些LSA类型包含SRv6 SID、Locator以及与前缀关联的其他信息。具体的LSA变化包括:
8.1. SRv6 Locator TLV
Purpose: 通告SRv6 Locator,即IPv6前缀,用于标识一组SRv6 SID。
Content: 包含Locator前缀及其属性。
8.2. SRv6 SID TLV
Purpose: 通告SRv6 SID,指定具体的Segment和其相关行为。
Content: 包含SID值、行为类型及其他属性。
8.3. Extended Prefix Range TLV
Purpose: 提供关于节点SRv6前缀范围的更多详细信息。
Content: 包含前缀范围、长度及相关属性。
8.4. SID/Label Binding TLV
Purpose: 显示前缀与SID之间的绑定关系。
Content: 包含前缀、SID/标签及其属性。
四、协议总结和对比:
A、SRv6与传统SR


B、SRv6 vs SR-MPLS


SRv6相对于SR-MPLS的优势:
原生IPv6支持: SRv6直接基于IPv6转发平面,无需额外的IPv6-over-MPLS封装,提高了网络的简洁性和性能。
更灵活的可编程性: SRv6采用灵活的IPv6扩展头,具有三层可编程空间,包括Segment序列、SID 128bit的运用、Optional TLV等,使得其能支撑更多不同业务的不同需求,契合了业务驱动网络的潮流。
更大的地址空间: SRv6使用128位IPv6地址,相比于SR-MPLS的32位MPLS标签,拥有更大的地址空间,使得网络更为灵活,能够支持更多的业务。
协议简化: SRv6不再需要使用LDP或RSVP-TE进行标签的分发和维护,协议更为简化,减少了网络管理的复杂性。
兼容性: SRv6与普通IPv6设备兼容,更好地适应了网络的发展和演进,提高了网络的可部署性和可维护性。