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,一经查实,立即删除!

相关文章

实现基于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…

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

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

算法入门篇 一 时间复杂度

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

算法入门篇二 认识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;后面的都是叶子…

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…

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

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

算法入门篇四 桶排序

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

RTP概述

1.1. RTP是什么 RTP全名是Real-time Transport Protocol&#xff08;实时传输协议&#xff09;。它是IETF提出的一个标准&#xff0c;对应的RFC文档为RFC3550&#xff08;RFC1889为其过期版本&#xff09;。RFC3550不仅定义了RTP&#xff0c;而且定义了配套的相关协议RTCP&…

算法入门篇五 链表

牛客网 算法入门篇 判断一个链表是否为回文结构 给定一个单链表的头节点head&#xff0c;请判断这个链表是否为回文结构1->2->1&#xff0c;返回为True;1->2->3为False 思路&#xff1a; 1&#xff0c;遍历链表&#xff0c;将所有元素压入栈中&#xff0c;然后再…

实时流媒体编程基于Linux环境开发

一、流媒体简介 随着Internet的日益普及&#xff0c;在网络上传输的数据已经不再局限于文字和图形&#xff0c;而是逐渐向声音和视频等多媒体格式过渡。目前在网络上传输音频/视频&#xff08;Audio/Video&#xff0c;简称A/V&#xff09;等多媒体文件时&#xff0c;基本上只有…

算法入门篇六 二叉树

牛客网 算法入门篇 左程云老师 个人复习&#xff0c;如果侵全&#xff0c;设为私密 二叉树遍历&#xff08;递归&#xff09; 先序遍历&#xff08;中&#xff0c;左&#xff0c;右&#xff09; 中序遍历&#xff08;左&#xff0c;中&#xff0c;右&#xff09; 后序遍历&a…

算法入门篇七 前缀树

牛客网 左程云老师的算法入门课 找二叉树的节点的后继节点 原则 如果节点有右子树&#xff0c;那么后继节点就是右子树的最左边的第一个节点如果节点没有右子树&#xff0c;如果节点是父节点的右孩子&#xff0c;就继续往上找&#xff0c;直到找到一个父节点是沿途节点的父节…

算法入门篇八 贪心算法

牛客网 左程云老师的算法入门课 贪心算法 贪心算法的解题步骤 例子 题目要求 解题策略 按照结束时间早的会议先安排&#xff0c;比如先安排【2&#xff0c;4】&#xff0c;当4结束了&#xff0c;所有开始时间小于4的全部淘汰&#xff0c;【1&#xff0c;7】、【3&#xff…

算法入门篇九 暴力递归

牛客网 左程云老师的算法入门课 暴力递归 原则 汉诺塔问题 问题 打印n层汉诺塔从左边移动到最右边的过程 思想 一共六个过程&#xff0c;左到右、左到中&#xff0c;中到左&#xff0c;中到右&#xff0c;右到左&#xff0c;右到中&#xff0c;互相嵌套使用 左到右 将1…

rtsp和sdp

RTSP 是由Realnetwork 和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议 。 实时流协议&#xff08;RTSP&#xff09;建立并控制一个或几个时间同步的连续流媒体&#xff0c;如音频和视频。尽管连续媒体流与控制流交叉是可能的&#xff0c;RTSP本身并不发…

使用javascript实现对于chineseocr的API调用

ChineseOCR在线API 网页地址 界面 提供多种接口调用方式&#xff0c;比如在线调用、Javascript api调用、curl api调用和python api调用四种方式&#xff0c;本次使用javascript api调用的方式进行OCR识别在线Javascript工具 在线工具网页链接在线Base64 转化工具 在线工具…

移动流媒体业务的技术与标准

1 引言   流媒体业务是从Internet上发展起来的一种多媒体应用&#xff0c;指使用流&#xff08;Streaming&#xff09;方式在网络上传输的多媒体文件&#xff0c;包括音频、视频和动画等。   流媒体传输技术的主要特点是以流&#xff08;streaming&#xff09;的形式进行多…

使用python实现对于chineseocr的API调用

ChineseOCR在线API 网页链接 界面 提供多种接口调用方式&#xff0c;比如在线调用、Javascript api调用、curl api调用和python api调用四种方式&#xff0c;本次使用javascript api调用的方式进行OCR识别在线Base64 转化工具 Base64在线小工具代码修改 新增一个变量fill_w…