zoukankan      html  css  js  c++  java
  • 实验 2:Mininet 实验——拓扑的命令脚本生成

    一、实验准备

    1.实验环境

    • 安装了 Ubuntu 18.04.5 Desktop amd64 的虚拟机

    2.实验目的

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

    3.实验小结——创建拓扑的三种方式:

    (1)使用miniedit可视化工具创建拓扑(实验1)

    cd lancl/mininet
    sudo ./mininet/examples/miniedit.py
    

    (2)使用命令行创建拓扑

    sudo mn --topo minimal
    sudo mn --topo single,3
    sudo mn --topo linear,3
    sudo mn --topo tree,fanout=2,depth=2
    sudo mn --custom file.py --topo mytopo
    

    (3)使用python脚本构建

    nano mytopo.py
    sudo python mytopo.py
    nano IperfTest.py
    sudo python IperfTest.py
    

    >>>实验结果速览<<<

    二、实验开始

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

    • (1)最小网络拓扑,两台主机连接到一台交换机;
    sudo mn --topo minimal
    

    (小心:minimal != mininal……)

    • (2)单一拓扑,每个主机都连接到同一个交换机上,在本例中,有3个主机和一个交换机;
    sudo mn --topo single,3
    

    • (3)线性拓扑,每个主机都连接到一个交换机,所有交换机彼此连接,在本例中,有3个主机和3个交换机;
    sudo mn --topo linear,3
    

    • (4)树形拓扑,定义深度和扇出形成基于树的拓扑,在本例中,扇出为2,深度为2;
    sudo mn --topo tree,fanout=2,depth=2
    

    p.s.以上建立网络拓扑的方式,均是建立有规则的网络拓扑,自定义网络拓扑语法如下:
    sudo mn --custom file.py --topo mytopo

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

    • nano
      - nano是一个字符终端的文本编辑器,有点像DOS下的editor程序。
      - 它比vi/vim要简单得多,比较适合Linux初学者使用。
      - 某些Linux发行版的默认编辑器就是nano。
    • nano mytopo.py --> 进入编辑状态
      • ctrl+o保存修改
      • enter保存文件名
      • ctrl+x退出

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

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

    • python脚本
    # 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() 
    

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

    nano IperfTest.py
    sudo python IperfTest.py
    

    • python脚本
    # 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() 
    
  • 相关阅读:
    浙大数据结构课后习题 练习二 7-2 Reversing Linked List (25 分)
    浙大数据结构课后习题 练习二 7-2 一元多项式的乘法与加法运算 (20 分)
    浙大数据结构课后习题 练习一 7-1 Maximum Subsequence Sum (25 分)
    浙大数据结构课后习题 练习一 7-1 最大子列和问题 (20 分)
    PAT Basic 1019 数字黑洞 (20 分)
    PAT Basic 1017 A除以B (20 分)
    PAT Basic 1013 数素数 (20 分)
    PAT Basic 1007 素数对猜想 (20 分)
    PAT Basic 1003 我要通过! (20 分)
    自动化运维——HelloWorld(一)
  • 原文地址:https://www.cnblogs.com/lance-haha/p/13644952.html
Copyright © 2011-2022 走看看