How REALITY and XTLS Vision work: why the next-generation VLESS transport can be faster

Learn how XTLS Vision reduces redundant encryption and how REALITY works without your own certificate, with a clear look at TLS handshakes and Xray performance.

At a glance

VLESS handles the proxy protocol, REALITY secures and authenticates the connection, and XTLS Vision optimizes forwarding for certain traffic. This guide is for users who have imported a node but aren’t sure what Flow, the public key, and SNI each do. You’ll learn to distinguish performance gains from network bottlenecks and check your v2rayN settings against the server parameters.

What layer do VLESS, REALITY, and Vision operate on?

“VLESS + TCP + REALITY + Vision” in a node name doesn’t mean four interchangeable protocols. It describes different settings for the same proxy connection. VLESS carries user identity and destination details; TCP transports the byte stream; REALITY provides a secure handshake and authentication; and Vision is a VLESS flow-control mode that can optimize the data path when conditions allow.

NamePrimary roleFields to check
VLESSProxy requests, user identity, and destination detailsAddress, port, UUID
TCP / RAWCarries an ordered byte streamTransport type; the label varies by interface and version
REALITYSecure handshake and server authenticationSNI, public key or corresponding authentication field, Short ID
XTLS VisionIdentifies traffic and selects a forwarding pathxtls-rprx-vision

VLESS does not provide payload encryption in the traditional sense. In common configurations, encryption=none does not mean the entire connection is sent in plaintext. With REALITY, protection comes from the outer security mechanism. Don’t change VLESS’s encryption field to an option from another protocol just to “make it more secure.”

This article covers the Xray combination of VLESS + REALITY + Vision. v2rayN manages nodes and runs the core; it isn’t the combination itself. To determine whether a connection will work, check the core that actually starts and the configuration it generates—not just the client’s name.

Where does redundant encryption happen when HTTPS goes through a proxy?

When you visit an HTTPS site, your browser establishes a TLS session with the destination. A proxy usually just relays this already-encrypted data; it doesn’t decrypt the page. If the proxy link also uses TLS, the client may need to wrap and encrypt the inner TLS data again before sending it to the proxy server, which then removes the outer layer.

Browser request Website TLS Local proxy entry Secure proxy connection Server forwarding

There are two distinct security layers: the inner one protects content between the browser and the website, while the outer one protects traffic between the client and proxy server. Both serve a purpose, but fully encrypting large amounts of already-encrypted data again adds CPU, buffering, and data-copying overhead. This overhead is more likely to become a bottleneck under high throughput or on less powerful processors.

This model doesn’t apply to every request. Ordinary HTTP has no website TLS layer, and UDP traffic isn’t an HTTPS byte stream that follows the same processing path. So “less double encryption” doesn’t mean every app will get a fixed speed boost.

How XTLS Vision changes the data forwarding path

Vision doesn’t disable protection when a connection starts. It first handles the protocol header and initial data, then checks the inner TLS state. For eligible TLS 1.3 traffic, it switches to an optimized data path at the appropriate stage, avoiding unnecessary outer encryption of application data that’s already encrypted.

  1. Establish the connection. The client and server complete the outer secure handshake and exchange the VLESS identity and destination details.
  2. Identify the traffic. Vision checks the inner TLS handshake and record characteristics. During the initial stage, it also uses padding to adjust early packet characteristics.
  3. Switch only when conditions are met. Eligible TLS 1.3 traffic moves to a direct forwarding path, while the inner TLS continues to protect website data.
  4. Other traffic keeps its applicable handling. If the conditions aren’t met, don’t assume the outer encryption has been removed; the core determines the actual path.

“Direct forwarding” doesn’t necessarily mean a specific operating-system-level zero-copy operation is enabled. Whether further copying can be reduced depends on the system, connection type, and core implementation. Setting xtls-rprx-vision in the configuration only enables that flow-control mode; it doesn’t guarantee every connection will use the same fast path.

Check whether the CPU is the bottleneck first

On the same route, if a download already saturates the available bandwidth and the CPU has headroom, Vision may make little or no difference. If a client or server core stays busy on one CPU core, compare throughput and CPU usage with the same file at the same time of day.

How REALITY works without your own certificate

A conventional TLS server usually needs a certificate and private key for its domain. REALITY uses a different handshake and authentication design, incorporating TLS handshake characteristics from a destination site so the proxy server doesn’t need to obtain and renew a public certificate for its domain in the usual way. It doesn’t mean copying an arbitrary website’s certificate to the server.

The client still needs to verify that the connection is trusted. Common deployments use an X25519 key pair generated by the server: the private key stays on the server, while the public key is shared with clients. The client also needs the correct SNI, Short ID, and other parameters. The Short ID helps identify connections, but it can’t replace key authentication and shouldn’t be treated as the sole login password.

The server also sets a handshake destination, which may appear as target or, in older versions, dest. The destination needs suitable TLS support and must be reachable from the server; a poor choice can disrupt the handshake. Connections that fail authentication may be routed to the destination site, but this doesn’t mean a proxy is undetectable in every network environment.

v2rayN setup: check each field instead of guessing from the node name

Import the complete subscription or share link from your provider, then open the node editor. The two cards below illustrate fields to check for the same connection; they aren’t ready-to-use node settings. Port 443 is just a common example—use the value configured on your server.

VLESS and transport fields

Protocol
VLESS
Server port
443 (example)
Transport
TCP / RAW
Encryption
none
Flow
xtls-rprx-vision

Use the node’s original address and UUID. The server must support the selected Flow.

REALITY authentication fields

Security type
reality
SNI
Domain allowed by the server
Public key
Public key provided by this server
Short ID
Hexadecimal value matching the server
Fingerprint
chrome (common option)

Field names may vary by core and client version; check them after importing.

In v2rayN, go to Settings → Parameter Settings to check the local listening port, then verify which core the current node actually uses. Menu details vary by version, but the local and remote ports are always separate. Your browser connects to the local proxy entry; the core connects to the node’s remote port.

TLS 1.3
Inner TLS version relevant to Vision optimization
443
Example remote listening port; use the value in the node configuration
10808
Example local SOCKS port; use the value set in your client

On Android with v2rayNG, check the VLESS, REALITY, and Flow fields, along with core support. v2flyNG uses the v2fly core, so don’t assume this Xray-specific combination will work unchanged. A node appearing in the list doesn’t guarantee the current core supports every feature it uses.

How to verify a speed improvement—not just check the latency

When comparing protocols, keep the server, exit, and test destination as consistent as possible. Comparing servers in different regions can make route differences look like protocol gains. A basic TCP connectivity test only shows that a connection to a port can be established; it doesn’t prove REALITY authentication succeeded or that Vision switched to its optimized path.

  1. Keep conditions consistent: Record the client and core versions, node address, transport, Flow, and system proxy status. Close other downloads.
  2. Confirm traffic uses the proxy: Check the logs for the destination connection and routing result to make sure the speed test domain isn’t matched by a direct-connection rule.
  3. Track metrics separately: Record time to first byte, sustained download speed, and CPU usage on the client and server. Don’t use a single latency reading as an overall score.
  4. Repeat measurements: Run each setup three times for 60 seconds per run, then compare the median. This is a suggested test method, not a result measured for this article.
  5. Investigate unexpected results: If speed drops, check packet loss, server load, and exit bandwidth limits. If CPU usage falls but speed doesn’t change, bandwidth may already be the limiting factor.

Keep a stable, working setup first; then measure any optimization gains

Match the client parameters to the server configuration before testing Vision. Don’t change Flow, transport type, and routing mode at the same time. Change one variable per test to identify what caused any performance difference.

Common REALITY and Vision connection problems

The port test succeeds, but why won’t web pages load?

First check the core logs to see whether the handshake completed, then verify the UUID, SNI, public key, and Short ID one by one. An open port only confirms connectivity at the TCP layer. If the handshake succeeds but pages still fail, check DNS and routing. In v2rayN, confirm the system proxy entry from the tray menu and check whether the browser has its own proxy settings.

Will changing Flow to Vision make the connection faster?

Changing the client setting alone isn’t enough. Open the node editor and compare Flow with the server configuration. If the server doesn’t use the matching flow-control mode, entering xtls-rprx-vision on the client alone may make the connection fail. For subscription nodes, keep the value supplied by the provider whenever possible.

Can I change REALITY’s SNI to a popular website?

Check which names the server allows first; don’t substitute one at random. The connection address, SNI, and server handshake destination serve different purposes. Restore the value from your subscription and reconnect. If it still fails, ask the server administrator to check destination reachability and system time.

After updating the client, it says a parameter is unrecognized. Which field should I delete?

First note the client and actual core versions, then check the field named in the logs and reimport the complete subscription. Older and newer cores may use different field names; don’t delete authentication fields or disable verification. On desktop, confirm that the node is using an Xray core that supports this combination.

Follow a consistent troubleshooting order: local entry, remote port, authentication parameters, core compatibility, DNS and routing, and only then performance testing. REALITY deployment and Vision forwarding optimizations can reduce overhead at specific stages, but whether a connection works still depends on the entire path.

Download v2rayNChoose a client for your platform