之前关于SDN的开发工作都是在控制器层面上(以ryu为主),现在开始了新的工程项目,需要同时修改控制器和交换机的源码,如果后续项目需要,还可能需要加中间层——网络虚拟层,这部分的知识已经在前面读过了相关论文,有了了解。以前不论是硬件交换机和Mininet中都是用的CPqD,所以在这次首选的交换机是CPqD,读了两天源码之后发现自己的选择错了,对自己的想法也有了很大的改变。

网上能找到的CPqD相关源码的资料非常少非常少(我没有找到),我很晦涩的看了两天(C语言真的不好读),只是对代码有了大概的了解,并不能达到自己的要求,在第二天晚上,突然觉得自己走了冤枉路,被习惯的力量束缚了自己,所以立马转战OpenvSwitch,网上的源码资料相当多,所以学习了两天,基本可以上手该代码了。所以,时刻告诫自己,不要忘了出发时候的目的,克服习惯的束缚,选择最优的路径。

下面的两个交换机都是我实际用过的,没有好坏比较,都是杰出团队的大作,如果需要改写交换机源码,暂时推荐OpenvSwitch,因为他的资料多!不过如果以后有时间我还是打算读读CPqD代码的。个人感觉CPqD是比OpenvSwitch简单和轻量一点,毕竟他只实现了OpenFlow1.3协议,更多的用于实验目的,而OpenvSwitch内核模块是可以替换掉linux网桥的,支持OpenFlow协议只是他的一部分功能。

下面简单的介绍下CPqD和OpenvSwitch

一. CPqD

CPqD的github源码上面已经详细的讲解了他的安装和使用。之前我已经安装和使用了好多次,所以不再赘述

不过有个问题需要注意

  1. 在ubuntu13.10以上的版本CPqD无法正确编译
    原因:CPqD的编译依赖于netbee库,而如果bison版本大于2.5,这个库就不能编译,而ubuntu13.10以上的版本的bison库的版本都高于2.5
    解决办法:卸载系统的bison,安装符合要求的bison版本。github上面已经添加了解决办法。也可以参加下面两个连接:链接1链接2

二. OpenvSwitch

第一次用OpenvSwitch,所以很有必要自己详细总结过程,为以后提供方便,ubuntu用的是14.04LTS版本,内核版本为3.19.8

OpenvSwitch的官网里面有很详细的资料,可以现在源码解读和学习。

  1. 进入官网,下载自己所需要的OpenvSwitch版本,我下载了LTS版本2.3.2,后来发现有问题(问题1),重新下载了2.4版本
  2. 解压安装包: 
    tar -xzf openvswitch-2.4.0.tar.gz
  3. 构建基于Linux内核的交换机,uname -r用来得到自己linux内核版本号,用反引号(键盘上数字1左边)括起来,其中aptitude和apt-get一样,是Debian及其衍生系统中功能极其强大的包管理工具,但是aptitede在处理依赖问题上更佳一些,在删除一个包时,会删除本身所依赖的包,使系统更为干净。
    ./configure部分可以用--prefix=参数,可以让OVS完全安装在该目录底下。
  4. cd openvswitch-2.4.0
    aptitude install dh-autoreconf libssl-dev openssl #预先安装一些库
    ./configure --with-linux=/lib/modules/'uname -r'/build
  5. 编译并安装OVS2.4.0
    make
    make install
  6. 安装并加载构建的内核模块
    modprobe gre
    insmod datapath/linux/openvswitch.ko
    make modules_install
    modprobe openvswitch

    此时可以通过lsmod |grep openvswitch来查看已载入系统的模块,发现有OpenvSwitch

  7. 使用ovsdb工具初始化配置数据库
    ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema

如果顺利进行到这里,则表明OVS已经成功安装,下面介绍如何在Mininet中使用OVS

  1. 开启ovsdb-server配置数据库:有两种方式,如果要使用ssl连接,务必在编译前安装好libssl-dev以及openssl。之后可以在/usr/local/var/log/openvswitch中查看日志ovsdb-server.log
    1. no ssl

      ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
      --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
      --pidfile --detach --log-file
    2. ssl
      ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
      --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
      --private-key=db:Open_vSwitch,SSL,private_key \
      --certificate=db:Open_vSwitch,SSL,certificate \
      --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
      --pidfile --detach --log-file
  2. 开启ovs-vsctl
    ovs-vsctl --no-wait init
  3. 开启ovs-switchd功能,即主进程
    ovs-vswitchd --pidfile --detach

    至此,OVS启动完毕,可以在Mininet里面使用了

  4. 启动Mininet,交换机选成OVS
    sudo mn --controller=remote --switch=ovsk

这样完成了一次的安装和配置,可以如果重启机器会发现数据库什么的都得重新开始,所以我们可以继续配置,设置为开机自动启动

  1. 开机自动加载内核模块

    echo "openvswitch " >> /etc/modules
    echo "gre" >> /etc/modules
    echo "libcrc32c" >> /etc/modules
  2. 开机自动启动
    首先新建一个文件
    vim /etc/init.d/openvswitch

    文件内容为:

  3. #!/bin/sh
    start-stop-daemon -q -S -x /usr/local/sbin/ovsdb-server -- --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach --log-file
    sleep # waiting ovsdb-server
    start-stop-daemon -q -S -x /usr/local/bin/ovs-vsctl -- --no-wait init
    start-stop-daemon -q -S -x /usr/local/sbin/ovs-vswitchd -- --pidfile --detach --log-file

    接着改变文件权限,执行开机启动命令

    chmod +x /etc/init.d/openvswitch
    updata-rc.d -f openvswitch defaults

安装过程中遇到的问题:

  1. 问题:error:linux kernel in /lib/modules/3.19.0-25-generic/build is version 3.19.8, but version newer than 3.14.x is not supported
    原因:所用的OpenvSwitch的版本不支持linux内核版本高于3.14
    解决办法:最简单的版本就是下载和自己内核版本号对应的OpenvSwitch版本,下面列出OpenvSwitch和Linux内核的版本支持关系

    Open vSwitch Linux kernel
    1.4.x 2.6.18 to 3.2
    1.5.x 2.6.18 to 3.2
    1.6.x 2.6.18 to 3.2
    1.7.x 2.6.18 to 3.3
    1.8.x 2.6.18 to 3.4
    1.9.x 2.6.18 to 3.8
    1.10.x 2.6.18 to 3.8
    1.11.x 2.6.18 to 3.8
    2.0.x 2.6.32 to 3.10
    2.1.x 2.6.32 to 3.11
    2.3.x 2.6.32 to 3.14
    2.4.x 2.6.32 to 4.0
    2.5.x 2.6.32 to 4.3
     
  2. 问题:I/O error: /usr/local/etc/openvswitch/conf.db: failed to lock lockfile(Resource temporarily unavailable)
    原因:写conf.db文件所在的目录需要管理员权限
    解决办法:加上sudo即可,因此建议在安装初期直接切换到管理员sudo su
  3. 问题:Private key specified but OpenvSwitch was built without SSL support
    原因:没有安装SSL
    解决办法:在编译前安装好libssl-dev以及openssl。

三. openvswitch的简单使用(下文提到的网桥即OpenFlow交换机)

  1. 添加一个名为s的网桥
    ovs-vsctl add-br s
  2. 列出所有的网桥:
    ovs-vsctl list-br
  3. 查看交换机s的信息:
    ovs-ofctl show s
  4. 查看s交换机的端口的状态:
    ovs-ofctl dump-ports s
  5. 查看s交换机的流表:
    ovs-ofctl dump-flows s

四. openvswitch和CPqD的比较

经过我的实验,发现OVS比CPqD性能好太多!!!以前自己写的ryu拓扑发现模块包括ryu自带的模块用在CPqD上发现拓扑数量十分有限,今天安装好OVS后重新跑了下我的代码,相同的机器,性能简直好了太多太多!

附上OVS2.4.0的主要最新特性和改进:

  1. 支持快速生成树协议
  2. 支持多播窥探
  3. 进行了连接词匹配OpenFlow扩展,在构建流的时候不会引入笛卡尔积数量爆炸
  4. 对许多CLI命令增加了bash命令行的完成
  5. 支持通过OpenFlow1.4协议进行事务更新
  6. 增加了最新OpenFlow的特征
  7. 增加了一个脚本——ovs-docker,可以很方便的把OVS集成在docker容器里面
  8. 支持linux内核中的STT和基本的Geneve隧道
  9. 支持VXLAN组策略扩展

说明:

  1. 上文中的CPqD均指的是CPqD/ofsoftswitch13交换机
  2. OpenvSwitch简称OVS

云计算和SDN中的开源交换机介绍以及使用的更多相关文章

  1. OpenFlow和SDN的历史和原理介绍

    OpenFlow相关的历史.新闻:http://blog.csdn.net/jincm13/article/details/7825754起源与发展[https://36kr.com/p/503598 ...

  2. 【转帖】四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho

    四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho 1 BI系统的简述 从技术角度来说 BI 包含了 ETL.DW.OLAP.DM等多环节.简单的说就是把交易系统 ...

  3. Android中使用开源框架android-image-indicator实现图片轮播部署

    之前的博文中有介绍关于图片轮播的实现方式,分别为(含超链接): 1.<Android中使用ViewFlipper实现屏幕切换> 2.<Android中使用ViewPager实现屏幕页 ...

  4. 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(一)

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在APP市场上,常常有一些充满新意的应用让我们眼前一亮,比方微信的面对面加好友,支付宝的声波支付等等,都是通 ...

  5. 揭开webRTC媒体服务器的神秘面纱——WebRTC媒体服务器&开源项目介绍

    揭开webRTC媒体服务器的神秘面纱--WebRTC媒体服务器&开源项目介绍 WebRTC生态系统是非常庞大的.当我第一次尝试理解WebRTC时,网络资源之多让人难以置信.本文针对webRTC ...

  6. 6个P2P流媒体开源项目介绍

    P2P流媒体开源项目介绍  1. PeerCast 2002年成立,最早的开源P2P流媒体项目.PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据 ...

  7. 各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT_转

    转自:各种开源协议介绍 BSD.Apache Licence.GPL V2 .GPL V3 .LGPL.MIT 现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的 ...

  8. windows下nodejs express安装及入门网站,视频资料,开源项目介绍

    windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件下载地址: ...

  9. IOS-常用第三方开源框架介绍

    iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 时间:2015-05-06 16:43:34      阅读:533      评论:0      收藏:0      [点我收藏+] ...

随机推荐

  1. 随机验证码模块(random)

    1. 生成一个6位数字+字母的验证码 (面试题) import random l = []for i in range(6): alpha = chr(random.randint(65,90)) a ...

  2. discuz开发笔记

    http://blog.csdn.net/tiangsu_php/article/details/7665125 http://www.discuz.net/thread-3225192-1-1.ht ...

  3. phpexcel 读取日期的问题?

    phpexcel 读取excel数字时,显示为一串数字(时间都是类似于这样的数字:41890.620138889),如何将数字转换为对应的日期来显示呢?特别是例如星期一这种的时间. 可以用phpexc ...

  4. AsyncHttpClient来完成网页源代码的显示功能,json数据在服务器端的读取还有安卓上的读取

    一.使用AsyncHttpClient来完成网页源代码的显示功能: 首先.我们引入 步骤: 1.添加网络权限 2.判断网页地址是否为空 3.不为空的情况下创建客户端对象 4.处理get/post请求 ...

  5. java之TCP(Socket,serverSocket)实例

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  6. css - 当文本内容长度超出屏幕宽度时,以省略号代替

    <style> .ellipsis{ text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } </styl ...

  7. 强大的响应式jQuery消息通知框和信息提示框插件

    lobibox是一款功能很强大的jQuery消息通知框和信息提示框插件.这个插件分为两个部分:消息通知框和信息提示框.它能很好的结合Bootstrap使用. 信息提示框 lobibox的信息提示框能够 ...

  8. [svc][db]centos7 Mariadb安装

    yum install mariadb-server mariadb -y 修改配置: [mysqld] default-storage-engine = innodb innodb_file_per ...

  9. 使用ss命令代替 netstat

    ss是Socket Statistics的缩写. 顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的 ...

  10. protobuf java学习

    本文档为java编程人员使用protocol buffer提供了一个基本的介绍,通过一个简单的例程进行介绍.通过本文,你可以了解到如下信息: 1.在一个.proto文件中定义一个信息格式. 2.使用p ...