软件定义网络-实验 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 的编程能力。
本次实验所使用的拓扑结构如下:

并且脚本中可以自定义网络性能,比如 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 
 6 net=Mininet(host=CPULimitedHost,link=TCLink)
 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 
25 net.start()
26 net.pingAll()
27 net.stop()

执行命令:

$ nano mytopo.py // 复制 Python 代码到 py 文件中

$ sudo python mytopo.py // 执行 py 文件

修改之前的 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     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.pingAll()
38     net.stop()
39 if __name__=='__main__':
40     setLogLevel('info') #print the log when Configuring hosts, starting switches and controller     
41     IperfTest() 

最终运行结果:

四、心得体会

1.当虚拟机开机进入GUN GRUB界面时,选择*Ubuntu回车后仍无法正常开机,很可能是因为内存分配不够,需要给它分配4G以上的内存才能保证虚拟机的正常运行。

2.在将python代码复制到py文件时要注意缩进与空格,不然将会出现语法错误。

posted @ 2020-09-09 21:59  Lipchordia  阅读(242)  评论(0编辑  收藏  举报