定义
SRv6(Segment Routing IPv6,基于IPv6转发平面的段路由)是基于源路由理念而设计的在网络上转发IPv6数据包的一种协议。SRv6通过在IPv6报文中插入一个路由扩展头SRH(Segment Routing Header),在SRH中压入一个显式的IPv6地址栈,并由中间节点不断的进行更新目的地址和偏移地址栈的操作来完成逐跳转发。
目的
未来的网络是面向5G时代的网络。面对5G,承载网也需要做出相应的调整。化繁为简,低时延,SDN/NFV化是后续的主要发展方向。
为了5G网络的进一步发展,用户希望能够借用IPv6的地址更简单的实现VPN。SRv6技术就是采用现有的IPv6转发技术,通过扩展IPv6报文的头域,实现类似标签转发的处理。SRv6将一些IPv6地址定义成实例化的SID(Segment ID),每个SID有着自己显式的作用和功能,通过不同的SID操作,实现简化的VPN,以及灵活的路径规划。
优点
SRv6技术可以给用户带来如下受益:
-
简化网络配置,更简易的实现VPN。
SRv6基于IPv6转发,不使用MPLS技术,完全兼容现有IPv6网络。中间Transit节点可以不支持SRv6,按照正常路由转发含有SRH的IPv6报文。
-
在SRv6技术的基础上结合RLFA(Remote Loop-free Alternate)FRR算法,形成高效的TI-LFA(Topology-Independent Loop-free Alternate)FRR算法,原理上支持任意拓扑保护,能够弥补传统隧道保护技术的不足。
-
各种服务类型的SID搭配使用,头节点可以灵活规划显式路径,调整对应的业务流量。
SRv6基本原理
SRH
IPv6报文是由IPv6标准头+扩展头(0~n个)+负载Payload组成。为了基于IPv6转发平面实现Segment Routing,IPv6路由扩展头(Routing Header,RH)新增加一种类型,称作SRH(Segment Routing Header)扩展头,该扩展头指定一个IPv6的显式路径,存储的是IPv6的Segment List信息,其作用与SR-MPLS里的Segment List一样。
头节点在IPv6报文增加一个SRH扩展头,中间节点就可以按照SRH扩展头里包含的路径信息转发。SRH扩展头的格式如图1所示。
字段名 | 长度 | 含义 |
---|---|---|
Next Header | 8比特 | 标识紧跟在SRH之后的报文头的类型。常见的几种类型如下:
|
Hdr Ext Len | 8比特 | SRH头的长度。指不包括前8字节(前8字节为固定长度)的SRH的长度。 |
Routing Type | 8比特 | 标识路由头部类型,SRH Type是4。 |
Segments Left | 8比特 | 到达目的节点前仍然应当访问的中间节点数。 |
Last Entry | 8比特 | 在段列表中包含段列表的最后一个元素的索引。 |
Flags | 8比特 | 数据包的一些标识。 |
Tag | 16比特 | 标识同组数据包。 |
Segment List[0]~Segment List[n] | 128比特 | 段列表,段列表从路径的最后一段开始编码。Segment List是IPv6地址形式。
|
Optional TLV Objects | 长度可变 | 可选TLV(Type Length Value,类型长度值)部分,例如Padding TLV和HMAC(Hash-based Message Authentication Code,散列信息认证码) TLV |
为了便于叙述转发原理,SRH扩展头可以抽象成为图2。其中图2里SID排序是逆序。
各个字段解释如下:
- IPv6 Destination Address:IPv6报文的目的地址,简称IPv6 DA。在普通IPv6报文里,IPv6 DA是固定不变的。在SRv6中,IPv6 DA仅标识当前报文的下一个节点,是不断变换的。
- <Segment List [0], Segment List [1], ..., Segment List [n-1], Segment List [n]>:SRv6报文的段列表,类似于SR-MPLS中的MPLS标签栈信息,在入节点生成。Segment List [n]是SRv6路径上第一个需要被处理的Segment List;Segment List [n-1]是第二个;Segment List [1]是倒数第二个;Segment List [0]是倒数第一个。
<Segment List [0], Segment List [1], ..., Segment List [n-1], Segment List [n]>里SID排序是逆序,书写不够方便,有时候会使用()来进行正序书写,也即(Segment List [n], Segment List [n-1], ..., Segment List [1], Segment List [0])。
SRH的处理过程
如图3所示,在SRv6中,每经过一个SRv6节点,Segments Left(SL)字段减1,IPv6 DA信息变换一次。Segments Left和Segment List字段共同决定IPv6 DA信息。
- 如果SL值是n,则IPv6 DA取值就是SID [n]的值。
- 如果SL值是n-1,则IPv6 DA取值就是SID [n-1]的值。
- ...
- 如果SL值是1,则IPv6 DA取值就是SID [1]的值。
- 如果SL值是0,则IPv6 DA取值就是SID [0]的值。
从以上描述可见,节点对于SRv6 SRH是从下到上进行逆序操作,这一点与SR-MPLS有所不同。
SRv6与SR-MPLS的另外一个不同是:SRv6 SRH中的Segment在经过节点处理后也不会弹出。这里主要有3个原因:一是最早的IPv6的路由扩展头(RH)设计跟MPLS没有太多关联,当时的设计并没有弹出这个选项;二是MPLS每一个标签相对独立,并且位于顶部,可以直接弹出,SRv6 Segment在IPv6包头后面的SRH扩展头中,并且与其他扩展头信息存在关联(如安全加密和校验等),不能简单地弹出;三是因为没有弹出,SRv6报文头保留了路径信息,可以做路径回溯。另外有一些创新考虑对SRH中的保留的Segment进行重用,做一些新的功能扩展。