在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. jdk 环境配置踩坑

    其实在网上已经有很多环境配置的介绍了.不过我还是想用切身经历告诉大家这里面可能遇到的坑. 首先,先给大家讲一下JAVA_HOME,path,CLASSPATH JAVA_HOME 指向的是JDK的安装 ...

  2. Struts2学习笔记二 配置详解

    Struts2执行流程 1.简单执行流程,如下所示: 在浏览器输入请求地址,首先会被过滤器处理,然后查找主配置文件,然后根据地址栏中输入的/hello去每个package中查找为/hello的name ...

  3. Java基础学习笔记三 Java基础语法

    Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...

  4. 课后练习:C语言实现Linux命令——od

    课后练习:C语言实现Linux命令--od --------CONTENTS-------- 题目详情与分析 设计思路 遇到的问题及解决 待实现的设想与思考 学习反思与感悟 附1:myod.c「1.0 ...

  5. JAVA_SE基础——53.什么是异常?

    尽管人人都希望自己的身体健康,处理事情都能顺利进行, 但是在实际生活中总会遇到各种状况,比如,感冒发烧,电脑突然蓝屏死机等..程序也一样,程序在运行过程中,也会发生各种非正常状况,比如程序运行时磁盘不 ...

  6. 阿里云CentOS部署小笔记

    快毕业了,我用近两周的时间完成了一个nodeJs+Vue-Cli+Mysql的毕业设计,到了部署的时候了. 然而,博主使用Linux的经验有限得很,所以只能自己慢慢地填坑了. 一.准备工作 1)阿里云 ...

  7. PHP模式设计之单例模式、工厂模式、注册树模式、适配器模式、观察者模式

    php模式设计之单例模式 什么是单例模式? 单例模式是指在整个应用中只有一个实例对象的设计模式 为什么要用单例模式? php经常要链接数据库,如果在一个项目中频繁建立连接数据库,会造成服务器资源的很大 ...

  8. Web Uploader初始化隐藏容器失败及点击上传图片时反应较慢的问题

    问题1:在一个页面集成一个或者多个文件上传插件,初始化时有些DOM容器是隐藏的,这时候经常会出现初始化失败的情况,虽然按钮样式改变了,但是点击就是没反应(有时候不经意点了哪个地方,或许会出现文件选择框 ...

  9. ArrayList、Vector、LinkedList、HashMap、HashTable的存储性能和特性

    ArrayList和Vector都是使用数组方式存储数据,次数组元素大于实际存储的数据以便添加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数 ...

  10. nodejs 使用CAS 实现 单点登录(SSO) 【开源库实现,简单】

    大部分企业使用 java 开发业务系统, 针对java cas的认证 demo 比较多 ,还有PHPCAS ,标准的参考这里: phpCAS 的使用 整理登录流程如下图,图片来自网络 找了不少资料,n ...