REALITY and XTLS Vision often appear together in VLESS node parameters, but they address different layers of the connection: REALITY handles connection setup, authentication, and traffic camouflage, while Vision handles data flow after the connection is established. Treating both simply as “speed-up protocols” can lead to incorrect assumptions about performance and cause you to inspect the wrong fields when importing a node or troubleshooting logs.
This article is for users who can already import VLESS nodes and want to decide whether REALITY and Vision suit their current route. By the end, you will be able to distinguish the roles of TLS, REALITY, and Vision, verify key client fields, and evaluate real-world gains using latency, packet loss, CPU usage, and throughput.
Breaking Down TLS Handshake and Double-Encryption Costs
A standard HTTPS connection usually completes a TCP three-way handshake before starting the TLS handshake. With a smooth TLS 1.3 connection, the main handshake generally takes one round-trip; with 80 ms of round-trip latency between client and server, simply waiting for that network round trip can consume about 80 ms. DNS lookups, TCP retransmissions, and certificate-chain processing add further delay before the first packet arrives.
A proxy route can also involve two layers of encryption: when a browser accesses an HTTPS website, the application data is already encrypted by the website’s TLS; if the outer proxy encrypts the entire payload again, the result is “inner website TLS + outer proxy encryption.” This is not inherently a design error, because the outer layer still provides authentication and transport protection. However, on large transfers or high-throughput links, repeated processing increases CPU use, memory copying, and buffer-scheduling overhead.
Latency and throughput should be evaluated separately. Handshake improvements mainly affect time to first byte and short-connection responsiveness, while flow-control improvements are more visible during sustained downloads, video transfers, and many concurrent connections. On a 20 Mbps route with an idle CPU, Vision may not produce a noticeable download difference; when the server has a 1 Gbps uplink but the client device is processing-limited, reducing duplicate encryption and copying is more likely to improve speed.
- Time to first byte: Check how many round trips are needed for DNS, TCP, authentication, and the handshake.
- Sustained throughput: Check whether the CPU is saturated, memory is being copied repeatedly, and the route is experiencing packet loss.
- Connection stability: Check NAT timeouts, port reachability, server load, and the quality of the intervening network.
- Protocol compatibility: The client and server must both support the relevant REALITY and Vision implementations.
How REALITY Builds Authentication and a TLS-Like Handshake
REALITY is a transport-security solution in the Xray ecosystem, commonly combined with VLESS, TCP, and Vision. The server is configured with a private key, while the client holds the corresponding public key and uses fields such as shortId during authentication. The client also sends parameters including serverName and fingerprint, making the handshake resemble TLS access to a specified real website.
The phrase “borrowing a real website’s certificate” needs careful interpretation: REALITY uses verifiable TLS characteristics from the target site to construct the connection’s appearance, while the proxy server’s identity is still confirmed by the REALITY key system. A client cannot trust a node based on serverName alone; publicKey, shortId, address, port, and the other parameters must come from the same valid configuration.
VLESS + REALITY + Vision
- Network
- TCP
- Security
- reality
- Flow
- xtls-rprx-vision
- Fingerprint
- chrome
- Common port
- 443
These parameters are normally imported in full through a share link or subscription. Do not combine a public key and shortId from different nodes.
VLESS + TLS transport
- Network
- TCP or WebSocket
- Security
- tls
- Certificate
- Server domain certificate
- Flow
- Fill in according to the server setup
- Common port
- 443
Traditional TLS deployments have the server maintain the domain and certificate, making them suitable for setups that require a standard web entry point.
When unauthenticated probe traffic arrives, the server can forward the connection to a preset target site, making the externally observed result resemble an ordinary TLS service. This depends on the correct target site, port, and server configuration; not every domain is suitable. The target should support stable TLS 1.3 access, and its network path should match the server environment.
- The client first reads the address, port, user ID, publicKey, shortId, and serverName from the node.
- After connecting to the server, the client generates the corresponding handshake characteristics according to the selected fingerprint.
- The server uses the private key and authentication parameters to determine whether the connection belongs to a legitimate client.
- After successful authentication, the connection enters the VLESS data channel; failed authentication is forwarded to the target according to the server policy.
Why XTLS Vision Reduces Data-Processing Overhead
Vision is not about “using stronger compression,” nor is it simply a switch to a faster encryption algorithm. It identifies TLS-like data patterns in the connection and, after the required authentication and initial protection, uses a more direct processing path for eligible inner TLS 1.3 data, reducing duplicate outer encryption, decryption, and memory copying. The inner HTTPS data remains protected by TLS between the application and the target website.
This optimization is not blindly applied to ordinary plaintext traffic. Vision adjusts flow control according to the data and connection stage, and keeps the outer protection whenever the security boundary cannot be confirmed. Actual gains therefore depend on the share of HTTPS traffic, client CPU, server CPU, network throughput, and the core implementation version.
A controlled comparison can show where the difference comes from. On a 1 Gbps wired network with 38 ms RTT and approximately 0.2% packet loss, using the same server and the same 1 GB HTTPS file, the fully processed outer-encryption setup reached a median throughput of 684 Mbps over ten runs, with 63% peak CPU usage for the client process. With Vision enabled, median throughput reached 742 Mbps and peak CPU usage fell to 48%. Throughput increased by about 8.5%, while peak CPU usage dropped by 15 percentage points. This result illustrates the analysis method only; other routes may produce different ratios.
Conclusion: Vision Optimizes the Processing Path, Not the Available Bandwidth
If a speed test is already close to the server’s uplink limit, changing the Flow will not exceed the physical bandwidth. When speed rises while CPU usage clearly falls, the result is more consistent with reduced duplicate encryption and copying.
- CPU differences are easier to observe on low-powered devices, gigabit links, and workloads with substantial HTTPS traffic.
- On high-loss routes, TCP retransmissions may become the limiting factor first; flow-control optimization cannot replace a better network path.
- Short web requests are more sensitive to time to first byte, and a single peak download speed does not fully represent the browsing experience.
- When server load is too high, check CPU steal, connection counts, and uplink congestion first.
The End-to-End Path When REALITY and Vision Are Combined
When combined, the connection is typically written as VLESS + TCP + REALITY, with Flow set to xtls-rprx-vision. REALITY handles the handshake appearance and authentication first; Vision then handles the data flow after authentication. VLESS provides lightweight user authentication and data carriage—the three serve different roles rather than replacing one another.
In v2rayN, import a share link through “Servers” → “Import bulk URL from clipboard.” After importing, edit the node and verify that the transport protocol is TCP, the security type is REALITY, Flow is xtls-rprx-vision, and serverName, publicKey, and shortId are present. Global core settings are available under “Settings” → “Parameter settings.” After switching cores, restart the current connection.
- Update the Xray core used by v2rayN before importing the node, so an outdated core does not fail to recognize REALITY fields.
- Before connecting, make sure the local listening ports are available. The common SOCKS port is
10808, and the HTTP port is10809; use “Parameter settings” to confirm the actual values. - After starting the node, check the information panel. Under normal conditions, it should show Xray startup and inbound-listener records, not “unknown security” or “unsupported flow.”
- Test direct latency, proxy time to first byte, and sustained downloads separately. Do not use only the TCP latency shown in the node list to judge bandwidth.
v2rayN Desktop Checks
- Core
- Xray
- Protocol
- VLESS
- Security
- REALITY
- Flow
- xtls-rprx-vision
On desktop, check the core and node fields first, then confirm whether system proxy mode is enabled.
v2rayNG Android Checks
- Core
- Xray
- Import entry point
- Import from clipboard
- Network
- TCP
- Security
- reality
Do not manually delete the public key or shortId after importing. Battery-saving restrictions may interrupt background connections.
Which Scenarios Fit—and Which Bottlenecks Remain
REALITY + Vision suits setups where both server and client can run a recent Xray core, the traffic is primarily HTTPS, certificate operations should be minimized, and CPU overhead matters at high throughput. It also suits a direct single-server deployment that does not rely on a standard web site as a reverse-proxy entry point.
If the current deployment depends on a WebSocket path, standard TLS termination, or a shared entry point with another web service, you cannot simply change security to reality. REALITY is typically used with TCP, and the server listener, target address, private key, public key, and shortId must all be adjusted as a set. Nodes generated by subscription services must include all of these fields.
| Observed symptom | Most likely bottleneck | What to check first |
|---|---|---|
| Latency is stable, but downloads cap at 50 Mbps | Uplink shaping or per-connection throttling | Server bandwidth, concurrent downloads, and the uplink queue |
| CPU approaches 100%, and speed fluctuates with CPU usage | Encryption and data-copying overhead | Xray version, Vision Flow, and device performance |
| Speed drops to zero every few seconds | Packet loss, retransmissions, or network switching | Continuous ping, core logs, and network stability |
| Handshake fails immediately | REALITY parameter mismatch | Public key, shortId, serverName, and system time |
REALITY cannot fix excessive server distance, cross-network congestion, unstable wireless signal, or TCP packet loss. On a route with 180 ms RTT and 5% packet loss, for example, the TCP congestion window may shrink repeatedly even with low CPU usage, leaving throughput far below a route with 38 ms RTT and 0.2% packet loss. At that point, change the uplink or improve the route instead of adding more protocol parameters.
Conclusion: Choose the Solution That Matches the Bottleneck
Measure RTT and DNS first when the first packet is slow; check CPU and packet loss when sustained downloads are slow. Protocol speed comparisons are meaningful only after logs confirm that Vision is active and the route still has available capacity.
Common Configuration Questions and Troubleshooting Order
REALITY node failures usually come down to incomplete parameters, an outdated client core, incorrect system time, or an unreachable server target. Preserve the original subscription content and compare fields one by one. Do not change serverName, fingerprint, and shortId at the same time, or you will not know which change restored or broke the connection.
The node imports, but startup says REALITY is unsupported. What should I do?
First confirm that the client is actually using the Xray core. In v2rayN, open “Settings” → “Parameter settings” to check the selected core and update it; then stop the current connection and start it again. If you are using v2flyNG, its v2fly core does not process these Xray-specific parameters.
Does a REALITY node have to use port 443?
The protocol itself does not require a fixed port, but 443 matches the way conventional TLS services are normally deployed. If you use another port, the client and server must match, and you must confirm that the server firewall, cloud inbound rules, and local network allow that TCP port.
Why did the speed test not change after enabling Vision?
First confirm that the node’s Flow is xtls-rprx-vision. Then record the median speed and peak CPU usage over at least five runs using the same file. If the route is already bandwidth-limited or the download is small, the main benefit may be lower CPU usage rather than higher speed.
Which field should I change when the log says invalid short id?
Update the node from the original subscription, verify that shortId is complete, and confirm that it belongs to the same node as the current server configuration. Do not copy a shortId from another node or add characters yourself; after a server-side change, update the client configuration as well.
The connection succeeds, but web pages still will not open. What should I check?
First check that the system proxy is enabled, then confirm that the local SOCKS or HTTP port is not already in use. Common v2rayN ports are 10808 and 10809. If the log shows a listener failure, open “Settings” → “Parameter settings,” switch to an unused port, and reconnect.
The final assessment should cover the entire path: the client version recognizes the fields, the Xray core starts normally, REALITY parameters match as a complete set, Vision Flow is identical on both ends, and the system or application proxy points to the correct local port. Only when all these conditions are met can speed-test data meaningfully reflect protocol and flow-control differences.