近期对SDN进行了初步的认识和学习,现将自己做的笔记进行简要整理。
SDN是一种数据控制分离、软件可编程的新型网络体系架构。SDN基于OpenFlow的可编程特性,分别由Controller和OpenFlow交换机组成,形成控制层和数据转发层。
SDN采用了集中式的控制平面和分布式的转发平面,两个平面相互分离,控制平面利用控制、转发通信接口,对转发平面上的网络设备进行集中式管理。
其基本架构如下图所示。
可以看到有业务层、控制层、转发层。其中业务层和控制层之间的API叫做“北向接口”,用户可以通过北向接口对控制层进行定义或控制,并触发事件;控制层和转发层之间的API叫做“南向接口”,“南向接口”是控制层与转发层之间的通信通道,以OpenFlow协议为标准,实现了控制器与交换机之间的信息交互。
下面介绍一下OpenFlow。OpenFlow网络从底到高由以下三部分组成:
OpenFlow交换机由 安全通道、流表、OpenFlow协议 三部分组成。
安全通道是连接OpenFlow交换机和控制器通信的接口。控制器通过这个接口来控制和管理OF交换机,同时OF交换机通过这个接口将事件传给控制器,发送数据包,并接收来自控制器下发数据包。
控制器和交换机必须通过安全通道进行通信,而且进行通信的数据包必须按照OpenFlow协议规定的格式执行。
流表是数据转发的依据,与交换机的mac地址转发表和IP地址路由表类似,流表中保存了网络中各个层次的网络配置信息,因此可以进行更加丰富的转发规则。交换机收到来自主机的数据包后,会在本机查询对应的动作,和对应的输出端口。
流表有很多流表项,每一条流表项都是一个转发规则。流表项的结构如下图:
流表由控制器下发给交换机。下发模式有两种:主动模式、被动模式。
主动模式——控制器将自己收集的流表信息主动下发给交换机等网络设备,随后网络设备可直接查询流表转发。
被动模式——网络设备收到一个没有匹配的FlowTable记录时,将其封装成Packet_in数据包,转发给控制器,由控制器决定如何处理,并下发流表。
关于流表包头域、计数器和具体动作模式的介绍,可以参考:流表结构的介绍
OpenFlow协议是交换机与控制器之间通信时所遵循的标准,包括交互信息的标准和控制器与交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。2014年OpenFlow协议已到了Edition 1.5。
具体的版本内容可以参考:OpenFlow协议规范概况介绍
也可下载各版本的英文文档:openflow协议各版本下载(1.0—1.5)(中英)
OpenFlow协议有三种消息类型:
1. Controller-to-Switch(控制器主动发出)
2. Asynchronous(异步消息,交换机主动发出)
3. Symmetric(对称消息,由控制器或交换机主动发出)
OpenFlow协议的数据包包括 Header 和 Message ,其中Header主要是协议版本,数据包长度等,Message是具体的数据包内容。
OpenFlow交换机分为两类:专用OpenFlow交换机、支持OpenFlow的交换机
专用OpenFlow交换机:专门为OpenFlow设计的交换机。与传统交换机不同,它不再具有控制逻辑,而仅仅是在端口间转发数据包的一个简单部件。
支持OpenFlow的交换机:是在传统商业交换机的基础上,添加了安全通道、流表、OpenFlow协议,获得了OpenFlow特性的交换机。它既具有传统交换机的控制转发功能,又具有OpenFlow的转发逻辑。因此该交换机对数据包支持两种不同的接收处理方式。
按照发展程度,OpenFlow交换机还可分为:“Type0”交换机、“Type1”交换机。
“Type0”交换机:仅支持十元组。对数据包的操作只有以下4条:
“Type1”交换机:相比于“Type0”交换机,功能更多,从而支持更复杂的网络试验,具有一个新的功能集合。
FlowVisor是建立在OpenFlow协议上的网络虚拟化工具。它将物理网络划分为不同的逻辑网络,从而实现虚网划分。它让管理员通过定义流规则来管理网络,而不是修改路由器和交换机的配置。
FlowVisor部署在标准OpenFlow控制器与OpenFlow交换机之间,并对两者是透明的。它将物理网络划分为多个虚网,使每个控制器控制一个虚网,并保证各虚网相互隔离。
FlowVisor的设计原则是:
OpenFlow消息在进行传输时,FlowVisor会根据配置策略对OpenFlow消息进行拦截、修改、转发等操作。这样,控制器就只能控制其被允许控制的流,但是控制器并不知道它所管理的网络被FlowVisor进行过分片操作。 同样,交换机发出的消息经过FlowVisor过滤后,也会被发送到相应的控制器。
OpenFlow将控制层与数据转发层分离,其中OpenFlow交换机实现了数据转发功能,而OpenFlow控制器则实现了控制层功能。Controller通过OpenFlow协议提供的标准数据接口,对OpenFlow交换机中的流表进行控制、管理,实现了对整个网络的集中控制。
在Controller中,可以用python等程序对其功能进行定义,比如下发流表,对Packet_in包进行处理等。
参考文章如下:
1. OpenFlow协议的理解
2. 流表的结构的介绍
3. OpenFlow网络的基本组成
4. FlowVisor入门教程
5. 网络虚拟化之FlowVisor:网络虚拟层(中)