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

我家里有一个千兆网络和一些基于Ubuntu的盒子。 出于好奇心,我想检查两个盒子之间的速度。 我对速度或任何事情都没有任何问题,这对我来说真的很奇怪。 另外,如果有改进的余地,或者我有错误的配置,结果可能会让我知道。

那么如何正确测试Ubuntu盒子之间的网络速度呢?

我用iperf 。 它是一种客户端服务器安排,您在一端以服务器模式运行它,并从另一端的另一台计算机连接到它。

两台机器都运行:

 sudo apt-get install iperf 

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

 iperf -s 

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

 iperf -c 

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

 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 

并且客户端可以通过nc隧道通过dd传输一个千兆字节的零。

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

作为demod:

 $ 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以获得兆比特 – 秒速度。 上面的演示以944mbps运行。

与Oli对iperf的推荐相同。 只想添加几点:

  1. 还有一些Windows客户端可以跨平台进行测试。
  2. -t 更改测试长度。 -P 更改同时连接的数量。 例如, iperf -c [target IP] -P 10 -t 30一起测试10个连接30秒,并提供聚合结果以及10个单独的连接速度。
  3. 你不需要sudo。 您只需在http://iperf.fr/下载二进制文件即可。 它应该工作。 用wget下载它,用chmod使它可执行,你可以直接运行二进制文件。 它完美地运作。

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

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

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

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

https://github.com/jwbensley/Etherate

像iPerf这样的工具(非常好!)通过IP和TCP或UDP进行操作。 通过以太网/ OSI第2层直接进行醚化测试。

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

nuttcp

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

nepim

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

goben

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

正如我在评论中指出的那样,最好的答案是,解决方案不够好,因为客户端/服务器没有优化挤压每一点速度

我的解决方案

在两边做一个ramdisk(因此,你不受存储速度的限制,我建议你用ramfs而不是tmpfs,所以他们不会进行交换…只是注意不要留下至少512M的可用内存对于系统,这是必需的,如果你有千兆以太网,在这个速度甚至SSD可能会减慢速度)在服务器上安装apache,然后创建一个链接到ramdisk,在ramdisk上创建几个大文件(100M-1G,你可以创建它们与dd从/ dev / random或者复制,如果你有一些在手边)然后去客户端并使用高级下载程序下载它们(也在那边的ramdisk),我用lftp

哦,差异是主要的,从iperf报告的75mbps和netcat的9.5M / s

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

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

您可以轻松地将计算机插入第一个盒子,将另一个盒子插入第一个盒子。 然后从你的计算机ping第一个框保存结果,ping另一个框并进行减法。