Fexyn
Fexyn
All posts

VLESS vs Shadowsocks: which protocol actually beats censorship?

Fexyn Team··9 min read

On April 20, 2012, a Chinese developer going by "clowwindy" pushed a Python script to GitHub. Two days later, he shared it on V2EX, a Chinese developer forum. The project was called Shadowsocks. It was an encrypted SOCKS5 proxy, simple by design, and it gave millions of people in China a way past the Great Firewall.

For three years, Shadowsocks was the most reliable tool for circumventing Chinese internet censorship. Then, on August 22, 2015, clowwindy was visited by police and forced to delete the repository. His final commit message: "I hope one day I'll live in a country where I have freedom to write any code I like without fearing."

The project survived through forks. The community carried it forward. But the Great Firewall kept evolving too, and by 2024, the detection methods China deployed against Shadowsocks had become extremely effective. Not because Shadowsocks was badly designed. Because the fundamental approach of making traffic look like random noise turned out to have a ceiling.

VLESS Reality, released in Xray-core v1.8.0 in early 2023, takes a different approach. Instead of encrypting traffic into randomness, it disguises VPN connections as ordinary HTTPS sessions to real websites. That distinction matters more than it sounds like it should.

How Shadowsocks works

Shadowsocks is an encrypted proxy. Your client connects to a remote server, and all traffic between them is encrypted using a pre-shared key with AEAD ciphers (typically chacha20-ietf-poly1305 or aes-256-gcm). From the perspective of a network observer, the connection is a stream of bytes that look like random data. No protocol headers, no handshake pattern, no identifiable structure.

This was the design goal. If traffic looks like nothing recognizable, a DPI system can't match it against a known protocol signature. In 2012, this worked. China's firewall was primarily matching against protocol fingerprints, and traffic that didn't match anything got through.

The architecture is lightweight. A Shadowsocks server is a single binary with minimal configuration. The client ecosystem is enormous: ShadowsocksR, Clash, Surge, Quantumult, dozens of Android and iOS apps. For countries with moderate censorship, such as Indonesia, Turkey, or Egypt, Shadowsocks still works reliably because their DPI infrastructure isn't sophisticated enough to flag it.

But China isn't those countries.

The entropy problem

Here's the thing about random noise: it has a statistical signature.

Legitimate HTTPS traffic has structure. A TLS 1.3 handshake begins with a ClientHello containing cipher suites, extensions, and a server name indication. The server responds with certificates, which are ASN.1-encoded X.509 structures. These have low entropy in predictable places. Record sizes follow patterns tied to common web frameworks. Even the encrypted application data that follows has characteristic distributions.

Shadowsocks AEAD traffic has near-perfect entropy from the first byte. The ratio of ones to zeros approaches 1:1 across every segment. There are no low-entropy headers, no structured handshake, no certificate exchange. Every byte looks uniformly random.

That uniformity is the problem. On a real network, nothing else looks like that. HTTPS doesn't. DNS doesn't. HTTP/2 doesn't. A stream of bytes with uniformly high entropy and no protocol structure is, paradoxically, one of the most distinctive things you can send over a network.

China figured this out.

How China detects Shadowsocks

Research published in the GFW Report and presented at IMC 2020 documented China's detection pipeline in detail. It operates in two phases.

Phase one: passive analysis. The GFW performs entropy measurement on the first data packet of every new connection. If the payload has uniformly high entropy and doesn't match the structure of any known protocol (TLS, HTTP, SSH, DNS), the connection gets flagged for active probing. This happens in real time, on backbone routers, at line speed.

Phase two: active probing. Once a connection is flagged, the GFW dispatches probes from a pool of over 12,000 IP addresses. These probes send seven different types of test traffic to the suspected Shadowsocks server: replayed handshakes, partial connections, malformed requests, and protocol-specific challenges. A real Shadowsocks server responds to these probes differently than a legitimate service would. A web server returns HTTP errors. An SSH server sends a version banner. A Shadowsocks server either decrypts and proxies the garbage, or drops the connection in a way that's statistically distinguishable from normal protocol errors.

The combination is devastating. As of February 2026, Shadowsocks has roughly a 95% detection rate on Chinese networks. On CN2 (China Telecom's premium backbone), the success rate for Shadowsocks connections is about 76%, but that number drops during politically sensitive periods when the GFW ramps up enforcement.

These aren't theoretical numbers. They come from crowdsourced testing across multiple Chinese ISPs and exit points.

The VLESS Reality approach

VLESS Reality starts from a different premise. Instead of making traffic look like nothing, make it look like something specific. Something boring. Something that billions of connections look like every day.

When a VLESS Reality client connects to a server, it performs a real TLS 1.3 handshake. The server reaches out to a legitimate website (the "dest" target, often something like www.microsoft.com or www.apple.com) and forwards that site's actual TLS certificate to the client. To any network observer, the connection looks identical to a normal HTTPS session with Microsoft or Apple. The Server Name Indication matches. The certificate is genuine. The TLS fingerprint matches a real browser.

The VPN data rides inside this TLS session using Xray-core's multiplexing. From the outside, it's indistinguishable from someone browsing Microsoft's website.

Active probing fails against this setup. If the GFW sends a probe to a VLESS Reality server, the server responds exactly like the destination website would, because it's proxying the real site's responses. There's no behavioral difference to detect.

The result: VLESS Reality connections have a detection rate below 5% on Chinese networks. The success rate on CN2 routes is around 98%. That gap between 76% and 98% is the difference between a protocol that works sometimes and one that works reliably.

Head to head

Performance characteristics tell a more nuanced story than detection rates alone.

Detection resistance

Shadowsocks gets caught by entropy analysis on the first packet. VLESS Reality passes entropy analysis because its traffic has the same statistical profile as HTTPS. On networks with basic DPI (most of Southeast Asia, parts of the Middle East), both protocols work fine. On networks with advanced DPI (China, Iran, increasingly Russia), Shadowsocks is unreliable. VLESS Reality works.

Latency

Shadowsocks is faster. A Shanghai-to-Los Angeles connection over Shadowsocks typically shows 130-160ms latency. The same route over VLESS Reality runs 160-210ms. The extra latency comes from the TLS handshake overhead and the certificate forwarding step. For most usage, 30-50ms of additional latency isn't perceptible. For competitive gaming over a VPN (which, yes, people do from China), it matters.

CDN routing

This is where the architectural difference really shows. Shadowsocks cannot route through CDN infrastructure. It's a raw TCP connection between client and server. If the direct path between your ISP and the server is blocked or throttled, you're stuck.

VLESS supports WebSocket and XHTTP transports, which means it can ride through Cloudflare, AWS CloudFront, or other CDN providers. Your traffic enters the CDN at a nearby edge node and exits at the CDN node closest to your VPN server. The censor sees a connection to Cloudflare, which hosts millions of legitimate websites. Blocking Cloudflare means breaking half the internet. Most governments won't do that. (Iran briefly tried in 2022. They reversed it within days.)

Resource usage

Shadowsocks is lighter. A Shadowsocks server can handle thousands of concurrent connections on a $5/month VPS. VLESS Reality requires more CPU for the TLS operations and more memory for connection state. For operators running proxy servers for friends and family, Shadowsocks is cheaper to host. For a commercial VPN service that needs reliability in hostile network environments, the extra resources are a minor cost.

Client ecosystem

Shadowsocks has been around since 2012. The client ecosystem is massive. Nearly every proxy manager on every platform supports it. Clash, Surge, Quantumult X, v2rayNG, dozens of others.

VLESS Reality support is newer but spreading. Xray-core is the reference implementation. v2rayN, v2rayNG, Nekobox, Hiddify, and Streisand all support it. The gap is closing, but Shadowsocks still has broader client compatibility today.

When to use which

The honest answer: it depends on where you are.

Shadowsocks is the right choice when your adversary has basic or moderate DPI. Countries like Vietnam, Turkey, Indonesia, or Egypt. The setup is simpler, the latency is lower, and the server overhead is smaller. If Shadowsocks works reliably on your network, there's no reason to use something heavier.

VLESS Reality is the right choice when you're dealing with advanced, state-level DPI. China, Iran, Russia after 2024, and any network where Shadowsocks connections are getting detected and killed. The extra latency and complexity are worth it when the alternative is a protocol that fails 95% of the time.

Some networks fall in between. In those cases, having access to both protocols with automatic fallback is the practical answer. Try the faster option first. If it fails, switch to the one designed for harder environments.

What this means for Fexyn

Fexyn VPN includes VLESS Reality with the Vision flow as one of three protocols alongside WireGuard and OpenVPN. Our automatic rotation engine tries protocols in sequence and falls back when one is blocked. On unrestricted networks, you get WireGuard's speed. On censored networks, the client switches to VLESS Reality without manual intervention.

We don't include Shadowsocks. Not because it's a bad protocol. It changed the field. Clowwindy's work gave millions of people access to the open internet, and the community that carried the project forward after 2015 deserves real credit for that. But for a commercial VPN product that needs to work reliably in the hardest environments, VLESS Reality's approach of looking like normal traffic rather than looking like nothing is the stronger foundation.

Shadowsocks solved the 2012 problem. VLESS Reality with Vision solves the 2026 problem. The censors got better at detection. The protocols had to keep up. (For the underlying concept of why this matters, see what is censorship resistance.)

If you want to understand the technical details of how VLESS Reality's TLS forwarding works, we wrote a full breakdown in VLESS Reality explained. For how it compares to WireGuard (a completely different tradeoff), see VLESS vs WireGuard. And for background on what DPI systems actually look at, that piece covers the detection side in depth.

VLESS vs Shadowsocks: which protocol actually beats censorship? | Fexyn VPN