定义
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基本原理
SRH
IPv6报文是由IPv6标准头+扩展头(0~n个)+负载Payload组成。为了基于IPv6转发平面实现Segment Routing,IPv6路由扩展头(Routing Header,RH)新增加一种类型,称作SRH(Segment Routing Header)扩展头,该扩展头指定一个IPv6的显式路径,存储的是IPv6的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地址形式。
|
为了便于叙述转发原理,SRH扩展头可以抽象成为图2,其中图2(a)里SID排序是正序,使用<>标识,图2(b)里SID排序是逆序,使用()表示,逆序更符合SRv6的实际封装情况。
图2(a)里各个字段解释如下:
- IPv6 DA:IPv6报文的目的地址,简称IPv6 DA。在普通IPv6报文里,IPv6 DA是固定不变的。在SRv6中,IPv6 DA仅标识当前报文的下一个节点,是不断变换的。
- <Segment List [0],Segment List [1],...,Segment List [n-1],Segment List [n]>:SRv6报文的段列表,在入节点生成。Segment List [0]是SRv6路径上第一个需要被处理的Segment List;Segment List [1]是第二个;Segment List [n-1]是倒数第二个;Segment List [n]是倒数第一个。
SRH的处理过程
在SRv6的SRH里,SL和Segments List信息共同决定报文头部的IPv6目的地址。指针SL最小值是0,最大值等于SRH里的SID个数减一。如图3所示,在SRv6中,每经过一个SRv6节点,SL字段减1,IPv6 DA信息变换一次,其取值是指针当前指向的SID。
- 如果SL值是n,则IPv6 DA取值就是SID [0]的值。
- 如果SL值是n-1,则IPv6 DA取值就是SID [1]的值。
- ...
- 如果SL值是1,则IPv6 DA取值就是Segment List [n-1]的值。
- 如果SL值是0,则IPv6 DA取值就是Segment List [n]的值。
如果节点不支持SRv6,则不执行上述动作,仅按照最长匹配查找IPv6路由表转发。
从以上描述可见,节点对于SRv6 SRH是从下到上进行逆序操作。
另外,SRv6 SRH中的Segment在经过节点处理后也不会弹出。这里主要有3个原因:
- 最早的IPv6的路由扩展头(RH)设计并没有弹出这个选项。
- SRv6 Segment在IPv6包头后面的SRH扩展头中,并且与其他扩展头信息存在关联(如安全加密和校验等),不能简单地弹出。
- 因为没有弹出,SRv6报文头保留了路径信息,可以做路径回溯。另外有一些创新考虑对SRH中的保留的Segment进行重用,做一些新的功能扩展。
SRv6 BE
如图4所示,SRv6 BE的报文封装没有代表路径约束的SRH,其格式与普通IPv6报文格式一致,转发行为也与普通IPv6报文转发一致。这就意味着普通的IPv6节点也可以处理SRv6 BE报文,这也是SRv6兼容普通IPv6设备的秘密。
SRv6 BE的报文封装与普通IPv6报文封装的不同点在于:普通IPv6报文的目的地址是一个主机或者网段,但是SRv6 BE报文的目的地址是一个业务SID。业务SID可以指引报文按照最短路径转发到生成该SID的父节点,并由该节点执行业务SID的指令。