docs+test: VPN 测试方案(黑盒+白盒)+ 修正延迟测量方法

- docs/vpn-test-plan.md:黑盒+白盒两方向测试方案。白盒细化:链路五段拆解、
  协议/出站选择(Clash API)、接入段 vs 出海段分段 RTT、连接/流量、稳定性
  (长跑/Kill switch/GFW 三元组封锁与被动探测/热重载)。含初轮报告:cara 黑盒
  15 PASS;吞吐 国内直连 74Mbps vs 国外经隧道 ~10-17Mbps(瓶颈在出海段)。
- scripts/vpn_test.sh:修正延迟测量——经 TUN 代理时 ping/tcp_connect 被隧道本地
  应答(2-4ms 假象),改用 TLS 握手(time_appconnect)/ TTFB 作为真实 RTT。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JEHzjEcFzvGwgbxT6Wbt6c
This commit is contained in:
wangjia
2026-06-22 09:17:00 +08:00
parent 2d2baf887c
commit 8fcc4e8b75
2 changed files with 157 additions and 5 deletions
+14 -5
View File
@@ -100,12 +100,21 @@ for u in "${DOMESTIC[@]}"; do
else W "$host" "不可达(分流/DNS 异常?)"; fi
done
# ── 6. 延迟(连接握手耗时)────────────────────────────────────────────
H "6. 延迟"
for u in "https://$NODE_IP:8080" "https://www.gstatic.com/generate_204"; do
tc=$(cget -k -o /dev/null -w "%{time_connect}" "$u" 2>/dev/null)
[ -n "$tc" ] && [ "$tc" != "0.000000" ] && P "connect $u" "${tc}s" || W "connect $u" "无响应/超时"
# ── 6. 延迟(真实 RTT)────────────────────────────────────────────────
# ⚠️ 经 TUN 代理时 tcp_connect / ping 会被隧道本地应答(假的几 ms),不能当真实 RTT。
# 真实延迟看 TLS 握手(time_appconnect,必须真往返到目标)与 TTFB(time_starttransfer)。
H "6. 延迟(真实 RTT:TLS 握手 / TTFB;tcp_connect 经隧道为本地值仅供对照)"
for u in "https://www.google.com/generate_204" "https://www.gstatic.com/generate_204"; do
read -r tcp tls ttfb < <(cget -o /dev/null -w "%{time_connect} %{time_appconnect} %{time_starttransfer}" "$u" 2>/dev/null || echo "0 0 0")
host=$(echo "$u" | sed -E 's#https?://([^/]+).*#\1#')
if awk "BEGIN{exit !($tls>0)}" 2>/dev/null; then
tlsms=$(awk "BEGIN{printf \"%.0f\", $tls*1000}"); ttfbms=$(awk "BEGIN{printf \"%.0f\", $ttfb*1000}"); tcpms=$(awk "BEGIN{printf \"%.0f\", $tcp*1000}")
if [ "$tlsms" -lt 500 ] 2>/dev/null; then P "$host RTT" "TLS握手 ${tlsms}ms, TTFB ${ttfbms}ms (tcp_connect ${tcpms}ms=本地)"
elif [ "$tlsms" -lt 1000 ] 2>/dev/null; then W "$host RTT" "TLS握手 ${tlsms}ms 偏高, TTFB ${ttfbms}ms"
else F "$host RTT" "TLS握手 ${tlsms}ms 过高, TTFB ${ttfbms}ms"; fi
else F "$host RTT" "无响应/超时"; fi
done
echo " ${B}提示${N}: 真实到节点的直连 RTT 请在【VPN 全关】后 ping 节点;开着 TUN ping 是本地假象。"
# ── 7. 吞吐(下载速度)────────────────────────────────────────────────
if [ "$QUICK" = 0 ]; then