论文部分内容阅读
软件定义网络(SDN:Software-Defined Networking)采用了数据平面与控制平面相分离的开放式系统架构,可有效地简化网络的控制与管理,促进网络的创新。早期SDN控制平面向外提供低级别的编程接口,编程过程较为复杂,网络功能代码难以复用。为此,SDN组合编程应运而生,其核心思想是将网络功能原子化,通过组合算子将不同网络功能模块灵活组合,动态构建复杂的网络应用,从而降低网络编程的复杂性。SDN组合编程逻辑架构至上而下可分为策略层、编译层以及部署层:用户在策略层根据需求将不同网络功能模块进行正确地组合,通过编译层的编译算法将上层模块组合正确高效地编译成单独的网络策略规则,并将网络规则通过部署层合理地部署到底层不同网络设备。 然而,上层网络应用复杂的逻辑组合场景与异构的底层设备架构给上述组合编程过程中的正确性与高效性带来了极大挑战。为了应对这些挑战,本文主要从组合模块逻辑冲突检测、组合编程动作计算方法以及规则适配机制三方面展开研究。 组合模块冲突检测机制。提出了一种模块内与模块间的逻辑冲突检测机制,保证用户在进行不同网络模块组合时能够及时探测潜在的错误组合与配置。该机制从模块规则本身出发,提出了规则可用性原则与规则最简化原则;以此为理论基础,分析不同场景下的规则间可能存在的逻辑冲突并描述了逻辑冲突的相关特征;通过位扩展的编码机制简化了逻辑冲突特性检测中需要进行的集合运算。在组合编程框架CoVisor上进行了实现并对其已有模块组合进行了验证,实验结果表明大部分模块内存在冗余规则的情况,其可能导致组合编译后规则表的膨胀,并检测到其存在1种逻辑组合冲突的场景。 组合编程动作计算方法。提出了一种基于哈密顿路径的动作计算方法,确保不同模块在不同组合算子的作用下,其编译后的规则不仅在匹配域还要在规则所关联的动作上保持等价性。本文分析了动作等价性的判断标准,将组合动作的编译计算转换成在对应有向图中寻找哈密顿路径问题;讨论了不同设备模型下的动作计算方法,通过提出的可构造序理论,可有效判断哈密顿路径的存在性;设计了简单、贪心、枚举三种路径搜索算法以适应不同场景的需求。在CoVisor平台上实现了该方案,替换了其原有通过直接串接的方式实现的动作计算,并对不同的动作搜索路径下的性能开销与结果优化进行了评测,实验结果表明通过枚举方法进行路径搜索不仅可以得到最优化的动作计算结果,即包含的动作数最少,而且其性能开销最大为300us,可满足一般场景的需要。 规则适配机制。提出了一种基于有向无环图的规则映射方法,确保上层网络规则可动态映射到不同的硬件设备之上。首先分析了规则的等价性判断标准,将网络策略规则对应的流表流水线抽象成有向无环图,通过对有向图中路径搜索查找需要转换的流表规则,通过对流表规则的匹配域和关联动作进行分析,定义其转换过程中需要保持的先后依赖关系,提出了代数式的目标规则的优先级计算方法,并根据目标转发模型进行规则的拆分与映射。通过构造典型的控制流程序与不同的数据面流水线进行了实验验证,实验结果表明,98%的单条规则转换可以在22.25us内完成,最高性能开销为25us,而整个系统引入的额外开销为1.5ms,远低于局域网环境下可接受流的建立时间5ms~10ms。