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)
并通过零客户端可以管技嘉dd过nc隧道。
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 运行。
小智 26
与 Oli 对 iperf 的推荐相同。只想补充几点:
-t <seconds>改变测试长度。更改同时连接的数量。例如, 一起测试 10 个连接 30 秒,并给出汇总结果以及 10 个单独的连接速度。-P <n>iperf -c [target IP] -P 10 -t 30wget,使用 使其可执行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(即忽略)。您甚至可以在执行测试时查看测试进度。
当然不如其他工具精确,但我的用例是调试备份过程,我想在不安装其他软件包的情况下测试网络速度是否是问题。
使用此脚本,您可以轻松测试您的机器和某个远程主机之间的连接速度。使用示例:
$ scp-speed-test.sh user@remote_host 80000
Run Code Online (Sandbox Code Playgroud)
user@remote_host 是您的目标主机(您必须对这台主机具有 ssh 访问权限)80000是将被远程主机接收的测试文件的大致大小(以 kbs 为单位)。这不是强制性的论点。如果您想在较低级别测试您的以太网 LAN,您可以使用 Etherate,它是一个免费的 Linux CLI 以太网测试工具:
https://github.com/jwbensley/Etherate
将其作为工具(如 iPerf(非常好!))在 IP 和 TCP 或 UDP 上运行。以太网直接通过以太网/OSI 第 2 层进行测试。