作者简介:李振斌 华为首席协议专家/IETF互联网架构委员会(IAB)委员。负责华为的IP协议研究和标准推动工作。自2009年起积极参与IETF标准创新工作,主导和参与了大量IETF RFC/草案。在过去六年内持续推动了SDN演进的BGP/PCEP/Netconf/YANG的协议创新和标准化,当前研究的重点包括SRv6、网络智能、Telemetry、5G承载等。2019年当选IETF互联网架构委员会(IAB)委员,承担2019 - 2021年的互联网架构管理工作。
本文系《SRv6技术课堂系列》的第一讲,后续将陆续更新各个维度的SRv6技术细节,欢迎大家批评指正。
由于SR MPLS已经普及,相信大家已经对Segment Routing的基本概念有足够的了解。这里重点介绍SRv6独有的工作原理和相关概念。
与SR MPLS的Segment不同,SRv6的Segment有128bits,而且分成了三部分:
图1 SRv6 SID
1、Locator(位置标识):网络中分配给一个网络节点的标识,可以用于路由和转发数据包。Locator有两个重要的属性,可路由和聚合。在SRv6 SID中Locator是一个可变长的部分,用于适配不同规模的网络。
2、Function(功能):设备分配给本地转发指令的一个ID值,该值可用于表达需要设备执行的转发动作,相当于计算机指令的操作码。在SRv6网络编程中,不同的转发行为由不同的功能ID来表达。一定程度上功能ID和MPLS标签类似,用于标识VPN转发实例等。
3、Args(变量):转发指令在执行的时候所需要的参数,这些参数可能包含流,服务或任何其他相关的可变信息。
从SRv6 SID的组成来看,SRv6同时具有路由和MPLS两种转发属性,可以融合两种转发技术的优点。
为了在IPv6报文中实现SRv6转发,引入了一个SRv6扩展头(Routing Type为4),叫Segment Routing Header(SRH),用于进行Segment的编程组合形成SRv6路径。
图2是SRv6的报文封装格式。绿色的是IPv6报文头,棕色部分是SRH,蓝色是报文负荷。
图2 SRv6 SRH
IPv6 Next Header字段取值为43,表示后接的是IPv6路由扩展头。Routing Type = 4,表明这是SRH的路由扩展头,这个扩展头里字段解释如下:
SRv6具有比SR-MPLS更强大的网络编程能力。SRv6的网络可编程性体现在SRH扩展头中。SRH中有三层编程空间:
图3 SRv6的三层编程空间
第一部分是Segment序列。如前所述,它可以将多个Segment组合起来,形成SRv6路径。这跟MPLS标签栈比较类似。
第二部分是对SRv6 SID的128比特的运用。众所周知,MPLS标签封装主要是分成四个段,每个段都是固定长度(包括20比特的标签,8比特的TTL,3比特的Traffic Class和1比特的栈底标志)。而SRv6的每个Segment是128比特长,可以灵活分为多段,每段的长度也可以变化,由此具备灵活编程能力。
第三部分是是紧接着Segment序列之后的可选TLV(Type-Length-Value)。报文在网络中传送时,需要在转发面封装一些非规则的信息,它们可以通过SRH中TLV的灵活组合来完成。
SRv6通过三层编程空间,具备了更强大的网络编程能力,可以更好地满足不同的网络路径需求。
图4 SRv6转发流程
上图展示了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关联的下一跳转发。
步骤5:弹出SRH扩展头以后,报文就变成普通的IPv6头,由于A6::1是1个正常的IPv6地址,遵循普通的IPv6转发到R6。
从上面的转发可以看出,对于支持SRv6转发的节点,可以通过SID指示经过特定的链路转发,对于不支持SRv6的节点,可以通过普通的IPv6路由转发穿越。这个特性使得SRv6可以很好地在IPv6网络中实现增量部署。
SRv6的标准化工作主要集中在IETF SPRING(Source Packet Routing in Networking)工作组,其报文封装格式SRH(Segment Routing Header)等标准化工作在6MAN(IPv6 Maintenance)工作组,其相关的控制协议扩展的标准化,包括IGP、BGP、PCEP、VPN等,分别在LSR、IDR、PCE、BESS等工作组进行。
截止目前,SRv6的标准化基本上分为两大部分:
第一部分是SRv6基础特性,包括SRv6网络编程框架、报文封装格式SRH以及IGP、BGP/VPN、BGP-LS、PCEP等基础协议扩展支持SRv6,主要提供VPN、TE、FRR等应用。所有SRv6基本特性文稿均由华为和思科共同引领,并有Bell Canada、SoftBank、Orange等运营商参与。目前所有文稿(除OSPFv3)均被接收为工作组文稿,标准的成熟度进入了一个新的阶段,特别是最关键的SRH封装草案已经经过IETF IESG批准,很快就会成为RFC。
第二部分是SRv6面向5G和云的新应用,这些应用包括网络切片、确定性时延(DetNet)、OAM、IOAM(In-situ OAM)、SFC、SD-WAN、组播/BIER等。这些应用都对网络编程提出了新的需求,需要在转发面封装新的信息。SRv6可以很好地满足这些需求,充分体现了其在网络编程能力方面具备的独特优势。当前客户对于这些应用需求的紧迫性并不一致,反映到标准化和研究的进展也不尽相同。总体而言SRv6用于OAM、IOAM、SFC的标准化进展较快,已经有多篇工作组草案,网络切片也是当前标准化的一个重点,VPN+切片框架草案已经被接纳为工作组,SRv6 SID用于指示转发面的资源保证服务需求逐渐获得了广泛的认同。
SRv6产业的整体进展在SRv6 Implementation and Deployment Status草案中进行了描述(draft-matsushima-spring-SRv6-deployment-status)。
1.SRv6产品实现
目前主流设备厂商、测试仪和商用芯片已明确支持SRv6。其中华为全系列路由器产品均支持SRv6,思科ASR9000、ASR1000、NCS5500、NCS540等产品也已经支持SRv6。测试仪厂商思博伦和IXIA支持SRv6,芯片厂商海思、博通等也已发布可规模部署的商用芯片,并在主流设备上完成验证。
除此以外,一些开源平台也支持SRv6,如Linux Kernel,Linux Srext module,FD.io VPP等,提供对SRH的一些功能处理。开源工具应用,如Wireshark、Tcpdump、Iptables、Nftables,Snort等,也已经支持了对包含SRH的IPv6报文的处理。
2.SRv6互通测试
欧洲高级网络测试中心(EANTC:European Advanced Networking Test Center)在今年3月成功地进行了SRv6多厂商互通测试,其结果在MPLS + SDN + NFV World Congress 上进行了展示,并发布了互通测试白皮书。参加互通测试的厂商包括华为、Cisco、思博伦和IXIA,完成了SRv6 VPN、TI-LFA、OAM等互通测试例。
3.SRv6部署
在世界范围内已经有多家运营商开启了SRv6商用部署,包括中国电信、中国联通、CERNET2、日本软银和LINE公司、意大利Iliad、乌干达MTN等。
2017年中国推动IPv6的规模部署,经过一年多的建设,各大运营商的IP网络均已支持IPv6,这为SRv6的规模部署提供新业务提供了坚实的基础。截止目前为止,中国电信、中国联通、CERNET2等已经完成了7个局点的部署,SRv6跨域组大网、易于增量部署、快速业务开通的优势得到了充分体现,为整个产业创新起到了积极的示范作用。
4.SRv6产业论坛
随着SRv6技术和标准的不断成熟,业界对SRv6的认可和接受度也越来越高,为了进一步凝聚产业共识,推动SRv6创新应用,经过业界的共同努力,举办了多次SRv6产业会议。
2019年4月在法国巴黎MPLS+SDN+NFV大会期间举办了首届SRv6圆桌会议,与会的业界专家围绕SRv6的价值场景以及如何促进SRv6创新和部署等话题进行了热烈的讨论。
2019年6月推进IPv6规模部署专家委员会主办了第一期SRv6产业沙龙,与会专家分享了SRv6标准创新的最新进展、整体解决方案以及现网的部署应用等。
这些产业活动对于SRv6创新应用起到了积极的推动作用。
SRv6网络编程草案从提出到现在不过两年半的时间,已经有多个商用实现和商用部署,发展之快在IP技术发展的历史上是不多见的。在两年多推动SRv6创新和标准的过程中,我们与业界专家进行了广泛的交流,对于互联网发展历史的经验教训进行了很多反思,从而对于SRv6的价值和意义也有了更进一步的认识。
IPv4技术发展的一个重要教训是可扩展性问题,设计之初没有想到会有这么多的设备接入IP网络,由此触发了IPv6技术的发展。而IPv6技术发展的一个重要教训是可兼容性问题。当时的设想比较简单,32比特的地址空间不够,就把它扩展成128比特,但是128比特的IPv6地址跟32比特的IPV4地址是没有办法兼容的,这样就需要全网的升级支持IPv6,由此导致部署应用的困难。从这个角度看,SRv6可以兼容IPv6路由转发的,并且通过Function ID兼顾了MPLS转发的优点,这就保证了SRv6可以从IPv6网络平滑地演进。
在过去的十多年里,IP技术取得了巨大成功,统一了网络承载,可以将其称之为All IP 1.0时代。这其中MPLS扮演了非常重要的角色。基于MPLS的承载技术用于IP Core承载,再到城域承载、移动承载,替代了帧中继、ATM、TDM等多种网络技术,实现了网络承载技术的统一。MPLS成功依赖于三个重要的特性:VPN、TE和FRR,因此SRv6技术发展首先要把这三个特性优势继承下来,经过两年多的发展,这个目标已经基本达成。
All IP 1.0成功的同时也带来了一些问题和挑战,总结起来主要有三个方面:
第一个是IP承载网络的孤岛问题。虽然MPLS统一了承载网,但是IP Core承载网、城域承载网、移动承载网之间是分离的,因此要使用跨域VPN等复杂的技术来解决,导致端到端业务部署的困难。
第二个是IPv4与MPLS封装的可编程空间有限。现在产生了很多新的业务,需要在转发面加入更多的封装,而现在IETF已经发表声明停止为IPv4制定更进一步的标准,并且MPLS标签的字段采用固定长度,标签栈提供的网络编程能力也相对受限,这些导致它们在满足未来业务的网络编程需求存在极大的挑战。
第三个是应用与网络承载的解耦,导致网络自身的优化困难,而且难以提升价值。当前运营商普遍面临被管道化的挑战,无法从增值应用中获得相应的收益,而应用信息的缺失,使得网络调度和优化采用粗放的方式进行,也造成资源的浪费。网络技术发展的历史上也努力做过尝试,但是都失败了,例如ATM到桌面技术。MPLS也曾经试图能够入云,实际连数据中心也没能进去,反而是VXLAN成为了事实标准。
图5 IP技术发展代际
SRv6技术的出现,实际承担了解决这些关键问题的使命:
第一个是SRv6兼容IPv6路由转发,基于IP可达性实现不同网络域间的连接更加容易,无需像MPLS那样必须引入额外信令,并且还需要全网升级。
第二个是基于SRH能够支持更多种类的封装,可以很好地满足新业务的多样化需求。
第三个是SRv6对于IPv6的亲和性使得它能够将IP承载网络与支持IPv6的应用无缝融合在一起,通过网络感知应用,给运营商带来更多可能的增值。
IPv6发展的二十年的里程证明,仅仅依靠地址空间的需求不足以支撑其规模部署,SRv6技术快速发展的实践说明通过新的业务应用可以更好地促进IPv6发展应用。随着5G、物联网、云等业务的发展,更多网络设备的接入对于地址扩展的需求也在增加,SRv6和这方面的需求结合在一起,将会推动网络进入一个新的All IP时代,基于All IPv6实现智简网络。