VMess、VLESS、Trojan、Shadowsocks 協定比較與使用情境

比較 VMess、VLESS、Trojan 與 Shadowsocks 的加密、握手成本、傳輸方式及客戶端支援,並說明如何依裝置與網路環境選擇協定。

本文重點

選擇協定前,先確認伺服器端設定,再檢查客戶端核心與網路條件。本文將協定、傳輸方式與安全層分開說明,比較四種協定的認證方式、加密範圍及連線成本,並提供桌面與 Android 端的檢查方法。已有訂閱的使用者可據此確認相容性;自行架設服務的使用者則可依此安排測試順序,而非只看協定名稱判斷速度。

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

VMess、VLESS、Trojan、Shadowsocks 是代理協定名稱;TCP、WebSocket、gRPC 是傳輸設定中常見的選項;TLS 與 REALITY 則屬於連線安全機制。訂閱中的「VLESS + TCP + REALITY」代表一組設定,並非三種可以互換的協定。

客戶端設定必須與伺服器端逐項相符。伺服器提供 VMess,就不能只把客戶端類型改成 VLESS;伺服器使用 WebSocket,也不能在客戶端任意改成原始 TCP。協定、連接埠、認證資訊、傳輸參數或安全層只要有一項不符,連線就可能失敗。

二、四種協定的加密與認證差異

協定 主要認證資訊 資料保護方式 重點檢查項目
VMess UUID,並須確保系統時間正確 常見設定由協定本身負責認證與加密,也可額外搭配 TLS UUID、AEAD 設定、加密方式、傳輸參數
VLESS UUID 傳統設定的 encryption 為 none,通常依靠 TLS 或 REALITY 保護連線 UUID、flow、安全層及伺服器端對應參數
Trojan 密碼 標準部署仰賴 TLS 保護認證資訊與代理資料 密碼、伺服器名稱、憑證有效性
Shadowsocks 加密方法及對應的密碼或金鑰 使用選定的方法進行對稱式加密;AEAD 方法也會提供完整性保護 method、金鑰格式、TCP 與 UDP 支援

VMess 常見的 AEAD 設定會使用 alterId: 0。舊分享連結中的非零 alterId 不應直接套用到現代設定;請先向伺服器端確認實際使用的模式。系統時間不正確也會影響 VMess 認證,排查時應先啟用系統自動校時,而不是反覆更換 UUID。

VLESS 的 encryption: none 表示傳統 VLESS 協定層不負責加密,不代表外層 TLS 或 REALITY 沒有作用。反過來說,只有 VLESS 搭配原始 TCP、沒有任何安全層的公開網路連線,也不能因為使用 UUID 就視為具備內容保密性。具體擴充功能仍應依雙方核心版本確認。

Shadowsocks 的 aes-128-gcm、chacha20-ietf-poly1305 與 Shadowsocks 2022 方法並非相同設定。後者對金鑰格式與長度有明確要求,不能直接沿用任意文字密碼。客戶端介面都顯示 Shadowsocks,也不代表雙方支援相同的方法。

判斷原則:先確認完整設定組合,再考慮更換協定

記下「協定 + 傳輸方式 + 安全層 + 認證參數」。如果現有節點只是逾時,先檢查這四項設定及伺服器是否可連線;只更換協定名稱,無法解決連接埠未開放或憑證不符的問題。

三、握手成本與速度:不能只看協定名稱排名

首次開啟網頁的等待時間,可能包含 DNS 查詢、TCP 建立連線、TLS 握手、代理認證及目標網站回應。TLS 1.3 的完整握手通常需要一次往返,TCP 建立連線也有額外往返成本;連線重用與工作階段恢復會改變後續請求的成本。因此,「冷連線」與「連線建立後的下載速度」應分開記錄。

VMess 和 Shadowsocks 本身具備加密功能,不代表任何部署方式都比使用 TLS 的設定更快。裝置是否支援 AES 硬體加速、伺服器負載、跨網路鏈路的封包遺失與壅塞控制,都會影響測試結果。Trojan 仰賴 TLS,但長連線建立後,首次握手成本通常不會逐一累加到每個資料封包。

  1. 固定測試條件:使用同一台裝置、同一個網路和同一個目標網站,並關閉背景下載。盡量選擇相同位置的伺服器,否則比較到的會是網路路線,而非協定差異。
  2. 分開測試首次連線與連線重用:重新連線後記錄首次請求耗時,再連續請求相同目標。不要把重用連線的結果當成首次握手的測試結果。
  3. 至少重複測試 5 次:記錄中位數、失敗次數及持續傳輸表現。單次最低延遲不代表穩定。
  4. 另外測試 UDP:網頁能開啟只代表相關 TCP 路徑可用,無法據此判斷語音、遊戲或 QUIC 流量是否正常。

四、傳輸方式、連接埠與伺服器端條件

VMess 與 VLESS 常見於原始 TCP 或 WebSocket 等傳輸組合;Trojan 的標準設定以 TLS 連線為基礎,其他承載方式則視實作而定;Shadowsocks 原生協定本身不具備 WebSocket 或一般 HTTPS 網站的語意。能否接入反向代理或 CDN,必須逐項確認服務支援的傳輸方式,不能只看連接埠。

443
HTTPS 常用的伺服器連接埠,不代表已啟用 TLS
80
HTTP 常用連接埠,本身不提供加密
1080
本機 SOCKS 範例連接埠,不是所有客戶端共用的預設值

將伺服器端連接埠設為 443,不會自動啟用 TLS,也不會自動取得 CDN 相容性。使用 WebSocket 時,路徑必須一致,例如伺服器端設定為 /proxy-ws,客戶端就不能填入 /。HTTP Host 用於相關 HTTP 請求,TLS 的 SNI 則用於伺服器名稱協商,兩者作用不同,不能因為介面上都是網域名稱就任意互換。

五、如何選擇 v2rayN、v2rayNG 與 v2flyNG

客戶端提供設定介面與執行入口,實際協定功能則由使用的核心實作。桌面版 v2rayN 應確認目前設定實際呼叫的核心;Android 版 v2rayNG 使用 Xray 核心;Android 版 v2flyNG 使用 v2fly 核心。即使分享連結可以匯入,也應進一步確認 flow、REALITY、Shadowsocks 加密方法等欄位是否正確保留。

v2rayNG:Android 端使用 Xray 設定

推薦

如果伺服器明確提供 VLESS + REALITY 或 Vision 設定,請優先確認 v2rayNG 隨附的 Xray 核心版本,以及匯入的欄位是否正確。這項推薦適用於這類設定的 Android 客戶端,不代表在所有網路環境下速度都更快。

適用情境:Android 裝置,且需要使用伺服器提供的 Xray 功能

v2rayN:確認桌面端實際使用的核心

適合在桌面管理多種節點與訂閱。測試前請檢查目前的節點類型、呼叫的核心及其版本;客戶端版本與核心版本是兩項不同資訊,更新客戶端程式後,也應確認核心是否一併更新。

適用情境:桌面使用、集中管理訂閱與路由設定

v2flyNG:依 v2fly 支援範圍選擇

適合設定明確與 v2fly 相容的 Android 環境。不要直接匯入 Xray 專用的 REALITY 或 Vision 欄位;其他協定與加密方法也應依實際核心版本確認。

適用情境:已有 v2fly 設定,且需要維持相同的實作方式

檢查時先開啟客戶端的節點編輯頁面,逐項查看「位址」、「連接埠」、「傳輸」、「TLS」等欄位,再檢查執行記錄。不同版本的選單名稱可能不同,因此不要只憑舊截圖尋找設定。分享連結中的 vmess://、vless://、trojan://、ss:// 代表不同的解析格式,並非修改前綴就能轉換協定。

六、依現有訂閱或新部署情況做決定

選擇順序:先確保連線成功,再控制測試變因

已有訂閱或現成服務
  • 以伺服器提供的協定與參數為準,不要自行更改協定類型。
  • 優先選擇客戶端核心完整支援,且實際請求能成功的設定。
  • 維持相同的路由與 DNS 策略,比較相同區域節點的穩定性。
  • 升級前保留可用設定,並勿公開訂閱網址與認證資訊。
新部署或可自行管理伺服器
  • 需要部署一般 TLS 憑證時,可評估 Trojan 或 VLESS + TLS。
  • 已有成熟的 VMess 設定時,先確認相容性與維護成本。
  • 需要使用對稱式加密代理時,確認 Shadowsocks 加密方法與 UDP 支援。
  • 需要使用 REALITY 時,先確認兩端的 Xray 實作與參數相符。

先建立一組可重現且可用的設定,再一次只調整一個參數;若同時更換協定、傳輸方式與網路路線,就無法判斷問題來源。

一般網頁瀏覽通常較受網路品質與首次連線時間影響;持續下載更受頻寬、壅塞及伺服器資源影響;語音與遊戲則應留意 UDP 轉送及抖動。無法只憑「VLESS 比 VMess 新」或「Shadowsocks 設定較短」推導出通用排名。

如果只是要讓未遵循系統代理設定的程式經由代理連線,應檢查 TUN 或 Android VPN 的接管範圍,而不是先更換協定。代理協定負責客戶端與伺服器之間的資料交換;應用程式流量是否進入客戶端,則是另一層問題。可參考客戶端使用教學確認相關設定。

七、協定選擇常見問題

VLESS 的 encryption 是 none,需要改成 AES 嗎?

傳統 VLESS 設定應維持伺服器要求的 none,不要套用 VMess 的加密選項。接著確認 TLS 或 REALITY 是否依伺服器要求啟用,並檢查伺服器名稱與認證參數。若伺服器使用特定擴充功能,請依雙方核心文件設定。

Trojan 連接埠可以連線,為什麼仍出現憑證錯誤?

連接埠可連線不代表 TLS 驗證通過。請在節點編輯頁檢查伺服器名稱,再確認憑證涵蓋的網域、有效期限及系統時間。若伺服器憑證鏈不完整,應修正伺服器端設定,不要長期關閉憑證驗證。

Shadowsocks 更換加密方法後就無法連線?

請將 method 與密碼或金鑰一併和伺服器端設定核對。尤其從傳統 AEAD 切換到 2022 方法時,請確認客戶端支援該方法,並使用符合要求的金鑰。只更改下拉選項、沿用舊密碼,通常無法完成轉換。

同一條 VLESS 連結,為什麼一個客戶端成功、另一個卻失敗?

比較兩端實際的核心版本,以及匯入後的傳輸方式、安全層、flow、公鑰與 shortId。若連結包含 Xray 專屬功能,應使用相容的實作;先從記錄找出實際失敗階段再調整,不要只因匯入成功就認定相容。

四種協定都逾時,還需要逐一更換測試嗎?

先停止輪流更換設定,確認本機網路、系統時間、伺服器位址與連接埠是否正確,再檢查伺服器是否正常執行及防火牆是否放行。如果多種協定都使用同一條異常路線,更換協定無法解決底層連線問題。其他基本排查方式請參閱疑難排解。

下載客戶端v2rayN / v2rayNG