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

一、实验目的

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

二 、实验任务

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

三 、实验步骤

1. 实验环境

安装了 Ubuntu 18.04.5 Desktop amd64 的虚拟机

2. 实验过程

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

  1. // 最小拓扑, 1 台交换机下挂 2 台主机
  2. $ sudo mn --topo minimal

  1. // 简单拓扑,1 台交换机下挂n台主机,此处 n=3,n=2 即为最小拓扑
  2. $ sudo mn --topo single,3

  1. // 线性拓扑,交换机连成一线,每台交换机下挂 1 台主机,此处有 3 台交换机 3 台主机
  2. $ sudo mn --topo linear,3

  1. // 树形拓扑,基于深度 depth 和扇出 fanout,此处均为 2
  2. $ sudo mn --topo tree,fanout=2,depth=2

( 2 ) 通用情形的 Python 脚本

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

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



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

  1. # coding=UTF-8
  2. from mininet.net import Mininet
  3. from mininet.node import CPULimitedHost
  4. from mininet.link import TCLink
  5. net = Mininet(host=CPULimitedHost, link=TCLink) # 如不限制性能,参数为空
  6. # 创建网络节点
  7. c0 = net.addController()
  8. h1 = net.addHost('h1', cpu=0.5)
  9. h2 = net.addHost('h2', cpu=0.5)
  10. h3 = net.addHost('h3')
  11. h4 = net.addHost('h4')
  12. s1 = net.addSwitch('s1')
  13. s2 = net.addSwitch('s2')
  14. # 创建节点间的链路
  15. net.addLink(h1, s1, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
  16. net.addLink(h3, s1)
  17. net.addLink(h2, s2, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
  18. net.addLink(h4, s2)
  19. net.addLink(s1, s2)
  20. # 配置主机 ip
  21. h1.setIP('10.0.0.1', 24)
  22. h2.setIP('10.0.0.2', 24)
  23. h3.setIP('10.0.0.3', 24)
  24. h4.setIP('10.0.0.4', 24)
  25. net.start()
  26. net.pingAll()
  27. net.stop()



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

  1. # coding=UTF-8
  2. #!/usr/bin/python
  3. from mininet.net import Mininet
  4. from mininet.node import CPULimitedHost
  5. from mininet.link import TCLink
  6. from mininet.util import dumpNodeConnections
  7. from mininet.log import setLogLevel
  8. def IperfTest():
  9. net = Mininet(host=CPULimitedHost, link=TCLink)
  10. c0 = net.addController()
  11. h1 = net.addHost('h1', cpu=0.5)
  12. h2 = net.addHost('h2', cpu=0.5)
  13. h3 = net.addHost('h3')
  14. h4 = net.addHost('h4')
  15. s1 = net.addSwitch('s1')
  16. s2 = net.addSwitch('s2')
  17. net.addLink(h1, s1, bw=10, delay='5ms',max_queue_size=1000, loss=0, use_htb=True)
  18. net.addLink(h3, s1)
  19. net.addLink(h2, s2, bw=10, delay='5ms',max_queue_size=1000, loss=0, use_htb=True)
  20. net.addLink(h4, s2)
  21. net.addLink(s1, s2)
  22. h1.setIP('10.0.0.1', 24)
  23. h2.setIP('10.0.0.2', 24)
  24. h3.setIP('10.0.0.3', 24)
  25. h4.setIP('10.0.0.4', 24)
  26. net.start()
  27. print "Dumping host connections"
  28. dumpNodeConnections(net.hosts)
  29. print "Testing network connectivity"
  30. net.pingAll()
  31. print "Testing bandwidth"
  32. h1, h2, h3, h4 = net.get('h1', 'h2', 'h3', 'h4')
  33. net.iperf((h1, h3))
  34. net.iperf((h2, h4))
  35. net.stop()
  36. if __name__=='__main__':
  37. setLogLevel('info') #print the log when Configuring hosts, starting switches and controller
  38. 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 )。

  1. # coding=UTF-8
  2. from mininet.net import Mininet
  3. from mininet.node import CPULimitedHost
  4. from mininet.link import TCLink
  5. net = Mininet(host=CPULimitedHost, link=TCLink) # 如不限制性能,参数为空
  6. # 创建网络节点
  7. c0 = net.addController()
  8. h1 = net.addHost('h1')
  9. h2 = net.addHost('h2')
  10. h3 = net.addHost('h3')
  11. s1 = net.addSwitch('s1')
  12. s2 = net.addSwitch('s2')
  13. s3 = net.addSwitch('s3')
  14. # 创建节点间的链路
  15. net.addLink(h1, s1)
  16. net.addLink(h2, s2)
  17. net.addLink(h3, s3)
  18. net.addLink(s1, s2)
  19. net.addLink(s2, s3)
  20. # 配置主机 ip
  21. h1.setIP('10.0.0.1', 24)
  22. h2.setIP('10.0.0.2', 24)
  23. h3.setIP('10.0.0.3', 24)
  24. net.start()
  25. net.pingAll()
  26. net.stop()

2. 各类性能限制保持不变。

  1. # coding=UTF-8
  2. from mininet.net import Mininet
  3. from mininet.node import CPULimitedHost
  4. from mininet.link import TCLink
  5. net = Mininet(host=CPULimitedHost, link=TCLink) # 如不限制性能,参数为空
  6. # 创建网络节点
  7. c0 = net.addController()
  8. h1 = net.addHost('h1', cpu=0.5)
  9. h2 = net.addHost('h2', cpu=0.5)
  10. h3 = net.addHost('h3', cpu=0.5)
  11. s1 = net.addSwitch('s1')
  12. s2 = net.addSwitch('s2')
  13. s3 = net.addSwitch('s3')
  14. # 创建节点间的链路
  15. net.addLink(h1, s1, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
  16. net.addLink(h2, s2, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
  17. net.addLink(h3, s3, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
  18. net.addLink(s1, s2)
  19. net.addLink(s2, s3)
  20. # 配置主机 ip
  21. h1.setIP('10.0.0.1', 24)
  22. h2.setIP('10.0.0.2', 24)
  23. h3.setIP('10.0.0.3', 24)
  24. net.start()
  25. net.pingAll()
  26. net.stop()

3. 使用 iperf 完成拓扑内 3 台主机相互之间的简单性能测试。

  1. # coding=UTF-8
  2. from mininet.net import Mininet
  3. from mininet.node import CPULimitedHost
  4. from mininet.link import TCLink
  5. from mininet.util import dumpNodeConnections
  6. from mininet.log import setLogLevel
  7. def IperfTest():
  8. net = Mininet(host=CPULimitedHost, link=TCLink) # 如不限制性能,参数为空
  9. # 创建网络节点
  10. c0 = net.addController()
  11. h1 = net.addHost('h1', cpu=0.5)
  12. h2 = net.addHost('h2', cpu=0.5)
  13. h3 = net.addHost('h3', cpu=0.5)
  14. s1 = net.addSwitch('s1')
  15. s2 = net.addSwitch('s2')
  16. s3 = net.addSwitch('s3')
  17. # 创建节点间的链路
  18. net.addLink(h1, s1, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
  19. net.addLink(h2, s2, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
  20. net.addLink(h3, s3, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
  21. net.addLink(s1, s2)
  22. net.addLink(s2, s3)
  23. # 配置主机 ip
  24. h1.setIP('10.0.0.1', 24)
  25. h2.setIP('10.0.0.2', 24)
  26. h3.setIP('10.0.0.3', 24)
  27. net.start()
  28. print "Dumping host connections"
  29. dumpNodeConnections(net.hosts)
  30. print "Testing network connectivity"
  31. net.pingAll()
  32. print "Testing bandwidth"
  33. h1, h2, h3 = net.get('h1', 'h2', 'h3')
  34. net.iperf((h1, h2))
  35. net.iperf((h2, h3))
  36. net.iperf((h1, h3))
  37. net.stop()
  38. if __name__=='__main__':
  39. setLogLevel('info') #print the log when Configuring hosts, starting switches and controller
  40. IperfTest()

4. 在博客园发表一篇博客,记录代码和主要步骤

https://www.cnblogs.com/xie37/p/13642400.html

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

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

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

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

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

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

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

  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. gogs报错解决合集

    目录 一.在组织中添加成员,一直显示普通用户 一.在组织中添加成员,一直显示普通用户 组织是公司,团队是公司中的不同队伍.例如A团队设置为加入就有管理员权限,那加入就有管理员. 但在组织成员那一栏中加 ...

  2. 基于TSN 802.1AS协议的时间同步分析(7种延时,1次厘清)

    前言 往期的时间同步--802.1AS协议介绍一文向大家介绍了802.1AS协议的基本内容,基于时间同步协议就能实现主节点与各从节点的时间同步,但是如何评价时间同步的优劣呢?这就需要我们通过一些时间同 ...

  3. 安装MySQL5.7.26教程图解

    安装MySQL5.7.26教程图解 1.安装mysql所需的yum源 yum -y install gcc-c++ ncurses-devel cmake make perl gcc autoconf ...

  4. [BUUCTF]REVERSE——[WUSTCTF2020]level2

    [WUSTCTF2020]level2 附件 步骤: 例行检查,32位程序,upx壳儿 脱完壳儿,扔进32位ida,习惯性的检索字符串,在我没找到什么关键信息,准备去看main函数的时候,将字符串拉到 ...

  5. [BUUCTF]PWN——bjdctf_2020_router

    bjdctf_2020_router 附件 步骤: 例行检查,64位程序,开启了NX保护 本地试运行一下程序,看看大概的情况 会让我们选择,选择4.root,没什么用,但是注意了,这边选1会执行pin ...

  6. AtCoder Beginner Contest 173 题解

    AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...

  7. LuoguP7106 双生独白 题解

    Content 给定一个 十六进制颜色码(一个长度为 \(7\) 的字符串,意义详见题面),请输出其反色的十六进制颜色码. 数据范围:颜色的 R,G,B 值保证在 \(255\) 以内. Soluti ...

  8. org.apache.taglibs.standard.tlv.JstlBaseTLV.validate

    exception org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP org.apache. ...

  9. libevent源码学习(8):event_signal_map解析

    目录event_signal_map结构体向event_signal_map中添加event激活event_signal_map中的event删除event_signal_map中的event以下源码 ...

  10. JAVA下划线、驼峰相互转换

    /** * 下划线转驼峰 * @param str * @return */ public static String lineToHump(String str) { str = str.toLow ...