跳到主要內容

首頁 / 部落格 / 設定基礎

延遲測試是怎麼測的?interval、tolerance、lazy 到底該設多少

設定基礎2026-07-051831 字約 4 分鐘
延遲測試是怎麼測的?interval、tolerance、lazy 到底該設多少

節點列表上那個毫秒數是怎麼來的?為什麼它和 ping 出來的值差一大截?為什麼自動選擇老是切來切去?

這篇把測速這件事說清楚。

測的不是 ping,是一次完整的 HTTP 請求

Clash 的延遲測試流程:

一次延遲測試包含什麼建立 TCP 連接到節點伺服器完成加密握手TLS 通過節點請求目標 URL預設 gstatic.com收到 204 回應記錄總耗時
所以它測的是「通過這個節點訪問目標站點的往返時間」,不是到節點的網路距離

這和 ping 有本質區別:

pingClash 延遲測試
協議ICMPTCP + TLS + HTTP
測的路徑你 → 節點你 → 節點 → 目標站點 → 回來
包含握手
反映的是網路距離實际使用體驗

所以 Clash 顯示 180ms 而 ping 只有 60ms 是完全正常的——多出來的部分是握手開銷加上節點到目標站點的那一段。

unified-delay:讓不同協議可比

不同協議的握手開銷差別很大。Trojan(TLS)比 Shadowsocks(無 TLS)天生多一次往返,Hysteria2 基於 QUIC 又是另一套。

直接比總耗時對某些協議不公平。開啟:

unified-delay: true

核心會做兩次握手測量,扣掉協議固有的握手成本,只保留可比的部分。

三個關鍵參數

- name: "♻️ 自动选择"
  type: url-test
  proxies: [...]
  url: "http://www.gstatic.com/generate_204"
  interval: 300
  tolerance: 50
  lazy: true
  timeout: 5000
  max-failed-times: 5

interval:多久測一次

效果適合
60切換很靈敏節點品質波動劇烈;但會頻繁打擾所有節點
300平衡點日常推薦
600~900很安靜節點穩定、不想被打擾
1800+基本不動掛了半小時才發現

tolerance:最重要也最常被忽略

容差,單位毫秒。含義是:新節點必須比當前節點快這麼多,才值得切換。

tolerance 的作用tolerance 0(預設)快 1ms 就切兩個延遲接近的節點來回橫跳連接不斷被重建tolerance 50快 50ms 以上才切穩定在一個節點上推薦值
「用著用著突然斷一下」的常見原因就是沒設 tolerance

推薦值:

  • 節點延遲普遍在 100ms 以下 → tolerance: 30
  • 普遍 100~300ms → tolerance: 50
  • 波動很大 → tolerance: 100

lazy:空閒時不測

lazy: true

開啟後,如果這個策略組當前沒有流量經過,就跳過測速。

好處:省電、省流量、減少無謂的連接。筆記本和手機上尤其明顯。

代價:切回這個組時,第一次可能用的是過期資料,需要等一輪測速才准。

日常建議開啟。

timeout 與 max-failed-times

timeout: 5000            # 单次测速超时(毫秒)
max-failed-times: 5      # 连续失败多少次判定为不可用

timeout 設太短會誤判慢節點為不可用;設太長會讓一輪測速拖很久。5000ms 是合理值。

測速 URL 選什麼

預設的 http://www.gstatic.com/generate_204 有兩個特點:回傳 204 空回應(幾乎不傳資料),且部署在全球 CDN 上。

可選的替代:

URL特點
http://www.gstatic.com/generate_204預設,輕量
http://cp.cloudflare.com/generate_204Cloudflare,覆蓋廣
http://connectivitycheck.gstatic.com/generate_204同 Google 系
https://www.youtube.com/generate_204直接測 YouTube 可達性
http://connectivitycheck.platform.hicloud.com/generate_204華為的偵測點,国內可達

延遲低 ≠ 速度快

這是最需要澄清的一點。

延遲和頻寬是兩回事延遲 Latency一個請求往返多影響:網頁打開快慢、游戲手感url-test 測的是這個頻寬 Bandwidth單位時間能傳多少資料影響:下載速度、影片畫質url-test 完全測不出來
一個 30ms 但只有 5Mbps 的節點,看 4K 影片照樣卡

url-test 只測延遲。判斷一個節點能不能扛住大流量,只能實际下載點東西試試。

如果你的主要需求是看影片、下大檔案,不要完全依賴自動選擇——手動挑幾個節點實測速度,然後用 select 組固定下來。

一個實用組合:分層測速

proxy-groups:
  # 主力組:低容差、頻繁測,追求回應速度
  - name: "⚡ 快速响应"
    type: url-test
    include-all: true
    filter: "(?i)香港|HK|日本|JP"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 30
    lazy: true

  # 大流量組:高容差、少切換,避免下載中斷
  - name: "📦 大流量"
    type: fallback
    include-all: true
    filter: "(?i)IPLC|专线|高速"
    interval: 600

  # 保險組:只要能用就行
  - name: "🛡 兜底"
    type: fallback
    include-all: true
    interval: 900

為什麼大流量用 fallback 而不是 url-test:下載或看影片時最怕中途切節點,連接一斷進度就沒了。fallback 只在當前節點真的掛掉時才換,穩定性遠好於 url-test。

手動測速的正確方法

介面上點閃電圖示是對當前組做一輪測速。但要注意:

手動測速的注意事項測速期間會同時連接所有節點,短時間內網路佔用會上升結果只反映測速那一瞬間的狀態,節點品質會隨時段變化晚高峰(20:00-23:00)測出來的結果最有參考價值逾時不代表節點壞了,可能只是測速 URL 在那條線路上不通同一個節點連測三次取中位數,比只測一次可靠

通過 API 觸發測速

寫腳本自動化時有用:

# 測試單個節點
curl "http://127.0.0.1:9090/proxies/HK-01/delay?timeout=5000&url=http%3A%2F%2Fwww.gstatic.com%2Fgenerate_204" \
  -H "Authorization: Bearer 你的secret"

# 測試整個策略組
curl "http://127.0.0.1:9090/group/%E2%99%BB%EF%B8%8F%20%E8%87%AA%E5%8A%A8%E9%80%89%E6%8B%A9/delay?timeout=5000&url=..." \
  -H "Authorization: Bearer 你的secret"

策略組名含中文和 emoji 時需要 URL 編碼。

小結

  • 測的是「經過節點訪問目標站點」的完整往返,和 ping 不是一回事
  • tolerance 一定要設,50 是個好起點,不設會來回橫跳
  • interval 用 300,太短會觸發服務商風控
  • lazy 開著,省電省流量
  • unified-delay,讓不同協議的節點可比
  • 延遲不代表頻寬,大流量場景用 fallback 而不是 url-test

相關:策略組類型詳解節點命名與自動分組


相關文件