目录

  • 前言
  • 关于系统
    • Ubuntu20.04的坑
  • mininet的安装
    • 安装部署
    • 测试
  • pox+poxdesk
    • 安装
    • 部署
  • 自定义拓扑结构
    • tree.py(自定义拓扑网络)
    • pox+poxdesk加载组件
    • mininet启动命令
  • 总结
  • 参考资料

前言

朋友最近在上SDN的课程,Software Defined Network,需要配置mininet与pox控制器。
应朋友的要求,研究了不少时间,似乎国内网站暂时没有很新的教程,所以想来写写,希望能给读者一些帮助。
这个教程希望的是短平快的实现所需的功能,所以一切安装以简单为主,尽量少的代码操作,其中如果有错误还希望各位读者点评指出

关于系统

Ubuntu20.04的坑

笔者的实操,Ubuntu20.04存在一个问题,即如果安装的语言选择了中文,后续mininet会无法ping通,显示could not parse…,当切换为English后,情况便成功了,如果有读者是Ubuntu20.04的系统,应当先切换为英文系统保证后续可以完成pingall的操作。

mininet的安装

安装部署

Github链接
读者可以选择源码安装,但一般而言,本着能简单就简单的思路,我们稳定地选择apt库

sudo apt-get install mininet

好了现在mininet就安装完了……
相比于Github库,直接apt-get安装的mininet没有pox和openflow,但我们可以在后面拼积木一样的把这些都拼起来。

测试

sudo mn --test pingall

当出现以下内容时,就说明mininet安装成功了。

*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (2/2 received)

pox+poxdesk

Github链接-Getting Started

安装

这里安装就不像上面的sudo apt-get那么无脑了(hh)
运行以下的代码:

git clone https://github.com/noxrepo/pox
cd pox
git checkout betta
cd ext
git clone https://github.com/MurphyMc/poxdesk
cd poxdesk
wget http://downloads.sourceforge.net/qooxdoo/qooxdoo-2.0.2-sdk.zip
unzip qooxdoo-2.0.2-sdk.zip
mv qooxdoo-2.0.2-sdk qx
cd poxdesk
./generate.py
cd ../../..
./pox.py samples.pretty_log web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk

注意: 如果你之前有安装过pox,一定要保证你的pox是betta分支查询命令如下:

#记得进入你安装pox的目录
git branch -a
git checkout betta

部署

./pox.py samples.pretty_log web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk

在执行了以上的命令后,终端应该会显示以下命令:

POX 0.1.0 (betta) / Copyright 2011-2013 James McCauley, et al.
[core                   ] POX 0.1.0 (betta) is up.

此时另外开启一个终端,输入以下命令:

sudo mn --topo=tree,4,3 --controller=remote,ip=127.0.0.1,port=6633

打开浏览器输入http://127.0.0.1:8000,进入poxdesk
你就会发现以下的画面:

点击左下角的POX按键打开topoViewer,你会惊奇的发现,什么都没有。
是的,就是什么都没有……
这是因为我们没有加载好pox的组件。所以组件应该如何加载呢?

根据参考资料1,我们看到:

pox.py is the entry point of the program and requires the
openflow.of_01 library to explain the following parameters, and forwarding.l2_learning is a component provided by POX. POX opens port 6633 listening by default.

所以上面,其实我们漏掉了openflow.of_01和forwarding.l2_learning的组件。

pox.py是程序的入口,需要openflow.of_01库解释后面的参数,forwarding.l2_learning为POX提供的组件。POX默认开启6633端口监听。

poxdesk.tinytopo可以自动识别topo,poxdesk.terminal可以使用linux
terminal(在web上操作terminal)。上面命令的结尾添加py就可以出现熟悉的pox>命令模式,这时可以在web上看到下联的of-switch.

添加组件后让我们重新开启pox:

./pox.py samples.pretty_log web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk  poxdesk.terminal  poxdesk.tinytopo openflow.discovery forwarding.l2_learning py

再打开topoViewer就有如下的拓扑结构了:

自定义拓扑结构

许多读者可能发现,如果自己定义拓扑结构,似乎光凭借以上的命令生成的树并不稳定,节点之间的连接时常会断开。这还是因为没有加载好pox组件的原因,在这里我举一个经典的Fat Tree网络来说明。

tree.py(自定义拓扑网络)

以下是代码信息:

#!/usr/bin/env pythonfrom mininet.net import Mininet
from mininet.node import Controller, RemoteController
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import Link, Intf, TCLink
from mininet.topo import Topo
from mininet.util import dumpNodeConnections
import logging
import os logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger( __name__ )class HugeTopo(Topo):logger.debug("Class HugeTopo")CoreSwitchList = []AggSwitchList = []EdgeSwitchList = []HostList = []iNUMBER = 0def __init__(self):logger.debug("Class HugeTopo init")iNUMBER = 4self.iNUMBER = iNUMBERself.iCoreLayerSwitch = iNUMBERself.iAggLayerSwitch = iNUMBER * 2self.iEdgeLayerSwitch = iNUMBER * 2self.iHost = self.iEdgeLayerSwitch * 2 #Init TopoTopo.__init__(self)logger.debug("Start create Core Layer Swich")self.createCoreLayerSwitch(self.iCoreLayerSwitch)logger.debug("Start create Agg Layer Swich ")self.createAggLayerSwitch(self.iAggLayerSwitch)logger.debug("Start create Edge Layer Swich ")self.createEdgeLayerSwitch(self.iEdgeLayerSwitch)logger.debug("Start create Host")self.createHost(self.iHost)self.createLink()"""Create Switch and Host"""def createCoreLayerSwitch(self, NUMBER):logger.debug("Create Core Layer")for x in range(1, NUMBER+1):PREFIX = "100"if x >= int(10):PREFIX = "10"self.CoreSwitchList.append(self.addSwitch(PREFIX + str(x)))def createAggLayerSwitch(self, NUMBER):logger.debug( "Create Agg Layer")for x in range(1, NUMBER+1):PREFIX = "200"if x >= int(10):PREFIX = "20"self.AggSwitchList.append(self.addSwitch(PREFIX + str(x)))def createEdgeLayerSwitch(self, NUMBER):logger.debug("Create Edge Layer")for x in range(1, NUMBER+1):PREFIX = "300"if x >= int(10):PREFIX = "30"self.EdgeSwitchList.append(self.addSwitch(PREFIX + str(x)))def createHost(self, NUMBER):logger.debug("Create Host")for x in range(1, NUMBER+1):PREFIX = "400"if x >= int(10):PREFIX = "40"self.HostList.append(self.addHost(PREFIX + str(x))) """Create Link """def createLink(self):logger.debug("Create Core to Agg")for x in range(0, self.iAggLayerSwitch, 2):self.addLink(self.CoreSwitchList[0], self.AggSwitchList[x])self.addLink(self.CoreSwitchList[1], self.AggSwitchList[x])for x in range(1, self.iAggLayerSwitch, 2):self.addLink(self.CoreSwitchList[2], self.AggSwitchList[x])self.addLink(self.CoreSwitchList[3], self.AggSwitchList[x])logger.debug("Create Agg to Edge")for x in range(0, self.iAggLayerSwitch, 2):self.addLink(self.AggSwitchList[x], self.EdgeSwitchList[x])self.addLink(self.AggSwitchList[x], self.EdgeSwitchList[x+1])self.addLink(self.AggSwitchList[x+1], self.EdgeSwitchList[x])self.addLink(self.AggSwitchList[x+1], self.EdgeSwitchList[x+1])logger.debug("Create Edge to Host")for x in range(0, self.iEdgeLayerSwitch):## limit = 2 * x + 1 self.addLink(self.EdgeSwitchList[x], self.HostList[2 * x])self.addLink(self.EdgeSwitchList[x], self.HostList[2 * x + 1])topos = { 'mytopo': ( lambda: HugeTopo() ) }

pox+poxdesk加载组件

./pox.py forwarding.l2_learning openflow.spanning_tree --no-flood --hold-down log.level --DEBUG samples.pretty_log openflow.discovery web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk  poxdesk.terminal  poxdesk.tinytopo host_tracker openflow.of_01 --address=127.0.0.1 --port=6633

mininet启动命令

# 进入到tree.py的路径下
sudo mn --custom tree.py --topo mytopo --mac --switch=ovsk --controller=remote,ip=127.0.0.1,port=6633

运行了以上三条指令,便可以得到Fat Tree的经典拓扑图:

可以看到主要是加入了openflow.spanning_tree --no-flood --hold-down这样的组件参数,最终使得Fat Tree网络稳定连接。

总结

Ubuntu20.04笔者没有跟着教程走过,但我想更换为English环境后,应该也是可以这么走通的。

综上即为简单的mininet+pox+poxdesk安装配置,笔者是一个自动化的学生,对计算机网络的理解不精,pox相关组件的学习还请读者参考资料2,其中讲述的还是很清晰的。希望阅读英语原文的读者也可以多多参考[1]POX of SDN Controller与[3]Poxdesk realizes topology display,多有裨益。

希望这篇文章能对读者有所帮助。

参考资料

[1]POX of SDN Controller
[2]SDN控制器之POX篇
[3]Poxdesk realizes topology display

Ubuntu18.04 mininet+pox+poxdesk配置相关推荐

  1. 虚拟机+Ubuntu18.04+ORB_SLAM3+ROS环境配置(配置环境的过程以及途中出现的错误,解决方法)

    前提概要:因为导师的科研安排,需要做三维重建,并基于Jeston的硬件平台来完成,由于板子还没有到(应该说报销的费用还没到,没钱买QAQ),所以先用虚拟机模拟配置一下环境.写这篇文章也是为了板子到了以 ...

  2. Ubuntu18.04 LTS安装、配置、美化、常用软件安装、问题总结和使用体验

    Ubuntu18.04 LTS安装.配置.美化.常用软件安装.问题总结和使用体验 一.前言 二.安装系统 1. 安装前的准备 2. 开始安装 ▲附Ubuntu各个分区作用一览表: 三.系统配置 四.系 ...

  3. ubuntu18.04 openni2和nite2配置KinectV1(XBOX360)

    ** ubuntu18.04 openni2和nite2配置KinectV1(XBOX360) ** 血泪提示,写在前面,安装过程中不要不要插kinect,不要问为什么 先新建一个文件夹kinnet_ ...

  4. ubuntu18.04通过interfaces文件配置DNS无效

    ubuntu18.04通过interfaces文件配置DNS无效 所用环境:win10+VMware+ubuntu18.04 之前在电脑上配置了虚拟机,今天配置网络,参考的是CSDN的博客,通过NAT ...

  5. 【VMware】VMware Pro16 使用 Ubuntu18.04,从零配置基础环境

    VMware Pro16 使用 Ubuntu18.04,从零配置基础环境 1 VMware 环境配置 1.1 安装 VMware Pro16 1.2 下载 Ubuntu18.04.6 LTS 镜像 1 ...

  6. Ubuntu18.04安装之后的配置

    Ubuntu18.04安装之后的配置 1. 更新国内的Ubuntu源 sudo gedit  /etc/apt/sources.list #阿里雲的源 deb http://mirrors.aliyu ...

  7. Ubuntu18.04深度学习环境配置(简易方式)

    为避免读者踩坑,本文测试成功了Ubuntu18.04环境下配置深度学习环境: (GPU:NVIDIA TITAN Xp),包括: CUDA+CUDNN+TensorFlow1.9+Pytorch1.1 ...

  8. Ubuntu18.04安装OpenPCDet及配置spconv

    spconv的安装简直要命,废了三天才安装好,多亏了网上一些教程.下面是我综合几个点击量高的博文,成功安装的过程记录. 目录 安装 1 clone 项目 2 创建并配置虚拟环境 3 安装spconv ...

  9. Ubuntu18.04.4安装与配置,让老机焕发青春

    前言 疫情,浪费了一个春节! 呆在家里,就想着怎么折腾,打开柜子,翻出尘封已久的那个十年前花费近七千元购买的笔记本,插上电 电脑配置与需求 VAIO笔记本,BIOS模式MBR,硬盘500g,内存4g, ...

最新文章

  1. 她是数学奇女子,巴贝奇的好友,却没能等到计算机的辉煌时刻
  2. 使用pg_stat_statement监控pgsql遇到的问题
  3. 深入理解JavaScript类数组
  4. C#中将字符串内容换行写入到txt文件中
  5. java培训第一阶段测试总结,达内学员Java培训阶段总结:反躬自省,愈渐完美
  6. java圆柱的底面积体积,计算圆柱的底面积和体积
  7. 纸盒叠成的长方形竟然能自己动?
  8. windows下使用MinGW+msys编译ffmpeg
  9. 透明(颜色)渐变背景(颜色透明背景),兼容IE8
  10. set.contains()分析
  11. leafletjs 热力图_leaflet.js自定义热力图效果实例
  12. 海洋技术课设遥感反演matlab,国家重点研发计划项目“新型海洋微波遥感探测机理模型与应用研究” 课题一“微波极化遥感机理与应用技术”学术研讨会顺利召开...
  13. 《秘密》-- 东野圭吾
  14. OpenGL ES (二)EGL介绍和使用
  15. git-使用staf暂存分支
  16. pycharm中安装pymysql
  17. 应用程序无法启动,因为应用程序的并行配置不正确...解决方法
  18. 如何将canvas转化为图片
  19. 梅科尔工作室-江凌宇-鸿蒙笔记3
  20. 【转载】大型医疗器械辐射发射的检测方法

热门文章

  1. 达内科技:聪明的价格战
  2. Matlab - 抛物面牛顿光学系统反射式望远镜尺寸设计
  3. oracle转换为16进制,Oracle的十进制和16进制转换函数
  4. AcWing 327. 玉米田(棋盘式状压dp 十字形)
  5. xx年xx月xx日xx时xx分xx秒——if版本
  6. docker安装git服务
  7. zigbee协议栈初使用(三)无线数据传输
  8. java import自定义类_自定义类加载器-从.class和.jar中读取
  9. 公司企业中说的KT是什么意思?
  10. 【书评】《你好哇,程序员——漫话程序员面试求职、升职加薪、创业与生活》...