VMess 和 VLESS 的差別,歸根究柢在於一個設計選擇。VMess 用內建的加密方式自己加密你的流量,而 VLESS 本身沒有加密,靠的是底下的 TLS 或 REALITY。這讓 VLESS 更輕量,也讓它擁有 REALITY 和 Vision 流控等較新的功能。新架的伺服器通常選 VLESS 比較好;已經在用、搭配 TLS 的 VMess 伺服器也照樣能用。
以下是兩者的詳細比較。
兩者的由來
VMess 是 V2Ray(Project V)最初的協定,大約誕生於 2016 年。它的設計目標是本身就足夠安全,所以不需要 TLS 也會驗證並加密每條連線。
VLESS 在 2020 年由 V2Ray 社群提出,作為更輕量的後繼者。同年 Xray 從 V2Ray 分支出來,VLESS 的開發也延續到了 Xray。Xray、V2Ray、sing-box 和 Mihomo 都支援這兩種協定,但新功能都出現在 VLESS 上。VLESS 和 REALITY 的細節請讀 VLESS REALITY 是什麼?
VMess 與 VLESS 一覽
| VMess | VLESS | |
|---|---|---|
| 內建加密 | 有:aes-128-gcm、chacha20-poly1305、auto 或 none |
無(Xray 中有選用的 VLESS Encryption) |
| 使用者 ID | UUID | UUID,或由 Xray 轉換成 UUID 的文字 |
| 需要 TLS 才能保密 | 不需要,但建議使用 | 需要,或使用 REALITY |
| 依賴時鐘時間 | 是 | 否 |
| alterId | 有;請用 0 | 無 |
| REALITY | 否 | 是 |
| Vision 流控 | 否 | 是 |
| XHTTP 傳輸 | Potatso 不支援 | 是 |
| WebSocket、gRPC、HTTP Upgrade、HTTP/2 | 是 | 是 |
| 憑證釘選、ECH(Potatso 中) | 否 | 是 |
| UDP | 是,Potatso 中預設關閉 | 是,Potatso 中預設關閉 |
| 搭配 TLS 時的負擔 | 加密兩次 | 加密一次 |
標示「Potatso」字樣的列說明的是 Potatso 的支援情況;所有設定都列在 VMess 和 VLESS 參考文件中。
加密:自帶加密 vs TLS
VMess 會用你在伺服器上選擇的加密方式加密每條連線:
aes-128-gcm在任何 Apple 裝置上都很快,因為這些裝置以硬體執行 AES。chacha20-poly1305適合沒有 AES 硬體加速的裝置。auto讓用戶端自行選擇,Potatso 會選aes-128-gcm。none關閉 VMess 的加密。只能搭配 TLS 使用,由 TLS 來加密連線。
VLESS 則省略了這一層。VLESS 連線的保密程度完全取決於底下那一層,所以幾乎都會搭配 TLS 或 REALITY 使用。兩者都沒有的話,VLESS 會以明文傳送你的流量。
因此,TLS 上的 VMess 會把你的資料加密兩次:VMess 一次、TLS 一次。這樣雖然安全,卻很浪費。TLS 上的 VLESS 只加密一次。
關於 VLESS Encryption。 Xray 在 2025 年為 VLESS 加入了 VLESS Encryption,這是一個選用的後量子加密層。它還很新,大多數伺服器都沒有使用。如果連結或訂閱中帶有這項設定,Potatso 也支援。
alterId 與驗證
VMess 最初的驗證採用以 MD5 為基礎的機制,並由一個叫 alterId 的設定控制。V2Ray 在 2020 年推出 AEAD 驗證(alterId 為 0 時使用),伺服器則在 2022 年棄用了舊機制。
- 如果服務商給了你 alterId,能填 0 就填 0。
- Potatso 一律使用 AEAD 驗證。使用者 alterId 仍大於 0 的伺服器也會接受,所以伺服器端不需要做任何更改。
VMess 也會檢查時間戳記,所以裝置的時間必須和伺服器相近。iPhone 會自動設定時間,因此這很少造成問題;但如果伺服器的時鐘不準,它會拒絕所有 VMess 用戶端。
VLESS 沒有 alterId,也不檢查時間。它只送出使用者 ID,其餘交給 TLS 或 REALITY。
傳輸
兩種協定都能使用同一系列的傳輸:
- 不使用傳輸的 TCP,直接連線或搭配 TLS。
- WebSocket、HTTP Upgrade 和 gRPC,常用來穿過 CDN。
- HTTP/2,Xray 後來已改用 XHTTP 取代。
兩者在 Potatso 中的差別在於 Xray 最新、以 HTTP 為基礎的傳輸 XHTTP:VLESS 可以用,VMess 目前還不行。兩者都不支援 mKCP 和 QUIC。
REALITY 與 Vision:VLESS 獨有
如今選擇 VLESS 最大的理由,是建立在它之上的功能:
- REALITY 讓伺服器借用真實網站的 TLS 交握,因此不需要自己的網域或憑證,陌生的訪客也只會看到那個網站。VMess 無法使用 REALITY。
- Vision(
xtls-rprx-vision)會填充你透過代理建立的 TLS 交握,讓「TLS 套 TLS」的特徵更難被看出來。
想用其中任何一項,就得用 VLESS。用戶端的設定方式請見 iPhone 設定 VLESS REALITY 教學。
速度與限制
VLESS 省去了 VMess 額外的加密,所以 CPU 用量稍低,額外負擔也稍小。不過在手機上你大概感覺不出來:伺服器的距離、負載和網路路徑影響大得多。
在 Potatso 中,VMess 有一個實際的限制:單一 VMess 連線約可上傳 1 GiB,之後 Potatso 會關閉該連線,而不是降低加密強度。下載沒有限制。如果要單次上傳非常大的檔案,請使用 VLESS 或 Trojan。
流量特徵
兩種協定只要設定得當都有加密,但加密並不能隱藏一切。沒有 TLS 的 VMess 有自己可辨識的樣貌。Potatso 不使用 VMess 的 chunk 遮罩或填充選項,所以在沒有 TLS 包覆時,VMess 流量的封包大小模式更容易被辨識。TLS 上的 VLESS,尤其是搭配 Vision 的 REALITY,看起來更像一般的 HTTPS。兩者都不是無法偵測的。
該選哪一個?
選 VLESS,如果:
- 你要架設新的伺服器,
- 你想用 REALITY,省去網域和憑證,
- 你想用 Vision、XHTTP 或憑證釘選。
繼續用 VMess,如果:
- 你的服務商只提供 VMess,或你已經有一台運作正常的 VMess 伺服器,
- 它使用 TLS,或透過 CDN 使用 TLS 上的 WebSocket。
避免:
- 在新伺服器上使用 alterId 大於 0 的 VMess,
- 使用
none或zero加密方式又沒有 TLS 的 VMess, - 沒有 TLS、REALITY 或 VLESS Encryption 的 VLESS。
如果你考慮的不只這兩種,代理協定比較把 VLESS 和 VMess 與 Trojan、Shadowsocks、Hysteria 2 和 AnyTLS 放在一起比較。
在 iPhone 上使用 VMess 或 VLESS
Potatso 可以從分享連結、QR 碼,以及 Clash、V2Ray 或 Xray 訂閱匯入這兩種協定;VMess 也能從 Surge 設定匯入。步驟和其他伺服器相同:
- 安裝 App Store 上的 Potatso。
- 貼上你的
vmess://或vless://連結、掃描它的 QR 碼,或匯入你的訂閱。 - 如果你的伺服器會轉送 UDP,請在伺服器設定中開啟 UDP 轉送。
- 允許 VPN,然後在首頁連線。
包含 REALITY 欄位與常見錯誤的完整教學,請見 iPhone 設定 VLESS REALITY 教學。如果你的訂閱裡有很多伺服器,請見 iPhone 匯入 Clash 訂閱教學。
常見問題
- VMess 和 VLESS 有什麼不同?
- VMess 會用 aes-128-gcm 之類的加密方式自己加密你的流量。VLESS 沒有內建加密,而是靠底下的 TLS 或 REALITY,因此更輕量,也能使用 REALITY 和 Vision 流控等較新的功能。
- VLESS 比 VMess 快嗎?
- 通常稍微快一點,因為 TLS 上的 VLESS 只加密一次,而 TLS 上的 VMess 會加密兩次。不過在手機上差異往往不大,伺服器的距離和負載影響大得多。
- 不搭配 TLS 的 VLESS 安全嗎?
- 不安全。單純的 VLESS 會以未加密的方式傳送你的流量。請一定要搭配 TLS 或 REALITY,或是 Xray 的 VLESS Encryption 使用。
- VMess 的 alterId 應該填多少?
- 填 0。alterId 為 0 代表目前的 AEAD 驗證;大於 0 的值屬於舊的 MD5 驗證,伺服器已在 2022 年棄用。Potatso 一律使用 AEAD,這些伺服器同樣接受。
- VMess 可以用 REALITY 嗎?
- 不行。REALITY 適用於 VLESS(部分伺服器也支援 Trojan),不適用於 VMess。想用 REALITY,請架設 VLESS 伺服器。