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

Jac*_*oen 210 testing networking bandwidth

我在家里设置了一个千兆网络和一些基于 Ubuntu 的盒子。出于完全好奇,我想检查两个盒子之间的速度。我没有任何速度问题或任何问题,这真的只是我的怪胎好奇。另外,也许结果会让我知道是否有改进的余地,或者我有什么配置错误。

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

Oli*_*Oli 340

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

一台两台机器运行:

sudo apt-get install iperf
Run Code Online (Sandbox Code Playgroud)

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

iperf -s
Run Code Online (Sandbox Code Playgroud)

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

iperf -c <address of other computer>
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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


nc如果你有这种倾向,你可以用普通的旧(netcat)做几乎同样的事情。在服务器机器上:

nc -vvlnp 12345 >/dev/null
Run Code Online (Sandbox Code Playgroud)

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

dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
Run Code Online (Sandbox Code Playgroud)

作为演示:

$ 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
Run Code Online (Sandbox Code Playgroud)

那里的时间由 给出,dd但它应该足够准确,因为它只能以管道接受的速度输出。如果你对此不满意,你可以在一个time电话中完成整个事情。

请记住,结果是兆字节,从而用它乘8拿到百万-per秒的速度。上面的演示以 944mbps 运行。

  • @CMCDragonkai 您可能不应该测试不属于您的资源。带宽繁重的测试可能会影响短期稳定性。 (2认同)

小智 26

与 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)


小智 14

下面的命令不需要额外的包,但需要 SSH 访问:

ssh username@myserver.example.com 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress
Run Code Online (Sandbox Code Playgroud)

示例输出:

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
Run Code Online (Sandbox Code Playgroud)

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

当然不如其他工具精确,但我的用例是调试备份过程,我想在不安装其他软件包的情况下测试网络速度是否是问题。


VeL*_*err 9

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

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

  • 这似乎是在测试 SCP 应用程序的速度,这会比在较低层的测试要低。例如,nc 使用 L4。当然,如果你更关心SCP的速度,这很好。 (5认同)
  • 有问题:此脚本将文件写入和读取到磁盘 - 这比 RAM 慢,因此可能是人为的减慢速度。也只发送零,以防它们被压缩,这是一个很大的人为加速。如果您确实想要伪随机数据,**不要使用`/dev/random`(它可以阻塞)或`urandom`**(链接评论建议)它们也可能非常慢,而是使用 dm-crypt (请参阅 cryptsetup 的常见问题解答 [2.19 如何使用加密级随机性擦除设备?](https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions)) 可能使用 ram 中的文件。 (3认同)

jwb*_*ley 5

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

https://github.com/jwbensley/Etherate

将其作为工具(如 iPerf(非常好!))在 IP 和 TCP 或 UDP 上运行。以太网直接通过以太网/OSI 第 2 层进行测试。