论文部分内容阅读
服务的交付通常需要引导数据包经过一系列服务功能。然而,服务的部署仍然是一项复杂的、充满风险的工作,大大增加了网络运营商的运营和资本支出成本。一个主要原因是当前的服务部署模型通常与网络拓扑和物理资源紧密耦合,从而导致整个服务的配置变得复杂。为了确保流量经过一组指定的服务功能,在部署时通常需要编写复杂的低级配置。物理拓扑约束还会迫使所有的流量经过一组死板的服务功能,即使流量可能只需要经过其中的某些服务功能。软件定义网络(Software-Defined Networking,SDN)可以避免使用复杂的低级配置来静态部署服务,并通过可编程的方式来动态创建网络连接,进而引导流量经过所需的服务功能。然而,SDN环境下的服务功能链部署也存在一些挑战。针对数据平面中服务功能链的流量引导,如果在流量引导的转发路径中存在环路时,使用OpenFlow协议定义的转发规则来引导流量可能导致不正确的转发行为,因为数据包中缺少能代表其在服务功能链中处理状态的上下文信息,因此交换机需要指示数据包处理状态的信息,以做出正确的转发行为。在故障恢复方面,由于一条链路可能出现在多条服务功能链的转发路径中,这就要求在链路故障发生时,控制器能根据故障链路确定受影响的服务功能链。只有找出故障链路影响的服务功能链,控制器才能为这些服务功能链重新计算转发路径。此外,当某条服务功能链转发路径中的链路发生故障了,同时源通信设备没有停止发送流量,这种情况下流表项的超时失效机制可能无法及时删除原始路径上的流表项,导致流量不能被引导到新的转发路径上,这就要求控制器能通过一种方法去主动删除服务链原始路径上的流表项。本文主要针对基于SDN的服务功能链流量引导进行研究。本文的主要研究内容包括:(1)提出一种基于标签的流量引导方法。在服务功能链的转发路中存在环路的情况下,该方法利用OpenFlow协议定义的Push-Tag动作给数据包添加标签,标签的值代表当前数据包在服务功能链中处理状态的上下文信息,交换机通过查看该标签的值来决定正确的转发行为。本文同时还设计了一个算法用于判断转发路径中是否存在环路,若存在环路,则算法需要找出路径中负责添加标签的交换机。(2)提出一种基于Cookie机制的故障恢复方法。该方法中,每条服务功能链会被分配一个唯一的标识符。对于一条服务功能链,其转发路径上的流表项的Cookie字段需要包含它的标识符信息。在为所有服务功能链的转发路径安装流表项时,该方法需要记录服务功能链的标识符与转发路径上的交换机及其转发端口之间的双向关联关系。当某条链路发生故障时,该方法可以根据故障链路两端的交换机及其端口从关联关系中检索出受影响的服务功能链。对于超时失效机制无法及时删除原始路径上的流表项问题,该方法可以根据服务功能链的标识符从关联关系中检索出转发路径上的交换机,通过向这些交换机发送DELETE类型的FLOW_MOD消息来主动删除不正确的转发规则。最后给出基于Cookie机制的故障恢复流程的伪代码。(3)为控制器设计面向流量引导的北向接口,用于接收创建、删除服务链转发路径的请求。