v0.5.3
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