• 实验 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

    • 所构建的拓扑结构如下

    • mytopo代码如下

    # 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(h2, s2, bw=10, delay='5ms',max_queue_size=1000, loss=10, use_htb=True)
    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()
    
    • 执行命令:
      $ nano mytopo.py // 复制 Python 代码到 py 文件中
      $ sudo python mytopo.py // 执行 py 文件

    • 修改之前的 Python 程序,使之可用 iPerf 测试网络拓扑中的指定主机之间的带宽。
      mytopo2的具体代码如下

    # 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')
        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=0, use_htb=True)
        net.addLink(h2, s2, bw=10, delay='5ms',max_queue_size=1000, loss=0, use_htb=True)
        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()
        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, h3))
        net.iperf((h2, h3))
        net.iperf((h1, h2))
        net.stop()
    
    if __name__=='__main__':
        setLogLevel('info') #print the log when Configuring hosts, starting switches and controller
        IperfTest()
    
    • 执行命令:
      $ nano mytopo2.py // 复制 Python 代码到 py 文件中
      $ sudo python mytopo2.py // 执行 py 文件

    四、心得体会

    1.在执行 $ nano mytopo.py 命令前,未避免原先的拓扑结构产生影响,需要用$ sudo mn -c 将之前已经有的拓扑结构删除。

    2.要将.py文件提前放入我自己创建的031802307文件中,避免出现找不到文件的错误

  • 相关阅读:
    线性代数思维导图——3.向量
    微分中值定理的基础题型总结
    构造函数
    Python课程笔记(七)
    0241. Different Ways to Add Parentheses (M)
    0014. Longest Common Prefix (E)
    0013. Roman to Integer (E)
    0011. Container With Most Water (M)
    0010. Regular Expression Matching (H)
    0012. Integer to Roman (M)
  • 原文地址:https://www.cnblogs.com/boermomo/p/13658420.html
Copyright © 2020-2023  润新知