VMess・VLESS・Trojan・Shadowsocksの違いとは?プロトコルの特徴と用途を比較

代表的な4種類のプロキシプロトコルについて、暗号化方式、伝送方式、ハンドシェイクの負荷、クライアント対応を比較し、v2rayNとv2rayNGで適した用途を解説します。

この記事の概要

この記事は、サブスクリプションのノード名を確認したり、サーバーを手動追加したり、プロトコルの互換性を調べたりしている方に適しています。プロキシプロトコル、伝送方式、セキュリティ層の違いを整理し、VMess、VLESS、Trojan、Shadowsocksの設定確認の順番、同一環境でのテスト結果、クライアントの選び方を解説します。

まずプロトコル・伝送方式・セキュリティ層を区別する

ノード名には、VLESS、TCP、WebSocket、gRPC、TLS、Realityなどの用語が同時に表示されることがあります。しかし、これらは同じ層の要素ではありません。VLESSはプロキシプロトコル、TCP・WebSocket・gRPCはデータを運ぶ伝送方式、TLSとRealityは接続の安全性やサーバー認証を担います。プロトコル名だけで速度、安定性、利用可否を直接判断することはできません。

VMess、VLESS、Trojan、Shadowsocksは、クライアントがどのように認証し、プロキシリクエストをカプセル化し、データを下位の接続へ渡すかを主に定めます。実際の通信経路は、名前解決、サーバー負荷、往復遅延、パケットロス、輻輳制御、伝送方式の組み合わせにも左右されます。同じプロトコルでも回線が違えば、結果が数倍変わることがあります。

たとえば「VLESS + TCP + TLS」と「VLESS + gRPC + TLS」は同じプロキシプロトコルを使いますが、接続確立の手順とデータのフレーム分割方式が異なります。一方、「VMess + WebSocket + TLS」と「VLESS + WebSocket + TLS」は伝送方式とセキュリティ層を共有し、認証とプロトコルのカプセル化部分だけが異なります。

4種類
この記事で比較するプロキシプロトコル
443
TLSでよく使われるポート
10808
一般的なローカル混合プロキシポート
120秒
VMessの時刻ずれ確認範囲

4種類のプロトコルの主な違い

VMessには独自のユーザー認証とデータ暗号化の設計があります。現在の設定では通常AEAD認証を使用し、古い設定にあるalterIdは一般的な用途から徐々に外れています。インポート時には通常、alterIdが0になっていることを確認します。VMessの認証は時刻に依存するため、クライアントのシステム時刻が大きくずれていると、サーバーへ接続できても認証だけが失敗し続けることがあります。

VLESSは比較的軽量な認証とカプセル化方式を採用し、単体では完全なデータ暗号化を担いません。通常はTLSまたはRealityと組み合わせて使用します。VLESSの利点はプロトコル層が簡潔で、Xrayコアの特定のフロー制御機能にも対応できることです。ノードにflowが設定されている場合は、クライアントへそのままインポートしてください。`xtls-rprx-vision`を不用意に削除すると、接続できなくなることがあります。

Trojanはパスワードで認証し、TLS接続内でプロキシデータを転送します。設定では通常、サーバーのドメイン、ポート、パスワード、SNI、証明書検証を確認します。接続先をIPアドレスにしてSNIを空欄にすると、証明書名の不一致が起きやすくなります。証明書検証の無効化は問題の切り分けに限って使用し、恒久的な対策にはしないでください。

Shadowsocksは比較的シンプルな構成で、サーバーアドレス、ポート、パスワード、暗号化方式から成ります。従来のAEAD方式では`aes-128-gcm`、`aes-256-gcm`、`chacha20-poly1305`がよく使われます。クライアントとサーバーのmethodは完全に一致していなければなりません。大文字・小文字、ハイフン、パスワードのいずれか一つでも違うと、ハンドシェイクに失敗します。

プロトコル 認証と暗号化の要点 一般的な組み合わせ 設定で注意する項目
VMess UUID認証。プロトコル層がデータの暗号化と認証機構を提供 TCP、WebSocket、gRPC。TLSの追加も可能 UUID、alterId、security、システム時刻
VLESS UUID認証。通常はTLSまたはRealityをセキュリティ層として使用 TCP + TLS、TCP + Reality、gRPC + TLS UUID、flow、SNI、public key、short ID
Trojan パスワード認証。TLSで暗号化された接続に依存 TCP + TLS。対応する他の伝送方式にも対応可能 password、SNI、証明書のドメイン、ALPN
Shadowsocks パスワードと指定した暗号化方式を組み合わせて使用 通常はTCPとUDP上で直接動作 method、password、ポート、UDP対応

結論:ノードの項目は一式で確認する

プロトコル名で決まるのは最初の項目群だけです。接続できるかどうかを実際に左右するのは、伝送方式とセキュリティ層の組み合わせであることが多いです。サブスクリプションをインポートしたら、まずnetwork、security、SNI、Host、path、flowを照合しましょう。システムプロキシを何度も切り替えるより効果的です。

ハンドシェイクの負荷と速度テストの見方

プロトコルのオーバーヘッドは、伝送方式の組み合わせから切り離して比較できません。VMessをWebSocketとTLSで接続する場合、TCP、TLS、HTTPアップグレード、プロトコル認証を順に完了する必要があります。VLESSを通常のTCPとTLSで接続する場合、WebSocketのアップグレードはありません。両者を単純に速度測定すると、差は伝送層とプロトコル層の両方から生じます。

以下は固定した環境での観測値です。クライアントからサーバーまでの基礎往復遅延は42ミリ秒、回線速度は100 Mbps、テストファイルは256 MBとし、各組み合わせで新規接続を20回実行して中央値を算出しました。サーバーの場所、負荷、出口は固定しています。数値は組み合わせによる違いを示すもので、すべてのノードで再現するとは限りません。

テストする組み合わせ 新規接続の中央値 平均ダウンロード速度 主な追加処理
VMess + WebSocket + TLS 121 ms 86.7 Mbps TLSとWebSocketのアップグレード
VLESS + TCP + TLS 84 ms 91.8 Mbps TLSハンドシェイク
Trojan + TCP + TLS 87 ms 90.6 Mbps TLSハンドシェイクとパスワード認証
Shadowsocks + TCP 59 ms 93.1 Mbps プロトコル認証と暗号化の初期化
42 ms
テスト回線の基礎RTT
20回
各組み合わせで新規接続を確立
6.4 Mbps
4組のダウンロード速度の最大差

結論:日常の選択ではまず回線品質を見る

このテストでは接続確立時間に62ミリ秒の差がありましたが、継続的なダウンロード速度の最大差は6.4 Mbpsにとどまりました。ウェブページの初回表示ではハンドシェイクやパケットロスの影響を感じやすく、長時間のダウンロードでは主に回線容量とサーバー負荷が制限要因になります。

自分のノードで比較する場合は、テスト前にサーバー、対象サイト、クライアントのコア、ルーティングルールを固定してください。まず実際の接続で遅延を10〜20回測定し、その後同じファイルを連続してダウンロードします。遅延を一度だけ比較したり、ノード名の横に表示された数値だけを見たりすると、DNSキャッシュや一時的な混雑をプロトコルの違いと誤認しやすくなります。

v2rayN・v2rayNG・v2flyNGの対応の違い

クライアントの画面にノードが表示されても、現在のコアがすべての項目を実行できるとは限りません。デスクトップ版のv2rayNでは通常、設定画面からコアを選択・管理できます。v2rayNGでXrayコアを使用する場合、一般的なVMess、VLESS、Trojan、Shadowsocksの設定を処理でき、対応するコアが実装するRealityやVisionの組み合わせも利用できます。

v2flyNGはv2flyコアを使用し、VMess、標準的なVLESS、Trojan、Shadowsocksの設定に適しています。サブスクリプションにXray固有のRealityパラメータや特定のflowが含まれている場合は、アプリがノード名を読み取れるかだけで判断せず、まずコアの実装を確認してください。インポート時に項目が保持されていても、起動時に「サポートされていない設定」と報告されることがあります。

  1. v2rayNで「設定」→「パラメータ設定」を開き、現在のCoreタイプとローカルリスニングポートを確認します。
  2. サーバー情報をダブルクリックし、アドレス、ポート、ユーザーIDまたはパスワードを確認します。備考名だけを見て判断しないでください。
  3. 続いて伝送方式を確認します。WebSocketではHostとpath、gRPCではserviceNameを照合してください。
  4. TLSを有効にしている場合はSNIを確認します。Realityを使用する場合はpublic key、short ID、fingerprintも照合してください。
  5. 保存後にログを確認し、実際の接続で遅延をテストします。ログに出る認証、証明書、タイムアウトの情報は、1回だけの速度測定値より問題の特定に役立ちます。
クライアント 一般的な4プロトコル 追加確認が必要な設定
v2rayN 現在選択しているコアで処理可能 Coreタイプ、Reality、flow、伝送項目
v2rayNG Xrayコア使用時は一般的な設定に対応 アプリのバージョン、Realityパラメータ、VPNサービスの権限
v2flyNG v2flyコアで標準的な設定を処理 Xray固有のセキュリティ層とフロー制御項目

用途に合わせてプロトコルを選ぶ

すべての回線とサーバーで、最低遅延、最高スループット、最小限の設定項目を同時に実現できるプロトコルはありません。すでにサブスクリプションがある場合は、サーバーが実際に提供しているノードから選んでください。VMessを独自にVLESSへ変更したり、ShadowsocksノードにTLSを追加したりしてはいけません。プロトコルを切り替えるには、サーバー側に対応するインバウンド設定が必要です。

日常のウェブ閲覧や動画視聴では、まず回線が安定し、実際の接続遅延が低く、パケットロスの少ないノードを選びます。条件が近い場合に、プロトコルの組み合わせを比較してください。RealityやVisionが必要ならXrayコア対応のクライアントを優先し、古いサブスクリプション項目との互換性が必要ならVMessノードを予備として残すとよいでしょう。

VMess

設定エコシステムが成熟しており、既存のサブスクリプションでよく使われます。WebSocketとTLSの組み合わせも多い一方、システム時刻、UUID、古いalterId項目に注意が必要です。

適している用途:既存のVMessノード、古いサブスクリプションとの互換性、予備回線

VLESS

おすすめ

プロトコルのカプセル化が軽く、TLS、Reality、特定のフロー制御と組み合わせられます。項目が揃っていてコアも一致していれば、現代的な設定のメイン用途に適しています。

適している用途:Xrayコアの使用、RealityまたはVisionが必要な設定

Trojan

パスワードで認証し、TLSに依存するため、設定の要点はドメイン、SNI、証明書検証に集約されます。サーバー証明書が正しく設定されていれば、クライアント側の項目を比較的確認しやすい方式です。

適している用途:ドメインとTLS設定があり、認証項目を明確に管理したい場合

Shadowsocks

設定項目が少なく、TCPとUDPへの対応も明確です。サーバーとクライアントで同じパスワードと暗号化方式を使用する必要があります。

適している用途:シンプルなプロキシ経路、設定の簡素さ、UDPが必要な場合

結論:メインノードと予備ノードは異なる組み合わせにする

メインノードには、適合するセキュリティ層を組み合わせたVLESSを選び、予備にはVMess、Trojan、Shadowsocksのいずれかを残すとよいでしょう。2つのノードは備考名だけを変えるのではなく、プロトコル、伝送方式、またはサーバー回線が実際に異なることを確認してください。

よくある設定トラブル

4種類のプロトコルでは、遅延テストのタイムアウト、コアの再起動ループ、システムプロキシを有効にした後のウェブページ読み込み失敗など、似た症状が現れることがあります。切り分けではログの最初のエラーから確認し、複数の項目を一度に変更しないでください。1回に1つだけ変更して保存・再起動すれば、原因を特定しやすくなります。

VMessノードをインポートしてからタイムアウトが続く?

まずパソコンまたはAndroid端末の日付、時刻、タイムゾーンを自動設定にし、UUIDとalterIdを確認します。現代的なAEAD設定では通常、alterIdは0です。ずれが120秒前後またはそれ以上ある場合は、システム時刻を修正してから再テストしてください。

VLESSは接続済みなのに通信がない?

コアのログを開き、flow、security、networkを確認します。Realityの設定ではSNI、public key、short ID、fingerprintも一つずつ照合してください。これらの項目が欠けていると、システムプロキシが正常に見えても接続を完了できません。

Trojanで証明書名が一致しないと表示される?

ノードのサーバー名とSNIを確認します。接続先にはIPアドレスを指定できますが、SNIには通常、証明書の対象となっているドメインを入力します。端末の時刻が正しいことを確認し、サブスクリプションのコピー時にserverName項目が失われていないかも確認してください。

ShadowsocksはTCP接続できるのに、アプリのUDPが通らない?

まずサーバー側でUDPが有効になっていることを確認し、次にクライアントのノード設定とルーティングのアウトバウンドがUDPを許可しているか確認します。methodとpasswordはサーバー側と一致していなければなりません。システムのHTTPプロキシを有効にするだけでは、すべてのUDP通信を処理できません。

同じノードがv2rayNGでは使えるのに、v2flyNGでは失敗する?

ノードにReality、Vision、または特定のコアに依存する項目が含まれていないか確認します。共有リンクを正常に読み取れたことは、形式を解析できたことを示すだけです。続けて起動ログを確認し、サーバー設定に合ったコアとクライアントを選んでください。

プロトコル選びの結論

VMessは既存のサブスクリプションや成熟した設定との互換性に適しています。VLESSはTLS、Reality、現代的なXray機能との組み合わせに向いています。Trojanではパスワード、ドメイン、TLS設定の一致が重要です。Shadowsocksは項目が直接的で、シンプルなTCP・UDPプロキシの需要に適しています。4者の違いは、単純な速度ランキングではなく、認証、暗号化の役割、伝送方式の組み合わせ、コアの対応にあります。

ノードを選ぶ際は、まずクライアントが項目を完全にサポートしているかを確認し、次に回線の遅延とパケットロスを見て、最後にプロトコルのオーバーヘッドを比較します。安定して接続でき、ログに継続的なエラーがなく、普段使うサイトが正常に読み込めることのほうが、プロトコル名が新しいかどうかより重要です。

  1. サブスクリプションをインポートしたら、まず元の項目を保持し、プロトコルの種類を手動で変更しないでください。
  2. 実際の接続による遅延を使用し、TCPの疎通確認だけで完全な利用可否を判断しないでください。
  3. 日常用のメインノードを1つ選び、異なるプロトコルまたは異なる回線の予備ノードを1つ残してください。
  4. 問題が起きたらまずコアのログを確認し、認証、伝送、セキュリティ層、ルーティングの順に調べてください。
V2Rayクライアントをダウンロード