Post

SRv6 deep thinking

(本篇文章写于2022年4月3日,现在快2年的时间过去了,技术发展很多,比如RFC9800的诞生,因此本文仅作参考)

IPv6发展了这么多年,终于出了一个杀手级应用SRv6,但是这中间并不是一个简单的过程。

故事首先从MPLS的起源说起

互联网在经过IP网络的快速崛起之后,出现了网络规模急剧膨胀,数据量急剧增大,网络质量急剧下降,网络设备性能急剧提升的情况。传统的IP网络已经不适合了,ATM网络虽然降低了网络的复杂度,但是本身又不够灵活。MPLS应运而生。

MPLS通过标签分发协议,在ETH和IP之间建立起一个2.5层的网络。他通过静态或者动态建立的隧道,封装了ETH/IP协议,极大地降低了路由转发的性能要求,降低了路由表规模,平滑了网络的发展。随后IETF基于MPLS提出了L2VPN网络,支持在IP网络上实现客户二层ETH报文的传统,支持点对点和点对多点模型;MPLS同时还支持L3VPN网络,支持在IP网络上实现客户的三层IP报文传送。在此基础上,发展出了各种OAM检测机制,保护实现机制,MPLS网络得到了蓬勃的发展。在基站回传,政企专线领域得到了极大的应用。运营商的网络也是IP+MPLS的架构,从接入,汇聚,到核心都是如此,实现了网络的规模化应用,同时适应了企业,移动对于网络带宽,测量,可靠性等要求。

这些年在MPLS的网络上逐渐又提出了新的技术方案。

首先是EVPN,传统的L2VPN, L3VPN需要配置多种协议,IGP路由协议OSPF, IS-IS, EGP路由协议BGP, 标签分发协议LDP, RSVP-TE,VPN会话协议LDP远端会话,BGP等。EVPN在控制层面实现了VPN协议的统一,L2VPN, L3VPN都通过BGP协商会话,同时针对L2VPN 中的VPLS,将网络域中的MAC地址学习功能提高到控制层面管理,降低了网络中组播流量,同时可以支持流量的负载分担和保护模型。是对于传统EVPN的一种架构创新。EVPN不仅仅应用在MPLS VPN上,还支持其他比如VXLAN网络,所以在数据中心中也得到了极大的应用。

然后是Segment Routing(简称SR),传统的L2VPN,L3VPN的标签分发协议LDP, RSVP-TE实现复杂,需要维护各个MPLS节点之间的状态,同时由于这些协议又依赖于IGP, 因此标签分发协议和IGP之间的同步和互通,又提升了系统的复杂度,增加了故障点和维护成本。即使是中国移动的PTN方案,虽然缺少很多动态的标签分发协议,但是针对5G的多场景应用来说,也是显得力不从心。SR针对这些问题都有自己的解决方案。针对标签分发协议,SR针对IGP增加了TLV扩展,实现在IGP层面完成标签分发;针对多业务场景,SR实现了源节点基于路径的显示规划,实现了不同业务的按需转发;同时针对SR新的业务场景,提出了TI-LFA保护方案,完美实现了业务的高可靠性。

IPv6 for SR(SRv6)故事的开始

传统IP网络吸取了EVPN和SR的优势,同时利用IPV6本身长地址的优势,提出了SRv6功能。

这里要说一点,在IPV4网络上有一种GRE方案,可以支持用户的L2VPN, L3VPN业务,但这只是将隧道跑在IPV4网络上,用户的业务封装还是MPLS标签。虽然可以用BGP实现用户的标签分配,也即是EVPN over IPv4,但本质还是IPV4和MPLS的一种组合创新,算不上革命性的传统方式。这里你也可以使用IPV6 GRE方案,但是VPN层面还是MPLS技术,没有彻底脱离MPLS的范围。

这里还要提一点为什么要脱离MPLS网络,尤其是对于数据中心业务。因为上述已经提到了MPLS和IGP之间的复杂性,并且需要IP设备硬件升级才能支持MPLS转发,所以传统交换机是无法支持MPLS的。而且数据中心主要是大二层网络,再加部分三层网络,对于MPLS VPN并没有强烈需求,MPLS就更不会有多大的考虑空间。基于IP封装+UDP+VXLAN的方案实现了数据中心的需求,再加上EVPN控制层面的助力,数据中心更没有动力使用MPLS技术了。

上面EVPN over IPv6 GRE其实已经接近了SRv6,只是还差一些。EVPN应该彻底摒弃MPLS的VPN管理思路,而直接使用IPV6地址来提到VPN管理;IPv6 GRE只是完成了BE转发的隧道,并没有SR那种显示路径优势,也没有SR利用IGP扩展带来的网络管理。如果这两者往前走一步,就是SRv6了。

EVPN控制层面实现通过IPV6完成对VPN的管理。

SR层面需要控制层面实现IGP对IPV6 SR的支持,还要转发层面实现IPv6多层封装和转发。

OAM检测机制,保护倒换机制,可以从SR MPLS借鉴过来,并且适应IPV6网络。

幸运的是,上面这些问题都慢慢被解决了。不过我们还会遇到新的问题,最大就是IPv6地址要远远大于MPLS标签(16>4),因此对于硬件实现来说,不仅仅是复杂更是可不可能的问题;对于报文效率来说也是极大的挑战,封装多个IPV6头支持将降低有效载荷的利用率,特别是对于小包来说,报文头长度可能远远大于报文净荷,这当然是低效和浪费的。目前中国移动主导的G-SRV6方案正积极解决这个问题,不过需要控制层面,转发层面,标准协议,芯片厂商等各个方面的支持。

另一方面,如果EVPN over SR MPLS往前走一步,VPN管理摒弃MPLS转而使用IPV6地址,隧道使用IPv6技术来替代MPLS,也就是SRv6了。其实历史究竟是如何演化的,我们现在已经很清楚了,就是后一种方式。不论前一种还是后一种,都需要我们解决几个问题。

This post is licensed under CC BY 4.0 by the author.