VMess、VLESS、Trojan、Shadowsocks 協定比較與選擇指南

比較四種代理協定的加密方式、握手成本、傳輸搭配與 REALITY 支援,依裝置效能、網路環境及伺服器條件選擇合適方案。

本文重點

已有訂閱的使用者,建議優先選擇參數完整、且用戶端與伺服器端核心都支援的節點;自行架設伺服器的使用者,則可進一步比較驗證方式、安全層與傳輸組合。本文會先說明協定與核心的關係,再比較四種方案的實際差異,最後整理桌面端與 Android 的檢查步驟。看完即可判斷何時沿用 VMess、何時採用 VLESS + REALITY,以及 Trojan 和 Shadowsocks 各自適用的情況。

先分清協定、傳輸方式、安全層與用戶端

節點名稱中的「VLESS + TCP + REALITY」並非三種同類選項。VLESS 負責代理請求與使用者驗證;TCP 是底層傳輸方式;REALITY 則負責連線的安全握手與相關驗證機制。混淆這些層級,很容易誤以為「選了 VLESS 為什麼還是連不上」,或「改用 443 連接埠就會自動啟用 TLS」。

v2rayN、v2rayNG 和 v2flyNG 都是圖形化用戶端,並非這四種協定的別稱。v2rayN 的實際功能取決於所選核心與版本;v2rayNG 使用 Xray 核心;v2flyNG 使用 v2fly 核心。介面上有某個欄位,不代表舊版核心已支援相應組合;訂閱能匯入,也不代表所有參數都正確保留。

四種協定比較:加密、驗證與 REALITY

下表討論常見且仍在使用的設定方式。VMess 以現代 AEAD 設定為前提;Shadowsocks 則需區分傳統 AEAD 與 2022 系列。即使協定名稱相同,採用的演算法與實作版本不同,支援情況也可能有差異。

協定 驗證與加密 常見傳輸方式 與 REALITY 的關係 主要檢查項目
VMess 以使用者 ID 驗證;常用 AEAD 加密資料,也可再搭配 TLS TCP、WebSocket + TLS 等 一般不會與 REALITY 搭配使用 UUID、加密選項、傳輸參數、系統時間
VLESS 常見設定以 UUID 驗證;傳統設定不會自行加密資料,需依賴外層保護 TCP + TLS、TCP + REALITY、WebSocket + TLS 等 Xray 中常見的組合,需確認兩端皆支援 UUID、flow、安全層、服務名稱與公鑰相關參數
Trojan 以密碼驗證;一般設定依賴 TLS 保護資料 通常為 TCP + TLS,額外傳輸方式視實作而定 部分 Xray 設定可搭配使用,不能只憑名稱判定相容 密碼、TLS 服務名稱、憑證、傳輸方式
Shadowsocks 相容性由演算法與金鑰共同決定;常見選擇為 AEAD 或 2022 系列 原生支援 TCP、UDP;額外封裝需另行確認 並非協定原生功能,不應直接套用 VLESS 參數 method、密碼或金鑰格式、UDP 支援

VMess 的 auto 是實作提供的加密選擇邏輯,並非獨立協定。現代設定通常使用 AEAD 驗證標頭;不確定舊版教學是否適用時,別隨意加上 alterId。使用時間驗證時,裝置時鐘也必須準確;先開啟系統自動校時,比反覆更換 UUID 更能對症處理。

VLESS 常見設定中的 encryption=none 不能脫離安全層解讀。這不代表整條連線必然以明文傳輸,也不表示 VLESS 會自動加密:外層採用 TLS 或 REALITY 時,會由相應機制提供保護。新版本加入的擴充功能需另外確認;本文不會將擴充欄位視為所有核心都具備的基本功能。

Shadowsocks 的 aes-128-gcm 和 2022-blake3-aes-128-gcm 不能互換使用。2022 系列有自己的金鑰長度與編碼要求:128 位元金鑰為 16 位元組,256 位元金鑰為 32 位元組,之後再依設定需求編碼。不能隨便填入一組短密碼,就期待用戶端自動轉換成正確金鑰。

握手與速度:為什麼不能只看協定名稱排名

首次連線所需時間包括名稱解析、連往節點的網路往返、安全握手、代理請求及目標網站回應。TCPing 通常只能確認節點連接埠是否能建立 TCP 連線,還沒驗證 UUID、密碼、憑證或 REALITY 參數,因此不能據此認定某種協定的完整連線速度較快。

在常見的 TCP 情境中,新建 TCP 連線通常需要一次往返;TLS 1.3 完整握手通常還需要一次往返。兩者是否能重疊、是否恢復工作階段,以及連線能否重複使用,都取決於具體實作。WebSocket 升級要求與額外的 HTTP 層也可能增加首次連線成本。遇到封包遺失時,這些成本會更加明顯,但不能直接相加,當成適用所有環境的延遲公式。

443
TLS 服務常用連接埠,不代表已自動啟用 TLS
1080
本機 SOCKS 範例連接埠,請以實際設定為準
8388
Shadowsocks 常見設定範例連接埠,並非強制值

以上數字說明的是連接埠用途,不是測速結果。伺服器使用 443,不代表它一定具備瀏覽器可驗證的憑證;本機 SOCKS 使用 1080,也不代表遠端必須使用相同連接埠。先分清本機監聽連接埠與遠端入口,才能避免把本機連線設定錯誤誤判成協定效能問題。

  1. 固定比較條件:盡量選擇同一台伺服器、同一條線路與同一時段。不同地區的節點不能用來證明協定孰優孰劣。
  2. 分開測量延遲與吞吐量:先測試實際連線延遲,再下載同一個目標檔案測速;連續測試 5 次,記錄中位數與失敗次數。
  3. 記錄裝置指標:觀察處理器使用率、溫度與電量變化。Android 長時間下載造成的發熱,可能比幾十毫秒的握手差異更影響使用體驗。
  4. 一次只調整一個項目:先維持連線重複使用、路由與 DNS 設定不變,再比較傳輸方式與安全層,否則難以判斷差異來源。

依伺服器條件選擇:四種方案的適用範圍

沒有任何一種協定能脫離伺服器線路、參數管理與本機核心而成為通用最佳選擇。以下建議以「能管理伺服器並持續維護」為前提;若只有訂閱使用權,應以服務提供者給出的完整設定為準,別為了追求較新的名稱而自行拼湊參數。

VLESS + REALITY

推薦

當用戶端與伺服器端都使用相容的 Xray 核心,且能維護伺服器參數時,可優先測試此方案。採用常見的 Vision 組合時,需確認 xtls-rprx-vision、服務名稱、公鑰相關參數與 shortId,不能只複製 UUID。

適用情況:能管理伺服器,並可讓桌面與 Android 用戶端設定保持一致的使用者。

Trojan + TLS

已有網域名稱、憑證與續期流程時,設定關係較直觀。將憑證信任、服務名稱與密碼分開檢查,有助於找出問題;憑證到期或 SNI 不符,都可能在代理請求送出前中斷連線。

適用情況:已有 TLS 維運條件,且希望沿用標準憑證驗證流程的環境。

VMess + WebSocket + TLS

已有可用的反向代理與 VMess 節點時,可以繼續沿用。若透過 CDN 連線,必須確認 CDN 支援相應的 WebSocket 轉發、連接埠與流量用途;路徑、Host 和 TLS 服務名稱是不同欄位。

適用情況:現有訂閱或服務架構已穩定使用 VMess。

Shadowsocks AEAD / 2022

原生設定項目較集中,主要檢查位址、連接埠、演算法與金鑰。支援的演算法、UDP 轉發及額外封裝都必須分別確認;不能因為「欄位少」,就認定它在所有網路環境中都更穩定。

適用情況:伺服器明確提供相應演算法,且需要確認原生 TCP 與 UDP 轉發的環境。

v2rayN 與 v2rayNG:匯入後逐項檢查

訂閱是散布節點參數的方式,並非第五種代理協定。同一條訂閱在兩個用戶端顯示相同的節點名稱,只能說明名稱一致,不能證明 flow、傳輸路徑與安全層都已正確解析。首次匯入後,請開啟節點編輯頁,逐項比對服務提供者給的資訊。

檢查方式:在桌面與 Android 分別測試同一個節點

桌面端:v2rayN
  • 先確認目前實際使用的核心及其版本,而不只是記錄介面版本。
  • 開啟節點編輯視窗,檢查協定、位址、遠端連接埠與安全層。
  • 依實際本機連接埠進行連線測試,再確認系統代理或 TUN 設定是否符合用途。
  • 連線失敗時,查看執行記錄,區分連線逾時、驗證失敗與憑證錯誤。
Android 端:v2rayNG
  • 確認內建的 Xray 版本是否支援服務端提供的完整組合。
  • 檢查節點的傳輸協定、TLS 或 REALITY 設定,以及服務名稱。
  • 啟動連線,並確認已授予系統 VPN 權限。
  • 暫時停用應用程式排除規則,避免測試用的應用程式未經代理連線。

更新訂閱只會同步其中包含的節點欄位;本機路由、DNS、系統代理與應用程式分流設定仍需個別檢查。

VLESS + REALITY 最容易漏掉服務名稱、公鑰相關參數、shortId 與 flow;VMess + WebSocket 常漏掉路徑與 Host;Trojan 常見問題是密碼或憑證服務名稱不符;Shadowsocks 則應先檢查 method 與金鑰格式。欄位名稱可能因用戶端版本而異,應依欄位用途比對,不要只看介面位置。

協定選型常見問題

VLESS 一定比 VMess 快嗎?

不一定。VLESS 常見設定減少了協定本身的資料加密處理,但實際使用時仍可能搭配 TLS 或 REALITY。請先固定伺服器與測試目標,分別進行 5 次實際連線測試與下載測試,再比較中位數、失敗率及處理器使用率。不同線路的測試結果不能歸因於協定名稱。

節點標示 REALITY,為什麼匯入後還是連線逾時?

先確認伺服器位址與遠端連接埠是否可連線,再開啟節點編輯頁檢查服務名稱、公鑰相關參數、shortId 與 flow。接著確認兩端的 Xray 版本。TCPing 正常只能證明連接埠可連線,不能證明 REALITY 握手成功;若記錄中出現握手錯誤,需依實際參數逐一排查。

Shadowsocks 可以開啟網頁,遊戲卻連不上,該怎麼辦?

先確認遊戲流量是否經由代理連線,再檢查伺服器端與用戶端是否啟用並支援 UDP。只設定瀏覽器或系統 HTTP 代理,通常無法接管遊戲的 UDP 流量。即使協定支援 UDP,伺服器防火牆或目前使用的網路也可能阻擋相關流量。

v2flyNG 可以直接使用同一個 REALITY 節點嗎?

不要只因為訂閱可以匯入,就認定節點可用。v2flyNG 使用 v2fly 核心,而本文討論的常見 REALITY 方案是以 Xray 實作為基礎。需要使用這類節點時,請先確認核心支援情況;Android 端可用 v2rayNG 測試服務提供者給的組合,修改節點名稱並不能讓它相容。

改用 Trojan 後,原本的路由規則還有效嗎?

如果規則使用的出口標籤維持不變,而且新節點已正確綁定該出口,規則就可以繼續使用;若規則依賴節點名稱、群組或特定出口,則需重新檢查。先測試一個應直連的目的地和一個應經代理的目的地,再查看記錄中的實際出口;不能只看用戶端顯示「已連線」。

v2rayN / v2rayNG 下載