Mininet学习记录(常用命令+创建网络拓扑+OpenDaylight显示拓扑结构)

目录

    • 1.Mininet简介
    • 2.Mininet常用命令
      • 2.1创建网络拓扑常用参数
      • 2.2常用的内部交换命令
    • 3.创建网络拓扑的三种方式
      • 3.1通过命令行创建
      • 3.2通过miniedit可视化界面创建
      • 3.3通过python脚本创建
    • 4.问题总结

1.Mininet简介

  • Mininet 是由一些虚拟的终端节点 (end-hosts) 、交换机、路由器连接而成的一个网络仿真器,是一个轻量级软件定义网络和测试平台,支持 OpenFlow、OpenvSwith 等各种协议。
  • Mininet的原理是通过虚拟化技术在单个主机上创建虚拟网络设备,并建立虚拟链路来连接它们。它提供了简单的接口和工具来定义和管理网络拓扑,以及监控和调试虚拟网络。这使得用户可以方便地进行网络原型设计、测试和教育。

2.Mininet常用命令

2.1创建网络拓扑常用参数

命令含义
-clean释放之前创建拓扑时占用的未释放的资源
-h查看帮助
–custom用于创建自定义拓扑
–topo在mininet启动时通过命令行定义拓扑
–switch定义要使用的交换机,默认使用oVSK交换机
–mac自动设置设备的MAC地址从而使MAC地址更易读
–controller定义要使用的控制器,如果没有指定则使用mininet中默认的控制器(可选的有default、remote等)
mn创建默认最小拓扑

2.2常用的内部交换命令

命令含义
mininet >help获取帮助列表
mininet >nodes查看网络拓扑中结点的状态
mininet >links显示链路健壮性信息
mininet >net显示网络拓扑
mininet >dump显示每个节点的接口设置和表示每个节点的进程的PID
mininet > pingall在网络中的所有主机之间执行ping测试
mininet > pingpair只测试前两个主机的连通性
mininet >xterm h1打开host 1的终端
mininet >iperf两个节点之间进行iperftcp带宽测试 (iperf h1 h2)
mininet >iperfudp两节点之间进行iperfudp带宽测试 (iperfudp bw h1 h2)
mininet >link禁用/启用节点间链路 (启用 s1 s2间的链路 link s1 s2 up;禁用s1 s2间的链路 link s1 s2 down)
mininet >h1 ping h2h1和h2节点之间执行 ping测试
mininet >h1ifconfig查看host1的IP 等信息
mininet >exit / quit退出mininet登录

3.创建网络拓扑的三种方式

需要注意的是,运行网络拓扑之前,均需打开另一个终端,在/home/shy/distribution-karaf-0.6.4-Carbon/bin目录下,通过sudo ./karaf命令启动OpenDaylight控制器。
在这里插入图片描述

3.1通过命令行创建

① 最小化(minimal)拓扑:整个网络中只有一台交换机,交换机下挂两台主机(也就是mn)。
例如:sudo mn --controller=remote,ip=127.0.0.1 --switch ovsk,protocols=OpenFlow13 表示创建了一台交换机,交换机下挂2台主机
在这里插入图片描述
② 单一(single)拓扑:整个网络拓扑中有且只有一个交换机,交换机可下挂一个或多个主机。
例如:sudo mn --topo=single,4 --controller=remote,ip=127.0.0.1 --switch ovsk,protocols=OpenFlow13 表示创建了一台交换机,交换机下挂4台主机
在这里插入图片描述
③ 反转(reversed)拓扑:网络中只有一台交换机,交换机可连一台或多台主机。与单一拓扑不同的是,单一拓扑中,交换机与主机的连接端口号从小到大使用,而在反转拓扑中端口号从大到小使用。
例如:sudo mn --topo=reversed,4 --controller=remote,ip=127.0.0.1 --switch ovsk,protocols=OpenFlow13 表示创建了一台交换机,交换机下挂4台主机
在这里插入图片描述
④ 线形(linear)拓扑:交换机连接呈线形排列,需要设置两个参数n和m。其中n表示交换机的个数,m表示每台交换机连接的主机个数。线形拓扑共有n台交换机、n*m台主机。如果只设置一个参数,默认交换机与主机数相同,即每台交换机下挂1台主机。
例如:sudo mn --topo=linear,3 --controller=remote,ip=127.0.0.1 --switch ovsk,protocols=OpenFlow13 表示创建3台交换机和3台主机。
在这里插入图片描述
再例如:sudo mn --topo=linear,3,2 --controller=remote,ip=127.0.0.1 --switch ovsk,protocols=OpenFlow13 表示创建3台交换机,每台交换机下挂2台主机。
在这里插入图片描述
⑤ 树形(tree)拓扑:交换机连接呈树形排列,且每个交换机下挂的主机一般有多个,类似于数据结构的二叉树。需要设置depth和fanout两个参数,depth指的是主机到根节点交换机经历的层级数,fanout表示广度/扇出,决定每层分支设备节点数。
例如:sudo mn --topo=tree,depth=2,fanout=3 --controller=remote,ip=127.0.0.1 --switch ovsk,protocols=OpenFlow13 其中depth=2表示交换机有两层,fanout=3表示第二层有3台交换机,每台交换机均下挂3台设备。
在这里插入图片描述
⑥环面(torus)拓扑:由多条互相冗余的圆环形链路组成。需要设着两个参数n和m(均≥3),其中n表示单条圆环形链路中交换机的个数(每台交换机下挂1台主机),m表示该环面网络拓扑中互相冗余的圆环形链路个数。
环面拓扑结构复杂,可用于对稳定性、冗余性要求较高的网络。
例如:sudo mn --topo=torus,6,3 --controller=remote,ip=127.0.0.1 --switch ovsk,protocols=OpenFlow13 表示创建了一个有3条冗余圆环链路、每条圆环链路有6台交换机的环面拓扑。拓扑共有18台交换机、18台主机。
在这里插入图片描述

3.2通过miniedit可视化界面创建

Mininet2.2.0及以上版本自带可视化界面minieidt,可以直接在可视化界面上创建任意网络拓扑并保存为python脚本文件,后面可以直接通过运行python脚本文件构建之前保存的网络拓扑。
在/home/shy/mininet/mininet/examples目录下,通过命令sudo python3 miniediy.py打开miniedit可视化界面
在这里插入图片描述
可视化界面如图示:
在这里插入图片描述
构建网络拓扑之前首先进行全局配置【edit】→【preferences】
IP Base:默认为10.0.0.0/8,用来指定网络拓扑中的网络设备所使用的IP地址所属网段
Start CLI:允许通过交互界面输入命令修改拓扑
Open vSwitch:支持的OpenFlow协议版本
在这里插入图片描述
在mininedit中创建拓扑
在这里插入图片描述
对控制器进行配置:
在这里插入图片描述
对交换机s1进行配置(s2同理):
在这里插入图片描述
对主机进行配置(其他主机同理):
在这里插入图片描述
此外,还可以对链路具体参数(带宽、时延等)进行配置:
在这里插入图片描述
可以看到,所有的设置在Mininet的终端都有显示。
在这里插入图片描述
接下来运行网络拓扑(运行之前,需要在另一个终端运行OpenDaylight控制器),点击miniedit界面左下角的Run按钮运行网络拓扑。
可以看到控制器成功监测到了网络拓扑,网络连通性也没有问题。
在这里插入图片描述
此外,在拓扑运行过程中,可以交换机等设备的信息此时处于只读状态。
在这里插入图片描述
通过exit或quit命令退出mininet,点击mininei左下角的stop停止运行,将拓扑保存为python文件。
在这里插入图片描述
在这里插入图片描述
可以看到,文件已经保存
在这里插入图片描述
需要注意的是,**需要先通过exit或quit命令退出mininet,然后再点击miniedit界面左下角的Stop停止运行,否则再次启动miniedit时会报错。**如果顺序错误导致报错,可以尝试尝试重启虚拟机。

3.3通过python脚本创建

可以编辑修改通过miniedit创建并保存的网络拓扑,也可以编写python脚本创建自定义网络拓扑。下面分别进行介绍。
①在3.2拓扑的基础上通过python脚本对网络拓扑进行修改。
首先使用sudo vim demo1.py命令对文件进行编辑,这里新增一台交换机s3,交换机下挂两台注意h5,h6,然后保存并退出。
在这里插入图片描述
接着验证是否修改成功。打使用命令sudo python3 demo.py --controller=remote,ip=127.0.0.1,port=6633 --switch ovs,protocols=OpenFlow13
运行demo.py文件(运行python脚本之前需要在另一个终端中运行OpenDaylight控制器)。
可以看到,新增一台交换机,两台主机,网络连通性没有问题,控制器也成功监测到了网络拓扑,网络拓扑修改成功。
在这里插入图片描述
②编写python脚本创建自定义网络拓扑
这里创建3台交换机和3台主机的环形网络拓扑。
首先使用sudo vim 23.py命令新建python脚本文件并编辑,具体代码如下,完成后保存并退出。

#创建3台交换机3台主机的环形网络拓扑from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController,CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnectionsclass MyTopo( Topo ):def __init__( self ):Topo.__init__( self )S = 3   #交换机数量H = 3   #主机数量s = []   #存放交换机的列表h = []   #存放主机的列表#添加交换机for i in range( S ):SW = self.addSwitch( 's{}'.format( i + 1 ) )s.append( SW )#添加主机for i in range( H ):host = self.addHost( 'h{}'.format( i + 1 ) )h.append( host )#添加交换机与主机之间的链路for i in range( S - 1 ):self.addLink( s[i],s[i+1] )self.addLink(s[2],s[0])for i in range( S ):self.addLink( s[i],h[i] )topos = { 'mytopo': ( lambda:MyTopo() ) }

然后使用命令sudo mn --custom 23.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovs,protocols=OpenFlow13运行python脚本(运行python脚本之前需要在另一个终端中运行OpenDaylight控制器)。
可以看到,网络连通性没有问题,控制器也成功监测到了网络拓扑。
在这里插入图片描述

4.问题总结

1.使用python3命令启动mininedit,通过Export Level 2 Script保存拓扑时报错TypeError: can only concatenate str (not “int”) to str。
在这里插入图片描述
原因:MiniEdit本身是使用Python 2编写的,使用python3命令启动mininedit时需要进行一些修改,以确保MiniEdit与Python 3兼容。
解决办法:在/home/shy/mininet/mininet/examples目录下,使用命令sudo vim miniedit.py命令对mininet文件进行修改。打开文件后,输入:set nu命令显示行数,然后找到2019行,具体修改内容如图示。
在这里插入图片描述
在这里插入图片描述
2.使用python2命令运行miniedit.py时报错ImportError: No module named mininet.log。
在这里插入图片描述
原因:进入/usr/local/lib/python2.7目录下的dist-package文件夹(找到桌面上的文件图标→点击页面左下角的【+other locations】→点击右边出现的Computer图标→usr→local→lib→python2),发现缺少mininet的相关组件。在这里插入图片描述
在这里插入图片描述
解决办法:执行sudo cp -r /usr/local/lib/python3.8/dist-packages/ /usr/local/lib/python2.7/命令将python3的dist-package文件夹拷贝到python2中。然后修改miniedit文件,修改内容如图示。
在这里插入图片描述
此时就可以通过python2命令运行miniedit.py文件并成功保存创建的网络拓扑。由于 CPython 项目和大多数操作系统不再正式支持 Python 2 版本,建议使用Python 3。
3.使用python命令运行通过miniedit创建并保存的拓扑文件时,links和nodes都没有问题但是却ping不通,OpenDaylight控制器也监测不到网络拓扑。
原因:拓扑脚本中使用的是OVSKernelSwitch,该类默认使用OpenFlow 1.0版本。
解决办法:使用sudo vim demo.py修改python文件,在交换机的定义中添加protocols='OpenFlow13’参数。
在这里插入图片描述
在这里插入图片描述
4.执行自己创建的.py文件时,没反应也不报错,这里23.py是自己创建的文件。
原因:缺少主函数。
在这里插入图片描述
解决办法:在文件末尾添加以下代码。

	CLI(net)net.stop()
if __name__ == '__main__':setLogLevel('info')myNetwork()

5.创建网络拓扑报错Exception: Error creating interface pair (s1-eth1,s2-eth1): RTNETLINK answers: File exists。
在这里插入图片描述
原因:重复构建了相同的拓扑。
解决办法:使用sudo mn -c命令清除之前的网络拓扑。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/192310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络笔记】802.11无线局域网

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

检查您的手机浏览器是否支持WebRTC技术

要检查您的手机浏览器是否支持WebRTC技术,可以通过以下方法: 方法1:使用WebRTC测试网站 访问测试网站: 在手机浏览器中,访问一个专门用于检测WebRTC支持的网站,例如Test WebRTC或WebRTC Troubleshooter.这…

富文本编辑器(wangEditor 5)

一、链接 wangEditor 二、基础 import wangeditor/editor/dist/css/style.css; // 引入 cssimport React, { useState, useEffect } from react; import { Editor, Toolbar } from wangeditor/editor-for-react; import { IDomEditor, IEditorConfig, IToolbarConfig } fro…

【每日OJ —— 572. 另一棵树的子树】

每日OJ —— 572. 另一棵树的子树 1.题目:572. 另一棵树的子树2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目:572. 另一棵树的子树 2.解法 2.1.算法讲解 通过深度优先遍历,来判断二叉树root的每个节点的值是否和subRoot的每个节点…

nodejs微信小程序+python+PHP贵州旅游系统的设计与实现-计算机毕业设计推荐MySQL

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

Android 13 - Media框架(22)- MediaCodec(三)

这一节开始我们将重新回到 MediaCodec 这一层来学习 buffer 的流转 status_t MediaCodec::dequeueOutputBuffer(size_t *index,size_t *offset,size_t *size,int64_t *presentationTimeUs,uint32_t *flags,int64_t timeoutUs) {sp<AMessage> msg new AMessage(kWhatDequ…

线面积分公式整理

文章目录 线面积分公式整理第一类曲线积分第二类曲线积分第一类曲面积分第二类曲面积分两类曲线积分的联系两类曲面积分的联系格林公式高斯公式斯托克斯公式 公式的应用 线面积分公式整理 这部分内容用于回顾和查阅,许多写法和表达式记号默认使用了惯例含义其中曲线积分可以从…

洛谷 P9754 [CSP-S 2023] 结构体 题解

题目传送门 洛谷博客 个人博客站 CSP-S 2023 T3 结构体 题解 基本思路 本题主要考查编码能力&#xff0c;所以直接给出基本思路&#xff1a; 由于可以递归式的创建元素&#xff0c;最多可以同时存在 10 0 100 100^{100} 100100 个不同的基础类型的元素。即使算上最大地址的…

爬虫学习(一)

文章目录 文件目录结构打开文件操作 爬取网页的理解尝试 文件目录结构 打开文件操作 爬取网页的理解尝试 这个放回值为请求正常

系统架构设计-权限模块的设计

系统架构-权限模块的设计 如何评估一个研发人员技术水平&#xff0c;在大部分的情况下不是看其完成业务代码的好坏&#xff0c;更多的时候还是需要看这个研发人员从零构建一个完整项目的能力&#xff0c;在大公司中这样的机会可能相对较少&#xff0c;大部分的时间里都是对现有…

【数据库】数据库多种锁模式,共享锁、排它锁,更新锁,增量锁,死锁消除与性能优化

多种锁模式的封锁系统 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会…

2024年美国大学生数学建模竞赛(MCM/ICM)论文写作方法指导

一、前言 谈笑有鸿儒&#xff0c;往来无白丁。鸟宿池边树&#xff0c;僧敲月下门。士为知己者死&#xff0c;女为悦己者容。吴楚东南坼&#xff0c;乾坤日夜浮。剪不断&#xff0c;理还乱&#xff0c;是离愁&#xff0c;别是一番滋味在心头。 重要提示&#xff1a;优秀论文的解…

LeeCode前端算法基础100题(5)- 最长公共前缀

一、问题详情: 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs = ["flower","flow","flight"] 输出:"fl" 示例 2: 输入:strs = ["dog",&quo…

唯创知音WT2605C语音芯片MP3音频IC:轻松实现指令随机播放与无缝循环播放等功能

在现代化的电子产品中&#xff0c;音频功能的重要性日益凸显。无论是智能家居、玩具、医疗设备还是仪器仪表&#xff0c;富有吸引力的音效与语音提示都能显著提升用户体验。唯创知音WT2605C语音芯片MP3音频IC便是为了满足这一需求而诞生的&#xff0c;它具备指令随机播放、无缝…

矩阵代数与MATLAB实现(特征值、广义特征值、酋矩阵、奇异值、托普利兹矩阵、汉克尔矩阵、范德蒙矩阵、)

矩阵代数的相关知识 目录 一、特征值与特征向量 1、特征值与特征向量 2、MATLAB计算 二、广义特征值与广义特征向量 1、广义特征值与广义特征向量 2、MATLAB计算 三、酋矩阵 1、酋矩阵 2、MATLAB计算 四、矩阵的奇异值分解 1、奇异值 2、MATLAB计算 五、托普利兹矩…

HuggingFace学习笔记--BitFit高效微调

1--BitFit高效微调 BitFit&#xff0c;全称是 bias-term fine-tuning&#xff0c;其高效微调只去微调带有 bias 的参数&#xff0c;其余参数全部固定&#xff1b; 2--实例代码 from datasets import load_from_disk from transformers import AutoTokenizer, AutoModelForCaus…

python每日一题——20旋转图像

题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]…

【每日OJ —— 226. 翻转二叉树】

每日OJ —— 226. 翻转二叉树 1.题目&#xff1a;226. 翻转二叉树2.解法2.1.算法讲解2.2.代码实现2.3.代码提交通过展示 1.题目&#xff1a;226. 翻转二叉树 2.解法 2.1.算法讲解 我们从根节点开始&#xff0c;递归地对树进行遍历&#xff0c;并从叶子节点先开始翻转。如果当前…

持续集成交付CICD:CentOS 7 安装 Sonarqube9.6

目录 一、实验 1.CentOS 7 安装 Sonarqube9.6 二、问题 1.安装postgresql13服务端报错 2.postgresql13创建用户报错 一、实验 1.CentOS 7 安装 Sonarqube9.6 &#xff08;1&#xff09;下载软件及依赖包 ①Sonarqube9.6下载地址 https://binaries.sonarsource.com/Dis…