发新话题
打印

虚拟化的逆袭:OpenFlow 和 SDN

虚拟化的逆袭:OpenFlow 和 SDN

云计算的发展,是以虚拟化技术为基础的。云计算服务商以按需分配为原则,为客户提供具有高可用性、高扩展性的计算、存储和网络等 IT 资源。虚拟化技术将各种物理资源抽象为逻辑上的资源,隐藏了各种物理上的限制,为在更细粒度上对其进行管理和应用提供了可能性。
近些年,计算的虚拟化技术 (主要指 x86 平台的虚拟化) 取得了长足的发展;相比较而言,尽管存储和网络的虚拟化也得到了诸多发展,但是还有很多问题亟需解决,在云计算环境中尤其如此。

OpenFlow 和 SDN 尽管不是专门为网络虚拟化而生,但是它们带来的标准化和灵活性却给网络虚拟化的发展带来无限可能。本文来自公众账号“点融黑帮”,作者万林涛,希望通过本文对 OpenFlow/SDN 做一个初步介绍,以期帮助大家能够进一步深入了解和学习 OpenFlow/SDN,欢迎批评和指正。

起源与发展
OpenFlow 起源于斯坦福大学的 Clean Slate 项目组 。CleanSlate 项目的最终目的是要重新发明英特网,旨在改变设计已略显不合时宜,且难以进化发展的现有网络基础架构。在 2006年,斯坦福的学生 Martin Casado 领导了一个关于网络安全与管理的项目 Ethane,该项目试图通过一个集中式的控制器,让网络管理员可以方便地定义基于网络流的安全控制策略,并将这些安全策略应用到各种网络设备中,从而实现对整个网络通讯的安全控制。
受此项目 (及 Ethane 的前续项目 Sane) 启发,Martin 和他的导师 Nick McKeown 教授 (时任 Clean Slate 项目的 Faculty Director) 发现,如果将 Ethane 的设计更一般化,将传统网络设备的数据转发 (data plane) 和路由控制 (control plane) 两个功能模块相分离,通过集中式的控制器 (Controller) 以标准化的接口对各种网络设备进行管理和配置,那么这将为网络资源的设计、管理和使用提供更多的可能性,从而更容易推动网络的革新与发展。

于是,他们便提出了 OpenFlow 的概念,并且 Nick McKeown 等人于 2008年 在 ACM SIGCOMM 发表了题为 OpenFlow: Enabling Innovation in Campus Networks 的论文,首次详细地介绍了 OpenFlow 的概念。该篇论文除了阐述 OpenFlow 的工作原理外,还列举了 OpenFlow 几大应用场景,包括:

1) 校园网络中对实验性通讯协议的支持 (如其标题所示);

2) 网络管理和访问控制;

3) 网络隔离和 VLAN;

4) 基于 WiFi 的移动网络;

5) 非 IP 网络;

6) 基于网络包的处理。当然,目前关于 OpenFlow 的研究已经远远超出了这些领域。

基于 OpenFlow 为网络带来的可编程的特性,Nick 和他的团队 (包括加州大学伯克利分校的 Scott Shenker 教授) 进一步提出了 SDN (Software Defined Network, 目前国内多直译为 “软件定义网络”) 的概念--其实,SDN 的概念据说最早是由 KateGreene 于 2009年 在 TechnologyReview 网站上评选年度十大前沿技术时提出。

如果将网络中所有的网络设备视为被管理的资源,那么参考操作系统的原理,可以抽象出一个网络操作系统 (Network OS) 的概念—这个网络操作系统一方面抽象了底层网络设备的具体细节,同时还为上层应用提供了统一的管理视图和编程接口。这样,基于网络操作系统这个平台,用户可以开发各种应用程序,通过软件来定义逻辑上的网络拓扑,以满足对网络资源的不同需求,而无需关心底层网络的物理拓扑结构。关于 SDN 的概念和原理,可以参考开放网络基金会 (Open NetworkingFoundation) 于今年4月 份发表的 SDN 白皮书 Software Defined Networking:The New Norm forNetworks 。

从上面的描述中,可以看出 OpenFlow/SDN 的原理其实并不复杂,从严格意义上讲也很难算是具有革命性的创新。然而 OpenFlow/SDN 却引来了业界越来越多的关注,成为近年来名副其实的热门技术。目前,包括 HP、IBM、Cisco、NEC 以及国内的华为和中兴等传统网络设备制造商都已纷纷加入到 OpenFlow 的阵营,同时有一些支持 OpenFlow 的网络硬件设备已经面世。

2011年,开放网络基金会 (Open Networking Foundation) 在 Nick 等人的推动下成立,专门负责 OpenFlow 标准和规范的维护和发展;同年,第一届开放网络峰会 (OpenNetworking Summit) 召开,为 OpenFlow 和 SDN 在学术界和工业界都做了很好的介绍和推广。
第二届峰会上,来自 Google 的 Urs H lzle 在以 OpenFlow@Google 为题的 Keynote 演讲中宣布 Google 已经在其全球各地的数据中心骨干网络中大规模地使用 OpenFlow/SDN,从而证明了 OpenFlow 不再仅仅是停留在学术界的一个研究模型,而是已经完全具备了可以在产品环境中应用的技术成熟度。最近,Facebook 也宣布其数据中心中使用了 OpenFlow/SDN 的技术。
OpenFlow 标准和规范
自 2010年 初发布第一个版本 (v1.0) 以来,OpenFlow 规范已经经历了 1.1、1.2 以及最近刚发布的 1.3 等版本。同时,今年年 初 OpenFlow 管理和配置协议也发布了第一个版本 (OF-CONFIG 1.0 & 1.1)。下图列出了 OF 和 OF-CONFIG 规范各个版本的发展历程及变化,从图中可以看到目前使用和支持最多的仍然是 1.0 和 1.1 版本。

在这里,我们将详细介绍一下 OpenFlow Switch 的最新规范 (即 OF-1.3)。下图选自 Nick 等人的论文 OpenFlow:EnablingInnovation in Campus Networks 。这张图常被用来说明 OpenFlow 的原理和基本架构。其实,这张图还很好地表明了 OpenFlow Switch 规范所定义的范围—从图上可以看出,OpenFlow Switch 规范主要定义了 Switch 的功能模块以及其与 Controller 之间的通信信道等方面。

OF 规范主要分为如下四大部分,
1. OpenFlow 的端口 (Port)
OpenFlow 规范将 Switch 上的端口分为 3 种类别:
a) 物理端口,即设备上物理可见的端口;
b) 逻辑端口,在物理端口基础上由 Switch 设备抽象出来的逻辑端口,如为 tunnel 或者聚合等功能而实现的逻辑端口;
c) OpenFlow 定义的端口。OpenFlow 目前总共定义了 ALL、CONTROLLER、TABLE、IN_PORT、ANY、LOCAL、NORMAL 和 FLOOD 等 8 种端口,其中后 3 种为非必需的端口,只在混合型的 OpenFlow Switch (OpenFlow-hybrid Switch,即同时支持传统网络协议栈和 OpenFlow 协议的 Switch 设备,相对于 OpenFlow-only Switch 而言) 中存在。
2. OpenFlow 的 FlowTable (国内有直译为 “流表” 的)
OpenFlow 通过用户定义的或者预设的规则来匹配和处理网络包。一条 OpenFlow 的规则由匹配域 (Match Fields)、优先级 (Priority)、处理指令 (Instructions) 和统计数据 (如 Counters) 等字段组成,如下图所示。

在一条规则中,可以根据网络包在 L2、L3 或者 L4 等网络报文头的任意字段进行匹配,比如以太网帧的源 MAC 地址,IP 包的协议类型和 IP 地址,或者 TCP/UDP 的端口号等。目前 OpenFlow 的规范中还规定了 Switch 设备厂商可以选择性地支持通配符进行匹配。据说,OpenFlow 在未来还计划支持对整个数据包的任意字段进行匹配。
所有 OpenFlow 的规则都被组织在不同的 FlowTable 中,在同一个 FlowTable 中按规则的优先级进行先后匹配。一个 OpenFlow 的 Switch 可以包含一个或者多个 FlowTable,从 0 依次编号排列。OpenFlow 规范中定义了流水线式的处理流程,如下图所示。当数据包进入 Switch 后,必须从 FlowTable 0 开始依次匹配;
FlowTable 可以按次序从小到大越级跳转,但不能从某一 FlowTable 向前跳转至编号更小的 FlowTable。当数据包成功匹配一条规则后,将首先更新该规则对应的统计数据 (如成功匹配数据包总数目和总字节数等),然后根据规则中的指令进行相应操作--比如跳转至后续某一 FlowTable 继续处理,修改或者立即执行该数据包对应的 Action Set 等。
当数据包已经处于最后一个 FlowTable 时,其对应的 Action Set 中的所有 Action 将被执行,包括转发至某一端口,修改数据包某一字段,丢弃数据包等。OpenFlow 规范中对目前所支持的 Instructions 和 Actions 进行了完整详细的说明和定义。
另外,OpenFlow 规范中还定义了很多其他功能和行为,比如 OpenFlow 对于 QoS 的支持 (即 MeterTable 和 Meter Bands 的定义等),对于 GroupTable 的定义,以及规则的超时处理等。
OpenFlow 的通信通道
这一节中,OpenFlow 规范定义了一个 OpenFlow Switch 如何与 Controller 建立连接、通讯以及相关消息类型等。
OpenFlow 规范中定义了三种消息类型:
a) Controller/Switch 消息,是指由 Controller 发起、Switch 接收并处理的消息,主要包括 Features、Configuration、Modify-State、Read-State、Packet-out、Barrier 和 Role-Request 等消息。这些消息主要由 Controller 用来对 Switch 进行状态查询和修改配置等操作。
b) 异步 (Asynchronous) 消息,是由 Switch 发送给 Controller、用来通知 Switch 上发生的某些异步事件的消息,主要包括 Packet-in、Flow-Removed、Port-status 和 Error 等。例如,当某一条规则因为超时而被删除时,Switch 将自动发送一条 Flow-Removed 消息通知 Controller,以方便 Controller 作出相应的操作,如重新设置相关规则等。
c) 对称 (Symmetric) 消息,顾名思义,这些都是双向对称的消息,主要用来建立连接、检测对方是否在线等,包括 Hello、Echo 和 Experimenter 三种消息。
下图展示了 OpenFlow 和 Switch 之间一次典型的消息交换过程,出于安全和高可用性等方面的考虑,OpenFlow 的规范还规定了如何为 Controller 和 Switch 之间的信道加密、如何建立多连接等 (主连接和辅助连接)。
OpenFlow 协议及相关数据结构
在 OpenFlow 规范的最后一部分,主要详细定义了各种 OpenFlow 消息的数据结构,包括 OpenFlow 消息的消息头等。这里就不一一赘述,如需了解可以参考 OpenFlow 源代码中 openflow.h 头文件中关于各种数据结构的定义。
OpenFlow 的应用
随着 OpenFlow/SDN 概念的发展和推广,其研究和应用领域也得到了不断拓展。目前,关于 OpenFlow/SDN 的研究领域主要包括网络虚拟化、安全和访问控制、负载均衡、聚合网络和绿色节能等方面。另外,还有关于 OpenFlow 和传统网络设备交互和整合等方面的研究。
下面将举几个典型的研究案例来展示 OpenFlow 的应用。
1. 网络虚拟化 – FlowVisor
网络虚拟化的本质是要能够抽象底层网络的物理拓扑,能够在逻辑上对网络资源进行分片或者整合,从而满足各种应用对于网络的不同需求。为了达到网络分片的目的,FlowVisor 实现了一种特殊的 OpenFlow Controller,可以看作其他不同用户或应用的 Controllers 与网络设备之间的一层代理。
因此,不同用户或应用可以使用自己的 Controllers 来定义不同的网络拓扑,同时 FlowVisor 又可以保证这些 Controllers 之间能够互相隔离而互不影响。
下图展示了使用 FlowVisor 可以在同一个物理网络上定义出不同的逻辑拓扑。FlowVisor 不仅是一个典型的 OpenFlow 应用案例,同时还是一个很好的研究平台,目前已经有很多研究和应用都是基于 FlowVisor 做的。

2. 负载均衡 – Aster*x
传统的负载均衡方案一般需要在服务器集群的入口处,通过一个 gateway 或者 router 来监测、统计服务器工作负载,并据此动态分配用户请求到负载相对较轻的服务器上。既然网络中所有的网络设备都可以通过 OpenFlow 进行集中式的控制和管理,同时应用服务器的负载可以及时地反馈到 OpenFlowController 那里,那么 OpenFlow 就非常适合做负载均衡的工作。
Aster*x 通过 Host Manager 和 Net Manager 来分别监测服务器和网络的工作负载,然后将这些信息反馈给 FlowManager,这样 Flow Manager 就可以根据这些实时的负载信息,重新定义网络设备上的 OpenFlow 规则,从而将用户请求 (即网络包) 按照服务器的能力进行调整和分发。

3. 绿色节能的网络服务 – ElasticTree
在数据中心和云计算环境中,如何降低运营成本是一个重要的研究课题。能够根据工作负荷按需分配、动态规划资源,不仅可以提高资源的利用率,还可以达到节能环保的目的。
ElasticTree 创新性地使用 OpenFlow,在不影响性能的前提下,根据网络负载动态规划路由,从而可以在网络负载不高的情况下选择性地关闭或者挂起部分网络设备,使其进入节电模式达到节能环保、降低运营成本的目的。

结语
没有任何一项技术可以解决所有问题,我们相信 OpenFlow/SDN 也不会是解决现有所有网络问题的 “万金油”。但是,我们相信 OpenFlow/SDN 的确给网络变革和创新带了许多机遇—既然网络问题已经变得可以通过编程来解决的时候,技术宅们该出手了,拯救网络世界的时候到了!
原创文章,作者:新用户469126,如若转载,请注明出处:http://36kr.com/p/5035985.html

TOP

发新话题