SRv6基本原理
概述
网络指令:SRv6 Segment(SID)
Locator | Function | Arguments |
---|---|---|
Locator是网络拓扑中分配给一个网络节点的标识,用于路由和转发报文到该节点。Locator标识位置信息,它有两个重要的属性:可路由和可聚合。 | Function用来表达该指令要执行的转发动作,相当于计算机指令的操作码。 | Arguments(Args)是一个可选字段。它是指令在执行时对应的参数,这些参数可能包含流、服务或任何其他相关的信息。 |
目前的Segment Routing技术就是通过在源节点封装一个有序的Segment列表,指示网络在指定节点上执行对应的指令来实现网络的可编程。
网络节点
- SRv6源节点(SRv6 Source Node):生成SRv6报文的源节点。
- 中转节点(Transit Node):转发SRv6报文但不进行SRv6处理的IPv6节点。
- SRv6段端点节点(SRv6 Segment Endpoint Node):接收并处理SRv6报文的任何节点,其中该报文的IPv6目标地址必须是本地配置的SID或者本地接口地址,后文简称为Endpoint节点。
SRv6扩展报文头
字段 | 长度 | 含义 |
---|---|---|
Next Header | 8 bit | 标识紧跟在SRH之后的报文头的类型。 |
Hdr Ext Len | 8 bit | SRH报文头的长度。不包括前8 Byte的SRH的长度 |
Routing Type | 8 bit | 标识路由扩展报文头(Routing Header)类型,SRH的类型为4 |
Last Entry | 8 bit | 段列表最后一个元素的索引 |
Flags | 8 bit | 预留的标志位,用于特殊的处理,比如OAM |
Tag | 16 bit | 标识同组报文 |
Segment List[n] | 128*n bit | 段列表中的第n个Segment,Segment是IPv6地址形式 |
Optional TLV | 长度可变 | 可选TLV(Type Length Value,类型长度值)部分,例如Padding TLV和HMAC |
扩展报文头TLV
Segment List携带的SID都是特定节点要执行的指令信息,也即每个SID只有在发布该SID的节点才会被执行,其他节点只做基本的查表转发动作。相对
来说,TL V携带的信息可以被Segment List中包含的每一个SID对应的发布节点处理,而不仅仅受限于某一个节点。
SRv6指令集
EndPoint 节点行为
- End:End表示一个指令的终结,开始执行下一个指令。对应的转发动作是SL减1,并将SL指向的SID复制到IPv6报文头的目的地址字段。
- X:指定一个或一组三层接口转发报文。对应的转发行为是按照指定出接口转发报文。
- T:查询路由转发表并转发报文。
- D:解封装。移除IPv6报文头和它相关的扩展报文头。
- V:根据VLAN查表转发。
- U:根据单播MAC查表转发。
- M:查询二层转发表,进行组播转发。
- B6:绑定到SRv6 Policy。
中转节点行为
中转行为 | 功能简述 |
---|---|
T | 不处理SRH,正常查找IPv6路由表转发 |
T.Insert | 为接收到的IP报文插入SRH扩展报文头,并查表转发 |
T.Insert.Red | 插入时使用Reduced SRH |
T.Encaps | 为接收到的IP报文封装外层IPv6报文头与SRH,并查表转发 |
T.Encaps.Red | 封装中使用Reduced SRH |
T.Encaps.L2 | 为接收到的二层报文封装外层IPv6报文头和SRH,并查表转发 |
T.Encaps.L2.Red | 封装中使用Reduced SRH |
SRv6报文转发
本地SID表
SRv6节点维护一个本地SID(Local SID)表,该表包含所有在本节点生成的SRv6 SID信息。本地SID表有以下用途。
- 存储本地生成的SID,例如End.X SID。
- 指定绑定到这些SID的指令。
- 存储和这些指令相关的转发信息,例如VPN实例、出接口和下一跳等。
报文转发流程
- SRv6源节点的处理:将SRv6路径信息封装在SRH扩展报文头中,指定链路B->C和D->E的End.X.SID
- EndPoint节点的处理执行End.X SID的指令动作:SL减1,并将SL指示的SID更新到外层IPv6报文头的目的地址字段,同时将报文从End.X SID绑定的链路发送出去。
- 中转节点的处理:按照正常的IPv6报文处理流程,按照最长匹配原则查找IPv6路由表,将报文转发
SRv6 TE
Segment Routing 的出现弥补了 RSVP-TE 的不足。Segment Routing 利用源路由机制,通过在报文头中携带一个有序的指令列表(Segment List),指导报文在网络中的转发。这些指令不是面向数据流的,而是面向节点和链路的,因此网络设备只需维护有限的节点和链路状态即可。Segment Routing 的路径信息被显式的携带在报文中,中间节点只需按照报文中的路径信息进行转发,无须维护逐流的路径状态。
SRv6 Policy
通过在SRH 中封装一系列的SRv6 Segment ID,可以显式指导报文按照规划的路径转发,实现对转发路径端到端的细粒度控制,满足业务的高可靠、大带宽、低时延等SLA 需求。
SRv6 Policy模型
Key值:SRv6 Policy使用如下三元组作为Key,全局唯一标识一个SRv6 Policy。
SRv6 Policy算路
上文介绍到SRv6 Policy的Candidate Path可以通过多种方式生成,主要包括静态指定路径、头节点算路和控制器算路3类。不同方式生成的Candidate Path可以通过Protocol-Origin和originator字段来区分。以下展开介绍。
静态指定路径:
头结点算路:头节点算路和RSVP-TE类似。首先头节点利用IGP携带的TE信息和IGP链路状态信息组成TEDB,然后基于CSPF算法按照带宽、时延、SRLG和不相交路径等约束计算满足条件的路径,并安装相应的SRv6 Policy指导转发。
控制器算路:控制器通过BGP-LS等收集网络拓扑、TE信息以及SRv6信息,并根据业务需求集中进行路径计算,然后通过BGP/PCEP等协议将SRv6 Policy下发到头节点。控制器算路能够支持全局调优、资源预留和端到端跨域。
SRv6 Policy 引流
SRv6 Policy 部署在头节点之后,还需要完成引流工作,将流量引导到 SRv6 Policy中。目前基本有 Binding SID 和 Color 匹配这两大类引流方式。
第一种是通过节点的 binging SID划分发送路径,第二种是通过<Color, Endpoint> 匹配SRv6 Policy。
DSCP引流通过 IP 报文头中封装的 DSCP 值来引流,这种方式可以对命中同一个路由但不同来源的业务进一步细分。
SRv6 Policy 数据转发
IPv4 L3VPN
- 控制器向PE1下发SRv6 Policy(color、endpoint、candidate path)
- PE2向PE1发布BGP路由
- PE1接收到BGP路由以后,利用路由color和下一跳迭代到SRv6 Policy
- PE1接收到普通单播报文,查找VPN实例路由表,开路由接口是SRv6隧道接口。PE1为报文插入SRH信息,封装Segment List和IPv6报文头,转发
- 中间节点逐条转发
- 到达PE2以后,PE2使用报文的IPv6目的地址查找本地SID,SL减一,更新IPv6DA
- 使用VPN SID查找本地SID表,命中了End.DT4 SID,执行命令。(D是解封装,T是查询路由表并转发,4是IPv4路由表)
SRv6 VPN
VPN是依靠 ISP Internet Service Provider ,因特网服务提供者)在公共网络中建立的虚拟专用通信网络,也就是我们常说的私网。 VPN 具有专用和虚拟的特征,可以在底层承载网络上创建出逻辑隔离的网络。
基本模型
- CE(Customer Edge,用户网络边缘设备):CE 是用户网络的边缘设备,与服务提供商(Service Provider,SP)相连。CE 可以是路由器或交换机,也可以是一台主机。CE 感知不到VPN 的存在,也不需要支持VPN 的承载协议,比如MPLS 或SRv6。
- PE(Provider Edge,运营商边缘设备):PE 是服务提供商网络的边缘设备,与用户的CE 直接相连。在VPN 中,对VPN 的所有处理都发生在PE 上。
- P(Provider):P 是服务提供商网络中的骨干设备,不与CE 直接相连。P 设备不感知VPN,只需要具备基本网络转发能力即可,比如MPLS 转发或IPv6 转发能力。
业务类型
承载三层业务的VPN 为L3VPN。由于VPN 是一种虚拟私有网络,不同的VPN 独立管理自己使用的地址空间,所以不同VPN 的地址空间可能会发生重合。比如,在L3VPN 中,VPN1 和VPN2 都使用了地址空间10.110.10.0/24。为实现这两个VPN 的正常通信,需要将这两个VPN 的流量隔离。整体上,一个 VPN 实例包括:标签转发表、 IP 路由表、与 VPN 实例绑定的接口、以及 VPN 实例的管理信息,包括RD Route Distinguisher ,路由标识)、 RT Route Target ,路由目标)、成员接口列表等。
SRv6 L3VPN
BE
TE
APN6
APN6的产生
2013年,在美国计算机协会数据通信专业组会议上,谷歌发表了“ B4: Experience with a Globally Deployed Software Defined WAN ”一文,首次将其数据中心的广域网连接的设计和部署经验公之于众,宣称其广域网连接能达到接近 100% 的利用率。
B4的基本思路是保证高优先级流量以低延迟到达,低优先级大数量流量根据高优先级业务自适应调整其传输速率,在时域上分摊开,从而把空闲管道填满,有效提高链路利用率。
B4网络解决的是一个基于不同应用的网络流量工程的问题。因为掌握了应用的流量,通过有效的调度可以极大地提升网络利用率。借鉴谷歌根据应用需求和流量特征调整网络资源的思路,我们需要打破传统的 IP 承载网络与应用之间的割裂限制,使网络有效感知应用需求,从而对所承载的业务实现精细化的运营,在保证 SLA (服务水平协议)的同时,提高网络资源利用率。
APN6的解决思路
- 开放的应用信息携带:APN6 通过IPv6 携带应用特征信息,包括应用标识符及其对网络性能的要求。这些应用信息还可以根据需求进一步扩展。携带应用信息的行为不是强制性的,应用可以选择是否携带应用信息。
- 丰富的网络服务:为了实现精细化运营,不仅需要有细粒度的应用特征信息,而且需要网络侧提供丰富的服务,否则即使携带了应用特性信息也失去了意义。除了传统的TE 流量工程和QoS 服务,前面我们还介绍了IP 网络为支持5G 和云业务提供的网络切片、确定性时延、SFC、BIERv6/组播等新的服务,这些都可以与应用信息匹配,提供更细粒度的服务。而为了支持这些丰富的网络服务,也需要
基于IPv6/SRv6 扩展来支持。 - 准确的网络测量:测量网络性能并更新网络服务来匹配应用,以更好地满足细粒度的SLA 要求。
APN6 可以较为有效地解决传统网络感知应用方案中所遇到的挑战和问题。APN6 通过IPv6 扩展头将业务报文的应用特征信息(包括应用标识信息及其对网络的性能需求)携带进入网络,使得网络更加快速有效地感知到应用及其需求,从而为其提供精细化的网络资源调度和SLA 保证,更好地为应用提供服务。
APN6框架
APN6需求
IPv6基础介绍
- 地址空间方面,IPv4地址采用32bit标识,IPv6采用128bit标识
- 报文处理方面,IPv6增加了流标签域,提出扩展报文头的概念。
- 地址配置方面,IPv6 协议内置支持通过地址自动配置方式使主机自动发现网络并获取 IPv6 地址,大大提高了内部网络的可管理性。
- 路由聚合方面,层次化的网络结构使路由聚合更为容易,提高了路由转发效率。
- 端到端安全方面,。IPv6 中,网络层支持 IPsec 的认证和加密,支持端到端的安全。
- Qos服务质量保障方面,IPv6 新增了流标记字段,可以用于提供 QoS 保证。
- 移动性支持方面,解决了移动 IPv4 的三角路由、源地址过滤问题,使得移动通信处理效率更高且对应用层透明。
IPv6地址
表示方式
IPv6 地址总长度为 128 bit,通常分为 8 组,每组为 4 个 16 进制数的形式,每组 16 进制数间用冒号分隔,这是 IPv6 地址的首选格式。
FC00:0000:130F:0000:0000:09C0:876A:130B
地址结构
- 网络前缀 :
n
bit,相当于网络ID - 接口标识:
(128 - n)
bit,相当于主机ID
接口标识可通过3 种方法生成:手工配置、系统通过软件自动生成、遵循IEEE EUI-64规范自动生成。其中,遵循EUI-64 规范自动生成最为常用。IEEE EUI-64 规范是将接口的MAC 地址转换为IPv6 接口标识的过程。
地址分类
IPv6地址段 | 地址类型 |
---|---|
2000::/3 | 全球单播地址 |
FC00::/7 | 唯一本地地址 |
FE80::/10 | 链路本地地址 |
FF00::/8 | 组播地址 |
IPv6报文头
基本报文头
IPv6 报文由IPv6 基本报文头、IPv6 扩展报文头以及上层协议数据单元3 部分组成。上层协议数据单元一般由上层协议报文头和它的有效载荷构成,有效载荷可以是一个ICMPv6 报文、一个TCP 报文或一个UDP 报文。
字段 | 长度 | 解释 |
---|---|---|
Version | 4bit | 版本号。对于IPv6,该值为6 |
Traffic Class | 8bit | 流类别。等同于IPv4 中的ToS 字段,表示IPv6 数据报文的类或优先级,主要应用于QoS |
Flow Label | 20bit | 流标签。IPv6 中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效的区分数据流 |
Payload Length | 16bit | 有效载荷长度。有效载荷是指紧跟IPv6 基本报文头的数据报文中的其他部分(即扩展报文头和上层协议数据单元)。该字段只能表示最大长度为65535 Byte 的有效载荷。 |
Next Header | 8bit | 下一个报文头。该字段定义紧跟在IPv6 报文头后面的第一个扩展报文头(如果存在)的类型,或者上层协议数据单元中的协议类型 |
Hop Limit | 8bit | 跳数限制。该字段类似于IPv4 中的TTL 字段,它定义了IP 数据报所能经过的最大跳数。 |
Source Address | 128bit | 源地址,表示发送方的地址 |
Destination Address | 128bit | 目的地址,表示接收方的地址 |
扩展报文头
- IPv6 基本报文头(IPv6 Header)
- 逐跳选项扩展报文头(Hop-by-Hop Options Header)
- 目的选项扩展报文头(Destination Options Header)
- 路由扩展报文头(Routing Header)
- 分片扩展报文头(Fragment Header)
- 认证扩展报文头(Authentication Header)
- 封装安全有效载荷扩展报文头(Encapsulating Security Payload Header)
- 目的选项扩展报文头(Destination Options Header)(指那些将被IPv6 报文的最终目的地处理的选项)
- 上层协议报文(Upper-Layer Header)
ICMPv6
在IPv4 中,ICMP 向源节点报告关于向目的地传输IP 报文过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息,如:目的不可达、报文超长、超时、回应请求和回应应答等。在IPv6 中,ICMPv6 除了提供ICMPv4 常用的功能之外,还是其他一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU(Path Maximum Transmission Unit,路径最大传输单元)发现等。
PMTU
在IPv6 中,为了减少中间转发设备的处理压力,中间转发设备不对IPv6 报文进行分片,报文的分片将在源节点进行。当中间转发设备的接口收到一个报文后,如果发现报文长度比转发接口的MTU 值大,则会将其丢弃;同时将转发接口的MTU 值通过ICMPv6 报文的“Packet Too Big”消息发给源端主机,源端主机以该值重新发送IPv6 报文,这样带来了额外流量开销。PMTU 发现协议可以动态发现整条传输路径上各链路的MTU 值,减少由于重传带来的额外流量开销。
ND
NDP(Neighbor Discovery Protocol ,邻居发现协议)是 IPv6 协议体系中一个重要的基础协议。邻居发现协议替代了 IPv4 的 ARP Address Resolution Protocol ,地址解析协议)和 ICMP 路由器发现( Router Discovery ),它定义了使用 ICMPv6 报文实现地址解析、邻居不可达检测、重复地址检测、路由器发现、重定向等功能。