VMess, VLESS, Trojan, and Shadowsocks Compared: Which Protocol Fits Your Use Case?

A practical comparison of encryption, overhead, obfuscation, and client support across four proxy protocols, with guidance for home broadband, mobile networks, and low-power devices.

At a glance

This guide is for users configuring v2rayN, v2rayNG, or v2flyNG who are unsure whether to use VMess, VLESS, Trojan, or Shadowsocks. The key question is not which protocol name is newer, but whether the server core, transport, security layer, device performance, and network conditions fit together. By the end, you can narrow the options for your setup and identify the subscription fields that affect real-world performance.

Separate the protocol, security, and transport layers

VMess, VLESS, Trojan, and Shadowsocks primarily define how the client and server authenticate, encapsulate, and forward traffic. TCP, WebSocket, and gRPC are transport methods, while TLS and REALITY are connection-security or handshake schemes. Mixing these layers leads to mistakes such as assuming a protocol is inherently suited to a particular port or that switching to WebSocket always makes a connection harder to detect.

For example, VLESS does not encrypt application data by itself and is usually paired with TLS or REALITY. Common Trojan deployments rely directly on TLS. VMess includes its own authentication and encryption mechanisms but can still be combined with TLS. Shadowsocks uses a pre-shared key and symmetric encryption. Even with the same protocol, changing the transport layer can affect connection setup time, extra headers, and failure modes.

4 types
Proxy protocols compared in this guide
443
Common port for TLS services
10808
Common local SOCKS port in v2rayN
10809
Common local HTTP proxy port

A port number only identifies where a service listens; it does not determine how strong a protocol is. Port 443 is commonly used for TLS services because it follows standard HTTPS conventions, but Shadowsocks, VMess, and other configurations can use different ports. v2rayN's local ports can also be changed. Check the current values under Settings → Parameter Settings rather than mechanically assuming 10808 or 10809.

Protocol Authentication and encryption Common security combinations Key considerations
VMess Uses a user ID, time validation, and the protocol's built-in authentication and encryption VMess + TCP + TLS, or VMess + WebSocket + TLS Authentication may fail if the client and server clocks are significantly out of sync
VLESS Keeps authentication and forwarding lightweight; does not include built-in data encryption VLESS + TLS, or VLESS + REALITY + Vision Understand the security, flow, and transport fields correctly
Trojan Authenticates with a password and relies on TLS to protect the connection Trojan + TCP + TLS The certificate, domain, and system time all affect the TLS handshake
Shadowsocks A pre-shared key with AEAD or the 2022 encryption methods AES-GCM, ChaCha20-Poly1305, or a 2022 method Both ends must use exactly the same supported method

Core differences between the four protocols

VMess was one of the earlier widely adopted protocols in the V2Ray ecosystem and remains common in mature subscriptions. It includes authentication, time validation, and encryption, with the server and client typically identifying users by UUID. Its strengths are broad coverage across existing configurations and support for common combinations in v2rayN, v2rayNG, and v2flyNG. The trade-off is a more complex protocol and encapsulation design than VLESS.

VLESS uses a streamlined authentication and forwarding design, with the user identifier typically represented by a UUID whose binary form is 16 bytes long. Because VLESS does not encrypt the data layer itself, security must be designed into the deployment. The common Xray combination VLESS + REALITY + XTLS Vision depends on coordinated security handshaking and flow control, not on the word “VLESS” alone.

VMess

Compatible with existing V2Ray subscriptions and traditional WebSocket and TCP configurations, so migrating an older service usually requires fewer changes.

Best for: stable VMess nodes and compatibility with existing configurations

VLESS

Recommended

The protocol layer is streamlined and can be combined with Xray capabilities such as REALITY and XTLS Vision, with clearly defined parameter boundaries.

Best for: new Xray services and everyday desktop or Android use

Trojan

Built on TLS, with configuration focused on the domain, certificate, password, and relationship between the service and its listening endpoint.

Best for: properly maintained TLS deployments and straightforward configuration structures

Shadowsocks

The implementation is relatively compact. Choosing a supported encryption method can reduce processing pressure on low-power devices.

Best for: simple forwarding, resource-constrained devices, and tightly controlled versions on both ends

Trojan commonly runs over a standard TLS connection, with authentication data carried inside the TLS-protected channel. Troubleshooting is relatively direct: check DNS resolution first, then certificate validity and system time, followed by the password, port, and transport settings. If the TLS handshake has not completed, changing routing rules usually will not solve the problem.

Shadowsocks performance depends directly on the selected encryption method, processor instruction set, and implementation version. Desktop processors with AES hardware acceleration often suit AES-GCM, while devices without that acceleration can be tested with ChaCha20-Poly1305. The 2022 methods further standardize key handling and replay protection, but both client and server must support them; changing only one side is not enough.

Bottom line: the protocol name is not a complete configuration

When you see VLESS, also check security, flow, network, and serverName. For Shadowsocks, check method and the key. A missing critical field in a subscription can affect the connection more than the protocol's theoretical overhead.

Choosing for home broadband, mobile networks, and low-power devices

Home broadband is usually stable with low packet loss, so it offers the widest range of choices. If the server uses Xray and provides complete parameters, start by evaluating VLESS + REALITY + XTLS Vision. When an existing VMess + TLS node has been stable for a long time, rebuilding it just to change the protocol name is unnecessary. Trojan suits environments with properly maintained domains and TLS services, while Shadowsocks fits simple forwarding where both sides can be kept under control.

Mobile networks involve cell handoffs, address changes, and brief bursts of instability. Start by removing unnecessary transport layers before comparing protocols. WebSocket can forward traffic through existing HTTP infrastructure, but it adds HTTP headers and frame encapsulation. Direct TCP is simpler, but the server entry point and network environment must support a stable connection. There is no single option that outperforms on every mobile network.

Recommended approach: create separate test groups for stable and unstable networks

Desktop on home broadband
  • v2rayN with the Xray core
  • Compare VLESS with the existing VMess first
  • Use the parameter settings as the source of truth for the system proxy port
  • Use the same server to eliminate route differences
Android on a mobile network
  • v2rayNG with the Xray core
  • Test Wi-Fi and mobile data separately
  • Keep one simple backup configuration
  • Check the connection log again after switching networks

When comparing protocols, keep the server, egress route, and test period consistent. Otherwise, you are mainly measuring route differences rather than protocol differences.

For low-power devices, the key factors are encryption workload and the number of encapsulation layers. If the processor has AES instruction acceleration, Shadowsocks with AES-128-GCM is often a reasonable starting point. Without it, compare ChaCha20-Poly1305 as long as both implementations support it. VLESS has a lightweight protocol layer, but its TLS, REALITY, or complex transport layers still require computing resources, so the protocol alone cannot prove that the full chain has the lowest load.

  1. Record the server protocol, core, security layer, transport method, and port first; do not record only the node name.
  2. Connect candidate configurations on the same network and server to avoid mixing different routes into the comparison.
  3. Check whether the first connection is stable, whether continued browsing is interrupted, and whether the device shows noticeable changes in heat or battery consumption.
  4. A mobile-network test should include at least one network handoff to confirm whether the client can restore the connection afterward.
  5. Keep a verified working configuration as a fallback, then adjust one parameter at a time.

Verify configurations in v2rayN, v2rayNG, and v2flyNG

On desktop with v2rayN, update the subscription and open the node editor first. Check the address, port, user ID or password, transport protocol, security type, SNI, or serverName. Then open Settings → Parameter Settings and confirm the local SOCKS and HTTP listening ports. If a browser or another app is manually set to 10808, update it too after changing the client port.

For VLESS + REALITY, also check publicKey, shortId, serverName, fingerprint, and flow. A common flow value is xtls-rprx-vision, but whether it should be enabled must match the server. REALITY does not use a traditional website certificate file in the same deployment flow, so Trojan certificate troubleshooting steps cannot simply be reused.

  1. In v2rayN, select the target server, open the editor, and confirm that the subscription parser has not converted the protocol field to another type.
  2. For VMess, check UUID, alterId, security, network, and TLS. In modern configurations, alterId is usually 0.
  3. For VLESS, check UUID, encryption, flow, security, network, and serverName. A common encryption value is none.
  4. For Trojan, check the password, port, TLS, serverName, and the domain covered by the certificate.
  5. For Shadowsocks, check method, password, and port. The method name must match the server exactly.
Protocol troubleshooting record example
Protocol: VLESS
Address and port: verified with the server
Transport: tcp
Security layer: reality
flow: xtls-rprx-vision
serverName: verified with the server
Local SOCKS: 10808
Local HTTP: 10809

If an Android device needs Xray's REALITY and Vision capabilities, use v2rayNG with the Xray core and confirm that the relevant fields remain intact after import. v2flyNG uses the v2fly core and suits VMess, VLESS, Trojan, and Shadowsocks configurations supported by that core, but some Xray-specific combinations cannot be assumed to work based only on the name in a share link.

A successful subscription import only means that the client recognized the text; it does not confirm that the server parameters are correct. When a connection fails, open the client log and distinguish DNS resolution failures, refused connections, TLS handshake failures, authentication failures, and local port conflicts. Each error requires action at a different layer; repeatedly switching protocols usually only hides the real problem.

Common selection questions and practical answers

Can I simply choose VLESS for home broadband?

First confirm that the server uses Xray and provides complete VLESS parameters. If an existing VMess node is stable, there is no need to migrate just because of the protocol name. For a new configuration, start by evaluating VLESS + REALITY + XTLS Vision.

What should I do if VMess keeps reporting authentication failures after import?

Enable automatic system time synchronization first, then check UUID, alterId, and security. VMess authentication depends on time, so a large difference between the device clock and standard time can cause failure even when the address and port are correct.

What should I do if Trojan's password is correct but the TLS handshake fails?

Check DNS resolution, port 443 or the actual listening port, serverName, the domain covered by the certificate, and the device time in that order. If TLS has not been established, changing the Trojan password will not fix a certificate or domain problem.

Should I choose AES or ChaCha20 for Shadowsocks?

On a desktop processor with AES hardware acceleration, start with AES-128-GCM. On a low-power device, compare ChaCha20-Poly1305. The final choice must be provided by the server and explicitly supported by the client core.

Is it normal for speed not to change after switching protocols?

Yes. The bottleneck is often the server's egress, the inter-network route, or the local wireless network. Keep the same server and test period, changing only the protocol configuration, to meaningfully assess differences from encapsulation and encryption.

Protocol selection checklist

For a new Xray configuration with v2rayN on desktop and v2rayNG on Android, start by considering VLESS and the security combinations supported by Xray. If you already have many stable VMess configurations, keeping them and maintaining the correct parameters is more practical. Trojan has a clear structure when you can properly manage a TLS domain and certificate. Shadowsocks is worth testing separately when resources are limited and the server supports a matching encryption method.

Final decision: reproducible stability beats theoretical rankings

The same protocol can behave very differently across routes, cores, and transport combinations. Keep complete parameter records, compare configurations one by one on the same server, and choose the combination that recovers reliably on your everyday networks and is easy to troubleshoot.

Download v2rayN