测试端
测试端是一个小程序,由你自己在与 iPhone 或 iPad 同一网络的电脑上运行。它应答 Linkalyst 自己的测试协议,两端之间的链路因此可以测量。
它不是互联网测速服务,也不是 iperf 或其他现成工具。网站或普通 TCP 服务无法应答这一协议。
哪些工具需要
- 传输测速
- throughput_peer.py · TCP 5202
- UDP 模式的延迟测试
- echo_peer.py · UDP 9999
以上是测试端的默认端口,启动时都可以更改。其他工具,以及 Ping 模式的延迟测试,都不需要测试端。
下载
每个测试端都是单个 Python 文件,只用标准库。电脑上需要 Python 3.9 或更高版本,此外无需安装任何东西。Mac 上没有 Python 时,第一次运行 python3 会提示安装 Apple 的命令行开发者工具,其中包含 Python。
throughput_peer.py 4.8 KB
用于传输测速。在单条 TCP 连接上发送或接收合成数据。
- SHA-256
- 6f3cf1a7bb8b076d8df0ddf77eb642cb8bdfc4a626e470b0231a8e2bd1d9643c
echo_peer.py 7.8 KB
用于 UDP 模式的延迟测试。回显带有其访问码的数据包。
- SHA-256
- d92e20436907a11897c9b14086360d9a4d92586c8c05250d5398e19a6bebfab4
要核对下载的文件,在 macOS 或 Linux 上运行 shasum -a 256 echo_peer.py,在 Windows 上运行 certutil -hashfile echo_peer.py SHA256,与上面的 SHA-256 比较。
两个程序均按现状提供,适用服务条款第 5 节。
运行之前
- 测试端只应在私有网络中运行。两者都以明文传输、均不加密,吞吐测试端更是没有访问码。不要把它们的端口从互联网转发进来。
- 在你指定地址之前,测试端只监听电脑本机(127.0.0.1),手机无法访问。UDP 测试端拒绝公网地址与通配地址,也只应答来自私有地址的数据包。
- 吞吐测试端只收发合成数据,不读取文件,不保存收到的内容,也不转发任何数据。
- 把测试端启动在你要测量的那个网络接口的地址上。电脑用有线连接,结果里就不会混入第二段无线链路。
运行步骤
- 01
找到电脑的地址
使用与手机处于同一网络的那个网络接口的 IP 地址。
macOS · Wi-Fi 通常是 en0ipconfig getifaddr en0Windows · 查看「IPv4 地址」ipconfigLinuxhostname -I - 02
在该地址上启动测试端
在保存文件的文件夹里打开终端。示例使用
192.168.1.20,请换成你电脑的地址。在 Windows 上,把python3换成py。传输测速python3 throughput_peer.py --host 192.168.1.20输出Listening on 192.168.1.20:5202 (single connection; 64 MiB / 60 s maximum)UDP 延迟测试python3 echo_peer.py --bind 192.168.1.20输出Linkalyst UDP echo peer: 192.168.1.20:9999 Access code: 3f9c2a61d04b7e85 Private networks only. Do not forward this port from the Internet; the access code is not encryption. Press Ctrl+C to stop. - 03
允许传入连接
如果防火墙询问是否允许 Python 接受传入连接,在私有网络上允许即可,不必关闭防火墙。
- 04
在 Linkalyst 中填写地址
传输测速:在「测试端」里填写测试端打印出的地址和端口。UDP 模式的延迟测试:添加一个 UDP 目标,填写该地址和端口,并输入 UDP 测试端打印出的 16 位访问码。
- 05
让电脑保持唤醒,用完后停止
测试期间电脑必须保持唤醒;在 Mac 上用
caffeinate -i python3 …启动测试端,可以避免空闲休眠。用完后按 Ctrl+C 停止测试端。
参数
throughput_peer.py
| --host ADDRESS | 监听的数字地址。默认 127.0.0.1,只有电脑本机能访问。 |
| --port PORT | TCP 端口。默认 5202。 |
| --once | 处理一次连接后退出。 |
echo_peer.py
| --bind ADDRESS | 监听的私有、回环或链路本地数字地址。默认 127.0.0.1。 |
| --port PORT | UDP 端口。默认 9999。 |
| --token CODE | 使用指定的 16 位访问码,而不是随机生成。 |
用 --help 运行任一文件可查看全部参数。UDP 测试端的故障注入参数(如 --drop-every)用于测试 Linkalyst 本身,会让结果失去代表性。
App 连不上测试端时
每次请求都超时,或者连接失败
确认手机和电脑在同一网络中,而且不是会隔离设备的访客网络;App 里填的地址就是测试端打印出的地址;防火墙允许 Python。
UDP 测试端退出,提示 --bind must be a numeric private/loopback/link-local address
给它一个属于这台电脑的私有 IPv4 或 IPv6 地址,用数字写。主机名、0.0.0.0 和公网地址都会被拒绝。
Address already in use
端口被另一个测试端或程序占用。停止它,或者用 --port 换一个端口启动测试端,并在 App 里填同一个端口。
UDP 测试端在运行,但收不到回复
检查访问码。测试端会忽略不带其打印出的访问码的数据包;App 只在运行期间保留访问码,App 被关闭后需要重新输入。