VMess、VLESS、Trojan、Shadowsocks 怎麼選?四種代理協定原理與適用情境比較

比較 VMess、VLESS、Trojan 與 Shadowsocks 的加密方式、握手成本、傳輸搭配及抗識別能力,並提供 macOS 與 Android 用戶的選擇建議。

本文重點速覽

選擇協定時,先確認伺服器提供的選項,再檢查用戶端核心是否完整支援。現有 VMess 節點不必只因名稱較舊就更換;新設定可在支援的情況下選用 VLESS 搭配 TLS 或 REALITY;已有憑證與網域時,可考慮 Trojan;若需要精簡的加密代理,則應確認 Shadowsocks 使用的具體加密方法。本文將協定、傳輸方式與安全層分開說明,協助 macOS 和 Android 用戶核對訂閱參數,並在相同測試條件下比較實際使用體驗。

一、先分清協定、傳輸方式與安全層

v2rayN 是桌面用戶端,不是代理協定。V2Ray 與 Xray 是代理核心,負責處理連線、路由及 DNS 等設定。VMess、VLESS、Trojan 與 Shadowsocks 則定義用戶端和伺服器如何驗證身分、封裝或加密資料。成功匯入只表示用戶端能讀取連結,不代表目前使用的核心支援其中所有功能。

節點名稱中的「VLESS + WebSocket + TLS」包含三個層次。VLESS 負責代理請求與身分資訊;WebSocket 負責承載資料;TLS 則負責保護連線傳輸並驗證伺服器身分。若把這三個層次都當成同一種「協定」,更換節點時就容易漏掉路徑、網域或安全設定。

代理協定
確認使用的是 VMess、VLESS、Trojan 或 Shadowsocks。通訊兩端必須採用相同協定,不能只在用戶端修改名稱。
傳輸方式
確認實際設定的是 TCP、WebSocket、gRPC 等傳輸方式。不同協定、核心和版本支援的組合不盡相同。
連線安全
確認 TLS 或 REALITY 等設定。REALITY 是 Xray 的安全機制之一,不是獨立的代理協定,也不能當成一般憑證開關來替換。

二、四種協定的加密與驗證方式

判斷「是否加密」時,要看整條連線,而不是只看協定欄位。VLESS 常見設定中的 encryption=none 表示協定本身不提供載荷加密;若外層正確啟用 TLS 或 REALITY,連線仍可受到保護。反之,連接埠設為 443,並不能證明已啟用 TLS。

協定 驗證與加密 常見組合 必須確認
VMess 使用 UUID 作為身分資訊;現代設定採用 AEAD 驗證機制,載荷是否加密則取決於安全選項。 VMess + TCP,或 WebSocket + TLS。 UUID、載荷安全選項、系統時間及傳輸參數。
VLESS 使用 UUID 驗證;協定本身不提供載荷加密,通常會搭配外部安全層。 VLESS + TLS,或 Xray 支援的 REALITY 組合。 UUID、安全層、flow,以及 REALITY 所需的公鑰等參數。
Trojan 使用密碼驗證,並依賴 TLS 保護驗證資訊與代理資料。 Trojan + TCP + TLS。 密碼、憑證網域、SNI,以及憑證驗證狀態。
Shadowsocks 由選用的加密方法提供保護;傳統 AEAD 與 2022 系列的金鑰規則不同。 原生 TCP/UDP 加密代理。 完整的加密方法名稱、密碼或金鑰,以及核心支援範圍。

VMess 的 alterId 是與相容性相關的參數,現代 AEAD 設定通常為 0,不要照著舊教學任意填入其他數值。VMess 驗證也會使用時間資訊;若系統時間明顯不準,請先在 macOS 的「系統設定」→「一般」→「日期與時間」啟用自動設定,再檢查節點。

Shadowsocks 並非只有一種加密方法。aes-128-gcm 和 2022-blake3-aes-128-gcm 是不同的設定;後者要求符合格式的預先共用金鑰,不能直接把任意短密碼當成金鑰填入。更換加密方法時,伺服器端也必須同步修改。

443
HTTPS 常用 TCP 連接埠,但這不代表已啟用 TLS
128 位元
UUID 的識別長度,不代表加密強度
16 位元組
2022-blake3-aes-128-gcm 的原始主金鑰長度

三、握手成本與速度:先固定測試條件

首次開啟網頁時,會依序涉及 DNS 查詢、建立連線、安全握手、代理請求及目標網站回應。Trojan 通常會先建立 TLS 連線,再傳送代理請求;VMess 和 VLESS 的實際成本,則取決於是否另外搭配 TLS、WebSocket 或其他傳輸方式。Shadowsocks 原生連線沒有 TLS 憑證握手,但這不代表在所有網路環境下都比較快。

在常見的 HTTP/1.1 部署方式中,WebSocket 還需要進行升級握手。連線重用可能降低後續請求重複建立連線的成本,但也會影響壅塞狀況及故障波及範圍。因此,不能只看協定名稱就推定延遲,也不能把單次「延遲測試」的毫秒數當成網頁完整載入時間。

  1. 固定線路:盡量在相近時段比較同一台伺服器和相同出口的設定;不同地區的節點無法用來單獨比較協定差異。
  2. 固定代理入口:測試期間維持相同的系統代理或 TUN 模式、路由規則和 DNS 設定,避免其中一組使用代理、另一組卻直接連線。
  3. 分開記錄:分別記錄首次載入頁面的耗時、持續下載速度及失敗次數。每組至少測試 5 次並查看中位數,不要只採用最佳結果。
  4. 另外測試 UDP:若要用於通話、遊戲或 QUIC,請以實際應用程式測試;網頁能開啟不代表 UDP 已正確轉送。

結論:先排除不穩定的設定,再比較速度

若 5 次測試中多次逾時,請先檢查線路和傳輸方式是否相符;只有各組都能穩定完成請求時,比較中位耗時才有參考價值。若沒有在相同條件下記錄,就不要依協定名稱排列速度。

四、TLS、REALITY 與抗識別能力的界線

TLS 可以保護傳輸內容,但「使用 TLS」不代表流量外觀與一般網頁完全相同。握手特徵、網域、IP 信譽、封包長度與傳輸時序,以及伺服器對異常請求的回應,都可能影響識別結果。VMess 搭配 TLS 後,也不能只憑協定名稱就認定一定比其他協定弱。

Trojan 透過 TLS 承載代理流量,部署時仍須正確設定憑證、網域及伺服器行為。VLESS 搭配 REALITY 時,兩端核心都必須支援,並正確設定公鑰、serverName、shortId 等參數。某些設定還要求特定 flow,這些欄位並非填得越多越好。

五、依情境選擇:新設定、現有訂閱與 Android 裝置

以下所說的「推薦」,僅適用於建立新設定、可調整伺服器端且用戶端支援相應功能的情況。若現有訂閱可正常使用,應優先保留服務商提供的完整組合。協定選擇不是逐級升級;符合目前網路環境且便於維護的設定才有意義。

VLESS 搭配 TLS 或 REALITY

推薦

新設定可優先評估。協定本身不會另外提供載荷加密,安全性取決於外層保護是否正確設定。使用 REALITY 或特定 flow 前,請先確認 Xray 核心與伺服器設定相符。

適合:能自行管理伺服器設定,且願意核對安全層參數的使用者。

Trojan 搭配 TLS

已有網域和憑證維護流程時,設定方式較明確。請特別確認密碼、SNI 和憑證驗證;不要為了排除連線錯誤而長期略過憑證驗證。

適合:具備 TLS 部署經驗,且伺服器明確提供 Trojan 的使用者。

VMess AEAD

現有的 VMess 訂閱若穩定可用,就可以繼續使用。保留原本的傳輸和 TLS 參數,並確認時間同步;若沒有證據顯示目前設定有問題,不必只為了協定名稱重新部署。

適合:重視現有訂閱、既有伺服器與相容性的情境。

Shadowsocks AEAD / 2022

設定項目相對集中,適合明確支援相應加密方法的伺服器。選用前請確認完整方法名稱和金鑰格式;若應用程式需要 UDP,也要確認伺服器和本機入口都支援轉送。

適合:需要輕量加密代理,且已知加密方法與金鑰的情境。

在 macOS 上使用 v2rayN 時,應確認目前選用的核心,而不只看用戶端版本。Android 版 v2rayNG 使用 Xray 核心;v2flyNG 則使用 v2fly 核心。若設定涉及 REALITY、特定 flow 或 Shadowsocks 2022,必須確認對應核心版本是否實際支援,不要假設三款用戶端的所有設定都通用。

六、匯入後檢查:從協定欄位到本機代理入口

用戶端顯示節點,不代表應用程式流量已經經過該節點。匯入後,先開啟節點編輯視窗核對伺服器參數,再檢查本機代理入口。以下的 1080 僅為 SOCKS5 測試連接埠範例,並非 v2rayN 固定的預設值;執行命令前,必須替換成目前實際監聽的連接埠。

  1. 協定與憑證資料:確認 VMess/VLESS 的 UUID、Trojan 密碼,或 Shadowsocks 的完整加密方法和金鑰。也要留意複製時是否帶入前後空白。
  2. 位址與連接埠:確認伺服器位址和連接埠;本機監聽連接埠與遠端伺服器連接埠並不相同。
  3. 傳輸與安全:WebSocket 請確認 path 和 Host,gRPC 請確認 serviceName;TLS 請確認 serverName,REALITY 則還要確認公鑰和 shortId。
  4. 本機監聽:在 v2rayN 的「設定」→「參數設定」中查找本機監聽或入站連接埠。介面名稱可能因版本而異,請以目前的設定和啟動記錄為準。
  5. 應用程式入口:確認已設定系統代理,或依需求啟用 TUN。測試單一入口時,不要同時變更路由和 DNS 規則。
# 將 1080 替換為目前用戶端的 SOCKS5 監聽連接埠
curl --proxy socks5h://127.0.0.1:1080 --connect-timeout 10 --max-time 30 -I https://example.com/

socks5h 會將目標網域交由 SOCKS 代理端解析,可減少本機解析目標網域對測試造成的干擾;但無法保證後續 DNS 一定透過某種加密通道傳輸。命令也會受到用戶端路由規則影響,請一併查看輸出記錄。若出現無法連線至 127.0.0.1 的提示,先處理本機監聽問題;若是握手或驗證錯誤,再檢查遠端參數。

七、協定選型常見問題

VLESS 的加密顯示為 none,需要修改嗎?

不要任意修改。先開啟節點編輯視窗,確認 TLS 或 REALITY 是否與伺服器設定一致。此處的 none 是 VLESS 協定層設定;若外層也沒有保護,就不要直接將它用於安全性未受保護的公開網路連線,並向伺服器確認設計。

VMess 節點還能用,需要全部換成 VLESS 嗎?

不必只為了名稱而更換。先檢查時間同步、目前使用的核心和傳輸參數,再在相同網路條件下測試。只有伺服器提供可用的 VLESS 設定時,才匯入比較;不能直接在原節點上切換協定。

Trojan 出現憑證錯誤,開啟略過驗證就可以嗎?

先檢查系統時間和節點中的 serverName,再請伺服器管理者檢查憑證有效期限、憑證鏈及網域涵蓋範圍。不要長期保留略過驗證的設定;修正憑證或網域設定後,維持正常驗證再測試。

Shadowsocks 成功匯入,卻一直顯示驗證失敗?

逐字比對加密方法名稱,並確認輸入的是密碼還是符合規定格式的金鑰。2022 方法通常使用 Base64 編碼且長度固定的金鑰,不能與傳統 AEAD 密碼任意互換;也要確認核心支援該方法。

同一個訂閱在電腦上能用,為什麼 Android 會逾時?

先比較兩端實際選用的節點、網路和安全參數。v2rayNG 與 v2flyNG 使用不同核心,遇到 REALITY 或特定 flow 時,請先確認相容性;接著切換到相同 Wi-Fi 測試,判斷問題來自設定還是行動網路差異。

V2Ray 用戶端下載