在SDN/NFV的网络革新技术浪潮的引领下,催生了诸多数据面开源方案的诞生。业界知名度较高的有OVS(Open vSwitch)、FD.io (Fast Data I/O)、ODP(Open Data Plane)。

然而,在现有的虚拟交换机中,OVS作为主流的开源方案,是目前大多数虚拟化环境和OpenStack部署中的网络基础,可以在很多SDN/NFV场景下进行灵活部署。

什么是OVS?

  Open vSwitch是由Nicira公司使用C和Python语言开发实现的遵循开源Apache2.0许可的产品级质量的多层虚拟交换机,目的是让大规模网络通过可编程实现自动化扩展。

它既可以作为一个软件交换机运行在虚拟化层,也可以作为交换芯片的控制栈实现,支持多种标准管理接口和协议(NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。

OVS项目的开源发展历史:

  OVS项目早在2009年,就已孵化诞生,于2012年7月30日发布第一个开源版本V1.7.0,经过这几年的不断发展壮大,到目前为止,OVS开源版本已经更新到V2.6.0。图2简单展示了其开源版本的更新历程。

  随着其社区生态圈日趋丰富,OVS已经被移植到多种虚拟化平台(XenServer6.0、Xen 、KVM、Proxmox VE、VirtualBox)和交换芯片组。

同时被集成到许多虚拟化管理系统(OpenStack、openQRM、OpenNebula、oVirt)。

此外,内核datapath已经被纳入Linux内核作为发行版的一部分,像知名的Linux操作系统Ubuntu、Debian、Fedora也都提供了datapath的安装包。

OVS同样也支持FreeBSD和NetBSD,更有DPDK( Data Plane Development Kit )助力加速OVS,帮助改善其转发性能。

OVS的组成结构:

  OVS的构成非常简单,每个部件负责各自的职责,图3描述了其基础架构组成。

  简单了解完OVS本身,接下来我们通过两个子项目,再进行深入认识:

子项目1:OpenFlow伙伴协议——OF-CONFIG

  为了对控制器做更好的支持而诞生。因OVS中的OVSDB协议无法很好的服务于交换机的配置管理,所以就促成了OVS需要支持OF-CONFIG协议的需求,从而有了OVS旗下的OF-CONFIG开源子项目。

  首先简单认识一下,什么是OF-CONFIG?
  OF-CONFIG协议全称OpenFlow Configuration Protocol,由开放网络基金会ONF(Open Networking Foundation)的配置管理工作组CMWG(Configuration and Management working group)提出,

基于NETCONF协议实现,依赖于NETCONF的操作和传输标准,旨在对OpenFlow交换机实现远程管理。

  其次,OF-CONFIG能够帮我们完成哪些方面的工作?
  最新1.2版本的OF-CONFIG协议支持OpenFlow1.3版本的交换机,主要可以完成的功能如表2所示:

  最后,看一下OVS是如何在现有的基础架构上支持OF-CONFIG?

  图4显示了OF-CONFIG对接OVS的架构实现,OF-CONFIG server作为一个系统守护进程,和OVSDB server之间通过OVSDB IDL(Interface Definition Language)建立连接。

然后OF-CONFIG server等待来自NETCONF agent的会话连接请求,一个NETCONF会话连接请求对应一个NETCONF agent。NETCONF agent在启动的时候和OF-CONFIG server建立连接,

并和OF-CONFIG client完成会话建立的握手。OF-CONFIG server和OF-CONFIG client之间通过D-BUS或UNIX socket方式的进行内部通信。

子项目2:开放虚拟网络OVN

  为更好的服务于云计算环境而诞生。由于 Openstack Neutron 的实现架构存在一些性能问题,比如 neutron-server 要与非常多的 agent 之间通信,

存在RPC(Remote Procedure Call Protocol)性能瓶颈,还有 neutron 里用到非常多的 namespace,namespace 资源有限且系统开销比较大,这里也存在性能瓶颈。

  从长远来看,OVS 社区觉得Neutron 应该让一个其它的项目来做虚拟网络的控制平面,Neutron 只需要提供 API 的处理,

于是 OVS 社区于2015年1月推出了 OVN(Open Virtual Network),用来给OVS引入一个轻量级的控制平面,致力于提高基于OVS的OpenStack网络方案的扩展性和易用性。

  首先,看看OVN的实现架构:

  其次,了解OVN组成结构:

  图5描述了OVN的总体实现架构,结合表3的描述,我们可以简单了解OVN的每个组件的基本功能实现。

  OVN 对运行平台没有额外要求,只要能够运行 OVS,就可以运行 OVN,所以 OVN 可以和 Linux,Docker,DPDK 还有 Hyper-V 兼容,从 OVS 升级到 OVN 也是非常容易的。

  最后,了解一下引入OVN是如何简化OVS在OpenStack中的集成。

  OpenvSwitch OVN项目将租户的概念引入了OVS,正式向neutron方向发展,提供对L2/L3网络虚拟化的支持。引入OVN架构,通过替代OVS agent、L3 agent和DHCP agent,

从而简化Open vSwitch在Neutron的集成。OVS集成OpenStack在没有OVN和有OVN支持的两种情况下的架构实现如下图所示:

  通过以上三个开源项目的简单介绍,我们可以认识到,OVS作为一款优秀的开源Openflow交换机,在不断提供丰富功能特性的同时,

也注重和控制器及云管平台的对接支持,从而利用丰富的开源社区生态来组建实现灵活多样的SDN/NFV应用场景。

从三个开源项目认识OpenFlow交换机 - OVS的更多相关文章

  1. SDN开源项目以及组织机构

    SDN开源项目以及组织机构 以上内容均摘自网络 如有侵权,请转告笔者,立即删除 两大组织 ONF (Open Networking Foundation) Google.Facebook.Micros ...

  2. Android开源项目分包方式学习(eoe、oschina、github)

    总感觉Android中关于分包的文章很少,或者几乎可以说没有.但是合理地分包,又可以使整个项目模块化,减少包与包之间的依赖,让整个项目的框架更加清晰,更利于后续功能的拓展. 因为没有相关的文章,所以这 ...

  3. Equinox开源项目CQRS架构分析

    CQRS架构下Equinox开源项目分析 一.DDD分层架构介绍 本篇分析CQRS架构下的Equinox开源项目.该项目在github上star占有2.4k.便决定分析Equinox项目来学习下CQR ...

  4. 这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)

    在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台 ...

  5. 学习Coding-iOS开源项目日志(三)

    继续前两篇,接着本第三篇<学习Coding-iOS开源项目日志(三)>讲解Coding-iOS开源项目. 前 言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的 ...

  6. GitHub上不错的Android开源项目(三)

    收集相关系列资料,自己用作参考,练习和实践.小伙伴们,总有一天,你也能写出 Niubility 的 Android App :-) GitHub上不错的Android开源项目(一):http://ww ...

  7. 转__Android开源项目(三 完结篇)

    http://www.csdn.net/article/2013-05-21/2815370-Android-open-source-projects-finale/1 截至目前,在GitHub“最受 ...

  8. GitHub上最火的74个Android开源项目(三)

    此前,推出的GitHub平台上“最受欢迎的开源项目”系列文章引发了许多读者的热议,在“GitHub上最火的40个Android开源项目(一).(二)中,我们也相继盘点了40个GitHub上最受欢迎的A ...

  9. 开源项目MultiChoiceAdapter详解(三)——MulitChoiceNormalArrayAdapter的使用

    MulitChoiceNormalArrayAdapter是我自己定义的一个类,其实就是实现了MulitChoiceArrayAdapter,为什么做这个简单的实现类呢,因为这样我们在不用Action ...

随机推荐

  1. CSS3美化网页元素

    <span>标签 </span>属性名 含义 举例font-family 设置字体类型 font-family:"隶书"font-size 设置字体大小 f ...

  2. php设计模式七 ---组合模式

    1.介绍 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结 ...

  3. 『练手』通过注册表 获取 VS 和 SQLServer 文件路径

    获取任意 VS 和 SQLServer 的 磁盘安装目录. 背景需求:如果磁盘电脑安装了 VS 或者 SQLServer 则 认定这台计算机 的使用者 是一名 软件研发人员,则让程序 以最高权限运行. ...

  4. 听翁恺老师mooc笔记(16)--程序设计与C语言

    问题1:计算机遍布生活的各个方面,若你需要一个功能可以下载APP,我们需要的大部分功能都可以找到对应的APP,如果没有可以自己写一个软件,但是很少人需要这么做,那么我们为什么学习计算机编程语言? 学习 ...

  5. Python 实现火车票查询工具

    注意:由于 12306 的接口经常变化,课程内容可能很快过期,如果遇到接口问题,需要根据最新的接口对代码进行适当修改才可以完成实验. 一.实验简介 当你想查询一下火车票信息的时候,你还在上 12306 ...

  6. mysql基础篇 - 其他基本操作

    基础篇 - 其他基本操作         其他基本操作 一.实验简介 本节实验中我们将学习并实践数据库的其他基本操作:索引.视图,导入和导出,备份和恢复等. 这些概念对于数据库管理员而言都非常重要,请 ...

  7. 韩顺平dedecms讲解上课记录

    感谢韩顺平: 如何打开php的gd库,通过php设置->php扩展-->phpdb库;打上勾就行: dede存在四张十分重要的表,channeltype,模型表最原始的发源arctype: ...

  8. 静态链表C语言数据结构

    静态链表就是将数组实现单链表: int Malloc_SLL(StaticLinkList space) { int i = space[0].cur;//取得第一个头节点的下标 if( space[ ...

  9. php实现单,双向链表,环形链表解决约瑟夫问题

    传智播客PHP学院 韩顺平 PHP程序员玩转算法第一季  http://php.itcast.cn 聊天篇: 数学对我们编程来说,重不重要? 看你站在什么样的层次来说. 如果你应用程序开发,对数学要求 ...

  10. 初次面对c++

    第一次实验 2-4源码: #include<iostream> using namespace std; int main() { int day; cin>>day; swi ...