在局域网搭建iPerf3内部测速环境

这篇文章主要来简单写写局域网里怎么测速,比如日常换了个新路由想要测试一下无线性能和覆盖之类的情况,又或者组了一台NAS想测试网络传输是否达标等等。

外网测速这一块,市面上的各类软件已经是数不清了,最有名的应该就是 Ookla 出的 Speedtest 了,各种平台都有对应客户端,使用起来极其方便,结果输出简单直接。

但局域网这一块就相对来说麻烦一点了,尤其是服务器端的搭建,本文说说测速工具之一的 iperf 的配置。

实际对于有线连接,Windows 系统自带的 SMB 共享就是最简单的测速工具,也是最可靠的,能直接反应实际应用中的传输速度。找两台 pc,一台开共享,另一台直接拷贝个文件过去就能测出来有线传输的速度,一般来说内网千兆能实际跑到 980Mbps 左右,如下图:

有群晖这类 NAS 的话,也是一样的,直接拷文件,看速度就行。

注意此方法仅限于收发双方都是有线连接的情况,如果是无线连接的情况,那要考虑各种损耗因素。


特别提示:安卓和 iOS 系统,不要和 windows 之间用 SMB 传文件来当做测速!

SMB 在非 windows 平台上有很大的效率问题,不同的 app 里能跑出来的速度都不一样,毫无参考性。比如说 nPlayer 这款很有名的播放器,不管是 iOS 还是安卓,我测试下来都只能最高跑到 60M/s 出头的速度,但 iperf 测试会发现实际带宽远不止这点。


当然了,有人可能会觉得这种测试方法太 low 了,想用高级一点的软件,这就是本文要说的内容了,主要来说一下 iperf3 这个软件的使用。

iperf 是一个有很多年历史的网络测试工具了,目前最新版本是 iperf3。

官网:https://iperf.fr/iperf-download.php 国内访问速度不好,可能需要科学上网。

各种系统平台全都支持,包括几大主流的 Linux 发行版。


一、在群晖NAS配置服务端的教程

1、在群辉docker注册表中直接搜索iperf3;

image.png

 

2、找个星星最多的下载即可,如第一个;

 

3、下载后打开映像,启动刚刚下载的docker容器,点击高级设置;

image.png

 

4、将本地端口配置为5201;

image.png

 

5、设置环境,填写命令-s(设置为服务端);

image.png

 

6、之后不需要设置任何参数,一直下一步即可。

 

二、在Linux系统配置iperf3的教程

1、Linux 这边,一般情况下系统默认源里就会带有 iperf3,这里以 Debian 系统作为例子,要安装的话只需要一句:

apt install iperf3

 

2、然后 iperf3 就装好了,安装之后,可以任意选择要作为服务器端还是客户端,一般作为服务器端的话,则运行:

iperf3 -s

程序会自动监听默认的 5201 端口,防火墙注意也要放行此端口,这样服务器端就准备好了。

-s 表示运行在服务器模式下,还可以用-p 指定监听其他端口,-D 参数则可以后台运行。比如想自定义监听 8888 端口,并且后台运行,则命令如下:

iperf3 -s -p 8888 -D

 

3、iperf 还有很多可以额外指定的参数,以下是具体的参数,具体请参考网上资料,就不过多解释了。

用法: iperf [-s|-c host] [options]

iperf [-h|--help] [-v|--version]

iPerf 工作模式和参数

如前文所述,iPerf 的工作时需要指定 Server 模式或 Client 模式,通过不同的参数来区别(-s 和-c)。iPerf3 所支持的功能也都通过设置不同的参数来实现。iPerf 的参数分为 3 类:通用参数,Server 端参数,Client 端参数。通用参数为 Server 端和 Client 端都可以使用的参数。以下是 iPerf 3.1.2 支持的所有参数:
  • 通用参数:
    • -p, --port #,Server 端监听、Client 端连接的端口号;
    • -f, --format [kmgKMG],报告中所用的数据单位,Kbits, Mbits, KBytes, Mbytes;
    • -i, --interval #,每次报告的间隔,单位为秒;
    • -F, --file name,测试所用文件的文件名。如果使用在 Client 端,发送该文件用作测试;如果使用在 Server 端,则是将数据写入该文件,而不是丢弃;
    • -A, --affinity n/n,m,设置 CPU 亲和力;
    • -B, --bind ,绑定指定的网卡接口;
    • -V, --verbose,运行时输出更多细节;
    • -J, --json,运行时以 JSON 格式输出结果;
    • --logfile f,输出到文件;
    • -d, --debug,以 debug 模式输出结果;
    • -v, --version,显示版本信息并退出;
    • -h, --help,显示帮助信息并退出。
  • Server 端参数:
    • -s, --server,以 Server 模式运行;
    • -D, --daemon,在后台以守护进程运行;
    • -I, --pidfile file,指定 pid 文件;
    • -1, --one-off,只接受 1 次来自 Client 端的测试,然后退出。
  • Client 端参数
    • -c, --client ,以 Client 模式运行,并指定 Server 端的地址;
    • -u, --udp,以 UDP 协议进行测试;
    • -b, --bandwidth #[KMG][/#],限制测试带宽。UDP 默认为 1Mbit/秒,TCP 默认无限制;
    • -t, --time #,以时间为测试结束条件进行测试,默认为 10 秒;
    • -n, --bytes #[KMG],以数据传输大小为测试结束条件进行测试;
    • -k, --blockcount #[KMG],以传输数据包数量为测试结束条件进行测试;
    • -l, --len #[KMG],读写缓冲区的长度,TCP 默认为 128K,UDP 默认为 8K;
    • --cport ,指定 Client 端运行所使用的 TCP 或 UDP 端口,默认为临时端口;
    • -P, --parallel #,测试数据流并发数量;
    • -R, --reverse,反向模式运行(Server 端发送,Client 端接收);
    • -w, --window #[KMG],设置套接字缓冲区大小,TCP 模式下为窗口大小;
    • -C, --congestion ,设置 TCP 拥塞控制算法(仅支持 Linux 和 FreeBSD );
    • -M, --set-mss #,设置 TCP/SCTP 最大分段长度(MSS,MTU 减 40 字节);
    • -N, --no-delay,设置 TCP/SCTP no delay,屏蔽 Nagle 算法;
    • -4, --version4,仅使用 IPv4;
    • -6, --version6,仅使用 IPv6;
    • -S, --tos N,设置 IP 服务类型(TOS,Type Of Service);
    • -L, --flowlabel N,设置 IPv6 流标签(仅支持 Linux);
    • -Z, --zerocopy,使用 “zero copy”(零拷贝)方法发送数据;
    • -O, --omit N,忽略前 n 秒的测试;
    • -T, --title str,设置每行测试结果的前缀;
    • --get-server-output,从 Server 端获取测试结果;
    • --udp-counters-64bit,在 UDP 测试包中使用 64 位计数器(防止计数器溢出)。

 

4、如果有 Docker 的,还能用 Docker 运行,只需要一句命令,即可自动拉取镜像并运行,傻瓜式完成服务器端搭建:

docker run --restart=unless-stopped --name=iperf3 -d -p 5201:5201/tcp -p 5201:5201/udp mlabbe/iperf3

 

三、在Windows系统配置iperf3的教程

1、Windows 系统这边的服务器搭建是一样的的办法,先去下载对应的版本,这年头一般也就是直接选 64 位最新版的 3.1.3 了。

 

2、下载后解压,进入文件夹后会发现只有这俩文件:

 

3、不要点 exe 运行(实际点了也不会有任何效果),而是在程序文件所在的文件夹空白处,按住键盘的 shift 键,同时单击鼠标右键,选择在此处打开 PowerShell 窗口,也就是命令行窗口,要注意的是由于 PowerShell 的安全限制,命令前面要加上.\,也就是变成:

.\iperf3 -s

后面跟的附加参数之类都是一样的用法,不再赘述。不过个人感觉是 windows 主机作为服务端效率似乎不高,更推荐 linux 作为服务端。

 


四、配置iperf3客户端

1、搭完了服务端,最后就是用客户端来测速了,先到iperf3的官网下载宽带测速软件:https://iperf.fr/iperf-download.php

2、然后运行客户端输入测速指令:

iperf3 -c 192.168.2.165

IP 地址换成自己服务器端的,PowerShell 里运行的话记得前面加.\,然后就可以看到测速结果了,如下图:

 

默认是客户端发送,服务器端接收。也可以反过来,让服务器端发送,客户端接收,那就是后面跟随-R 参数,注意 R 要大写:

iperf3 -c 192.168.2.165 -R

 

默认单线程压力可能会不够,可以加-P 参数指定多线程,注意是大写的 P,一般可以设定 5-10 线程:

iperf3 -c 192.168.2.165 -P 5

 

客户端默认只会显示发送的成绩,接收的成绩在服务器端那边显示,显然看起来不方便,于是还可以跟随--get-server-output参数,让客户端显示服务器端的信息:

iperf3 -c 192.168.2.165 --get-server-output

 

效果如下图,第二段的 Server output 部分就是服务器端的接收信息:


最后再来说一下无线速率测试,也就是移动端 app 的使用,支持 iperf 的 app 有很多,我个人一般使用的是 he.net - Network Tools 这一款软件,安卓和 IOS 平台都支持,官网为 http://networktools.he.net/

实际这是一个测试网络的综合型工具,里头各种功能都有,iperf 只不过是其中一项。软件的用法也很简单,菜单列表里直接选择 iperf3。

秒表图表是设定数据汇报时间,也就是每隔 N 秒显示一次速率数据。

第二个芯片图标是设定测试数据包大小,单位可以是 K 或者 M,10G 数据包就可以直接填 10240M。

最后输入服务器端的 ip 即可进行测试:

 

特别要注意的是无线网络的速率是会有损耗的,不是握手显示多少速率就能跑多少。比如上图是两个手机不同的握手速率,分别为 433Mbps 和 1733Mbps,并不代表就能跑到这么高的速率。

实际能跑到的峰值速度一般是 WiFi 握手速率的 70% 左右,也就是手机单天线 433Mbps 实际能跑到 300Mbps 就算是到顶了,双天线 866Mbps 一般是 600Mbps 就封顶了。

最后还要说的是测速一概仅供参考,不要盲目迷信测速结果,认为测速成绩没跑满就是设备或路由有问题。

点赞

发表回复