一种基于状态机的SDN控制器中交换机状态管理方法
2018-11-01许延伟黄志林徐晔刘永红
许延伟 黄志林 徐晔 刘永红
摘要:作为SDN网络的核心,SDN控制器的鲁棒性是影响SDN网络的关键因素之一。由于SDN网络中管理通道的不可靠性所带来的交换机连接状态的变化是影响SDN控制器工作稳定性的主要原因。该文通过引入多个交换机的新型状态,并基于状态机(FSM)对交换机状态之间的变化进行精细化管理,使得其可以应对交换机的短暂性掉线等情形,从而可以大大提高SDN控制器的鲁棒性。
关键词: 软件定义网络;OpenFlow;SDN控制器;交换机状态;状态机
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2018)18-0035-03
A FSM-Based Switch State Management for SDN Controllers
XU Yan-wei1 , HUANG Zhi-lin2, XU Ye2, LIU Yong-hong2
(1.Shanghai B-Star Technology Co.,Ltd,Shanghai 200335,China;2.Shanghai Engineering Research Center for Broadband Networks & Applications, Shanghai 200336,China)
Abstract:As the core of the SDN network, the robustness of the SDN controller is one of the key factors affecting the SDN network. The change of the connection state of the switch caused by the unreliability of the management channel in the SDN network is the main reason that affects the stability of the SDN controller. This paper introduces several new states for switches, and adopts a finite state machine (FSM) to fine-tune the changes of states for switches, making it able to deal with the situations such as temporary disconnection of switches, which can greatly improve the robustness of SDN controllers.
Key words:SDN; openflow; sdn controller; switch states; finite state machine
1 引言
软件定义网络(Software Defined Networking, SDN)是由美国斯坦福大学Clean slate研究小组为改进传统网络提出的一种新型网络创新架构。它的设计理念是将网络的控制平面与数据转发平面进行分离,支持集中化的网络状态控制,实现底层网络设施对上层应用的透明。[1-2]。SDN把传统网络设备紧密耦合的网络架构分拆为应用、控制、数據转发3层分离的体系架构。SDN具有灵活的编程能力,使得网络的自动化管理和控制能力获得空前的提升,能够有效地解决当前网络所面临的资源规模扩展受限,组网灵活性差,难以快速满足业务需求等问题。SDN网络中集中式的控制平面被称为SDN控制器,是一个运行于独立服务器上的软件系统,逻辑上处于数据转发平面和上层网络应用的中间,是整个SDN网络的核心。图1显示了SDN网络的典型系统架构,其中SDN控制器(Controller)是整个网络的核心,它通过南向接口(OpenFlow[3]协议)获取底层网络设备信息,进行统一部署、集中管理以及灵活控制,从而解决了分散网络设备的管理控制问题。同时,控制器提供了可编程扩展的北向接口,按不同需求设计的功能应用软件可以直接运行在控制器上,利用控制器对全局网络设备进行统一管理。
在SDN发展史中,OpenFlow概念是先于SDN出现的。在SDN网络体系架构中,控制面和数据转发面之间是通过标准的接口进行通信的,即南向接口,OpenFlow就是SDN南向接口中被最为广泛使用的一种。控制器通过这个接口对下层的网络设备进行配置和管理,并接收来自网络设备的事件报告,并向网络设备发送数据包。利用OpenFlow协议,控制器可以编辑如添加、更新、删除交换机流表中的记录。
SDN控制器通过TCP连接和其管理的每一个交换机之间进行通信,这个TCP连接又被称为是管理通道。由于在网络运行时需要一直保持SDN控制器和交换机之间的通信,管理通道的稳定性就会极大地影响SDN网络工作的稳定性。在实际的SDN网络应用场景中,例如数据中心,SDN管理通道一般是使用的原因的管理网络,相较于业务网络,管理网络的稳定性会大大地降低。SDN网络中交换机正常工作时可能会受到两个因素的影响导致暂时的不可用:一是TCP连接会受到网络的影响而暂时关闭,二是SDN控制器和交换机之间的心跳包会出现丢包导致控制器认为交换机进入不可达状态。然而,当SDN控制器在交换机中下发网络通信规则以后,即使管理通道暂时失效,交换机仍然可以按照已经下发的通信规则进行数据包的转发。因此,如何应对管理通道的非稳定性,提供SDN控制器在此种情况的健壮性就成为本领域技术人员亟待解决的问题。
通常来说,当SDN控制器和交换机建立好OpenFlow会话以后,交换机的正常工作状态会被设为“已连接状态”[4],此状态下控制器和交换机之间可以进行正常的OpenFlow消息交互。当交换机的TCP长连接断开或心跳保活超时以后,交换机即被马上转为“离线状态”。一个交换机转为离线状态以后,网络拓扑会随之发生变化,交换机对象所附属资源也会被控制器回收。主流的开源控制器如OpenDayLight[5]和ONOS[6]等也是采用的类似的交换机状态管理机制,从而在管理通道不稳定时容易导致前述的控制器的稳定性。针对上述问题,本文定义了SDN控制器中交换机的多种状态(包括初始化、新连接建立、版本协商成功、正常工作、不可达、连接断开、掉电、正在下线和已下线共9种交换机状态)和相应的交换机状态迁移图,并定义了多个关键的反映交换机工作状态改变的事件,可以应对交换机管理通道的不确定性,提高SDN控制器中交换机管理的精确性,较强控制器的可靠性和健壮性,降低了对SDN网络中管理通道可靠性的要求,为SDN网络在实际环境中的应用提供了保障。
2 SDN控制器中的交换机状态
为了能精细化地对交换机的状态进行管理,以准确地反映其在不同的状况下是否可以和控制器进行通信、是否可以转发数据包等特性,本文使用下述的9种状态表示交换机处于不同工作情况下:
(1) SW_STATE_INIT
初始状态,为一个交换机对象创建后的最初狀态,交换机的Socket连接尚没有建立。在此状态下控制器会为每一个交换机对象分配资源,包括内存资源、消息缓冲区等。
(2) SW_STATE_NEW_ACCEPT
此状态表示控制器和交换机的TCP连接已成功建立,交换机的IP地址、MAC、TCP通讯端口等信息被保存到交换机对象中,此后该交换机可与SDN控制器进行正常的TCP通信。
(3) SW_STATE_CONNECTED
根据OpenFlow协议[7],SDN控制器和SDN交换机成功建立TCP连接之后会进行OpenFlow协议的版本协商。若他们双方OpenFlow协议版本协商达成一致,交换机进入SW_STATE_CONNECTED状态,双方后续可以基于商定的版本进行OpenFlow消息的交互。
(4) SW_STATE_STABLE
该状态为交换机的正常工作状态,即可以正常的进行OpenFlow消息的通信。当交换机和控制器建立好OpenFlow消息通道之后,控制器收到交换机的发送的正确的OFPT_BARRIER_REPLY消息,双方可以进入正常的通信工作状态。在此状态下,SDN控制器可以发送消息、下发流表等。该状态对应于文献[4-6]中的“已连接状态”。
(5) SW_STATE_UNREACHABLE
交换机不可达状态。当交换机在正常工作状态下出现消息发送失败或者心跳交互超时(echo重发完后仍未回应)时,SDN控制器认为此交换机进入不可达状态。在此状态下除了心跳包之外不再向交换机发送任何消息,只到收到交换机任何消息后状态才会改变。交换机进入不可达状态的原因包括很多种,例如管道通道的掉线和不稳定等。在不可达状态下,控制器会持续性地对该交换机进行探测以判断其不可达的原因。如果没有检测到该交换机的断电事件,则交换机有可能会一直保持在不可达状态下。交换机在不可达状态下仍然有可能正常的进行数据包的转发处理,只是无法进行OpenFlow消息的收发。
(6) SW_STATE_DISCONNECTED
交换机断开连接状态。当控制器明确收到交换机TCP连接断开消息后进入此状态。在该状态下,交换机若没有断电则仍然可以正常进行数据包的转发处理。因此,和不可达状态一样,控制器会判断交换机是否已经断电还是只是管理通道的关闭。
(7) SW_STATE_POWER_OFF
交换机掉电状态。交换机进入掉电状态之前会首先经历断开连接状态或不可达状态,SDN控制器会通过掉电检测判断此交换机是否已关闭电源。掉电检测的主要方法是判断该交换机的相邻交换机是否全部上报端口掉电事件:若相邻交换机全部上报一次和其相连接的端口的OFPPS_LINK_DOWN事件,则该交换机掉电检测成功。
(8) SW_STATE_CLOSING
交换机正在下线状态,表示交换机正在进行内存清理等工作。在不可达状态和断开连接状态下掉电检测成功以后,交换机会被设置为正在下线状态。
(9) SW_STATE_CLOSED
交换机已关闭状态,表示交换机内存清理等工作已完成,SDN控制器只会保存一些最基本的信息表示该交换机曾经连接过。
相比较于其他的SDN控制器,上述9个交换机状态的最大特色是不可达状态和断开连接状态。设置这两个状态的原因是,控制器和交换机虽然因为管理通道失效而失去正常的TCP通信,但是仍然可以正常的进行数据包的转发。当管理通道不可靠的时候,交换机会频繁出现TCP连接关闭和心跳包丢失现象,若像通常方式那样每次都把交换机设置为关闭,则会使得网络拓扑产生很大的不稳定现象,从而影响到通信的稳定性。例如,我们在文献[9]中提出了基于标签的SDN网络交换方案,会在网络初始化时为每一对交换机之间计算通信路径并下发流表作为SDN网络交换的关键基础性流表。其中非接入交换机的只负责基于已下发流表的数据交换,则即使其管理通道不稳定而出现频繁的掉线现象,也不应该把其从网络拓扑中删除而调整基础性转发流表。需要指出的是,若一个交换机进入这两个状态,控制器应该把这样的事件通知给相关的网络应用使得其可以根据自己的情况做出处理。例如,若一个关键通信路径经过管理通道不可靠的交换机,则应该对其通信路径进行调整。
3 交换机状态的转移
本文使用如图2所示的状态机实现交换机在各状态之间的转移过程和相应的触发条件。其中的核心是围绕不可达状态和连接断开状态相关的转移过程和转移条件。当交换机在正常工作状态下,控制器和交换机之间会有OpenFlow消息的交互和持续性的心跳包发送与接收动作。若检测到显性的TCP连接断开事件,则交换机会进入连接断开状态;若消息发送失败或心跳交互失常,则交换机进入不可达状态。
交换机进入不可达状态后,控制器会通过两种类型的检测以决定对其后续状态的处理。第一种是上一节所述的掉电检测,检测成功以后则会进入掉电状态而进入关闭通道。第二种是心跳包发送检测,若一定时间间隔之后可以成功发送心跳包并收到回复,则交换机会恢复到正常工作状态。若上述两种检测都没有成功,则交换机会停留在不可达状态。
交换机进入不可达状态后,控制器会通过掉电检测以判断是维持在连接断开状态还是转入掉电状态。在这两个状态下,交换机也可能会重新尝试连接控制器,若控制器检测到一个新建立连接的交换机的IP和MAC地址和现有的某个处于这两个状态的交换机相同,则会认为交换机是重新连接上线,从而进入随后的版本协商等过程。
4 交換机状态改变事件
对应于上述状态迁移图,本文定义了下述一些关键性的事件以便控制器通知上层网络应用。
(1)EVENT_TYPE_SWITCH_CONNECT:交换机连接进来事件。
(2)EVENT_TYPE_SWITCH_QUIT:在交换机上线过程中协商版本失败或者是检测到交换机掉电事件。
(3)EVENT_TYPE_SWITCH_ENTER_STABLE:交换机收到OFPT_BARRIER_REPLY消息后进入正常工作状态。
(4)EVENT_TYPE_SWITCH_ENTER_UNREACH:控制器发送消息给交换机失败或心跳交互超时(echo重发完后仍未回应)导致交换机进入不可达状态。
(5)EVENT_TYPE_SWITCH_EXIT_UNREACH:SDN控制器收到交换机消息后连接恢复正常,从不可达状态中退出。
(6)EVENT_TYPE_SWITCH_DISCONNECT:交换机断开连接。
(7)EVENT_TYPE_SWITCH_POWER_OFF:交换机发生掉电。
(8)EVENT_TYPE_SWITCH_RECONNECT:交换机重新连接进来,从连接断开状态或不可达状态进入新连接状态,但由于交换机没有发生掉电,故可以把交换机对象重用。
上述事件由控制器产生,并会根据具体原因产生不同的事件的属性。上层网络应用可以监控不同的事件,以便根据不同的实际和具体原因做出相应的处理。例如,若某个交换机的连接一直不稳定,就可以在网络拓扑图上做出相应的标记。
5 总结
本文定义了SDN控制器中交换机的多种状态(包括初始化、新连接建立、版本协商成功、正常工作、不可达、连接断开、掉电、正在下线和已下线共9种交换机状态)和相应的交换机状态迁移图,并定义了多个关键的反映交换机工作状态改变的事件,可以应对交换机管理通道的不确定性,提高SDN控制器中交换机管理的精确性,较强控制器的可靠性和健壮性,降低了对SDN网络中管理通道可靠性的要求,为SDN网络在实际环境中的应用提供了保障。
参考文献:
[1] 张王琨,戚光远,孙嘉骏.无线软件定义网络研究前景展望[J].软件工程师, 2014(4):32-35.
[2] Fundation, O.N., Software-defined networking: The new norm for networks. ONF White Paper, 2012.
[3] McKeown, N., et al., OpenFlow: enabling innovation in campus networks. ACM SIGCOMM Computer Communication Review, 2008. 38(2):69-74.
[4] 桂兴亮. 基于OpenFlow的SDN控制器研究与设计[D].江苏科技大学,2016.
[5] Open Day Light[EB/OL]. http://www.opendaylight.org/.
[6] Open Network Operating System(ONOS)[EB/OL]. http://onosproject.org/.
[7] B. Heller, “OpenFlow Switch Speci?cation, Version 1.5.0,” https://www.opennetworking.org/ images/stories/downloads/sdn-resources/onfspeci?cations/open?ow/open?ow-switch-v1.5.0.noipr.pdf.
[8] LU Xiaoyuan, Xu Yanwei: SFabric: A Scalable SDN Based Large Layer 2 Data Center Network Fabric, Proceedings of IWQoS, 2015.
[9] LU Xiaoyuan, Xu Yanwei: SFabric: A Scalable SDN Based Large Layer 2 Data Center Network Fabric, Cluster Computing, 2018.