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

    实验目的

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

    实验任务

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

    实验步骤

    实验环境

    安装了 Ubuntu 18.04.5 Desktop amd64 的虚拟机

    实验过程

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

    最小拓扑,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
    

    通用情形的 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')
    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(h3, s3, 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(s1, s2)
    net.addLink(s3, s2)
    # 配置主机 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()
    

    执行命令:

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

    修改之前的 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')
    	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(h3, s3, 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(s1, s2)
    	net.addLink(s3, s2)
    	# 配置主机 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()
    	h1, h2, h3= net.get('h1', 'h2', 'h3')
    	net.iperf((h1,h3))
    	net.iperf((h2,h1))
    	net.iperf((h2,h3))
    	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

    实验心得

    • 学习了用python编写拓扑命令脚本
    • 学习了利用iPerf测试带宽
  • 相关阅读:
    android29
    android28
    android27
    android26
    Dynamics CRM2011 MspInstallAction failed when installing an Update Rollup
    Dynamics CRM Import Solution Attribute Display Name description is null or empty
    The service cannot be activated because it does not support ASP.NET compatibility
    IIS部署WCF报 无法读取配置节“protocolMapping”,因为它缺少节声明
    Unable to access the IIS metabase.You do not have sufficient privilege
    LM算法与非线性最小二乘问题
  • 原文地址:https://www.cnblogs.com/robinxlh/p/2net.html
Copyright © 2011-2022 走看看