我家里有千兆网络和几个基于 Ubuntu 的盒子。出于好奇,我想检查一下这两个盒子之间的速度。
我没有遇到任何速度问题,只是我内心的极客很好奇。另外,结果可能会让我知道是否有改进的空间,或者我配置错了什么。
那么如何正确测试 Ubuntu 机器之间的网络速度呢?
答案1
我使用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
客户端可以通过隧道传输一千兆字节的dd
零nc
。
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 的速度运行。
答案2
以下命令不需要额外的包,但需要 SSH 访问:
ssh [email protected] '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 字节)的充满零的虚拟文件打印到远程服务器的标准输出,该文件通过 SSH 打印(传输)到本地服务器的标准输出,然后通过管道传输到本地/dev/null
(即忽略)。您甚至可以在执行测试时查看测试的进度。
当然不如其他工具那么精确,但我的用例是调试备份过程,我想在不安装额外软件包的情况下测试网络速度是否是问题所在。
答案3
与 Oli 对 iperf 的建议相同。只想补充几点:
- 还有支持跨平台测试的 Windows 客户端。
-t <seconds>
更改测试长度。更改同时连接的数量。例如, 同时测试 10 个连接 30 秒,并给出汇总结果以及 10 个单独的连接速度。-P <n>
iperf -c [target IP] -P 10 -t 30
- 你不需要 sudo。你可以直接在以下网址下载二进制文件:http://iperf.fr/。它应该可以工作。使用 下载它
wget
,使用 使其可执行chmod
,然后您就可以直接运行二进制文件。它运行完美。
我发现,使用默认设置时,单个连接速度波动很大。但是,使用 3 个以上的并行连接时,我的千兆字节交换机上的结果更加一致。(始终为 910-920Mbps)
答案4
如果您想在较低级别测试以太网 LAN,您可以使用 Etherate,它是一个免费的 Linux CLI 以太网测试工具:
https://github.com/jwbensley/Etherate
将其与 iPerf 等工具(非常好!)混合使用,这些工具可通过 IP 和 TCP 或 UDP 运行。Etherate 可直接通过以太网/OSI 第 2 层进行测试。