本文是毕业设计课题“基于ryu的sdn网络拓扑发现与展示技术研究”的开题报告的文献综述,本人在详细阅读任务书的基础上,基于个人对课题的理解,通过查阅文献资料,完成本文。本文主要根据课题内容,以ryu与sdn为中心展开。本文大致可分为三个部分,分别讨论sdn、OpenFlow以及ryu的详细信息,其中按照主题分为8个小部分展开叙述。
- 什么是SDN
软件定义网络(Softwareensp;Definedensp;Network,SDN)是由美国斯坦福大学CLeanensp;State课题研究组提出的一种新型网络创新架构,是网络虚拟化的一种实现方式。SDN起源于2006年斯坦福的学生Casado M和他的导师Mckeown N教授的研究项目Ethane,受该项目的启发,他们提出了OpenFlow的概念。该项目尝试通过一个集中式的控制器,让网络管理员可以方便的定义基于网络流的安全控制策略,并将这些安全策略应用到各种网络设备中,从而实现对整体网络通信的安全控制。在随后的2008年,Mckeown N等人在ACM SIGCOMM发表了题为OpenFlow:Enabling innovation in campus networks的论文中。文中首次详细地介绍OpenFlow的概念,即将传统网络设备的数据平面和控制平面两个功能模块相分离,通过集中式的控制器以标准化的接口对各种网络设备进行管理和配置。SDN通过抽象网络元素创建开放环境,实现了网络的可编程性、控制与转发相分离和集中化控制。随着互联网规模的不断扩大,新型数据中心将成为集成各类应用、数据及服务交付的关键部位,其建设对网络架构的可靠性、灵活性和管理维护的灵活性提出了更高的要求,SDN可以灵活地组网并且解决一些当前的网络问题。
- 为什么需要SDN?
问题的答案是:我们需要拥有更多可编程能力的网络,来支持快速增长的网络业务需求。SDN的创始人Nick McKeown教授总结了计算机产业快速创新的三个条件:通用硬件底层、软件定义功能和开源模式。在这一思路的影响下,McKeown教授团队提出了一个新的网络体系结构:SDN。在SDN中,网络的控制平面和数据平面相分离,数据平面的设备无需具体实现各种网络协议的控制逻辑,只需要接受并执行控制平面的指令,这使得硬件底层可以实现通用化。网络设备的控制逻辑由软件实现的SDN控制器和SDN应用来定义,从而实现网路功能的软件定义化。随着开源SDN控制器和开源SDN开放接口的出现,网络体系结构的三要素得以实现。该思路阐述了当下网络需要更多可编程能力的事实,这也正是为什么需要SDN的真正原因。
- SDN的架构与特征
SDN将传统网络设备紧耦合的网络架构拆分成应用层、控制层和基础层。基础层主要完成数据平面的存储转发功能。控制层通过南向接口控制数据平面的数据转发、流量控制、数据统计等功能。控制层对应用层提供统一的网络服务应用编程接口,也称为北向接口。应用层借助北向接口实现对网络的控制和定义。这一架构体系类似于计算机上的应用程序、操作系统和基础设备的形式。
SDN与传统网络相比主要有以下特点:
- 集中控制。SDN的控制平面和转发平面分离,转发设备可以专注转发而使自身功能变得简单,转发规则由则SDN控制器确定,集中的控制平面具有更好的灵活性和创新性,有利于网络的升级和创新。
- 开放软件接口。通过开放的应用编程接口提供可编程的客户定制化的网络业务。应用程序可以与网络进行无缝对接,应用程序可以告诉网络如何运行才能满足自身的业务需求。
- 网络虚拟化。通过逻辑网络与物理网络相分离,确保逻辑网络不受物理网络的限制,逻辑网络可以进行任意的组合、移动。网络虚拟化可以轻易地将实际的物理网络虚拟化出多个逻辑网络,用来满足不同业务和网络创新的需要。
- SDN南向协议OpenFlow
OpenFlow属于SDN中的南向接口,主要组件有OpenFlow控制器、OpenFlow交换机和OpenFlow协议。其特点有:①控制面和数据面分离。②采用标准化协议描述控制器与网络组件代理之间的状态。③通过可扩展的API来建立集中式视图,并基于此实现网络的可编程性。
OpenFlow控制器类似于大脑,用于制定所有基于业务流的智能决策,并将这些决策发送给OpenFlow交换机,这些决策以指令的形式存在于流表中。OpenFlow交换机可以分为流表和安全通道两部分,流表是用于存放处理器下发的处理规则的表,安全通道是用于和控制器通信的安全连接。OpenFlow1.0版本规范中仅定义了流表这一种OpenFlow表,发展到1.3版本规范时,则新增了组表和Meter表两种表,在此仅简要介绍流表。流表是交换机用于储存流表项的表,流表中的每一条流表项由匹配域、指令集和计数器三个主要部分及其他部分组成。匹配域用于区分不同的数据流,指令集记录匹配成功后需要执行的操作,计数器则记录了匹配到该流表项的数据包的数目和字节数等相关数目。
- OpenFlow通信流程
首先,SDN控制器和交换机之间在传统的分布式网络协议的帮助下建立起控制通道。当交换机和控制器建立完Socket通信之后,会互相发送Hello报文,用于协商协议版本。当完成协议版本协商之后,控制器会向交换机下发Features Request报文,交换机则需回复Features Reply报文。控制器根据交换机支持的特性,可以完成交换机的相关配置。配置完成之后,进入正常通信状态。如果OpenFlow版本支持多级流表,控制器还需要下发Table-Miss流表项到交换机。当数据包匹配流表失败或者匹配到Table-Miss时,交换机将其Packet-in到控制器,控制器根据控制逻辑可选择回复Packet-out或者下发Flow-mod指导交换机处理数据流。
- Ryu
Ryu是由日本NTT公司贡献的基于组件的开源SDN框架,采用Python语言开发。由于Ryu是目前为止少数几个支持OpenFlow1.0以上版本的开源SDN控制器之一,因此在业界知名度相当高,有不少商业应用案例。Ryu集成了大量有用的组件,用于完成控制转发设备、获取网络状态和生成事件等任务,用户可以基于这些组件灵活构建自己的SDN应用程序,并且可以对组件进行修改,实现自己的组件。Ryu支持多线程,采用语言无关的消息传递机制进行通信,这使得用户现有的软件经过少量的修改即可成为Ryu的组件。与其他控制器相比,Ryu在北向接口方面具有较大的灵活性,允许用户基于REST或者RPC自定义API,提供Neutron Plugin,支持OpenStack,在南向接口上支持OpenFlow协议1.0、1.2、1.3、1.4版本和Nicira Extensions。Ryu内嵌的组件和应用包括拓扑发现、租户隔离、二层交换、统计数据等,Ryu提供GUI界面用于管理和监控网络拓扑和状态。
