REALITY handles authentication and the appearance of the connection handshake, while XTLS Vision optimizes data encapsulation and avoids redundant encryption inside the proxy tunnel. This guide is for readers who have imported a VLESS node and want to understand security options and the Flow field. You’ll learn to tell the server address from SNI, check client settings, and determine whether encryption is really the speed bottleneck.
First, separate the three names: VLESS, REALITY, and Vision
A common node setup in v2rayN or v2rayNG is “VLESS + REALITY + XTLS Vision.” These are three distinct components, not interchangeable protocol names. VLESS defines how proxy requests carry user credentials and destination addresses; REALITY handles the outer secure handshake and authentication; Vision is an Xray flow-control mechanism that determines how some data is handled inside the tunnel. Understanding these separate layers makes it easier to know which setting to check when something goes wrong.
| Layer | Setting | Primary role | Does not replace |
|---|---|---|---|
| Proxy protocol | VLESS | Carries user credentials, destination address, and request data | Does not provide complete transport encryption on its own |
| Security layer | reality | Establishes an authenticated secure connection and handles unauthenticated handshakes | Does not replace routing rules |
| Flow control | xtls-rprx-vision | Identifies eligible TLS traffic and optimizes subsequent data transfer | Does not fix packet loss or congestion on every route |
A common value for VLESS encryption is none. This means the VLESS protocol does not add another layer of payload encryption; it does not mean the entire connection is sent in plaintext. With REALITY, the security layer still participates in establishing the connection. And when you visit an HTTPS site, the application’s own TLS encryption remains in place.
Why HTTPS traffic through a proxy can have two layers of encryption
When you open an HTTPS website, your browser first completes a TLS handshake with the destination. The page, login details, and response data are then encrypted at the application layer. The proxy simply carries this connection to the destination; it does not gain the keys needed to decrypt the website session.
If the proxy tunnel also uses TLS, the browser’s encrypted traffic is wrapped again in TLS records for the proxy connection. The client encrypts the outer layer, the server decrypts it, then forwards the inner ciphertext to the website. This “double wrapping” is common and useful in many cases, but with high-volume traffic it adds encryption and decryption work, buffer handling, and data-copying overhead.
Vision does not disable HTTPS. Instead, it identifies the stages of an inner TLS connection and changes how subsequent data is transferred when conditions allow. For recognized TLS 1.3 traffic, it can switch to direct forwarding at the appropriate stage, so already-encrypted application data avoids redundant TLS encryption and decryption by the outer layer. The initial handshake and necessary proxy information still need protection; the connection does not simply send all data in the clear once established.
- Website encryption remains unchanged: The browser still verifies the destination website’s certificate. The proxy should not ask you to disable certificate verification for websites.
- Optimization depends on traffic matching specific conditions: Not all TCP data or TLS versions can use the same optimized path.
- Plain HTTP does not become HTTPS: Vision does not add end-to-end encryption between an application and its destination website.
- The handshake stage still uses padding: Vision pads data during the initial stage, so it is inaccurate to say that “every packet gets smaller.”
How REALITY borrows the look of a real website’s handshake
A standard TLS proxy service usually needs its own domain and certificate. REALITY takes a different approach: the server is configured with a suitable real TLS destination, and the client starts a handshake using agreed authentication parameters. If authentication succeeds, the client and REALITY server establish a proxy tunnel. If it fails, the server can forward the connection to the configured destination, making it look like a normal TLS interaction with a real website.
“Borrowing a real website” is a useful way to understand the idea, but it does not mean the server has that website’s private key or that all proxy traffic is routed through the site. After successful authentication, the server forwards proxy data to the requested destination. The configured website is mainly involved in the handshake’s appearance and the handling of unauthenticated connections. The client also does not establish trust in the REALITY server simply by copying the destination website’s public certificate locally.
The server address, SNI, and real destination are different fields
- Server address: The IP address or domain the client actually connects to—the proxy server. Do not replace it with the website used as the handshake destination.
- SNI / Server Name: The name the client uses in the handshake. It must be allowed by the server. A reachable address does not mean this field is correct.
- Server’s real destination: Chosen by the server operator. Check for compatibility requirements such as TLS 1.3 and HTTP/2, along with latency and reachability from the server.
- Client fingerprint: Affects how the ClientHello is constructed, for example
chrome. It cannot replace the correct key, SNI, or identity parameters, and it does not guarantee behavior identical to a real browser in every respect.
Which settings to check in v2rayN and v2rayNG
Start by importing a complete node from a trusted subscription, then check its fields in the node editor. Menu names vary across client versions, but the meanings of protocol, transport, security layer, and Flow stay the same. The cards below show how to check settings at both ends of the same connection; they are not complete nodes to copy and use as-is. Port 443 is only a common example—use the port the server actually listens on.
Client node settings
- Protocol
VLESS- Transport
- TCP; newer versions may also label it RAW
- Security layer
reality- Flow
xtls-rprx-vision- Fingerprint
chrome, confirm against the server configuration
You’ll also need the correct address, port, user ID, SNI, key parameters, and Short ID from your node provider.
Corresponding server requirements
- Inbound protocol
VLESS- Listening port
443, or the port actually configured- User Flow
xtls-rprx-vision- Security settings
- REALITY private key and permitted names
- Handshake destination
- A TLS website that meets the requirements and is reachable from the server
The private key stays on the server. Client authentication parameters must match the server configuration; do not generate replacements at random.
REALITY key parameters may have different names in client interfaces and across Xray configuration versions. Older configurations commonly use publicKey, while newer ones may use password. Don’t transfer JSON by matching field names alone; follow the documentation for the running core and the client’s import rules. The server’s private key should never be shared with regular users.
A Short ID is a hexadecimal string. If it is not empty, its character count must be even, with a maximum length of 16 characters. Whether an empty value is allowed depends on the server configuration. It is not a user ID or a field for a random note. If your subscription provides a Short ID, keep it unchanged; altering even one character can cause authentication to fail.
Bottom line: match the full set of settings before changing the fingerprint
First check the address, port, user ID, Flow, SNI, and authentication parameters. Changing the fingerprint is only useful for troubleshooting once the basic settings match and the core is confirmed to support them. Changing several parameters at once makes it harder to pinpoint the next error.
Why removing a layer of encryption can make things faster—and why it might not
Encryption is not the only source of overhead, but it can be a significant one on high-throughput connections. Vision reduces redundant encryption and decryption for eligible data and, where the implementation allows, uses a more efficient transfer path to reduce CPU usage and data-copying overhead. These gains are more noticeable when a server handles multiple high-volume connections than with short web requests.
If the bottleneck is packet loss on a mobile network, server egress bandwidth, ISP congestion, or destination rate limiting, removing a layer of encryption may not change download speeds. TCP congestion control still applies, and REALITY cannot increase a route’s physical bandwidth. A fast result from one node does not prove that “all REALITY nodes are faster than other setups.”
| Observed behavior | What to check first | What Vision might do |
|---|---|---|
| One CPU core stays near 100% during downloads | Client and server CPUs, core versions, and the actual Flow setting | May reduce processing overhead when optimization conditions are met |
| CPU usage is low, but speeds fluctuate | Packet loss, congestion, egress bandwidth, and destination rate limits | Usually cannot fix a route bottleneck directly |
| Web pages load slowly at first, but sustained downloads are normal | DNS, handshake round-trip time, connection reuse, and destination response | Optimizing sustained traffic does not guarantee lower page-load latency |
| Speeds change significantly after switching nodes | Whether both servers use the same route and have comparable load | This result alone does not establish that Flow control is responsible |
How to run a fair comparison
- Use the same device, network, server, and download target. Close other bandwidth-heavy tasks, and don’t mistake changes in Wi-Fi signal strength for protocol gains.
- Use two test configurations explicitly supported by the server. Don’t simply clear the Flow field to create a baseline; client and server settings must match.
- Run a 60-second download three times per setup, and record average throughput, client CPU usage, server CPU usage, and connection errors.
- Test a large file and initial webpage load separately. If CPU usage drops but throughput stays the same, the optimization is working, but the current speed bottleneck may be elsewhere.
Bottom line: compare throughput and CPU usage
Make sure the route, destination, and load are the same before comparing speed and processing overhead. This guide does not promise a fixed percentage increase: device performance, core implementation, and network conditions vary, so one number cannot represent every node.
Troubleshoot connection failures by handshake stage
“Handshake failed” only means the secure connection was not completed; it does not automatically indicate a certificate problem. Mismatched REALITY authentication parameters, an unapproved SNI, an unreachable server destination, or an incorrect device clock can all cause a connection failure. First check whether TCP connects, then verify REALITY authentication, and finally check the VLESS user and Flow settings. This is usually more effective than repeatedly switching encryption options.
- Check the connection address first: Make sure the client is connecting to the proxy server, not the handshake destination. If the logs show a timeout or connection refusal, check the listening port, firewall, and network reachability.
- Check the system clock next: In Windows, open Settings → Time & language → Date & time and check automatic time and sync status. On Android, enable automatic date and time. REALITY may enforce a time-difference limit based on the server policy.
- Verify the authentication parameters: Compare SNI, the client authentication key parameters, and Short ID one by one. If the server key has changed, an old subscription may stop working even when the address is unchanged.
- Check the user and Flow: Confirm the VLESS user ID exists on the server and both ends use compatible Vision settings. Don’t confuse REALITY security settings with the Flow field.
- Check which core is actually running: Confirm that v2rayN is using an Xray core that supports this combination. Being able to save a node in the interface does not guarantee that the selected core accepts every field.
- Check the destination and forwarding last: If the handshake succeeds but pages won’t load, check server DNS, outbound routing, destination reachability, and whether the client is sending that traffic through the proxy.
Can enabling allowInsecure fix REALITY authentication failures?
Don’t use it as a general fix. Skipping standard TLS certificate verification will not make an incorrect REALITY key, Short ID, or SNI match. Restore the complete parameters from your node provider and use the handshake logs to find the cause. Don’t disable certificate verification in your browser for destination websites just to test.
Can I use WebSocket or a relay with a REALITY node?
This guide covers TCP/RAW; you can’t simply switch the client to WebSocket, enter a path, and expect it to keep working. A common HTTPS relay terminates and re-establishes TLS, changing the end-to-end handshake conditions. Check the Xray version and the complete server design to confirm support for other transports or forwarding setups.
Why check routing after importing a subscription?
A subscription provides node settings; routing determines which requests use the node. If a connection test succeeds but a website still connects directly, a routing rule may have matched direct first—it does not necessarily mean REALITY failed. Check the actual outbound route for that request before changing rules, so you don’t mistake a routing issue for a security-layer failure.