20毫秒,不等于每秒能下多少文件
一次ping反映小包往返的等待时间,下载速度反映一段时间内传了多少数据。一个响应快但持续传输受限的目标,完全可能表现为“延迟低、下载慢”。
先写下你看到的20ms来自哪里:客户端显示的节点、某个测速地址,还是实际下载服务器?如果目标不同,这两个数字还不能放在一起下结论。
把三个问题分别记录
| 想知道的事 | 应该观察什么 | 不能直接推出什么 |
|---|---|---|
| 请求回应是否快 | 同目标等待时间或相应阶段耗时 | 所有文件都能高速下载 |
| 首次内容什么时候来 | 首字节时间及连接条件 | 之后整个文件的持续速度 |
| 文件传输是否快 | 体积、耗时与平均吞吐 | 其他网站或高峰时段也相同 |
以下例子是假设:A路径首包很快,但下载1,000MB用了1,000秒;B路径首包略慢,下载同一文件用了100秒。前者平均约1MB/s,后者约10MB/s。只按首包选“快的”,就会忽略你真正要完成的下载。
Linux用户可以先看一次请求的各阶段
先对你确认允许访问的普通小文件做有限请求。下面用本站的小脚本文件演示字段,不用它测线路带宽:
curl --disable --connect-timeout 3 --max-time 10 --max-filesize 2097152 \
--output /dev/null --silent --show-error \
--write-out 'dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} first=%{time_starttransfer} total=%{time_total} bytes=%{size_download}\n' \
https://netgoeasy.com/scripts/dns-check.sh
这会下载少量内容后丢弃,不运行脚本,也不修改配置。你不需要对陌生大文件进行无限下载。网络要求代理时保留相应路径;对比直连与代理前,要先确认两种方式都适用。
这些时间通常是从请求开始累计到相应阶段,不能把每一列都当成独立耗时再相加。假设一次新建的直连HTTPS请求返回如下累计秒数:
dns=0.020 connect=0.080 tls=0.200 first=0.700 total=0.710
那么连接阶段约0.080-0.020=0.060秒,TLS约0.200-0.080=0.120秒,TLS之后到首字节约0.700-0.200=0.500秒,首字节后约0.010秒。这组数字是假设输出,说明怎样读,不是线路成绩。
这些差值仅适用于相应阶段已完成、路径清楚的一次请求;代理、连接复用或失败时不要机械套用,更不能把TLS之后的等待全算成服务端处理时间。小文件还不足以判断长期吞吐;输出仅帮你找等待大致发生在哪一段。
怎样做对自己有用的比较?
保持同一设备、网络、目标和文件,记录时间、客户端路径、文件大小及结果。一次只更换一个条件,避免一边换节点,一边切Wi-Fi、一边换下载地址。
下载慢时还要看同网其他设备是否占用网络、目标是否限速、应用是否有自己的下载上限。没有足够样本时,把它们列为待查因素,不直接断定某家服务限速。
按结果决定下一步
- 首字节等待明显长:继续比较解析、连接、TLS或服务端等待,不先盲目加大套餐。
- 连接很快但传输持续慢:用同一文件、同一路径重复记录,再查目标和并发占用。
- 只有一个App慢:先查该App目标与设置,不把它代表全部网络。
- 只有某个时段慢:保留时段对照,不能用一次截图代表全天。
读测速结果时,先看是否使用同一目标、文件、路径和时间段,再看有没有保留失败样本。需要换算下载速度与耗时,可用Mbps与MB/s换算表。
参考资料
- curl 使用手册 · 资料日期 2026-10-22
- Cloudflare 网络延迟说明 · 资料日期 2026-10-22