SDN中的开源交换机介绍以及使用

之前关于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.0aptitude 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 --siwtch=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 3 # 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。

附上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
时间: 2024-08-03 15:36:58

SDN中的开源交换机介绍以及使用的相关文章

OpenFlow和SDN的历史和原理介绍

OpenFlow相关的历史.新闻:http://blog.csdn.net/jincm13/article/details/7825754起源与发展[https://36kr.com/p/5035985] OpenFlow起源于斯坦福大学的Clean Slate项目组 [1] .CleanSlate项目的最终目的是要重新发明英特网,旨在改变设计已略显不合时宜,且难以进化发展的现有网络基础架构.在2006年,斯坦福的学生Martin Casado领导了一个关于网络安全与管理的项目Ethane[2]

思科惠普大打口水战 开源交换机谁是老大?

编者按:思科和惠普近日就惠普推出的新款品牌开源交换机大打口水战,作为目前业界巨头的两家公司在对待开源项目的态度上都是积极的,但就产品而言,两家各有千秋,这也是这场口水战能打起来的原因,当然,我们更期望好的产品的问世,以此来促进SDN的落地. 据国外媒体报道,思科表示惠普在上星期四推出的针对数据中心的新款品牌开源网络交换机“让人质疑其在ProCurve/H3C交换产品上缺乏信心.动力和创新.”这家总部位于加利福尼亚州圣何塞的公司星期四在给CRN的一封电子邮件中做出这样的表示. 思科在电子邮件中表示

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

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在APP市场上,经常有一些充满新意的应用让我们眼前一亮,比如微信的面对面加好友,支付宝的声波支付等等,都是通过声波的方式进行握手通信,今天这篇文章将介绍声波通信和声波验证的实现原理和代码实现. 首先介绍一下声波验证的原理.如果我们想发出声音,就必须震动,说话是声带在震动,手机能播放音乐是喇叭在震动.既然发出声音必须震动,那么就有震动快慢之分,我们把震动的快慢叫做声音的频率.频率低的声音低沉有力,能传播很远

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报开源框架 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,

iOS开发-常用第三方开源框架介绍

iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. 下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下G

各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT

现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http://www.opensource.org/licenses /alphabetical).我们在常见的开源协议如BSD, GPL, LGPL,MIT等都是OSI批准的协议.如果要开源自己的代码,最好也是选择这些被批准的开源协议. 这里我们来看四种最常用的开源协议及它们的适用范围,供那些准备开源或者使用开源产品的开发人员/厂家参考. BSD开源协议(original BSD li

几种P2P流媒体开源项目介绍

P2P流媒体开源项目介绍 1. PeerCast 2002年成立,最早的开源P2P流媒体项目.PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据.节点离根节点越远,传输时延就越大,所以树的深度应该尽可能短,但节点有限的上行带宽限制了节点的宽度. 2. Tribler 2008年开始的项目,既能实现BT下载,还能播放视频的点播和直播.最大的特点是完全去中心化的设计,把传统的Tracker Server的工作分散了每个节点中去.开发语言是Pyth

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

P2P流媒体开源项目介绍 1. PeerCast 2002年成立,最早的开源P2P流媒体项目.PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据.节点离根节点越远,传输时延就越大,所以树的深度应该尽可能短,但节点有限的上行带宽限制了节点的宽度. 2. Tribler 2008年开始的项目,既能实现BT下载,还能播放视频的点播和直播.最大的特点是完全去中心化的设计,把传统的Tracker Server的工作分散了每个节点中去.开发语言是Pyth

基于MVC模式的开源框架介绍

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑. MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: Model(模型)表示应用程序核心(比如数据库记录列表). View(视图