mininet 应用实践

教学目的与学时建议

  1. 能够运用 mininet 可视化工具创建计算机网络拓扑结构
  2. 能够运用 mininet 交互界面创建拓扑结构
  3. 能够运用 python 脚本构建计算机网络拓扑结构
  4. 建议:2 学时

实验环境

  1. 下载并安装虚拟机 VMware workstation;
  2. 下载虚拟机镜像( SDNHub_tutorial_VM_64-bit[NEW](可直接导入 VMware).ova ),百度网盘下载链接 提取码:mhfi
  3. 因为虚拟机镜像是ova格式,所以只需要打开即可使用,无需创建新的虚拟机。
  4. 还有使用命令行安装包的方式来安装,参考文章

技术与知识背景

1,什么是 Mininet?

  1. Mininet 是由一些虚拟的终端节点(end-hosts)、交换机、路由器连接而成的一个网络仿真器,是一个轻量级软件定义网络和测试平台;它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行想过的内核系统和用户代码,也可简单理解为 SDN 网络。
  2. 系统中的一种基于进程虚拟化平台,它支持 OpenFlow、OpenvSwith 等各种协议,Mininet 也可以模拟一个完整的网络主机、链接和交换机在同一台计算机上且有助于互动开发、测试和演示,尤其是那些使用 OpenFlow 和 SDN 技术;同时也可将此进程虚拟化的平台下代码迁移到真实的环境中。
  3. Mininet 可以很方便地创建一个支持 SDN 的网络:host 就像真实的电脑一样工作,可以使用 ssh 登录,启动应用程序,程序可以向以太网端口发送数据包,数据包会被交换机、路由器接收并处理。有了这个网络,就可以灵活地为网络添加新的功能并进行相关测试,然后轻松部署到真实的硬件环境中。

 2,Mininet 的特性:

  1. 可以简单、迅速地创建一个支持用户自定义的网络拓扑,缩短开发测试周期
  2. 可以运行真实的程序,在 Linux 上运行的程序基本上可以都可以在 Mininet 上运行,如 Wireshark
  3. Mininet 支持 Openflow,在 Mininet 上运行的代码可以轻松移植到支持OpenFlow 的硬件设备上
  4. Mininet 可以在自己的电脑,或服务器,或虚拟机,或者云(例如 Amazon EC2)上运行
  5. Mininet 提供 python API,简单易用
  6. Mininet 是开源项目

3,Mininet 部分命令

4,命令操作

  • 终端输入mn,可以创建一个简单的网络,创建完成之后,命令行变为mininet>
  • Mininet>iperf <node id> <node id>—两个节点之间的网络性能测试

  • Mininet><node id> route—类似于Linux命令,用于定义节点路由表中的条目

  • Mininet>help

  • Mininet>nodes

  • Mininet>net

​​​​​​​

  • Mininet>pingall

​​​​​​​

  • Mininet>dump

​​​​​​​

  • Mininet>h1 ping h2

​​​​​​​

  • Mininet>h2 ifconfig

​​​​​​​

  • Mininet>xterm h1

​​​​​​​

  • Mininet>exit

​​​​​​​

  • 更多操作命令

测试Mininet是否正常工作

  • 要快速检查它是否工作,请键入以下命令:
  • 此命令将:
  • 创建一个单一网络,其中3台主机以非交互模式连接到单个交换机。
  • 执行从所有主机到所有其他主机的ping。
  • 此命令使用默认的交换机与控制器。
 sudo mn --test pingall --topo single,3
  • ​​​​​​​​​​​​​​​​​​命令讲解

​​​​​​​

创建拓扑

  • 运用mininet可视化工具创建网络拓扑结构
  • 运用mininet命令行工具创建网络拓扑结构
  • 运用mininet交互界面创建网络拓扑结构
  • 运用python脚本构建网络拓扑结构
  • 参考博客

基本命令行参数 ——后面会用得到

  1. --topo—在mininet启动时通过命令行定义拓扑
  2. --switch—定义要使用的交换机。默认情况下,使用ovsk软件交换机
  3. --controller—定义要使用的控制器。如果未指定默认控制器,作为集线器使用

可视化工具创建拓扑

  • 导入镜像后,默认处在/home/ubuntu的位置,可以使用pwd来查看当前的路径,动态调整。进入/home/ubuntu/mininet/examples文件夹,使用命令cd
  • 使用命令sudo su,切换到root身份,执行python miniedit.py启动可视化界面
  • 按照下面的操作步骤和页面布局进行操作

  • 右键点击图标,选中preferences,对网络拓扑结构进行相关配置,此处使用默认配置,即不进行任何操作。
  •  “Edit”→“Preferences”,勾选 strat CLI(允许通过交互界面对拓扑结构进行调整),选择所支持 Openflow 协议版本。

  • 保存为 python 文件,选择“File”→“Export Level 2 Script”,起一个名字,在终端运行保存下来的 python 文件即可。
  • 或者点击左下角的run运行,如果需要停止,则点击stop即可。

命令行创建拓扑

  • 最小网络,两台主机连接到一台交换机。
  • sudo mn –topo minimal

 

  • 每个主机都连接到一个交换机,所有交换机都彼此连接。
  • 在本例中,有4个主机和4个交换机。
  • sudo mn --topo linear,4

  • 下图纯属虚构,请以实物为准

 

  • 每个主机都连接到一个交换机。
  • 在本例中,有3个主机和1个交换机。
  • sudo mn --topo single,3

  • 下图纯属虚构,请以实物为准

 

  • 具有定义深度和扇出的基于树的拓扑。
  • sudo mn --topo tree,depth=2,fanout=2

  • 下图纯属虚构,请以实物为准

 

交互式创建拓扑

启动参数总结

  • -h, --help        show this help message and exit
  • --switch=SWITCH        [kernel user ovsk]
  • --host=HOST        [process]
  • --controller=CONTROLLER        [nox_dump none ref remote nox_pysw]
  • --topo=TOPO        [tree reversed single linear minimal],arg1,arg2,...argN
  • -c, --clean         clean and exit
  • --custom=CUSTOM        read custom topo and node params from .py file
  • --test=TEST        [cli build pingall pingpair iperf all iperfudp none]
  • -x, --xterms        spawn xterms for each node
  • --mac        set MACs equal to DPIDs
  • --arp        set all-pairs ARP entries
  • -v VERBOSITY, --verbosity=VERBOSITY        [info warning critical error debug output]
  • --ip=IP        [ip address as a dotted decimal string for aremote controller]
  • --port=PORT        [port integer for a listening remote controller]
  • --innamespace        sw and ctrl in namespace?
  • --listenport=LISTENPORT        [base port for passive switch listening controller]
  • --nolistenport        don't use passive listening port
  • --pre=PRE        [CLI script to run before tests]
  • --post=POST          [CLI script to run after tests]

python 脚本定义拓扑

  • 用 python 脚本创建与上述对应拓扑,创建完后的文件需要增加可执行权限chmod +x test.py,还是用sudo python test.py执行。
  • --topo linear,4
  • 操作:

  1. 新建名字为linear的python文件 touch linear.py
  2. 赋予权限 chmod +x linear.py
  3. 对文件进行写入操作 vi linear.py
  4. 将下文的代码复制黏贴到linear.py文件中,先按下i,进行输入操作;鼠标右键,选择黏贴代码;按下Esc按键,同时按下shift和:按键,然后输入wq保存代码;*代码里面不可以包含中文,否则会报错,也可以添加# -*- coding: utf8 -*-改变编码格式,解决代码包含中文的问题
  5. 运行代码 sudo python linear.py
  6. 查看输出
  • 代码

from mininet.net import Mininet
from mininet.topo import LinearTopo
Linear4 = LinearTopo(k=4) 
net = Mininet(topo=Linear4)
net.start()
net.pingAll()
net.stop()
  • 实践

 

  • --topo single,3
  • 操作:
  1. 新建名字为single的python文件 touch single.py
  2. 赋予权限 chmod +x single.py
  3. 对文件进行写入操作 vi single.py
  4. 将下文的代码复制黏贴到single.py文件中,先按下i,进行输入操作;鼠标右键,选择黏贴代码;按下Esc按键,同时按下shift和:按键,然后输入wq保存代码;
  5. 运行代码 sudo python single.py
  6. 查看输出
  • 代码:
from mininet.net import Mininet
from mininet.topo import SingleSwitchTopo
Single3 = SingleSwitchTopo(k=3) 
net = Mininet(topo=Single3)
net.start()
net.pingAll()
net.stop()
  • 实践

 

  • --topo tree,depth=2,fanout=2
  • 操作:
  1. 新建名字为tree的python文件 touch tree.py
  2. 赋予权限 chmod +x tree.py
  3. 对文件进行写入操作 vi tree.py
  4. 将下文的代码复制黏贴到tree.py文件中,先按下i,进行输入操作;鼠标右键,选择黏贴代码;按下Esc按键,同时按下shift和:按键,然后输入wq保存代码;
  5. 运行代码 sudo python tree.py
  6. 查看输出
  • 代码:
from mininet.net import Mininet
from mininet.topolib import TreeTopo
Tree22 = TreeTopo(depth=2,fanout=2)
net = Mininet(topo=Tree22)
net.start()
net.pingAll()
net.stop()
  • 实践

 

  • 对于性能的限制
  • 操作:
  1. 新建名字为test的python文件 touch test.py
  2. 赋予权限 chmod +x test.py
  3. 对文件进行写入操作 vi test.py
  4. 将下文的代码复制黏贴到test.py文件中,先按下i,进行输入操作;鼠标右键,选择黏贴代码;按下Esc按键,同时按下shift和:按键,然后输入wq保存代码;
  5. 运行代码 sudo python test.py
  6. 查看输出
  • 讲解:

除了可以通过Python脚本创建基本的拓扑以外,还能在此基础上对性能进行限制。观察下面给出的脚本文件,addHost()语法可以对主机cpu进行设置,以百分数的形式;addLink()语法可以设置带宽bw、延迟delay、最大队列的大小max_queue_size、损耗率loss。

  • 代码:
from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
net = Mininet(host=CPULimitedHost, link=TCLink)
c0 = net.addController()
s0 = net.addSwitch('s0')
h0 = net.addHost('h0')
h1 = net.addHost('h1', cpu=0.5)
h2 = net.addHost('h1', cpu=0.5)
net.addLink(s0, h0, bw=10, delay='5ms',
max_queue_size=1000, loss=10, use_htb=True)
net.addLink(s0, h1)
net.addLink(s0, h2)
net.start()
net.pingAll()
net.stop()
  • 实践

​​​​​​​​​​​​​​

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

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

相关文章

使用百度大脑,导入aip以及相应的库文件报错问题

参考文章 github链接地址 具体操作 pip install githttps://github.com/Baidu-AIP/python-sdk.gitmasterfrom aip import 对应服务即可

一个通用的makefile写法,自动推导文件的依赖关系

温习之用。 假设有两个头文件目录 header1,header2;两个cpp文件目录,src1,src2,一个lib目录 写一个完整的makefile步骤如下&#xff1a; 1 定义可执行文件的名称 TARGET MyPro 2 指定此编译工程所要使用的头文件所在的目录 INC -I. -Iheader1 -Iheader2 3 指…

实现基于darknet框架实现CTPN版本自然场景文字检测 与CNN+CTCOCR文字识别的ChineseOCR搭建

Github地址 Github源码地址 支持系统:mac/ubuntu python3.6 实现功能 文字检测&#xff1b; 文字识别&#xff1b; 支持GPU/CPU&#xff0c;CPU优化&#xff08;opencv dnn&#xff09; docker镜像服务&#xff08;CPU优化版本&#xff09; 下载镜像 链接:https://pan.baidu…

50个c/c++源代码网站

C/C是最主要的编程语言。这里列出了50名优秀网站和网页清单&#xff0c;这些网站提供c/c源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C源代码的网站。这不是一个完整的清单&#xff0c;您有建议可以联系我&#xff0c;我将欢迎您的建议&#xff…

在服务器上搭建基于yolo3 与crnn 实现中文自然场景文字检测及识别,GPU版本

Github地址 参考地址作者大人&#xff0c;十分热心&#xff0c;对于我的问题&#xff0c;提供了大量的帮助&#xff0c;使我少走了很多的弯路&#xff0c;在此表示由衷的感谢 注意事项 使用nvidia-smi命令查看cuda的版本&#xff0c;必须是10.1或者10.0&#xff0c;10.2是万万…

python TypeError can only concatenate tuple not str to tuple

原因分析 这个错误出现是因为执行元组之间的合并例子 tuple1 ("str",1,["a","b","c"],4) tuple2 ("hello",) print(tuple1[0]) print (tuple1[1:3]) print (tuple1[1:]) print (tuple2 * 2) print (tuple1tuple2) 注意事…

23种设计模式 -比喻

1、FACTORY—追MM少不了请吃饭了&#xff0c;麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西&#xff0c;虽然口味有所不同&#xff0c;但不管你带MM去麦当劳或肯德基&#xff0c;只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory (下载源码就到源码网:…

python 版本2和3 在/取模方面的的差异

注意事项 python2 使用 /python3 使用 // 例子 二分法取数值 def binary_search(search_list,target):left 0right len(search_list) - 1while left < right:mid (left right) // 2if search_list[mid] < target:left mid 1continueif search_list[mid] target:r…

vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess

三个SDK函数: WinExec&#xff0c;ShellExecute &#xff0c;CreateProcess可以实现调用其他程序的要求&#xff0c;其中以WinExec最为简单&#xff0c;ShellExecute比WinExec灵活一些&#xff0c;CreateProcess最为复杂。WinExec 两个参数&#xff0c;前一个指定路径&#xf…

算法入门篇 一 时间复杂度

时间复杂度 要求&#xff1a;只要高阶项&#xff0c;不要低阶项常数操作&#xff1a;操作花费的时间和数据量无关&#xff0c;比如数组寻址&#xff0c;直接利用偏移量找到对应元素的位置&#xff1b;非常数操作&#xff1a;比如list(链表)&#xff1b;查找元素需要遍历链表&a…

遍历文件夹下所有文件和文件夹

1 void find(char * lpPath){char szFind[MAX_PATH];WIN32_FIND_DATA FindFileData;strcpy(szFind,lpPath);strcat(szFind,"*.*");HANDLEhFind::FindFirstFile(szFind,&FindFileData);if(INVALID_HANDLE_VALUE hFind)  return;while(TRUE){if(FindFileData.dw…

算法入门篇二 认识O(NlogN)的排序

递归 例子引出 使用递归的方法求出数组中的最大值&#xff08;利用的是栈&#xff09;求中点的方法改进 mid (left right) / 2 //但是如果left和right的数很大&#xff0c;相加会造成内容溢出 改进为 mid left (right - left) / 2 //(right - left)得到整个的长度&…

算法入门篇三 详解桶排序和整理排序知识 堆的相关操作 补充 不完整

归并排序不使用递归 使用一个变量&#xff0c;使其按照1、2、4、8递增&#xff0c;控制左右两边1个元素、2个元素、4个元素等元素的合并 完全二叉树 完全二叉树 要不全是满的&#xff0c;要不叶子节点出现在最后一层&#xff0c;只要出现了叶子节点&#xff0c;后面的都是叶子…

C++著名程序库

1、C各大有名库的介绍——C标准库标准库中提供了C程序的基本设施。虽然C标准库随着C标准折腾了许多年&#xff0c;直到标准的出台才正式定型&#xff0c;但是在标准库的实现上却很令人欣慰得看到多种实现&#xff0c;并且已被实践证明为有工业级别强度的佳作。 1.1、Dinkumware…

2023年12月24日学习总结

今日to do list&#xff1a; 做kaggle上面的流量预测项目☠️ 学习时不刷手机&#x1f921; okkkkkkkkkkkkkk 开始&#x1f44d;&#x1f34e; 0、我在干什么&#xff1f; 我在预测一个名字叫做elborn基站的下行链路流量&#xff0c;用过去29天的数据预测未来10天的数据 1、…

Mac/Linux系统连接远端服务器以及相同IP地址的服务器账号密码重置,ssh失败问题

连接远端服务器 ssh 账号IP地址 输入完成之后会提示输入密码&#xff0c;密码输入正确后&#xff0c;就可以连接成功了 重置ssh密钥 如果连接的服务器除了IP地址没有改变&#xff0c;其余的账号、密码、系统等都变了的话&#xff0c;因为曾经连接过的历史数据会保存到本地&a…

内存泄漏快速定位方法

主要方法&#xff1a;利用系统带的函数&#xff1a;EnableMemLeakCheck() 和函数重载&#xff0c;能快速准备的定位到内存泄漏的地方&#xff0c;方法简单且实用&#xff0c;值得借用。 #include <crtdbg.h> #ifdef_DEBUG //重载一下new函数&#xff0c;这样能得到使…

Linux操作系统监视NVIDIA的GPU使用情况

对于GPU相关参数介绍 使用命令周期性查看GPU运行情况最常用的参数是 -n&#xff0c; 后面指定是每多少秒来执行一次命令。监视显存&#xff1a;设置为每 1s 显示一次显存的情况&#xff1a;使用命令ctrlz退出 watch -n 1 nvidia-smi 参数介绍 Fan&#xff1a;显示风扇转速&am…

一个软件工程师的职业规划

[1]好好规划自己的路&#xff0c;不要跟着感觉走&#xff01;根据个人的理想决策安排&#xff0c;绝大部分人并不指望成为什么院士或教授&#xff0c;而是希望活得滋润一些&#xff0c;爽一些。那么&#xff0c;就需要慎重安排自己的轨迹。从哪个行业入手&#xff0c;逐渐对该行…

算法入门篇四 桶排序

桶排序 计数排序&#xff08;基于统计&#xff09; 要求数据是有限的&#xff0c;和数据状况有关&#xff0c;比如对于200个人统计他们的年龄分布&#xff0c;这个时候需要申请200个桶&#xff0c;因此对于输入数据的规模有限制&#xff0c;如果输入规模是不定的&#xff0c;…