Ubuntu18.04 mininet+pox+poxdesk配置

article/2025/8/23 9:53:17

目录

  • 前言
  • 关于系统
    • 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


http://chatgpt.dhexx.cn/article/u5KVvn3Q.shtml

相关文章

5.pox.xml文件

pom文件 即Project Object Model项目对象模型。Maven 把-个项目的结构和内容抽象成一个模型 ,在xml文件中进行声明,以方便进行构建和描述, pom.xml是Maven的灵魂。所以, maven环境搭建好之后,所有的学习和操作都是关于pom.xml的。 1.基本信息 modelVersion Maven模型的版本&am…

CoinEx研究院:PoX=PoW+PoS?一文详述Stacks项目

如果你身处加密领域,那么你应该了解工作量证明PoW(Proof of Work)——它是比特币区块链的共识算法;或许你也知道权益证明PoS(Proof of Stake)。这二者为当今区块链世界的绝大多数主要参与者提供了驱动力。 …

POX控制器的分析(一)

最近刚刚对SDN产生了很大的兴趣,相对之前使用的POX控制器作出一个分析,了解控制器的机制,这样更好的理解SDN。 本文从https://openflow.stanford.edu/display/ONL/POXWiki官方网站中进行学习的。 首先从POX的自带的组件来分析: 其…

pox控制器学习笔记

一、安装pox pox基于python2.7 $ git clone http://github.com/noxrepo/pox $ cd pox ~/pox$ git checkout dart二、调用pox 如果想快速入门 ./pox.py samples.pretty_log Forwarding.l2_learningPOX本身有几个可选的命令行参数,这些参数可以在命令行开始时使用…

【Mininet】基础篇:开源控制器POX

大家好,我是文思月! 每文一言:时间不在于你拥有多少,而在于你如何使用! 本篇文章: 本篇文章主要是基于POX控制器进行的两个实验:一个是使交换机模拟hub(集线器)的功能&a…

浅谈UML的概念和模型之UML视图

目录 UML的视图 UML的九种图UML中类间的关系 相信大家都知道UML的全称,统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准…

【UML】UML基本概念

1、简述 UML全称是Unified Modeling Language,直译是“统一建模语言”,简单理解就是一组有特殊用途的、国际化的“象形文字”。 2、UML图 UML图有好多种,大致分为两类:结构型和行为型,分别对应静态分析和动态分析。…

浅谈UML的概念和模型之UML类图关系

目录 UML的视图 UML的图 UML的类图关系 类与类之间的关系通常有4种,即依赖关系(Dependency)、泛化关系(Generalization)、关联关系(Association)、实现关系(Realization&#xff…

如何画UML图

UML 一,UML概述 什么是uml UML 是 OMG 在1997年1月提出了创建由对象管理组和 UML1.0 规范草案; UML 是一种为面向对象开发系统的产品进行说明、可视化、和编制文档的标准语言;UML 作为一种模型语言,它使开发人员专注于建立产品的模…

UML图简介

文章目录 UML图简介UML中的各个图的功能作用:用例图(Use Case Diagram)类图(Class Diagram)序列图(Sequence Diagram)对象图(Object Diagram)包图(Package Diagram)活动图&#xff0…

UML图

UML图 UML(Unified Modeling Language)是一种标准的面向对象建模语言,用于描述软件系统的设计和开发。UML图包括以下几种类型: 结构图:用于描述系统静态结构,包括类图、对象图、组件图、部署图等。行为图…

UML类图是什么

一、什么是UML类图 先引用一段百度百科的定义 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 类图是描述系统中的类,以及各个…

UML介绍及怎么看UML图

最近做毕业设计,用到了libcitygml开源库,获取到一张citygml的UML图,就顺便简单了解一下它! 一、简介 UML(Unified Modeling Language),直接翻译就是统一建模语言。 二、UML的作用 UML可以帮助我…

什么是UML?为什么要用UML?

什么是UML? UML是Unified Model Language的缩写,中文是统一建模语言,是由一整套图表组成的标准化建模语言。 为什么要用UML? 通过使用UML使得在软件开发之前, 对整个软件设计有更好的可读性,可理解性,从而降低开发风险。同时,也能方便各个开发人员之间的交流。 UML…

【UML】UML几种图的绘制

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205 UML几种图的绘制 UML是Unified Modeling Language&…

浅谈UML的概念和模型之UML九种图

目录: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UML的视图,在每一种视图中都包含一个或多种图。本文我们重点讲解UML每种图的细节问题: 1、用例图(use case diagrams) 【概念】描述用户需…

UML——概述(什么是UML?UML有什么作用?面向对象技术)

目录 什么是UML? UML能帮我们做什么? 什么是建模? 为什么要建模? 为什么要可视化建模? 建模的原理(原则) UML的基本构造块 UMl中事物有哪些? 面向对象技术 什么是UML&#…

详细说明UML类图是什么?

作者:亿图图示 链接:https://www.zhihu.com/question/419312525/answer/1535413984 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 UML类图,UML中的一种重要图形,是在…

UML详细讲解

本文是搜集整理学习使用,信息来源:gd_沐辰 - 博客园 (cnblogs.com) 1.UML概述 1.1.什么是UML 统一建模语言(UML)是一种通用的可视化建模语言,可以用来描述、可视化、构造和文档化软件密集型系统的各种工件。 UML是…

什么是UML,UML类图

1.什么是UML? UML是统一建模语言,是一种可视化的面向对象建模语言,是一种用来对真实世界物理进行建模的标准标记,用图形方式表现典型的面向对象系统的整个结构。它的作用域不局限于支持面向对象的分析与设计,还支持从需…