机场测速的三个读数:延迟、丢包与吞吐量分别是什么
机场测速里的延迟、丢包、下载速度是三个不同的量:延迟是一个包来回用的时间,丢包是包在等待时限内有没有到,下载速度是单位时间搬了多少数据。客户端里的延迟测试其实是 mihomo 的健康检查,下面按 RFC 和 mihomo 文档原话逐个说明。
本文目录(7 节 · 约 4 分钟) +
- 01 往返时延:RFC 2681 怎么定义
- 02 丢包:RFC 7680 怎么定义
- 03 下载速度:RFC 6349 里的 TCP 吞吐量
- 04 客户端里的「延迟测试」测的是什么
- 05 三个数各自回答什么问题
- 06 读数之前先排除的几种情况
- 07 常见问题
机场测速给出的延迟、丢包和下载速度,是三个不同的量,不能互相代替。延迟说的是一个包来回用了多久,丢包说的是包有没有在等待时限内到达,下载速度说的是单位时间里搬了多少数据。下面按 IETF 的 RFC 原文和 mihomo 官方文档,把每个数的定义讲清楚。
往返时延:RFC 2681 怎么定义
RFC 2681《A Round-trip Delay Metric for IPPM》§2.4 的定义是:源端在 T 时刻发出一个包的第一个比特,目的端收到后立即回一个包,源端在 T+dT 时刻收到回包的末尾那个比特,这个 dT 就是往返时延。
同一节还规定了收不到回包的情况:这时往返时延是「undefined (informally, infinite)」,也就是未定义,通俗说是无穷大。客户端里看到的「超时」,可以对应到这一种情况。
所以延迟这个数只回答一件事:一个包从你这边出去、再回来,花了多长时间。它不说明这条路能同时跑多少数据。
丢包:RFC 7680 怎么定义
RFC 7680《A One-Way Loss Metric for IPPM》§2.4 定义的是单向丢包:源端发出一个包,目的端在等待阈值 Tmax 之内收到了,记 0;没收到,记 1。
注意两点。一是它是单向的,只看从源端到目的端这一程。二是「丢」与「没丢」取决于等多久,等待阈值 Tmax 是定义的一部分。
下载速度:RFC 6349 里的 TCP 吞吐量
RFC 6349《Framework for TCP Throughput Testing》§1 把可达 TCP 吞吐量定义为:TCP 处在稳定状态时,单位时间里传输的数据量。
同一份 RFC 还有两句值得记:
- 「Network providers are coming to the realization that Layer 2/3 testing is not enough to adequately ensure end-users’ satisfaction.」意思是只测带宽、时延、丢包这些二三层指标,不足以代表用户体验。
- 带宽时延积(BDP)由往返时延和瓶颈带宽算出,决定了要跑满吞吐量需要多大的收发缓冲区。延迟和吞吐量是有关系的两个量,但不是同一个量。
要说明的是,RFC 6349 的适用范围写的是「managed business-class IP networks」,也就是受管理的商业级 IP 网络。它不是机场测速标准,这里只借它的概念,不能说哪个测速是「按 RFC 6349 做的」。
客户端里的「延迟测试」测的是什么
在 Clash 系客户端里点「延迟测试」,背后是 mihomo 内核的健康检查(health-check)。mihomo 文档里,代理组的这几个字段原话如下:
| 字段 | mihomo 文档原话 |
|---|---|
| url | 「健康检查测试地址」 |
| interval | 「健康检查间隔,如不为 0 则启用定时测试,单位为秒」 |
| timeout | 「健康检查超时时间,单位为毫秒」 |
| tolerance | 「节点切换容差,单位 ms」(url-test 页) |
| lazy | 「懒惰状态,默认为 true ,未选择到当前策略组时,不进行测试」 |
| expected-status | 「健康检查时期望的 HTTP 响应状态码」,默认为 *,对响应状态不做要求 |
官方 url-test 示例里写的是 url 为 https://www.gstatic.com/generate_204、interval 为 300,tolerance 一项以注释形式给了 50。文档没有给出 timeout 的默认值,这里也不替它补。
合起来看:内核按 interval 定时向 url 发请求,在 timeout 毫秒内看请求是否成功;url-test 类型的组再结合 tolerance 自动选节点。mihomo 文档没有说这个延迟等于 ping,也没有说它等于下载速度。
三个数各自回答什么问题
| 读数 | 它回答的问题 | 它回答不了的问题 |
|---|---|---|
| 延迟(往返时延) | 一个包来回要多久;收不到回包就是超时 | 这条路一秒能搬多少数据 |
| 丢包 | 包在等待时限内有没有到 | 到了的包花了多长时间 |
| 下载速度(吞吐量) | 稳定状态下单位时间搬了多少数据 | 单个包的响应快不快 |
| 客户端延迟测试 | 节点此刻能不能在 timeout 内完成一次健康检查 | 等不等于 ping、等不等于下载速度 |
一分机场官方 WIKI 的科普里有一个说法,可以帮助记住前两行的区别:「延时测的是”响应有多快”,下载速度测的是”能搬运多少货”。」(机场方科普,不是标准文件。)
读数之前先排除的几种情况
- 先确认流量真的走了代理,再用站内的在线测速;没走代理时,测出来的是本地网络。
- 延迟测试一点就立刻提示超时,但网站都能正常打开:Clash Verge Rev 官方 FAQ 给的可能原因是「杀毒软件(如火绒)对 HTTPS 连接进行加密,出现证书不一致的情况报错导致」。
- 某个组一直不测:lazy 默认为 true,没选到这个组时不进行测试。
- 通过 use 引入的节点没被组的 url 检查到:mihomo 文档写明代理组的 url「只会检查代理组的 proxies 字段的代理,不会检查代理集合(proxy-providers)的代理」,代理集合要用它自己的 health-check。
- 想确认要测的那个域名到底走不走代理,可以用规则匹配查某个域名命中了哪条规则,用配置检查查语法。
本站推荐位依次是跨界云、微风网络、飞猫云、暮光加速,含合作关系。
常见问题
客户端测出的延迟就是 ping 吗?
mihomo 文档没有这么说。它的健康检查是向一个 http 或 https 测试地址发请求,并可以按 HTTP 响应状态码判断;文档没有说这个值等于 ICMP ping。
延迟低,下载为什么还慢?
因为延迟和吞吐量是两个量。RFC 6349 原话是只做二三层测试「is not enough to adequately ensure end-users’ satisfaction」;丢包还会让 TCP 降速。
延迟测试里的 timeout 默认是多少?
mihomo 文档只写了单位是毫秒,没有给代理组 timeout 的默认值。看你自己配置文件里写的数。
测速链接可以随便填吗?
Clash Verge Rev 界面会校验格式,提示原文是「Test URL must start with http:// or https://」。mihomo 文档给代理集合推荐的健康检查地址有 https://cp.cloudflare.com 和 https://www.gstatic.com/generate_204。
节点旁边的 📌 是什么意思?
Clash Verge Rev 官方 FAQ 的说法:📌 为红色表示锁定当前节点且可用,自动选择会优先用它;为灰色表示锁定了但当前不可用,下次健康检查变为可用时继续优先用它。
RFC 6349 是机场测速的标准吗?
不是。它的适用范围写的是受管理的商业级 IP 网络,这里只借用吞吐量和带宽时延积的概念。
相关文章
订阅地址打开是一大串乱码,那到底是什么
在浏览器里打开机场订阅地址,看到的往往是一长串没有换行的字符。那不是加密,是 Base64 编码的节点清单。本文说明它的结构、为什么要编码、以及三种常见的订阅返回格式怎么区分。
规则写对了却不生效?多半是顺序放错了
Clash 的规则从上往下逐条匹配、命中即停,所以一条宽泛的规则放在前面,会让它后面所有具体规则永远不执行。本文说明正确的排列顺序、GEOIP 为什么必须靠后,以及怎么验证某个域名到底命中了哪条。
Reality 是什么,它和普通 TLS 差在哪
节点链接里出现 security=reality、pbk、sid 这些参数时,说明它用的是 Reality。本文说明它借用真实网站 TLS 特征的原理、为什么不需要自己的域名和证书,以及 pbk / sid / fp 各是什么。