SFC通常指一组SF(Service Function,业务功能)节点组成的序列。为满足特定的商业、安全等需求,对于指定的业务流,通常要求在转发时经过指定SF序列的处理,这些SF包括DPI(Deep Packet Inspection,深度包检测)、FW、IPS(Intrusion Prevention System,入侵防御系统)和WAF(Web Application Firewall,网络应用防火墙)等多种VAS节点。
SFC的架构主要包括以下关键部分。
- SF:提供特定网络服务的节点,这些网络服务一般处在OSI(Open System Interconnection,开放系统互连)模型的四层~七层,例如DPI、FW、IPS等。这些服务通常又是网络增值服务,所以也可以将SF等同于VAS。
- SFF(Service Function Forwarder,业务功能转发器):支持SFC的转发器,一般挂接SF节点,用于将报文转发到SF节点。
- SFP(Service Function Path,业务功能路径):SFC对应的转发路径。
- Classifier(流分类器):用于将数据流分类,并转发到对应的SFP。流分类器是SFC的起点,一般支持基于五元组的流量分类规则。
- SFC Proxy:为不支持SFC的SF节点提供代理接入SFC的能力。
SR-MPLS和SRv6都支持SFC。相比于SR-MPLS,SRv6还可以通过SRH TLV携带SFC的元数据,可以更好地支持SFC,所以本节将重点介绍基于SRv6的SFC。目前业界主要有两种SRv6 SFC解决方案。
- Stateless(无状态的)SRv6 SFC:指不在SFF上维护每个SFC的转发状态的解决方案。
- Stateful(有状态的)SRv6 SFC:需要在SFF上维护每个SFC的转发状态的解决方案,其实是一种SRv6与NSH结合的方案。
- Stateless SRv6 SFC
在SRv6网络中,可以通过SID的组合来实现转发路径的编程,即显式路径编程。若编程的路径依次穿过指定的SF,则实现了SFC,这就是Stateless SRv6 SFC的主要思想。
在Stateless SRv6 SFC方案中,通过Segment List指定了SFC的转发路径,SRH TLV也可以携带SF相关的元数据,因此不需要NSH来指导报文的转发,也不需要在SFF上维护每个SFC的转发状态。
Stateless SRv6 SFC方案里包含如下关键组件。
- SRv6-aware SF:支持SRv6的SF节点,可以直接连到SFF。SF需要发布对应的SID,这个SID与服务功能对应,所以被称为Service SID。
- SRv6-unaware SF:不支持SRv6的SF节点,需要先在SFF和SRv6unaware SF之间部属SRv6 Proxy来完成SRv6报文的处理。
- SRv6 Proxy:SRv6的代理,SRv6 Proxy完成报文从SRv6网络转发到SRv6-unaware SF以及从SRv6-unaware SF返回SRv6网络的代理。根据代理类型的不同,存在多种代理Service SID。
- End.AS:Static Proxy(静态代理)SID,由SRv6 Proxy节点发布。End.AS的功能是剥离SRH,并将原始报文通过对应的接口或者虚拟接口(比如VLAN ID对应的接口)发送到SF。携带指定VLAN ID的报文从SF返回SRv6 Proxy之后,根据VLAN ID,将缓存的SRH插回报文中,继续转发。通过静态配置生成SRH与虚拟接口的映射关系,所以称其为静态代理SID。
- End.AD:Dynamic Proxy(动态代理)SID,由SRv6 Proxy节点发布。End.AD在静态代理SID的基础上增加了动态学习的能力,将SRH与虚拟接口的映射关系由静态配置改变为根据接收到的报文的SRH动态生成。
- End.AM:Masquerading Proxy(伪装代理)SID,由SRv6 Proxy节点发布。End.AM的功能是将真正的目的地址,即Segment List中的SID[0]更新到DA,从而伪装出携带真实目的地址的IPv6报文,转发到SF。SF返回的报文在SRv6 Proxy处需要将下一个SID替换成DA,继续转发。
Stateless SRv6 SFC只需扩展发布Service SID信息,就能实现SFC,且不需要在SFF上维护每个SFC的状态,所以相比NSH简单许多,有效地降低了SFC的部署难度,成为当前部署SFC的新选择。
当然,Stateless SRv6 SFC也存在一定的问题,例如当SF数目过多时, Segment List中SID数目比较多,SRv6报文头开销相对较大。当前大部分SF还不支持SRv6,所以还需要部署SRv6 Proxy,这在一定程度上增加了部署SFC的难度。
- Stateful SRv6 SFC
Stateful SRv6 SFC结合了SRv6和NSH两种技术,主要面向SF支持NSH但不支持SRv6的场景,是一种从非SRv6网络向SRv6网络演进的过渡型方案。在Stateful SRv6 SFC方案的标准文稿中,主要描述了两种解决方案。
方案一:业务平面为NSH,指导整条SFC转发,SRv6只用于连接SFF的隧道技术。
方案二:SRv6 Segment List携带整条SFC转发路径信息,贯穿整条SFC的多个SFF,但SFF到SF之间通过查询NSH转发表进行转发。
方案二与方案一的不同点在于入节点通过SRv6把整条SFC的路径显式地编程到Segment List中,而不是由NSH把多段SRv6隧道串联起来。方案二与方案一的共同点是SFF到SF这段路径的路由依然由NSH来决定。
总体来看,Stateless SRv6 SFC不必在SFF上维护每个SFC的状态,当SF支持SRv6时,方案的实现难度更小。Stateful SRv6 SFC的两种方案虽然都需要维护每个SFC的状态,但都兼容基于NSH的SFC解决方案,也不要求SF支持SRv6。基于NSH和SRv6结合的转发在一定程度上减少了SRv6报文头中Segment List内SID的数量,缩短了报文头的长度,是NSH网络向SRv6网络升级的一种可选的过渡方案。