同时使用 iperf 和 ping mininet

问题描述 投票:0回答:3

我刚刚开始计算机网络课程,我的第一个作业为我提供了一个简单星形拓扑的 mininet 脚本,并要求我在 h1 和 h2 之间运行 iperf 测量。当 iperf 运行时,我应该测试 h3 和 h4 之间的 ping。

我的问题是如何让 iperf 测量数据在后台运行,以便我可以测试 ping,因为当 iperf 运行时我无法输入也无法为 mininet 打开新终端。

linux networking network-programming mininet
3个回答
0
投票

您有两个选择:

1 - 使用Python API

2 - 从 CLI 运行并行进程

我将解释第二个选项,因为您正在使用 CLI 进行实验。

第一步:使用单(星)拓扑运行 Mininet。

giuseppe@raspberrypi:~ $ sudo mn --topo single,4
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 h3 h4
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1) (h3, s1) (h4, s1)
*** Configuring hosts
h1 h2 h3 h4
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet>

如果你想从h1->h2进行iperf,你需要h2的IP,你可以用ifconfig找到它

mininet> h2 ifconfig
h2-eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.2  netmask 255.0.0.0  broadcast 10.255.255.255
        inet6 fe80::b87a:eaff:fec1:64a0  prefixlen 64  scopeid 0x20<link>
        ether ba:7a:ea:c1:64:a0  txqueuelen 1000  (Ethernet)
        RX packets 98  bytes 14845 (14.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11  bytes 866 (866.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

在 h2 中启动服务器并在 h2.log 文件中记录 stdout 和 stderr

mininet> h2 iperf -s &> h2.log &

从h1运行iperf客户端到h2(ip=10.0.0.2)并将输出保存在h1.log文件中(在本例中,我运行了120秒,但你可以调整它)

mininet> h1 iperf -t 120 -c 10.0.0.2 &> h1.log &

现在您可以运行 ping,而 iperf 正在后台执行

mininet> h3 ping h4

可以打开另一个shell或者完成实验后查看日志

mininet> h3 ping h4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=30.7 ms
64 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=1.84 ms
64 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=0.393 ms
64 bytes from 10.0.0.4: icmp_seq=4 ttl=64 time=0.387 ms
^C
--- 10.0.0.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 73ms
rtt min/avg/max/mdev = 0.387/8.327/30.692/12.925 ms
mininet> exit
*** Stopping 1 controllers
c0
*** Stopping 4 links
....
*** Stopping 1 switches
s1
*** Stopping 4 hosts
h1 h2 h3 h4
*** Done
completed in 473.135 seconds
giuseppe@raspberrypi:~ $
giuseppe@raspberrypi:~ $ ls
h1.log  h2.log

0
投票

您可以使用xterm:

xterm h1 h2 h3 h4

每个节点您将获得四个 xterm 终端。然后,您可以在 h1 和 h2 之间运行 iperf,并在 h3 和 h4 之间运行 ping。

在 h1 上,运行:

iperf -s &

在 h2 上,运行:

iperf -s 10.0.0.1 -i 10 -t 60
连接到 h1。

在 h3 上,运行:

ping 10.0.0.4 -c 10
来 ping h4, 或者在 h4 上,运行
ping 10.0.0.3 -c 10
来 ping h3。

Here is an example


0
投票

对于Python,您可以使用

popen
来传递命令。例如:

import subprocess

def iperf_in_background(host, flags=''):
  """Runs an iperf in the background with flags.

  Args:
    host: The host to iperf.
    flags: The iperf flags.
  """

  command = ['iperf', flags, host]
  subprocess.Popen(command, stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)

# Start an iperf in the background.
iperf_in_background('h2')

# Start a ping in the background.
subprocess.Popen(['ping', 'h2'], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)

# Do other things while the iperf and ping are running.

# Wait for the iperf and ping to finish.
subprocess.call(['wait'])

然后你可以做类似的事情

iperf_in_background('h2', '-b 10M')
subprocess.Popen(['ping', 'h2'], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)
© www.soinside.com 2019 - 2024. All rights reserved.