Shadowrocket Hysteria2 科普:QUIC 為何快速、哪些網路環境適合使用

從 UDP 與 QUIC 的握手方式出發,說明 Hysteria2 在高丟包、高延遲連線上的運作原理,以及在 Shadowrocket 手動填寫協定時應核對的欄位。

本文速覽

本文適合已從服務商取得 Hysteria2 參數,並希望了解連線表現、完成手動設定的 Shadowrocket 使用者。重點包括 QUIC 的握手與丟包恢復機制、適用網路判斷、Add Server 欄位核對、Global Routing 搭配方式,以及連線失敗時的排查順序。

Hysteria2、UDP 與 QUIC 的關係

Shadowrocket(小火箭)中的 Hysteria2 是一種基於 QUIC 的代理協定。這裡的 UDP 是承載 QUIC 資料報的傳輸基礎,QUIC 則在使用者空間處理連線建立、加密、壅塞控制、資料確認與丟包恢復。不能把 Hysteria2 簡化為「直接傳送 UDP」:應用程式資料會先進入 Hysteria2 工作階段,再由 QUIC 組織成經過加密與編號的資料封包。

傳統的 TCP 加密連線通常要依序完成 TCP 握手與 TLS 握手。以往返延遲 RTT 為 180 ms 的連線為例,每增加一次必須等待對端回覆的往返,首批有效資料就會多等待約 180 ms。QUIC 將傳輸層連線建立與 TLS 1.3 安全協商結合,新連線通常能以較少的往返進入可傳輸狀態。實際耗時仍會受到網域名稱解析、伺服器回應、無線網路排程與連線壅塞影響,並非固定減少某個毫秒數。

QUIC 也支援多個邏輯 stream。某個資料封包遺失後,需要該封包內容的 stream 會等待重傳,但其他不依賴該遺失資料的 stream 仍可繼續推進,從而減少不同 stream 之間的隊頭阻塞。對於封裝在單一 stream 中的連續資料,遺失的位元組仍需恢復,因此「使用 QUIC」不代表完全不受丟包影響。

高延遲、高丟包時為何可能更快

速度差異主要來自壅塞控制與丟包恢復,而不是協定名稱本身。連線出現丟包時,傳送端需要判斷哪些資料未抵達、安排重傳,並調整後續傳送節奏。RTT 越高,錯誤判斷或等待確認的代價越大;連續丟包越多,可用吞吐量越容易下降。QUIC 在使用者空間維護確認範圍與丟包計時器,可以更快演進實作策略,但最終吞吐量仍受伺服器出口、裝置效能與接入網路限制。

Hysteria2 設定可能包含上行與下行頻寬值。這些數值不是測速結果,也不是越大越好。部分實作會根據是否提供頻寬參數,選擇相應的壅塞控制行為。若服務商提供明確數值,應依原值填寫;若服務商要求留白,就不應根據寬頻方案標稱值自行補填。把實際為 50 Mbps 的連線填成 500 Mbps,可能造成傳送過快、佇列膨脹、延遲升高或更多丟包。

可以用一個計算情境理解頻寬延遲積:100 Mbps 連線在 200 ms RTT 下,管線中可同時容納的資料約為 2.5 MB,也就是 100,000,000 bit/s × 0.2 s ÷ 8。傳送視窗明顯小於這個數值時,連線可能無法充分利用;傳送過快而中間佇列容量不足時,則會出現排隊與丟包。Hysteria2 的表現取決於壅塞控制能否接近目前連線的實際容量。

依原參數填寫

建議

Address、Port、Password、SNI、頻寬與驗證選項全部以既有設定為準,不自行推測缺少的值。

適合:首次新增與日常使用

保留選填欄位空白

服務商明確說明使用預設壅塞控制,或未要求填寫頻寬值時,保留相應選填欄位空白。

適合:設定說明明確標示預設值

自行提高頻寬值

填入超過實際接入能力的數值可能加重排隊,不能據此判斷協定本身是否正常。

適合:僅限可控網路中的參數驗證

結論:先確認連線瓶頸,再調整參數

若 Connectivity Test 延遲穩定,但大量資料傳輸時波動,先核對服務商提供的頻寬欄位與 UDP 可達性;不要只根據一次速度結果反覆提高 Up、Down 或含義相近的欄位。

哪些網路環境適合使用 Hysteria2

Hysteria2 常用於 RTT 較高、存在隨機丟包或網路切換較頻繁的連線。例如行動網路訊號變化、跨地區傳輸與壅塞時段,都可能讓傳統可靠傳輸承受較長的恢復等待。QUIC 能針對遺失的資料封包執行恢復,也能在網路條件允許時維持多個 stream 推進,因此在這類環境中,更容易觀察到連線建立與持續傳輸方面的差異。

低延遲、低丟包且路徑穩定時,各協定的瓶頸可能都落在伺服器出口或接入頻寬,此時 Hysteria2 不一定會帶來明顯速度差異。若目前網路限制 UDP,QUIC 握手可能直接逾時,而使用其他傳輸方式的既有設定仍可連線。選擇協定應以可達性與參數相符為優先,不能只看理論吞吐量。

觀察現象 可能含義 建議作法
RTT 150–250 ms,偶發 1%–3% 丟包 長距離或無線連線存在波動 依原參數測試 Hysteria2,並記錄多次 Connectivity Test 結果
延遲穩定,但傳輸時明顯升高 佇列壅塞或頻寬值設定過高 恢復服務商提供的 Up、Down 數值,避免依標稱頻寬放大
始終顯示 timeout UDP 無法連通、Port 錯誤或握手欄位不相符 更換已知允許 UDP 的網路重新測試,再核對 Port、SNI 與 Password
連線後只有部分網域異常 可能是規則或 DNS 路徑問題 檢查 Global Routing,並以 Proxy 模式進行短時間對照

結論:出現 timeout 先檢查 UDP 可達性

同一組參數在一個網路可連線,換到另一個網路卻持續 timeout 時,優先檢查目前網路對 UDP 與目標 Port 的可達性;若所有網路都失敗,再回頭核對欄位。

在 Shadowrocket 手動填寫 Hysteria2

開始前應準備服務商提供的完整參數。通常至少包含伺服器 Address、Port 與驗證資訊,TLS 情境也可能包含 SNI。部分設定會額外指定 ALPN、混淆密碼、上行或下行頻寬,以及憑證驗證相關選項。欄位名稱會隨介面呈現與設定方式有所差異,但參數含義不能互換。

以 Port 443 為例,這只是常見的連接埠範例,不代表所有 Hysteria2 服務都使用 443。Address 應填寫主機名稱或 IP,Port 必須與伺服器監聽值一致;Password 是 Hysteria2 驗證值,不是 Shadowrocket 的購買憑證;SNI 用於 TLS 握手中的伺服器名稱驗證,通常應保留服務商提供的網域。

  1. 核對應用程式

    透過 App Store 取得 Shadowrocket,核對開發者 Shadow Launch Technology Limited 與應用程式 ID 932747118。此應用程式為一次買斷,系統要求以 App Store 頁面標示為準。

  2. 進入新增頁面

    在 Home 點選右上角「+」,開啟 Add Server,並在 Type 中選擇 Hysteria2。

  3. 填寫連線欄位

    依序填寫 Address、Port、Password 與 SNI;ALPN、Obfuscation、Up、Down 等選填項目僅在既有設定明確提供時填寫。

  4. 檢查驗證項目

    憑證驗證相關開關應遵循既有設定。正常憑證情境應保持驗證,不能為了繞過欄位錯誤而任意改變驗證狀態。

  5. 儲存並選取

    儲存後回到 Home,點選新建的伺服器項目,確認選取標記出現在該項目前方。

  6. 執行連線測試

    開啟連線開關並完成系統 VPN 設定授權,再執行 Connectivity Test;若失敗,記錄 timeout、TLS 或 authentication 等提示類別。

若服務商提供的是單條 Hysteria2 URI,可以先核對 URI 結構,再使用 Shadowrocket 支援的匯入入口。以下僅展示虛構值語法,不能用於實際連線。URI 中的驗證值、主機名稱、Port、查詢參數與名稱片段分別承擔不同作用,包含特殊字元的 Password 還需要正確進行 URL 編碼。

hysteria2://[email protected]:443/?sni=edge.example.com&insecure=0#HY2-demo

已有訂閱時,可在 Home 右上角「+」進入 Add Server,將 Type 設為 Subscribe,再填寫訂閱 URL。範例虛構值為 https://example.com/sub?token=xxxx。儲存後回到 Home 下拉更新。訂閱更新會覆寫或重建由該訂閱管理的項目,因此需要修改參數時,應先確認服務商是否要求在訂閱來源中變更,而不是長期手動修改自動產生的伺服器紀錄。

Global Routing 與 On Demand 如何搭配

Hysteria2 決定用戶端與伺服器之間如何建立傳輸工作階段,Global Routing 則決定哪些要求交由該工作階段處理,兩者屬於不同層級。在 Home 中選取 Hysteria2 項目後,若 Global Routing 處於 Direct,流量仍會以直連狀態處理;看到伺服器已選取,並不能單獨證明要求已經透過該連線傳送。

Config 狀態會依目前設定檔中的規則匹配流量。常見規則關鍵字包括 DOMAIN-SUFFIX、GEOIP、IP-CIDR 與 FINAL。規則通常由上至下匹配,先命中的規則先決定動作,FINAL 用於承接先前未匹配的要求。Proxy 可作為排查規則問題的臨時對照,Direct 則可用於確認異常是否與代理路徑有關,Scene 會依場景條件切換預設行為。

DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
IP-CIDR,192.0.2.0/24,PROXY,no-resolve
FINAL,PROXY

On Demand 用於依條件觸發連線。操作路徑為 Settings → On Demand → Enable,接著依自己的網路條件設定觸發規則。首次排查 Hysteria2 時應先保持流程簡單:手動選取伺服器、手動開啟連線並完成 Connectivity Test;確認基礎連線正常後,再啟用 On Demand。否則,觸發條件、系統 VPN 狀態與協定參數會同時影響結果,難以定位故障來源。

規則語法範例中的 example.com192.0.2.0/24 都僅供說明。實際 Config 應使用使用者自行維護或既有設定提供的規則。修改前保留原設定,修改後分別測試命中 Proxy、Direct 與 FINAL 的要求,避免只檢查一個網頁就判斷整套規則有效。

連線逾時、握手失敗與速度波動的排查順序

排查應從最容易確認的條件開始。先確認裝置時間設為自動,再核對 Address 與 Port,接著檢查 Password、SNI、ALPN 與混淆參數,最後才調整頻寬與路由。裝置時間偏差可能影響 TLS 憑證有效期判斷;Address 或 Port 錯誤通常會表現為持續 timeout;Password 不一致可能表現為驗證失敗;SNI 與憑證名稱不相符則可能觸發 TLS 錯誤。

Connectivity Test 適合確認目前項目的延遲與基本連通性,但單次結果不等同於持續吞吐量。可以連續測試三到五次,記錄是否全部 timeout、是否只有第一次較慢,以及延遲是否從 80 ms 跳到 600 ms。若測試可通過但實際要求異常,再檢查 Global Routing、Config 規則與 DNS 處理,而不是繼續修改 Hysteria2 的 Password 或 Port。

一直顯示 timeout 怎麼辦?

先確認 Home 中選取的確實是剛新增的 Hysteria2 項目,再核對 Address 與 Port。接著更換已知允許 UDP 的網路重新測試;只有在特定網路失敗時,才優先判斷該網路的 UDP 可達性。

顯示 TLS 錯誤要修改什麼?

檢查裝置時間是否設為自動,並逐字核對 SNI。SNI 通常是網域而不是備註名稱;憑證驗證狀態應遵循既有設定,不能用改變驗證選項取代正確填寫。

可以連線,但速度忽快忽慢?

連續執行三到五次 Connectivity Test,觀察延遲波動;再核對 Up、Down 或相近頻寬欄位是否被自行放大。恢復服務商提供的原值後重新測試,避免同時修改多個欄位。

伺服器已選取,卻沒有生效?

檢查 Home 的連線開關與 Global Routing。若目前為 Direct,請短時間切換至 Proxy 進行對照;若 Proxy 正常而 Config 異常,回到 Config 檢查規則順序與 FINAL 動作。

訂閱更新後手動填寫的值消失?

由 Subscribe 管理的項目可能在更新時依訂閱內容重建。先在 Home 確認項目來源,再向服務商核對訂閱中的 Hysteria2 參數,不要依賴會被更新覆寫的臨時修改。

若需要區分協定問題與規則問題,可以先將 Global Routing 暫時設為 Proxy,選取目標 Hysteria2 項目並執行 Connectivity Test。基礎連線正常後再恢復 Config,逐條檢查 DOMAIN-SUFFIX、GEOIP、IP-CIDR 與 FINAL。排查完成後應恢復原有分流狀態,避免長期停留在測試用設定。

Shadowrocket 主要用於 iPhone 與 iPad;Mac、Apple TV 與 Apple Vision 的可用情況可查看 App Store 產品頁的相容性欄位,系統要求以 App Store 頁面標示為準。不同裝置的網路切換與系統 VPN 行為可能不同,但 Hysteria2 欄位核對原則一致:先確認位址與連接埠,再逐項匹配驗證與 TLS 參數,最後處理壅塞控制與規則分流。

下載 Shadowrocket