实验 2 :Mininet 实验 —— 拓扑的命令脚本
实验2: Mininet 实验——拓扑的命令脚本
一、实验目的
掌握 Mininet 的自定义拓扑生成方法:命令行创建、Python 脚本编写
二 、实验任务
通过使用命令行创建、Python 脚本编写生成拓扑,熟悉 Mininet 的基本功能。
三 、实验步骤
1. 实验环境
安装了 Ubuntu 18.04.5 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()
修改之前的 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()
这里发现丢失了字符'%'可以用以下代码来修复
echo "<input type=radio name=cmd value=network_loss> Add Packetloss: <input type=text name=loss value=0.5>%<br>"
关于 IPerf 的延伸实验参考 SDNLAB:https://www.sdnlab.com/15088.html
四 、实验 要求
1. 在创建的个人目录下,修改上述 Mininet 脚本, 使之变成一个线性拓扑(交换机和主机数均为 3 )。
# 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')
h2 = net.addHost('h2')
h3 = net.addHost('h3')
s1 = net.addSwitch('s1')
s2 = net.addSwitch('s2')
s3 = net.addSwitch('s3')
# 创建节点间的链路
net.addLink(h1, s1)
net.addLink(h2, s2)
net.addLink(h3, s3)
net.addLink(s1, s2)
net.addLink(s2, s3)
# 配置主机 ip
h1.setIP('10.0.0.1', 24)
h2.setIP('10.0.0.2', 24)
h3.setIP('10.0.0.3', 24)
net.start()
net.pingAll()
net.stop()
2. 各类性能限制保持不变。
# 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', cpu=0.5)
s1 = net.addSwitch('s1')
s2 = net.addSwitch('s2')
s3 = net.addSwitch('s3')
# 创建节点间的链路
net.addLink(h1, s1, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
net.addLink(h2, s2, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
net.addLink(h3, s3, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
net.addLink(s1, s2)
net.addLink(s2, s3)
# 配置主机 ip
h1.setIP('10.0.0.1', 24)
h2.setIP('10.0.0.2', 24)
h3.setIP('10.0.0.3', 24)
net.start()
net.pingAll()
net.stop()
3. 使用 iperf 完成拓扑内 3 台主机相互之间的简单性能测试。
# coding=UTF-8
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', cpu=0.5)
s1 = net.addSwitch('s1')
s2 = net.addSwitch('s2')
s3 = net.addSwitch('s3')
# 创建节点间的链路
net.addLink(h1, s1, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
net.addLink(h2, s2, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
net.addLink(h3, s3, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
net.addLink(s1, s2)
net.addLink(s2, s3)
# 配置主机 ip
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()
4. 在博客园发表一篇博客,记录代码和主要步骤
https://www.cnblogs.com/xie37/p/13642400.html
实验 2 :Mininet 实验 —— 拓扑的命令脚本的更多相关文章
- 实验 2:Mininet 实验——拓扑的命令脚本生成
实验 2:Mininet 实验--拓扑的命令脚本生成 一.实验目的 掌握 Mininet 的自定义拓扑生成方法:命令行创建.Python 脚本编写 二.实验任务 通过使用命令行创建.Python 脚本 ...
- 软件定义网络实验记录②--Mininet 实验——拓扑的命令脚本生成
一.实验目的 掌握 Mininet 的自定义拓扑生成方法:命令行创建.Python 脚本编写 二.实验任务 通过使用命令行创建.Python 脚本编写生成拓扑,熟悉 Mininet 的基本功能. 三. ...
- 实验 2:Mininet 实验——拓扑的命令脚本生成
一.实验目的 掌握 Mininet 的自定义拓扑生成方法:命令行创建.Python 脚本编写 二.实验任务 通过使用命令行创建.Python 脚本编写生成拓扑,熟悉 Mininet 的基本功能. 三. ...
- 软件定义网络实验记录③--Mininet 实验——测量路径的损耗率
一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定: 初步了解 Mininet 安装时自带的 POX 控制器脚本编写,测试路径损耗率. 二.实验任务 ...
- 实验 3:Mininet 实验——测量路径的损耗率
一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定;初步了解 Mininet 安装时自带的 POX 控制器脚本编写,测试路径损耗率. 二.实验任务 h ...
- Mininet实验 命令延伸实验扩展
本文参照:Mininet 命令延伸实验扩展 步骤1:命令行创建拓扑 sudo mn --topo minimal 最小的网络拓扑,一个交换机下挂两个主机. sudo mn --topo linear, ...
- mininet实验 脚本实现控制交换机行为
写在前面 本文参考 通过这个实验,我学习到了另一种下流表的方式. 下流表有两种方式(我目前了解): 通过controller下发. 通过OvS提供的API直接向OvS交换机下流表. 本实验脚本已经把相 ...
- mininet实验 可视化界面形成拓扑
参考博客一 参考博客二 实验目的 mininet中内置了一个mininet可视化工具:miniedit.miniedit在mininet/mininet/examples目录下提供miniedit.p ...
- 软件定义网络实验记录④--Open vSwitch 实验——Mininet 中使用 OVS 命令
一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用 Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解 ...
随机推荐
- gogs报错解决合集
目录 一.在组织中添加成员,一直显示普通用户 一.在组织中添加成员,一直显示普通用户 组织是公司,团队是公司中的不同队伍.例如A团队设置为加入就有管理员权限,那加入就有管理员. 但在组织成员那一栏中加 ...
- 基于TSN 802.1AS协议的时间同步分析(7种延时,1次厘清)
前言 往期的时间同步--802.1AS协议介绍一文向大家介绍了802.1AS协议的基本内容,基于时间同步协议就能实现主节点与各从节点的时间同步,但是如何评价时间同步的优劣呢?这就需要我们通过一些时间同 ...
- 安装MySQL5.7.26教程图解
安装MySQL5.7.26教程图解 1.安装mysql所需的yum源 yum -y install gcc-c++ ncurses-devel cmake make perl gcc autoconf ...
- [BUUCTF]REVERSE——[WUSTCTF2020]level2
[WUSTCTF2020]level2 附件 步骤: 例行检查,32位程序,upx壳儿 脱完壳儿,扔进32位ida,习惯性的检索字符串,在我没找到什么关键信息,准备去看main函数的时候,将字符串拉到 ...
- [BUUCTF]PWN——bjdctf_2020_router
bjdctf_2020_router 附件 步骤: 例行检查,64位程序,开启了NX保护 本地试运行一下程序,看看大概的情况 会让我们选择,选择4.root,没什么用,但是注意了,这边选1会执行pin ...
- AtCoder Beginner Contest 173 题解
AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...
- LuoguP7106 双生独白 题解
Content 给定一个 十六进制颜色码(一个长度为 \(7\) 的字符串,意义详见题面),请输出其反色的十六进制颜色码. 数据范围:颜色的 R,G,B 值保证在 \(255\) 以内. Soluti ...
- org.apache.taglibs.standard.tlv.JstlBaseTLV.validate
exception org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP org.apache. ...
- libevent源码学习(8):event_signal_map解析
目录event_signal_map结构体向event_signal_map中添加event激活event_signal_map中的event删除event_signal_map中的event以下源码 ...
- JAVA下划线、驼峰相互转换
/** * 下划线转驼峰 * @param str * @return */ public static String lineToHump(String str) { str = str.toLow ...