传输测速 · UDP 延迟测试

测试端

测试端是一个小程序,由你自己在与 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 测试端拒绝公网地址与通配地址,也只应答来自私有地址的数据包。
  • 吞吐测试端只收发合成数据,不读取文件,不保存收到的内容,也不转发任何数据。
  • 把测试端启动在你要测量的那个网络接口的地址上。电脑用有线连接,结果里就不会混入第二段无线链路。

运行步骤

  1. 01

    找到电脑的地址

    使用与手机处于同一网络的那个网络接口的 IP 地址。

    macOS · Wi-Fi 通常是 en0
    ipconfig getifaddr en0
    Windows · 查看「IPv4 地址」
    ipconfig
    Linux
    hostname -I
  2. 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.
  3. 03

    允许传入连接

    如果防火墙询问是否允许 Python 接受传入连接,在私有网络上允许即可,不必关闭防火墙。

  4. 04

    在 Linkalyst 中填写地址

    传输测速:在「测试端」里填写测试端打印出的地址和端口。UDP 模式的延迟测试:添加一个 UDP 目标,填写该地址和端口,并输入 UDP 测试端打印出的 16 位访问码。

  5. 05

    让电脑保持唤醒,用完后停止

    测试期间电脑必须保持唤醒;在 Mac 上用 caffeinate -i python3 … 启动测试端,可以避免空闲休眠。用完后按 Ctrl+C 停止测试端。

参数

throughput_peer.py

--host ADDRESS监听的数字地址。默认 127.0.0.1,只有电脑本机能访问。
--port PORTTCP 端口。默认 5202。
--once处理一次连接后退出。

echo_peer.py

--bind ADDRESS监听的私有、回环或链路本地数字地址。默认 127.0.0.1。
--port PORTUDP 端口。默认 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 被关闭后需要重新输入。