Hysteria2とは?QUICがパケットロスの多いネットワークで速い理由と適した用途

Hysteria2のQUIC/UDP通信と輻輳制御を解説。パケットロスや高遅延時の特性、UDPが制限されたネットワークでの問題も紹介します。

この記事の要点

Hysteria2はQUICをベースとし、UDPで通信します。高遅延やランダムなパケットロスがある一部の回線では、スループットが向上する可能性があります。ただし、UDPに到達できること、帯域幅の設定が適切であること、サーバーに十分な余力があることが前提です。本記事では、利用中のサービスとサブスクリプションがあり、ShadowrocketでHysteria2を使う方向けに、仕組みや適した環境、接続確認、トラブルの切り分けを解説します。プロトコル名だけで速度が保証されるわけではありません。

Hysteria2・QUIC・UDPの役割

Shadowrocketでは、Hysteria2は選択可能な接続プロトコルの一つです。基盤となる通信にはQUICを使い、QUICは通常UDPでデータを送信します。そのため、接続先のWebサイトがHTTPSでも、デバイスからHysteria2サーバーまでの通信がTCPとは限りません。トラブルの切り分けでは、プロキシ通信と接続先Webサイトへの通信を区別しましょう。

UDP自体には、データを順序どおりに届けたり再送したりする仕組みはありません。QUICはUDP上で暗号化ハンドシェイク、信頼性のあるストリーム、パケットロスからの復旧、フロー制御を実現します。Hysteria2はこれらの機能を使ってプロキシ通信を行い、独自の認証、転送、輻輳制御も組み合わせています。「UDPは再送しないから速い」とだけ捉えるのは正確ではありません。

UDP
デバイスからHysteria2サーバーまでの通信方式
TLS 1.3
QUICで使用される暗号化ハンドシェイク
443/UDP
利用可能なサーバー待受ポートの例。固定ポートではありません

ポート番号は自分のサーバー情報に合わせてください。たとえばサーバーが443/UDPに設定されている場合、そのUDPポートに到達できる必要があります。443/TCPへの接続を確認できても、Hysteria2が動作する証明にはなりません。ポート番号が同じでもプロトコルは異なります。通常のHTTPSサーバーをHysteria2サーバーとしてそのまま使うことはできません。

パケットロスの多い環境で速くなる可能性がある理由:まずロスの原因を見分ける

従来型のパケットロスベースの輻輳制御では、パケットロスをネットワーク混雑の兆候とみなし、キューへの負荷を下げるために送信速度を抑えます。しかし、無線干渉や回線品質の変動によるランダムなパケットロスは、帯域を使い切ったことを必ずしも意味しません。往復遅延の大きい回線では、速度を下げた後に少しずつ戻すため、利用可能な帯域を十分に使えない状態が長く続くことがあります。

Hysteria2の帯域幅設定と輻輳制御の選択は、通信の特性に影響します。帯域幅の推定に基づくBrutalモードでは、パケットロスのたびに従来方式で単純に送信量を抑えるのではなく、設定帯域とパケットロスの状況を踏まえて送信します。ランダムなパケットロスが発生する一部の回線ではスループットの改善が期待できますが、物理的な帯域が増えるわけではありません。実際の制御方式はクライアントの実装、パラメータ、サーバー設定にも左右されます。

判断のポイント:まずUDPへの到達性を確認し、負荷時の遅延を観察

接続は確立できるものの、大きなファイルの転送開始直後にWebページの表示が明らかに遅くなる場合は、帯域幅の設定を下げて再テストしてください。ハンドシェイク自体が完了しない場合は、帯域幅の値をさらに上げるのではなく、まずUDPへの到達性を確認します。

QUICのマルチストリーム機能は、信頼性のある複数のストリーム間で発生するトランスポート層のヘッドオブラインブロッキングを軽減できます。あるストリームでデータが欠けても、ほかのストリームが同じTCPバイトストリームの復旧を待つ必要はありません。ただし、各ストリームは経路と輻輳状態を共有します。そのため、すべてのWebページが速くなる、高遅延が解消されるとは限りません。

試す価値のあるネットワークと、先に確認すべき状況

プロトコルは現在のネットワーク環境に合わせて選びましょう。サーバーの場所、テスト対象、時間帯、Global Routingの設定を揃えたうえで、接続成功率と継続的な通信の状態を確認してください。場所の異なるサーバーでHysteria2と別のプロトコルを比較し、結果の差をすべてQUICの効果と判断することはできません。

ネットワーク環境想定される状態まず確認すること
高遅延かつランダムなパケットロスがある継続的な通信で帯域をより有効に使える可能性があるUDPへの到達性を確認し、アイドル時と負荷時の遅延を記録する
安定していてパケットロスの少ないWi-Fi明確な効果が得られるとは限らない同じ接続先で読み込み時間と安定性を比較する
UDPが制限されているネットワークハンドシェイクがタイムアウトする、または接続が頻繁に切れるWi-Fiとモバイル通信を切り替えて比較する
ほかのタスクで上り帯域を使い切っているリクエストの送信が遅くなり、操作も重くなるバックグラウンドのアップロードを停止して、同じテストを行う

モバイル通信で発生する不安定さは、基地局の混雑や電波状況の変化が原因の場合もあります。一度の速度測定だけでは、プロトコルの優位性は判断できません。条件を近づけて3回繰り返し、接続の成否、ページが最後まで読み込まれるか、大容量データの転送が継続するかをそれぞれ記録してください。実際の数値は個々の回線で測定する必要があるため、本記事では一律の改善率を示しません。

ShadowrocketでHysteria2の接続を確認する

以下の手順は、利用中のサービスとサブスクリプションがあることを前提としています。提供元から案内されたパラメータ一式、またはインポート済みの項目を使い、テスト中にサーバーアドレス、認証情報、帯域幅を同時に変更しないでください。HysteriaとHysteria2は、名前を書き換えるだけで相互に切り替えられません。設定項目がHysteria2に対応していることを確認してください。

  1. 設定項目を確認する

    Homeを開き、登録済みサーバー項目の編集画面でTypeがHysteria2になっていることを確認します。自分の設定情報と照らし合わせてサーバーアドレス、ポート、認証情報を確認してください。SNIや難読化パラメータがある場合も、設定を一致させます。

  2. サーバーを選択する

    Homeに戻ってサーバーを選択し、選択状態を示すマークがテスト対象の項目に付いていることを確認します。サブスクリプションに複数の項目がある場合は、選択した名前を記録しておき、別の接続の結果と取り違えないようにしてください。

  3. ルーティング設定を固定する

    Home → Global Routingを開き、比較テスト中はProxyを選択して、テスト通信をプロキシ経由にします。1回のテスト中にConfigとProxyを何度も切り替えないでください。

  4. 接続を確立する

    Homeの接続スイッチをオンにします。初回はシステムの案内に従ってVPN構成の追加を許可し、その後Home → Connectivity Testを実行します。失敗した場合は、ハンドシェイク、認証、UDP経路を順に確認してください。

  5. 通信をテストする

    同じWebページを開き、継続的なデータ転送を一度行います。タイムアウトや切断の有無、負荷時の操作感の変化を記録してください。テスト後はHome → Global Routingに戻り、普段使っているConfigまたは元の設定に戻します。

Connectivity Testは接続状況を把握するための手掛かりであり、総合的なスループットテストではありません。テストが成功しても、その時点で対象の確認処理が完了したことを示すだけで、すべてのドメイン、UDP通信、大容量データ転送が利用できるとは限りません。テストは成功するのに特定のWebページが開けない場合は、ルール、DNS、接続先自体を引き続き確認してください。

Global Routingでプロトコルの問題とルールの問題を切り分ける

Hysteria2はプロキシ接続の通信方式を決め、Global Routingはリクエストの経路を決めます。両者は異なるレイヤーの機能です。ConfigにDOMAIN-SUFFIX,example.com,DIRECTがあると、一致するリクエストは直接接続されます。そのため、Hysteria2サーバーを選択中でも、そのリクエストがHysteria2を経由するとは限りません。

普段の利用:Config

おすすめ

現在の設定にあるルールに基づいて接続先のポリシーが選ばれ、DIRECT、REJECT、またはプロキシポリシーが適用されます。通信状況を判断するには、テスト対象がどのルールに一致したかを確認してください。

適した用途:ルール設定済みで、接続先ごとに経路を使い分ける普段の利用

一時的な切り分け:Proxy

通信をプロキシ経由にして、ルールによる振り分けがテストに与える影響を抑えます。Proxyでは接続でき、Configでは接続できない場合は、ルールの一致状況と選択中のポリシーを重点的に確認してください。

適した用途:プロキシ経路の一時的な確認、Configのルールによる影響の切り分け

直接接続の基準:Direct

接続先に直接接続するため、Hysteria2トンネルの性能確認には使いません。ローカルネットワークからの直接接続状況を記録し、接続先の問題を切り分ける際の参考にできます。

適した用途:ローカルネットワークから接続先に直接アクセスできるか確認する

Global RoutingにはSceneもあります。既存のScene設定に応じて動作が変わるため、プロトコルの比較テストに別のScene切り替えを加えるのは避けましょう。ルールを確認するときは、DOMAIN-SUFFIX、IP-CIDR、GEOIPの順序と、最後に適用されるFINALポリシーも確認してください。ルールの意味はルールマニュアルで確認できます。

接続タイムアウト、速度の不安定さ、帯域幅設定に関するよくある質問

同じ設定項目がモバイル通信では使えるのに、Wi-Fiではタイムアウトする

サーバーとGlobal Routingの設定は変えずに、2種類のネットワークでHome → Connectivity Testを実行してください。差が繰り返し発生する場合は、Wi-FiネットワークのUDP制限、ルーターの設定、ログイン認証の状態を優先して確認します。この現象だけで認証情報の誤りとは判断できません。

帯域幅の値は大きいほど速くなりますか?

いいえ。帯域幅設定は通信制御に使われる値で、帯域を購入したり速度制限を解除したりするものではありません。まずフィールドの単位を確認し、MbpsとMB/sを区別してください。両者には8倍の差があります。次に、継続して利用できる容量を基準に控えめに設定し、毎回一方向だけ変更して、負荷時の遅延や切断の有無を確認します。

ネットワークを切り替えると接続できず、接続をオフ・オンすると復旧する

まずHomeで接続スイッチをオフにしてからオンにし、Connectivity Testを再実行してください。QUICには接続移行に関する機能がありますが、実際に復旧するかどうかは実装、ネットワークアドレスの変化、タイムアウトの影響を受けます。続いてSettings → On Demandが有効か確認してください。On Demandはオンデマンド接続を管理する機能であり、制限されたUDP経路を利用可能にするものではありません。

証明書エラーが出た場合、検証をスキップできますか?

まずデバイスの時刻、サーバーのドメイン名、SNI、サーバー証明書が一致しているか確認し、自分の設定の提供元にも問い合わせてください。証明書検証をスキップすると本人確認が弱まるため、通常の高速化や修復手順として使うべきではありません。証明書エラーと輻輳制御は別の問題です。

原因を特定できない場合は、「使用中のネットワーク、Type、サーバーポート、Global Routingの設定、接続確立時と継続的な通信時のどちらで失敗したか」を整理してください。トラブル記録を共有する前に、パスワード、サブスクリプションのtoken、サブスクリプションURL全体を削除し、再現に必要な現象だけを残します。

App Storeでダウンロード