SDN与OpenFlow概述

SDN与OpenFlow概述

SDN是一种数据控制分离、软件可编程的新型网络体系架构。在SDN中有两个重要的元素一个是交换机,一个是控制器。在网络设备上还有一个“上帝”,也就是控制器,它知道所有网络信息,负责指挥设备如何工作,而交换机什么都不知道,只会按照控制器的命令进行工作,在SDN中,网络设备之间不运行任何的网络协议,设备的转发表是由控制器产生的,那么问题来了,控制器和网络设备之间怎样进行通信呢,就是通过OpenFlow协议,属于南向协议。

SDN基于OpenFlow的可编程特性,分别由Controller和OpenFlow交换机组成,形成控制层和数据转发层。

SDN采用了集中式的控制平面和分布式的转发平面,两个平面相互分离,控制平面利用控制、转发通信接口,对转发平面上的网络设备进行集中式管理。

其基本架构如下图所示。 SDN与OpenFlow概述

 

可以看到有业务层、控制层、转发层。其中业务层和控制层之间的API叫做“北向接口”,用户可以通过北向接口对控制层进行定义或控制,并触发事件;控制层和转发层之间的API叫做“南向接口”,“南向接口”是控制层与转发层之间的通信通道,以OpenFlow协议为标准,实现了控制器与交换机之间的信息交互。

OpenFlow网络从底到高由以下三部分组成:

OpenFlow交换机 ——实现数据层的转发

Flow Visor ——对网络进行虚拟化,FlowVisor是建立在OpenFlow协议上的网络虚拟化工具。它将物理网络划分为不同的逻辑网络,从而实现虚网划分。它让管理员通过定义流规则来管理网络,而不是修改路由器和交换机的配置。

FlowVisor部署在标准OpenFlow控制器与OpenFlow交换机之间,并对两者是透明的。它将物理网络划分为多个虚网,使每个控制器控制一个虚网,并保证各虚网相互隔离。

FlowVisor的设计原则是:

FlowVisor对控制器和交换机是透明的,它们都感知不到FlowVisor的存在

各虚网之间相互隔离,即使是广播包,各虚网的流量也相互隔离

划分虚网的策略是灵活、模块化、可扩展的

OpenFlow消息在进行传输时,FlowVisor会根据配置策略对OpenFlow消息进行拦截、修改、转发等操作。这样,控制器就只能控制其被允许控制的流,但是控制器并不知道它所管理的网络被FlowVisor进行过分片操作。 同样,交换机发出的消息经过FlowVisor过滤后,也会被发送到相应的控制器。

Controller OpenFlow将控制层与数据转发层分离,其中OpenFlow交换机实现了数据转发功能,而OpenFlow控制器则实现了控制层功能。Controller通过OpenFlow协议提供的标准数据接口,对OpenFlow交换机中的流表进行控制、管理,实现了对整个网络的集中控制。

在Controller中,可以用python等程序对其功能进行定义,比如下发流表,对Packet_in包进行处理等。

SDN与OpenFlow概述OpenFlow交换机

OpenFlow交换机由 安全通道、流表、OpenFlow协议 三部分组成

SDN与OpenFlow概述

安全通道是连接OpenFlow交换机和控制器通信的接口。控制器通过这个接口来控制和管理OF交换机,同时OF交换机通过这个接口将事件传给控制器,发送数据包,并接收来自控制器下发数据包。控制器和交换机必须通过安全通道进行通信,而且进行通信的数据包必须按照OpenFlow协议规定的格式执行。

流表

流表是数据转发的依据,与交换机的mac地址转发表和IP地址路由表类似,流表中保存了网络中各个层次的网络配置信息,因此可以进行更加丰富的转发规则。交换机收到来自主机的数据包后,会在本机查询对应的动作,和对应的输出端口。

流表有很多流表项,每一条流表项都是一个转发规则。流表项的结构如下图:

SDN与OpenFlow概述

包头域用于数据包匹配;

计数器用于统计匹配数据包个数;

动作用于指示匹配数据包如何处理;

流表由控制器下发给交换机。下发模式有两种:主动模式、被动模式。

 

主动模式——控制器将自己收集的流表信息主动下发给交换机等网络设备,随后网络设备可直接查询流表转发。

被动模式——网络设备收到一个没有匹配的FlowTable记录时,将其封装成Packet_in数据包,转发给控制器,由控制器决定如何处理,并下发流表。

 

OpenFlow能够启动远程的控制器,经由网上交换器,决定网上数据包要由何种路径通过网络交换机。这个协议的发明者,将它当成软件定义网上(Software-defined networking)的启动器。 [1] 

OpenFlow允许从远程控制网上交换器的数据包转送表,透过新增、修改与移除数据包控制规则与行动,来改变数据包转送的路径。比起用访问控制表(ACLs) 和路由协议,允许更复杂的流量管理。同时,OpenFlow允许不同供应商用一个简单,开源的协议去远程管理交换机(通常提供专有的接口和描述语言)。

OpenFlow协议用来描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。

OpenFlow协议支持三种信息类型:Controller-to-Switch,Asynchronous和Symmetric,每一个类型都有多个子类型。Controller-to-Switch信息由控制器发起并且直接用于检测交换机的状态。Asynchronous信息由交换机发起并通常用于更新控制器的网络事件和改变交换机的状态。Symmetric信息可以在没有请求的情况下由控制器或交换机发起。