前言
OpenFlow 是一种网络通信协议,应用于 SDN 架构中控制器和转发器之间的通信。软件定义网络 SDN 的一个核心思想就是“转发、控制分离”,要实现转、控分离,就需要在控制器与转发器之间建立一个通信接口标准,允许控制器直接访问和控制转发器的转发平面。
OpenFlow 引入了“流表”的概念,转发器通过流表来指导数据包的转发。控制器正是通过 OpenFlow 提供的接口在转发器上部署相应的流表,从而实现对转发平面的控制。
OpenFlow 的起源与发展
OpenFlow 起源于斯坦福大学的 Clean Slate 项目,该项目的目标是要“重塑互联网”,旨在改变设计已略显不合时宜,且难以进化发展的现有网络基础架构。在 2006 年,斯坦福的学生 Martin Casado 领导了一个关于网络安全与管理的项目,试图通过一个集中式的控制器,让网络管理员方便地定义基于网络流的安全控制策略,并将这些安全策略应用到各种网络设备中,从而实现对整个网络通讯的安全控制。
受此项目启发,Clean Slate 项目的负责人 Nick McKeown 教授及其团队发现,如果将传统网络设备的数据转发和路由控制两个功能模块相分离,通过集中式的控制器(Controller)以标准化的接口对各种网络设备进行管理和配置,那么这将为网络资源的设计、管理和使用提供更多的可能性,从而更容易推动网络的革新与发展。
于是,他们便提出了 OpenFlow 的概念,并且于 2008 年发表了题为《OpenFlow: Enabling Innovation in Campus Networks》的论文,首次详细地介绍了 OpenFlow 的原理和应用场景。
2009 年,基于 OpenFlow,该研究团队进一步提出了 SDN(Software Defined Network,软件定义网络)的概念,引起了行业的广泛关注和重视。
2011 年,由Google、Facebook、微软等公司共同发起成立了一个对 SDN 影响深远的组织 ONF(Open Networking Foundation),致力于发展 SDN。ONF 将OpenFlow 定义为 SDN 架构的控制层和转发层之间的第一个南向标准通信接口,并加大 OpenFlow 的标准化力度。
自 2009 年底发布第一个正式版本 v1.0 以来,OpenFlow 协议已经经历了 1.1、1.2、1.3 以及最新发布的 1.5 等版本的演进过程。目前使用和支持最多的是 OpenFlow1.0 和 OpenFlow1.3 版本。
OpenFlow的工作原理
整个 OpenFlow 协议架构由控制器(Controller)、OpenFlow交换机(OpenFlow Switch)、以及安全通道(Secure Channel)组成。控制器对网络进行集中控制,实现控制层的功能;OpenFlow 交换机负责数据层的转发,与控制器之间通过安全通道进行消息交互,实现表项下发、状态上报等功能。
OpenFlow控制器
OpenFlow 控制器位于 SDN 架构中的控制层,是 SDN 的“大脑”,通过 OpenFlow 协议指导设备的转发。目前主流的 OpenFlow 控制器分为两大类:
-
开源控制器
-
厂商开发的商用控制器。
常见的开源控制器例如 NOX/POX、OpenDaylight 等。厂商的商用控制器有 Huawei 的 iMaster NCE 等。
OpenFlow安全通道
安全通道就是连接 OpenFlow 交换机与控制器的信道,负责在 OpenFlow 交换机和控制器之间建立安全链接。控制器通过这个通道来控制和管理交换机,同时接收来自交换机的反馈。
通过 OpenFlow 安全通道的信息交互必须按照 OpenFlow 协议规定的格式来执行,通常采用 TLS(Transport Layer Security)加密,在一些 OpenFlow 版本中(1.1及以上),有时也会通过 TCP 明文来实现。通道中传输的 OpenFlow 消息类型包括以下三种:
-
Controller-to-Switch 消息:由控制器发出、OpenFlow 交换机接收并处理的消息,主要用来管理或获取 OpenFlow 交换机状态。
-
Asynchronous 消息:由 OpenFlow 交换机发给控制器,用来将网络事件或者交换机状态变化更新到控制器。
-
Symmetric 消息:可由 OpenFlow 交换机发出也可由控制器发出,也不必通过请求建立,主要用来建立连接、检测对方是否在线等。
OpenFlow交换机
OpenFlow 交换机是整个 OpenFlow 网络的核心部件,主要负责数据层的转发。OpenFlow 交换机可以是物理的交换机/路由器,也可以是虚拟化的交换机/路由器。按照对 OpenFlow 的支持程度,OpenFlow 交换机可以分为两类:
-
OpenFlow 专用交换机:一个标准的 OpenFlow 设备,仅支持 OpenFlow 转发。他不支持现有的商用交换机上的正常处理流程,所有经过该交换机的数据都按照 OpenFlow 的模式进行转发。
-
OpenFlow 兼容型交换机:既支持 OpenFlow 转发,也支持正常二三层转发。这是在商业交换机的基础上添加流表、安全通道和 OpenFlow 协议来获得了 OpenFlow 特性的交换机。
OpenFlow 交换机在实际转发过程中,依赖于流表(Flow Table)。流表是 OpenFlow 交换机进行数据转发的策略表项集合,指示交换机如何处理流量,所有进入交换机的报文都按照流表进行转发。流表本身的生成、维护、下发完全由控制器来实现。
流表项的组成
在传统网络设备中,交换机/路由器的数据转发需要依赖设备中保存的二层 MAC 地址转发表、三层 IP 地址路由表以及传输层的端口号等。OpenFlow 交换机中使用的“流表”也是如此,不过他的表项并非是指普通的 IP 五元组,而是整合了网络中各个层次的网络配置信息,由一些关键字和执行动作组成的灵活规则。
OpenFlow 流表的每个流表项都由匹配域(Match Fields)、处理指令(Instructions)等部分组成。流表项中最为重要的部分就是匹配域和指令,当 OpenFlow 交换机收到一个数据包,将包头解析后与流表中流表项的匹配域进行匹配,匹配成功则执行指令。
流表项的结构随着 OpenFlow 版本的演进不断丰富,不同协议版本的流表项结构如下。
多级流表与流水线处理
OpenFlow v1.0 采用单流表匹配模式,这种模式虽然简单,但是当网络需求越来越复杂时,各种策略放在同一张表中显得十分臃肿。这使得控制平面的管理变得十分困难,而且随着流表长度与数目的增加,对硬件性能要求也越来越高。
从 OpenFlow v1.1 开始引入了多级流表和流水线处理机制,当报文进入交换机后,从序号最小的流表开始依次匹配,报文通过跳转指令跳转至后续某一流表继续进行匹配,这样就构成了一条流水线。多级流表的出现一方面能够实现对数据包的复杂处理,另一方面又能有效降低单张流表的长度,提高查表效率。
流表下发方式
OpenFlow 流表的下发分可以是主动(Proactive)的,也可以是被动(Reactive)的:
-
主动模式下,控制器将自己收集的流表信息主动下发给 OpenFlow 交换机,随后交换机可以直接根据流表进行转发。
-
被动模式下,OpenFlow 交换机收到一个报文而查流表失败时,会发送消息询问控制器,由控制器进行决策该如何转发,并计算、下发相应的流表。被动模式的好处是交换机无需维护全部的流表,只有当实际的流量产生时才向控制器获取流表记录并存储,当老化定时器超时后可以删除相应的流表,因此可以大大节省交换机芯片空间。
OpenFlow 的应用场景
随着 OpenFlow 概念的发展和推广,其研究和应用领域也得到了不断拓展,主要包括网络虚拟化、安全和访问控制、负载均衡等方面。下面以几个典型的场景来展示OpenFlow的应用:
OpenFlow 在校园网络中的应用
科研院校网络是 OpenFlow 的发源地,也是 OpenFlow 被广泛应用的网络环境。学生或研究人员在进行网络创新性研究时,可能会有全新设计的网络控制协议和数据转发技术需要验证,他们希望有一个平台能帮助他们把网络的控制、转发独立出来,以便能在平台上*验证他们的研究工作。基于 OpenFlow 的网络正好可以提供这样一个试验平台,不仅更接近真实网络的复杂度,实验效果好,而且可以节约实验费用。
OpenFlow 在数据中心网络中的应用
云数据中心是 OpenFlow 得以发扬光大的地方。云数据中心部署时存在多租户资源动态创建、流量隔离以及虚拟机动态迁移等虚拟化需求,OpenFlow交换机可以配合云管理平台实现网络资源的动态分配和网络流量的按需传输,实现云服务的网络虚拟化需求并可以改善网络性能。其次,在数据中心的流量很大,如果不能合理分配传输路径很容易造成数据拥塞,从而影响数据中心的高效运行。如果在数据中心中部署 OpenFlow,可以动态获取各链路的流量传输情况,动态下发 OpenFlow 流表规则进行均衡调度,实现路径优化以及负载均衡。
OpenFlow在园区网络中的应用
在园区网络中可以使用 OpenFlow 对接入层设备进行有效的管控。接入层设备的特点是量大、故障率高,但设备功能和流量策略相对简单。如果使用 OpenFlow,可以在控制器上集中统一对接入设备进行流表下发、网络监控等维护工作。在要求用户身份认证的场合,可以把认证流量引导到控制器上,在验证用户身份合法后再下发准入规则到用户连接的交换机端口上。在控制器检测到特定网络端口或特定用户流量异常时,可以通过下发规则关停设备端口或限制特定流量,快速恢复网络故障,提高网络可靠性和安全性。
原文链接:https://info.support.huawei.com/info-finder/encyclopedia/zh/OpenFlow.html
每天学习一点点,每天进步一点点。