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