实验 2:Mininet 实验——拓扑的命令脚本生成

一、实验目的

掌握 Mininet 的自定义拓扑生成方法:命令行创建、Python 脚本编写

二、实验任务

通过使用命令行创建、Python 脚本编写生成拓扑,熟悉 Mininet 的基本功能。

三、实验步骤

1. 实验环境

安装了 Ubuntu 16.04.7 Desktop amd64 的虚拟机

2. 实验过程

(1)针对特定拓扑的命令行快速创建

// 最小拓扑,1 台交换机下挂 2 台主机
$ sudo mn --topo minimal
// 简单拓扑,1 台交换机下挂 n 台主机,此处 n=3,n=2 即为最小拓扑
$ sudo mn --topo single,3
// 线性拓扑,交换机连成一线,每台交换机下挂 1 台主机,此处有 3 台交换机 3 台主机
$ sudo mn --topo linear,3
// 树形拓扑,基于深度 depth 和扇出 fanout,此处均为 2
$ sudo mn --topo tree, fanout=2,depth=2

(2)通用情形的 Python 脚本自定义创建

此种方法需要具备 Python 的编程能力。

本例拓扑为实验 1 可视化工具实验部分所使用的拓扑。

并且脚本中可以自定义网络性能,比如 addHost 当中可以添加参数设置主机的cpu,addLink 当中可以添加参数设置链路的带宽 bw、延时 delay、最大队列值

maxqueuesize、丢包率 loss,相关代码可参照红色字体部分。

# coding=UTF-8 from mininet.net
import Mininet from mininet.node
import CPULimitedHost
from mininet.link
import TCLink net = Mininet(host=CPULimitedHost, link=TCLink)
# 如不限制性能,参数为空
# 创建网络节点
c0 = net.addController()
h1 = net.addHost('h1', cpu=0.5)
h2 = net.addHost('h2', cpu=0.5)
h3 = net.addHost('h3')
h4 = net.addHost('h4')
s1 = net.addSwitch('s1')
s2 = net.addSwitch('s2') # 创建节点间的链路
net.addLink(h1, s1, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True) net.addLink(h3, s1)
net.addLink(h2, s2, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True) net.addLink(h4, s2) net.addLink(s1, s2) # 配置主机
ip h1.setIP('10.0.0.1', 24)
h2.setIP('10.0.0.2', 24)
h3.setIP('10.0.0.3', 24)
h4.setIP('10.0.0.4', 24) net.start()
net.pingAll()
net.stop()

执行命令:

 $ nano mytopo.py  // 复制 Python 代码到 py 文件中
$ sudo python mytopo.py // 执行 py 文件

我用的是 virtual box ubuntu 16.04.7 默认不能粘贴,用了下面这个链接的方法可以粘贴了,分享一下

https://blog.csdn.net/qq_34068668/article/details/80540539



运行结果如下图

修改之前的 Python 程序,使之可用 iPerf 测试网络拓扑中的指定主机之间的带宽。

# coding=UTF-8
#!/usr/bin/python
from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
from mininet.log import setLogLevel
def IperfTest():
net = Mininet(host=CPULimitedHost, link=TCLink)
c0 = net.addController()
h1 = net.addHost('h1', cpu=0.5)
h2 = net.addHost('h2', cpu=0.5)
h3 = net.addHost('h3')
h4 = net.addHost('h4')
s1 = net.addSwitch('s1')
s2 = net.addSwitch('s2') net.addLink(h1, s1, bw=10, delay='5ms',max_queue_size=1000, loss=0, use_htb=True)
net.addLink(h3, s1)
net.addLink(h2, s2, bw=10, delay='5ms',max_queue_size=1000, loss=0, use_htb=True)
net.addLink(h4, s2)
net.addLink(s1, s2) h1.setIP('10.0.0.1', 24)
h2.setIP('10.0.0.2', 24)
h3.setIP('10.0.0.3', 24)
h4.setIP('10.0.0.4', 24) net.start()
print "Dumping host connections"
dumpNodeConnections(net.hosts)
print "Testing network connectivity"
net.pingAll()
print "Testing bandwidth"
h1, h2, h3, h4 = net.get('h1', 'h2', 'h3', 'h4')
net.iperf((h1, h3))
net.iperf((h2, h4))
net.stop() if __name__=='__main__':
setLogLevel('info') #print the log when Configuring hosts, starting switches and controller
IperfTest()



关于 IPerf 的延伸实验参考 SDNLAB:https://www.sdnlab.com/15088.html

在创建的个人目录下,修改上述 Mininet 脚本,使之变成一个线性拓扑(交换

机和主机数均为 3)。

我的代码如下

from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
from mininet.log import setLogLevel
def IperfTest():
net = Mininet(host=CPULimitedHost, link=TCLink)
c0 = net.addController()
h1 = net.addHost('h1', cpu=0.5)
h2 = net.addHost('h2', cpu=0.5)
h3 = net.addHost('h3')
s1 = net.addSwitch('s1')
s2 = net.addSwitch('s2')
s3 = net.addSwitch('s3') net.addLink(s1, s2)
net.addLink(s2, s3)
net.addLink(h1, s1, bw=10, delay='5ms',max_queue_size=1000, loss=0, use_htb=True)
net.addLink(h2, s2, bw=10, delay='5ms',max_queue_size=1000, loss=0, use_htb=True)
net.addLink(h3, s3) h1.setIP('10.0.0.1', 24)
h2.setIP('10.0.0.2', 24)
h3.setIP('10.0.0.3', 24) net.start()
print "Dumping host connections"
dumpNodeConnections(net.hosts)
print "Testing network connectivity"
net.pingAll()
print "Testing bandwidth"
h1, h2, h3= net.get('h1', 'h2', 'h3')
net.iperf((h1, h2))
net.iperf((h2, h3))
net.iperf((h1, h3))
net.stop() if __name__=='__main__':
setLogLevel('info') #print the log when Configuring hosts, starting switches and controller
IperfTest()

运行结果如下

实验心得bd

在本次实验中,学会了如何正确使用 ctrl+v , 如何用 mininet 库构建网络拓扑结构,以及测试网络的性能

实验 2:Mininet 实验——拓扑的命令脚本生成的更多相关文章

  1. 软件定义网络实验记录②--Mininet 实验——拓扑的命令脚本生成

    一.实验目的 掌握 Mininet 的自定义拓扑生成方法:命令行创建.Python 脚本编写 二.实验任务 通过使用命令行创建.Python 脚本编写生成拓扑,熟悉 Mininet 的基本功能. 三. ...

  2. 实验 2:Mininet 实验——拓扑的命令脚本生成

    一.实验目的 掌握 Mininet 的自定义拓扑生成方法:命令行创建.Python 脚本编写 二.实验任务 通过使用命令行创建.Python 脚本编写生成拓扑,熟悉 Mininet 的基本功能. 三. ...

  3. 实验 2 :Mininet 实验 —— 拓扑的命令脚本

    实验2: Mininet 实验--拓扑的命令脚本 一.实验目的 掌握 Mininet 的自定义拓扑生成方法:命令行创建.Python 脚本编写 二 .实验任务 通过使用命令行创建.Python 脚本编 ...

  4. 软件定义网络实验记录③--Mininet 实验——测量路径的损耗率

    一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定: 初步了解 Mininet 安装时自带的 POX 控制器脚本编写,测试路径损耗率. 二.实验任务 ...

  5. 实验 3:Mininet 实验——测量路径的损耗率

    一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定;初步了解 Mininet 安装时自带的 POX 控制器脚本编写,测试路径损耗率. 二.实验任务 h ...

  6. Mininet实验 命令延伸实验扩展

    本文参照:Mininet 命令延伸实验扩展 步骤1:命令行创建拓扑 sudo mn --topo minimal 最小的网络拓扑,一个交换机下挂两个主机. sudo mn --topo linear, ...

  7. mininet实验 脚本实现控制交换机行为

    写在前面 本文参考 通过这个实验,我学习到了另一种下流表的方式. 下流表有两种方式(我目前了解): 通过controller下发. 通过OvS提供的API直接向OvS交换机下流表. 本实验脚本已经把相 ...

  8. mininet实验 可视化界面形成拓扑

    参考博客一 参考博客二 实验目的 mininet中内置了一个mininet可视化工具:miniedit.miniedit在mininet/mininet/examples目录下提供miniedit.p ...

  9. 软件定义网络实验记录④--Open vSwitch 实验——Mininet 中使用 OVS 命令

    一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用 Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解 ...

随机推荐

  1. 在centOS7上安装一套java运行环境

    前提:更换centos的默认yum源,提高下载速度. 备份系统自带的yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS- ...

  2. zuul路由网关集成ssl,实现http到https的转变

    1 前言 最近几天刚开始接触微信小程序的开发,才接触到了https的概念(微信小程序中的请求必须为https请求,不然请求无法成功).https算是对http的安全封装,在http的基础上加了ssl证 ...

  3. Java 基础 —— 注解 Annotation

    简介 Annotation 是从 JDK 5.0 引入的. 注解使得我们可以以编译器验证的格式存储程序的额外信息.注解可以生成描述符文件,甚至是新的类定义,并且有助于减轻编写"样板" ...

  4. 生成kafka内部请求与响应的接口文档

    生成kafka内部请求与响应的接口文档 /** */ package com.code260.ss.kafka10demo; import java.io.File; import java.io.I ...

  5. Elasticsearch聚合语句

    聚合的范围是search query过滤出的数据 四种聚合类型: 一.Bucketing 桶聚合,常规的分类然后计算每个分类的文档数量 二.Metric 分类并对一组文档进行sum.avg等数学运算 ...

  6. yum安装软件时,提示No package netstat available.的解决方法

    1. 序言 如笔者在本机上运行netstat时,提示没有这个命令,向来简单粗暴,直接yum -y install netstat,显然是不能正常安装的. [root@hadoop-103 ~]# yu ...

  7. python基础 Day1

    Python开发笔记 Day1 1.cpu内存 硬盘 操作系统 cpu:计算机的运算和计算中心,相当于人类大脑 内存:暂时存储数据,临时加载数据应用程序,4G(内存速度快,断电即消失) 硬盘:磁盘,长 ...

  8. 群晖系统设置自动拍摄共享文件夹快照的教程【江东网 JDX86.COM】

    Snapshot Replication 是数据备份和还原的工具.企业需要数据保护以防止因意外删除.应用程序崩溃.数据损毁和病毒所造成的数据丢失. 1.在套件中心下载该套件 2.打开套件可以看到NAS ...

  9. ubuntu18.04 开机定时启动任务

    1,crontab 格式:M H D m d cmd == 分 时 天 月 周几 命令 参数 : crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑 ...

  10. Arduboy基本用法(一)

    Arduboy基本用法(一) 一.第一个Arduboy程序 在arduino中新建项目 示例代码 #include<Arduboy.h> Arduboy arduboy; void set ...