本文目录导读:

speedtest-cli 是一个基于命令行的网速测试工具,它利用 Speedtest.net 的服务器来测量你的网络下载速度、上传速度和延迟(Ping),以下是它的工作原理和测量流程:
核心流程
当你运行 speedtest-cli 时,它会依次执行以下步骤:
-
获取服务器列表
客户端首先向 Speedtest.net 的配置服务器发送请求,获取一个距离你地理位置较近的可用服务器列表。
-
测试延迟(Latency/Ping)
- 它会对列表中的服务器发送多个
ICMP或HTTP请求,计算每个服务器的响应时间(RTT,往返时间)。 - 默认会选出延迟最低的服务器作为测试目标(你也可以用
--server参数手动指定一个特定服务器)。
- 它会对列表中的服务器发送多个
-
测试下载速度
- 客户端向选中的服务器发送 HTTP GET 请求,开始下载一个大型文件(通常是随机数据)。
- 它会用 多线程 同时下载多个数据块(默认通常是 4 个线程,可通过
--parallel参数调整)。 - 在下载过程中,客户端会持续计算 单位时间内接收到的字节数(bps,比特每秒): [ 下载速度 = \frac{总接收字节数 \times 8}{总耗时 (秒)} ]
- 测试会持续 10-15 秒(或直到数据量足够稳定),最终取 平均峰值速度(不是全程平均,而是剔除波动后的稳定值)。
-
测试上传速度
- 原理与下载相反:客户端向服务器发送一个大型随机数据(4MB 的文件块)。
- 同样是多线程上传(默认也是 4 个线程)。
- 服务器记录接收到的数据,客户端根据 发送的数据量 / 时间 计算上传速率。
-
输出结果
- 最终在终端显示:延迟 (ms)、下载速度 (Mbps)、上传速度 (Mbps)。
具体测量细节
- 吞吐量(速度)单位:结果默认是 Mbps(兆比特每秒),如果你想要 MB/s(兆字节每秒),需要手动除以 8(因为 1 字节 = 8 比特)。
- 多线程并行:这是为了模拟实际网络使用(比如同时加载网页、看视频、下载文件),能更真实地反映网络负载能力,如果网络很好,但服务器限制了单线程,多线程可以测出更高的速度。
- 数据完整性:上传/下载的数据是随机生成的,不包含用户隐私,纯粹用于计量。
- 影响因素:
- CPU 性能:如果你的设备 CPU 太弱(例如老旧路由器),可能跑不满带宽,因为加密或数据传输计算跟不上。
- Wi-Fi 干扰:无线信号的衰减、信道干扰会导致结果远低于实际宽带上限。
- 服务器距离:测速服务器越远,延迟越大,理论上能跑到的最高速度也越低(因为 TCP 窗口和丢包率限制)。
一次典型测试的命令输出示例
$ speedtest-cli Retrieving speedtest.net configuration... Testing from China Telecom (你的IP)... Retrieving speedtest.net server list... Selecting best server based on ping... Hosted by 某某服务器 (城市): 12.34 ms Testing download speed........................................ Download: 85.42 Mbit/s Testing upload speed.............................................. Upload: 23.17 Mbit/s
如何优化测量准确性?
- 关闭其他网络应用:确保没有同时在下载、看视频、玩游戏。
- 使用有线连接:Wi-Fi 测试结果通常比有线低 10%-30%。
- 多次测试取平均:可以运行 3 次,去掉最高最低值,取中间值。
- 尝试不同服务器:用
--server <ID>指定一个附近的服务器,看结果是否差异大(可能你默认连接的最好服务器恰好拥堵了)。 - 测试不同时段:晚高峰(20:00-23:00)结果通常低于凌晨,这是正常的。
小结
speedtest-cli 本质上是一个 HTTP 多线程文件传输测速工具,通过模拟大量数据包的并发上传/下载,并结合服务器端的响应计时,来估算你当前网络链路的 最大可用带宽(受限于你的签约宽带上限、路由器性能、测速服务器负载以及物理距离),速度结果是一个 瞬时峰值吞吐量,并不等同于你实际日常使用中所有场景的平均速度。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。