OpenFlow网络基本介绍

近期对SDN进行了初步的认识和学习,现将自己做的笔记进行简要整理。


目 录

        • 目 录
        • OpenFlow交换机
          • 安全通道
          • 流表
          • OpenFlow协议
            • OpenFlow交换机分类
        • FlowVisor
        • Controller


SDN是一种数据控制分离、软件可编程的新型网络体系架构。SDN基于OpenFlow的可编程特性,分别由Controller和OpenFlow交换机组成,形成控制层和数据转发层。
SDN采用了集中式的控制平面和分布式的转发平面,两个平面相互分离,控制平面利用控制、转发通信接口,对转发平面上的网络设备进行集中式管理。
其基本架构如下图所示。
SDN架构图

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

下面介绍一下OpenFlow。OpenFlow网络从底到高由以下三部分组成:

  • OpenFlow交换机 ——实现数据层的转发
  • Flow Visor ——对网络进行虚拟化
  • Controller ——对网络集中控制

OpenFlow网络基本介绍_第1张图片

OpenFlow交换机

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

安全通道

安全通道是连接OpenFlow交换机和控制器通信的接口。控制器通过这个接口来控制和管理OF交换机,同时OF交换机通过这个接口将事件传给控制器,发送数据包,并接收来自控制器下发数据包。

控制器和交换机必须通过安全通道进行通信,而且进行通信的数据包必须按照OpenFlow协议规定的格式执行。

流表

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

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

  • 包头域用于数据包匹配;
  • 计数器用于统计匹配数据包个数;
  • 动作用于指示匹配数据包如何处理;

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

主动模式——控制器将自己收集的流表信息主动下发给交换机等网络设备,随后网络设备可直接查询流表转发。
被动模式——网络设备收到一个没有匹配的FlowTable记录时,将其封装成Packet_in数据包,转发给控制器,由控制器决定如何处理,并下发流表。

关于流表包头域、计数器和具体动作模式的介绍,可以参考:流表结构的介绍

OpenFlow协议

OpenFlow协议是交换机与控制器之间通信时所遵循的标准,包括交互信息的标准和控制器与交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。2014年OpenFlow协议已到了Edition 1.5。

具体的版本内容可以参考:OpenFlow协议规范概况介绍
也可下载各版本的英文文档:openflow协议各版本下载(1.0—1.5)(中英)

OpenFlow协议有三种消息类型:
1. Controller-to-Switch(控制器主动发出)

  • Features 用来获取交换机特性
  • Configuration 用来配置OpenFlow交换机
  • Modify-State 用来修改交换机状态(修改流表)
  • Read-Stats 用来读取交换机状态
  • Send-Packet 用来发送数据包
  • Barrier 阻塞消息

2. Asynchronous(异步消息,交换机主动发出)

  • Packet-in 用来告知控制器,交换机接收到了数据包(该数据包要么被完全包含在packet-in消息中,要么被buffer在交换机中,等待控制器的Packet-out事件来处理)
  • Flow-Removed 用来告知控制器交换机流表被删除
  • Port-Status 用来告知控制器交换机端口状态更新
  • Error 用来告知控制器交换机发生错误

3. Symmetric(对称消息,由控制器或交换机主动发出)

  • Hello 用来建立OpenFlow连接
  • Echo 用来确认交换机与控制器之间的连接状态
  • Vendor 厂商自定义消息

OpenFlow协议的数据包包括 Header 和 Message ,其中Header主要是协议版本,数据包长度等,Message是具体的数据包内容。

OpenFlow交换机分类

OpenFlow交换机分为两类:专用OpenFlow交换机、支持OpenFlow的交换机

专用OpenFlow交换机:专门为OpenFlow设计的交换机。与传统交换机不同,它不再具有控制逻辑,而仅仅是在端口间转发数据包的一个简单部件。

支持OpenFlow的交换机:是在传统商业交换机的基础上,添加了安全通道、流表、OpenFlow协议,获得了OpenFlow特性的交换机。它既具有传统交换机的控制转发功能,又具有OpenFlow的转发逻辑。因此该交换机对数据包支持两种不同的接收处理方式。

按照发展程度,OpenFlow交换机还可分为:“Type0”交换机、“Type1”交换机。

“Type0”交换机:仅支持十元组。对数据包的操作只有以下4条:

  • 转发给指定的一个或几个端口
  • 压缩并转发给控制器
  • 丢弃
  • 通过交换机的正常处理流程来转发数据包

“Type1”交换机:相比于“Type0”交换机,功能更多,从而支持更复杂的网络试验,具有一个新的功能集合。

FlowVisor

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

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

FlowVisor的设计原则是:

  • FlowVisor对控制器和交换机是透明的,它们都感知不到FlowVisor的存在
  • 各虚网之间相互隔离,即使是广播包,各虚网的流量也相互隔离
  • 划分虚网的策略是灵活、模块化、可扩展的

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

Controller

OpenFlow将控制层与数据转发层分离,其中OpenFlow交换机实现了数据转发功能,而OpenFlow控制器则实现了控制层功能。Controller通过OpenFlow协议提供的标准数据接口,对OpenFlow交换机中的流表进行控制、管理,实现了对整个网络的集中控制。
在Controller中,可以用python等程序对其功能进行定义,比如下发流表,对Packet_in包进行处理等。


参考文章如下:
1. OpenFlow协议的理解
2. 流表的结构的介绍
3. OpenFlow网络的基本组成
4. FlowVisor入门教程
5. 网络虚拟化之FlowVisor:网络虚拟层(中)

你可能感兴趣的:(SDN)