Skip to content

v0.5.3

Choose a tag to compare

@Kylin010 Kylin010 released this 10 Aug 04:26
· 3 commits to main since this release

RTT 不再探测,改用固定值

以前算缓冲区要先 ping 五个国内 DNS 测「到中国的延迟」。这一步现在去掉了,直接用 150ms。

为什么去掉:

一、测出来的值经常是错的。 那五个目标里,腾讯、百度、CNNIC 三个是 anycast —— 会命中离你最近的节点。实测一台香港机器:这三个报 1-2ms,而真正的国内线路是 138-145ms,差 70 倍

算小了之后缓冲区掉到 4MB 下限,而 4MB 正好是 Linux 的出厂值 —— 等于调了个寂寞,脚本还会打印一份看起来完全正常的推导过程。实测一台 2G 口的机器因此被摁在 100-220 Mbps。

二、有些机器根本测不了。 精简系统镜像不带 ping,有些机房挡 ICMP。这两种情况都会让脚本停在「无法确定 RTT,请用 --rtt 指定」—— 而向导里根本没地方填这个参数。

三、「到中国的延迟」本来就不是一个数。 同一台机器同一时刻实测:移动 55ms、联通 93ms、电信 138ms、上海电信 145ms,差 2.6 倍,晚高峰还要再拉开。测出来的只是这个分布里随机的一个点。

为什么是 150

缓冲区取 2 倍 BDP,所以填 150 能全速覆盖到 300ms 以内的路径。大陆用户的场景全在里面:

线路 延迟 覆盖
香港/新加坡优化线 40-70ms
香港普通线 145ms
美西 160-180ms
欧洲 / 美东 230-250ms
晚高峰拥塞 300ms

再往上没有收益:小内存机器会先被内存上限接住(512MB 封顶 16MB),填 150 还是 300 结果一样;大机器上则要多付代价 —— 实测缓冲区超配到 215 倍时,吞吐反而掉 22%。

知道自己真实延迟的,可以自己填

tcpfit tune --role proxy --bw 500 --rtt 250

比如你的机器在欧洲、用户在国内,实测 250ms,填进去比默认更准。这个参数以前没有校验(填错会掉进那条误导性报错),现在会明确提示。

顺带

tune 从此不再需要 ping 命令。

升级

菜单 8,或者:

tcpfit update

安装

bash <(curl -fsSL https://raw.githubusercontent.com/Kylin010/tcpfit/main/tcpfit.sh)

校验

6c86b31c3d937736bb4d919b04b732013cbb2da958d97841b34cd663fd2a6b35  tcpfit.sh
8a521bcc2f89c336fba239d7b722cede8638ac9df06b28eb8be1536a22fd5085  install.sh