软件定义网络中拓扑发现机制的性能改进研究
2018-06-06梁陶宏才
梁 陶宏才
摘 要:在软件定义网络体系架构中,控制器作为核心部件需要随时获取网络的状态信息,尤其是网络的拓扑结构。因此,如何快速高效地发现网络的拓扑信息在软件定义网络中尤为重要。对目前主流的控制器平台实现拓扑发现的成本和开销进行评估,提出一种基于链路层发现协议的改进拓扑发现机制,通过减少控制器发送的Packet-Out消息数来降低控制负载。实验结果表明,与目前的拓扑发现机制相比,改进后的拓扑发现机制大大提高了控制器性能。
关键词:软件定义网络;控制器;拓扑发现;链路层发现协议;Packet-Out消息
中图分类号:TP393 文献标志码:A 文章编号:2095-2945(2018)15-0045-03
Abstract: In the software defined network architecture, the controller as the core component needs to obtain the network state information at any time, especially the network topology. Therefore, how to quickly and efficiently discover the network topology information is particularly important in the software definition of the network. This paper evaluates the cost and overhead of realizing topology discovery on the main controller platform, and proposes an improved topology discovery mechanism based on link layer discovery protocol, which reduces the control load by reducing the number of Packet-Out messages sent by the controller. Experimental results show that the improved topology discovery mechanism greatly improves the controller performance compared with the current topology discovery mechanism.
Keywords: software defined network; controller; topology discovery; link layer discovery protocol; Packet-Out message
引言
软件定义网络(Software Defined Networking,SDN)是一种以控制转发分离为中心思想的新型网络架构,其核心部件SDN控制器需要实时地获取网络的状态,尤其是网络的拓扑结构。拓扑发现功能作为控制器提供的一项关键服务,是SDN进行集中配置和管理网络的前提。因此,一个高效可靠的拓扑发现机制对于SDN网络至关重要,研究如何提高拓扑发现机制的性能具有十分重要的意义。
1 拓扑发现机制概述
1.1 机制描述
目前,在SDN网络中实现拓扑发现的方法并没有官方的标准。NOX[1]是最早期的一款SDN控制器,大多数控制器平台实现拓扑发现的方法均是按照NOX的实现方式衍生而来的,如POX、Floodlight、Ryu等。
当前的拓扑发现机制主要利用链路层发现协议(Link Layer Discovery Protocol,LLDP)[2]实现。SDN控制器使用Packet-Out消息周期性地向与之相连的所有OpenFlow[3]交换机的每个端口发送LLDP帧。当某个交换机接收到这些LLDP帧后,再使用Packet-In消息将两台交换机之间的链路信息发送给控制器。当控制器搜集了所在区域的所有链路信息后可建立网络的全局拓扑结构。
1.2 场景示例
现假设有两个OpenFlow交换机连接在控制器上,如图3所示。
控制器首先为交换机S1的3个端口创建单独的LLDP帧,其中Chassis ID为交换机S1的DPID,Port ID为各自的端口号。然后,通过Packet-Out消息指示交换机S1将该LLDP帧通过Port 1端口发送出去。当该帧到达交换机S2的Port 3端口后,会触发交换机S2发送Packet-In消息给控制器,该Packet-In消息中包含了由交换机S1的Port 1端口发送的LLDP帧。控制器从收到的Packet-In消息中可以解析得到该Packet-In消息是由交换机S2的Port 3端口触发的,同时可以解析出该帧是从交换机S1的Port 1端口发送的,此时控制器就可确定交换机S1的Port 1端口和交换机S2的Port 3端口是直连的。若推广到整个网络,控制器可以指示从所有交换机的所有端口发送LLDP帧,从而获取全网的拓扑信息。
1.3 性能评估
控制器负载取决于控制器需要发送的Packet-Out消息的数量,以及它接收到的和需要处理的Packet-In消息的數量。由传统拓扑发现机制可知,控制器所要发送的带LLDP的Packet-Out消息的总数是所有与控制器相连的交换机总端口数。设L为交换机之间的链路数量,S为交换机的数量,Pi为交换机i的端口数量。Npacket-out表示控制器需发送的Packet-Out消息的总数,则:
2 拓扑发现机制改进
2.1 改进思路
控制器负载和性能对于软件定义网络的可伸缩性至关重要,而拓扑发现通常是所有控制器在后台持续运行的服务,因此它对控制器负载的影响也尤为显著。为了便于控制器在接收交换机的带LLDP的Packet-In消息时可以确定源端口,每个LLDP帧都需要将Port ID TLV初始到相应的交换机出口端口。当前实现此功能的方法是控制器通过单独的Packet-Out消息为每个交换机的每个端口发送专用的LLDP帧,控制器需要发送的带LLDP的Packet-Out消息数是网络中端口的总数。一个更好的选择是只向每个交换机发送一个带LLDP的Packet-Out消息,并要求它在所有端口上发送相应的LLDP帧。由于OpenFlow不支持重写LLDPDU部分,因此在将LLDP帧转发到所有端口前无法重写Port ID TLV。根据OpenFlow交换机和控制器之间建立连接时交换机会通知控制器其端口ID和关联的MAC地址,以及OpenFlow交换机重写数据包头的能力,由此改进机制可利用MAC地址作为标识符来帮助控制器确认来自交换机的带LLDP的Packet-In消息的源端口。
2.2 具体改进与实现流程
改进的拓扑发现机制对原有机制的细节作了如下更改:
(1)控制器与交换机建立连接后,当交换机响应Features Request消息时,通过Features Reply消息通知控制器有关其操作端口、ID和MAC地址的信息。控制器再根据每个交换机的MAC地址和端口ID建立映射关系并存入数据库中。
(2)修改控制器发送Packet-In消息的动作,将发送到每个交换机的带LLDP的Packet-In消息数限制为一个,并将LLDPDU中的Port ID TLV字段置为0。
(3)为每个交换机建立新规则,指定从控制器接收的每个LLDP帧将在所有可用端口上转发,并将LLDP帧的源MAC地址字段置为对应端口的MAC地址。
(4)修改控制器接收Packet-In消息的處理程序,通过对比所收到的LLDP帧的源MAC地址字段与步骤(1)收集的控制器数据库中相应的映射关系找到对应的端口号,以此确认链路连接关系。
改进后的拓扑发现机制示例如图4所示。与图3对比,有如下两个明显的区别:一是控制器给交换机S1发送的Packet-Out消息数,由原先的三个端口各一条修改为一个交换机仅一条;二是交换机各端口转发的LLDP帧结构,Port ID字段由原先对应的端口ID修改为0,而源MAC地址由原先统一的交换机MAC地址修改为各端口对应的MAC地址。
2.3 性能的理论分析
改进后控制器所要发送的带LLDP的Packet-Out消息的总数是所有与控制器相连的交换机数。设Mpacket-out表示改进后控制器需发送的Packet-Out消息的总数,则:
3 实验与结果分析
3.1 实验环境
实现实验的软件如表1所示,我们使用基于Linux的Mininet[4]网络仿真平台模拟网络,将POX作为SDN控制器平台,Open vSwitch作为虚拟交换机,并通过Python实现拓扑发现机制的更改。
如表2所示,实验分别考虑了3种不同的网络拓扑结构,其中拓扑1是一个具有交换机数量为100的线性拓扑,拓扑2是一个具有深度为7、分支系数为2的树状拓扑,拓扑3是一个具有深度为4、分支系数为4的树状拓扑。
3.2 结果分析
实验中,我们对POX控制器进行检测,以收集所发出的Packet-Out消息的信息,该信息由拓扑发现组件在实验拓扑中所发出。通过公式(3)可以确认通过改进机制获得的效率增益,如表3所示。
图5以直方图形式显示了表3的实验结果,由图中可以清楚表明改进的机制大大减少了Packet-Out消息的数量,其中拓扑1和拓扑2对Packet-Out消息数减少了将近67%,拓扑3减少了将近80%。
Packet-Out消息的减少可以直接影响控制器负载。实验中,我们不断运行拓扑发现服务,以POX控制器默认的时间间隔5秒重复启动新的发现回合。
网络初始化完成后,我们利用python中用于采集系统基本性能信息的psutil模块,通过其中的cpu_percent()方法来获取CPU时间。每项实验的持续时间为300秒,共重复10次取平均值。
图6显示了整个实验过程中POX控制器仅运行拓扑发现服务的累积CPU时间。由图观察可知,改进机制相对于传统机制在节省CPU时间上有显著效果,其中最低为拓扑1的20%,最高可达到拓扑3的40%。这表明Packet-Out消息的处理和发送是控制器CPU负载的重要组成部分,在拓扑发现服务中这些消息的减少可直接降低控制器的负载。
4 结束语
本文讨论了软件定义网络中的拓扑发现问题,从控制器负载的角度分析了传统拓扑发现机制的开销,由此提出了一个改进的机制。该改进机制通过为每个交换机发送一个LLDP帧代替为每个交换机上的每个端口发送LLDP分组,以此减少Packet-Out消息的数量。通过实验证明,相较于传统机制,在我们给出的拓扑示例中改进机制对CPU负载的降低最高能达到40%,并可能更多地用于其他具有较高端口密度的拓扑。
控制器是软件定义网络的性能瓶颈,通过降低控制器负载使得拓扑发现这样的核心服务更有效,会对整个网络的性能和可伸缩性产生重大影响。
参考文献:
[1]Pfaff B, Pfaff B, Pfaff B, et al. NOX: towards an operating system for networks[J]. Acm Sigcomm Computer Communication Review, 2008,38(3):105-110.
[2]Attar V Z P, Chandwadkar P. Network Discovery Protocol LLDP and LLDP-MED[J]. International Journal of Computer Applications, 2011,1(9):93-97.
[3]Lara A, Kolasani A, Ramamurthy B. Network Innovation using OpenFlow: A Survey[J]. IEEE Communications Surveys & Tutorials, 2013,16(1):493-512.
[4]Kaur K, Singh J, Ghumman N S. Mininet as Software Defined Networking Testing Platform[C].// International Conference on Communication, Computing & Systems,2014.