作者简介:闫雅博 :2017年毕业于北京邮电大学(本科)。2016年至2017年在清华大学网络体系结构研究室实习。
带内控制(in-band)的SDN网络由于有着良好的灵活性以及部署的经济性,已经受到了越来越多的关注。但是在带内控制的SDN网络中,控制流和数据流共用一个一个物理链路进行转发。因此,交换机需要存储用于转发控制流的流表项。这在一些大型网络,例如数据中心网络中会造成一些接近控制器的SDN交换机流表项过多的问题。大量的流表不仅会带来管理的复杂,还会占用例如TCAM等网络资源。所以我们提出了Gather:一种能够优化这些用于转发控制流的流表项的方法。
(1)设计根据
下图是传统带内控制下的SDN网络的流表分布图(本文中只关注一个控制器的情况):
图表 1:传统SDN网络中流表的组织方式
在一个网络拓扑中,如果使用最短路径算法计算各个交换机到控制器的路径,可以得到一个树状的控制拓扑图,Gather便是基于这一树状的拓扑图进行优化。
从图可以看出传统网络中流表存储的特点是靠近控制器的交换机需要为之后的子节点存储控制流的流表项,因此越是靠近树根(控制器)的交换机需要存储更多的控制流的流表项。而在交换机数量很多的网络中,例如数据中心网络,这会造成靠近控制器的交换机出现一个明显的流表数量激增的现象。Gather的主要目标是减少这些不必要的流表开销。
(2)设计思路
Gather的基本思路是将拓扑中的交换机划分为一个个组(group)。一个组相当于整个控制树的一个联通子集。同时一个组由一个标签(label or tag)来表示。实现标签的方式有很多,在本文中,我们使用segment routing来实现标签系统。下图是Gather的示意图:
图表 2:Gather 实现流表项优化示意图
从图中可以看出S2,S3,S4被分为一组,所有被发往该组的包都被打上X标签(label)。S2在收到包之后,通过匹配X标签,就会知道该包是发往组内交换机的数据,之后其会继续在流表2中匹配该包的流表,决定转发策略。
同时,在对拓扑进行一轮优化之后,仍然可以在现有的分组基础上进行第二轮优化。具体的做法是将组都视作交换机,进行替换。之后会得到一个缩小的拓扑,可以在该拓扑上继续重复优化,进一步减少控制流的流表。但同时数据包中的标签会增加一个。