m0_52844438 2023-02-01 17:22 采纳率: 66.7%
浏览 26
已结题

mininet如何产生流量

我知道像ns3这样的仿真工具是会在节点上装应用,然后在应用上使用发包模型;但是mininet里怎么产生流量呢,有没有老哥给解释一下。

  • 写回答

2条回答 默认 最新

  • m0_54204465 2023-02-01 19:33
    关注

    Mininet是一个软件定义网络(SDN)仿真器,可以在单个机器上快速部署复杂的网络拓扑。在Mininet中产生流量可以通过如下几种方法:

    在Mininet中的主机上运行发送网络数据包的应用,例如iperf、ping等。

    在Mininet中的控制器上运行流量控制程序,以控制数据流的流量分配。

    使用Python编写脚本,在Mininet中运行流量生成器,以模拟实际网络中的流量。

    因此,Mininet提供了多种生成流量的方法,便于您对您的网络模型进行评估。在Mininet中,您可以使用一个简单的Python脚本来生成网络流量。

    from mininet.net import Mininet
    from mininet.node import Host, RemoteController
    from mininet.cli import CLI
    from mininet.log import setLogLevel, info
    from mininet.link import TCLink
    
    def myNet():
        net = Mininet(controller=RemoteController)
        
        h1 = net.addHost('h1', ip='10.0.0.1')
        h2 = net.addHost('h2', ip='10.0.0.2')
        h3 = net.addHost('h3', ip='10.0.0.3')
        h4 = net.addHost('h4', ip='10.0.0.4')
    
        s1 = net.addSwitch('s1')
        s2 = net.addSwitch('s2')
        s3 = net.addSwitch('s3')
    
        net.addLink(h1, s1, bw=10, delay='5ms')
        net.addLink(h2, s1, bw=10, delay='5ms')
        net.addLink(h3, s2, bw=10, delay='5ms')
        net.addLink(h4, s2, bw=10, delay='5ms')
        net.addLink(s1, s2, bw=10, delay='5ms')
        net.addLink(s2, s3, bw=10, delay='5ms')
    
        net.start()
        net.pingAll()
        net.stop()
    
    if __name__ == '__main__':
        setLogLevel('info')
        myNet()
    
    

    该脚本在Mininet中创建了4个主机和3个交换机,并在这些主机之间创建了网络链接。通过调用net.pingAll()方法,您可以生成在整个网络中的流量。在这种情况下,每个主机将互相发送ICMP数据包,以测试网络连通性。
    在Mininet中,您可以使用Python代码产生流量。例如,下面的代码段使用iperf来在Mininet网络中的两个主机之间生成TCP流量:

    # Start iperf server on h1
    h1.cmd("iperf -s &")
    # Start iperf client on h2 and generate traffic to h1
    result = h2.cmd("iperf -c 10.0.0.1 -t 60")
    print result
    
    

    上面的代码将在h1上启动iperf服务器,并在h2上启动iperf客户端,并向h1生成TCP流量。这个例子的结果是iperf的输出,它报告了从h2到h1的流量的速率。一个 Mininet 的示例是通过在两个主机之间运行 iperf 来产生网络流量。

    例如,您可以创建一个 Mininet 拓扑结构,其中包含两个主机 h1 和 h2,以及一个交换机 s1:

    #!/usr/bin/python
    
    from mininet.topo import Topo
    from mininet.net import Mininet
    from mininet.node import OVSController
    from mininet.cli import CLI
    
    class MyTopo( Topo ):
        "Simple topology example."
    
        def __init__( self ):
            "Create custom topo."
    
            # Initialize topology
            Topo.__init__( self )
    
            # Add hosts and switches
            h1 = self.addHost( 'h1' )
            h2 = self.addHost( 'h2' )
            s1 = self.addSwitch( 's1' )
    
            # Add links
            self.addLink( h1, s1 )
            self.addLink( h2, s1 )
    
    topo = MyTopo()
    net = Mininet( topo=topo, controller=OVSController )
    net.start()
    
    h1, h2 = net.get( 'h1', 'h2' )
    
    print "Starting iperf server on h1"
    h1.cmd( 'iperf -s &' )
    
    print "Running iperf client on h2"
    h2.cmdPrint( 'iperf -c ' + h1.IP() )
    
    CLI( net )
    net.stop()
    
    

    在运行上面的代码之后,可以在 h2 主机上看到 iperf 客户端产生的网络流量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 创建了问题 2月1日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助