您如何测试两个盒子之间的网络速度?


168

我在家中建立了一个千兆网络,并安装了一些基于Ubuntu的盒子。出于好奇,我想检查两个盒子之间的速度。我没有任何速度或任何问题,这真的只是我心中的怪胎。另外,结果可能会让我知道是否还有改进的余地,或者我的配置错误。

那么,如何正确测试Ubuntu机器之间的网络速度?

Answers:


271

我用iperf。这是一种客户端服务器布置,您可以在一端以服务器模式运行它,然后从网络另一端的另一台计算机连接到它。

两台机器都运行:

sudo apt-get install iperf

我们将iperf在一台机器上启动服务器:

iperf -s

然后在另一台计算机上,告诉iperf以客户端身份连接:

iperf -c <address of other computer>

在客户端计算机上,您将看到以下内容:

oli@bert:~$ iperf -c tim
------------------------------------------------------------
Client connecting to tim, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.4 port 37248 connected with 192.168.0.5 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.04 GBytes    893 Mbits/sec

当然,如果您在服务器计算机上运行防火墙,则需要允许端口5001上的连接或使用-p标志更改端口。


nc如果您愿意,可以使用普通的旧版本(netcat)进行几乎相同的操作。在服务器计算机上:

nc -vvlnp 12345 >/dev/null

客户端可以通过管道零的技嘉ddnc隧道。

dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345

作为演示:

$ dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
Connection to 10.10.0.2 12345 port [tcp/*] succeeded!
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 9.11995 s, 118 MB/s

时机由给出,dd但它应该足够准确,因为它只能以管道将其输出的速度输出。如果您对此不满意,可以将整个过程打包成一个time电话。

请记住,结果是兆字节所以乘以8就得到一个巨型 -per秒的速度。上面的演示以944mbps的速度运行。


伙计,您对我的问题都有所有答案!我的网络显然没有建立好,而您的传输仅以714 MBytes和598 Mbits / sec的带宽传输。Dunno可能会在将来进行调查。谢谢。
雅各布·斯科恩

公平地说,另一个盒子只有一个开关(和cat5e的20米),并且没有拥塞。600mbps仍然相当快。
奥利(Oli)

很好,但是我没有对该服务器的root访问权限。
Geoff 2013年

尝试-P10。我的单连接结果类似于jschoens,但有3个以上并行连接,它始终能推动920Mbps。
wujj123456

1
@CMCDragonkai您可能不应该测试不是您自己的资源。带宽繁重的测试可能会影响短期稳定性。
奥利

22

与Oli对iperf的建议相同。只想添加几点:

  1. 还有一些Windows客户端可以跨平台进行测试。
  2. -t <seconds>更改测试长度。更改同时连接的数量。例如,将 10个连接一起测试30秒,并给出合计的结果以及10种独立的连接速度。-P <n>iperf -c [target IP] -P 10 -t 30
  3. 您不需要sudo。您可以从http://iperf.fr/下载二进制文件。它应该工作。使用进行下载,使用wget使其可执行chmod,则可以直接运行二进制文件。它运作完美。

我发现,使用默认设置,单个连接速度会波动很多。但是,通过3个以上的并行连接,结果在我的千兆交换机上更加一致。(始终@ 910-920Mbps)


8

使用此脚本,您可以轻松测试计算机与某个远程主机之间的连接速度。使用示例:

$ scp-speed-test.sh user@remote_host 80000
  • user@remote_host 是您的目标主机(您必须具有对此主机的ssh访问权限)
  • 80000是测试文件的近似大小(以kbs为单位),它将被接收到远程主机。它不是强制性的参数。

4
这似乎在测试SCP应用程序的速度,这将比在较低层进行的测试低。例如,nc使用L4。当然,如果您更关心SCP的速度,那就太好了。
sudo

1
有问题:此脚本在磁盘上读写文件-比ram慢,因此可能是人为的减速。也只发送零,以防万一它们被压缩了,这是很大的人工加速。如果您确实要使用伪随机数据,请不要使用/dev/random(它可能会阻止)或urandom(建议使用链接注释)它们也可能非常慢,而应使用dm-crypt(请参阅cryptsetup的常见问题解答2.19如何使用crypto-年级随机性?)也许在ram中有文件。
Xen2050

4

如果要在较低级别测试以太网LAN,可以使用Etherate,它是免费的Linux CLI以太网测试工具:

https://github.com/jwbensley/Etherate

像iPerf之类的工具(非常好!)通过IP和TCP或UDP运行时,将其混合使用。直接在以太网/ OSI层2上进行测试。


2

以下命令不需要其他软件包,但需要SSH访问权限:

ssh username@myserver.example.com 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress

输出示例:

2992238080 bytes (3.0 GB) copied, 27.010250 s, 111 MB/s
5859375+0 records in
5859375+0 records out
3000000000 bytes (3.0 GB) copied, 27.1943 s, 110 MB/s

该命令将一个完整的零的3GB(1000 ^ 3字节)虚拟文件打印到远程服务器上的stdout,该文件通过SSH打印(传输)到本地服务器的stdout,然后在本地通过管道传输到/dev/null(即忽略)。您甚至可以在执行测试时查看测试进度。

当然不如其他工具那么精确,但我的用例是调试一个备份过程,该过程中我想测试网络速度是否是问题所在,而无需安装其他软件包。


1

还有一些其他不错的命令行工具可用于两个主机之间的带宽基准测试:

坚果

server$ nuttcp -S
client$ nuttcp -v -v -i1 1.1.1.1 ;# 1.1.1.1 is server's address

肾上腺素

 server$ nepim
 client$ nepim -d -c 1.1.1.1 ;# 1.1.1.1 is server's address

戈本

 server$ goben
 client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address

2
这些彼此之间以及与iperf有何不同?它们的工作原理相同吗?nuttcp在Debian中,显然是“ nuttcp基于nttcp,这反过来又是Silicon Graphics(SGI)的某人对原始ttcp的增强,该原始ttcp由1984年12月之前由BRL的Mike Muuss编写,用于比较UC Berkeley和BBN的TCP堆栈可帮助DARPA决定在第一个BSD Unix版本中放置哪个版本。”
Xen2050

0

正如我在最佳答案中的评论中所指出的那样,该解决方案不够好,因为客户端/服务器未经过优化以... 压缩每一个速度

我的解决方案:

在两面都制作一个ramdisk(因此,您不受存储速度的限制,我建议您使用ramfs而不是tmpfs来制作它们,因此它们不会互换...请注意不要留下至少512M的可用内存对于系统,这是必需的,如果您具有千兆以太网,以这种速度,甚至SSD都可能会降低速度)在服务器上安装apache,然后创建到ramdisk的链接,在ramdisk上创建一些大文件(100M-1G,您可以使用从/ dev / random dd或复制(如果您有手头的话),然后转到客户端并使用高级下载程序将它们下载(也在该端的ramdisk上), lftp

哦,好极了,与iperf报告的75mbps和9.5M / s netcat的报告一样

我的解决方案达到11.18M / s

1591129421 bytes transferred in 136 seconds (11.18M/s)

950万* 8 = 76 mbps; 它非常接近75 mbps
Fusca Software

-4

轻松将计算机插入第一个盒子,将另一个盒子插入第一个盒子。然后在计算机上ping第一个框,保存结果,对另一个框ping并进行减法。


10
这表明网络延迟只是速度的一部分。例如,我的手机的3G连接具有巨大的延迟(100-300毫秒),但仍可以管理5mbps的吞吐量。
奥利(Oli)

如果他问速度但想要吞吐量,这不是我的错。
Nyamiou The Galeanthrope

1
延迟是反应时间,而不是速度。
wullxz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.