Proxy Protocol Comparison

On this page

Proxy protocols should be compared based on complete deployment combinations: how local traffic is intercepted, how the remote end expresses targets and authentication, how TCP/UDP is transported, and who verifies the security layer. You cannot directly map a protocol name to fixed levels like "high speed" or "always unrecognizable."

HTTP CONNECT and SOCKS5 are generic proxy interfaces; Shadowsocks, VMess, Trojan, VLESS, and Hysteria have their own authentication, packet, and transport designs. TUN is a local IP device interface, TLS is a transport security mechanism, WebSocket is message transport, and REALITY and Vision serve different responsibilities.

Comparison of complete combinations: intercept method, proxy semantics, transport, and security layer are recorded separately Local Entry: HTTP / SOCKS / TUN / TPROXY Determines how application traffic enters the proxy Remote Protocol: Target, Authentication, TCP/UDP Relay Semantics e.g., Shadowsocks, Trojan, VLESS, Hysteria Transport and Protection: TCP / QUIC, TLS / REALITY, Optional Obfuscation Determines reliability, identity verification, traffic appearance, and implementation overhead WebSocket, Vision, XUDP, TLS, and TUN do not belong to the same functional category and cannot be ranked directly after being placed in the same column.

Narrow the Scope Using Five Dimensions

DimensionQuestions to Answer
Traffic RequirementsIs only TCP proxied, or are UDP, long-lived connections, and high concurrency needed?
Network ConditionsCan the egress stably use UDP? Are there MTU or middlebox restrictions?
Trust MethodPublic certificates, self-signed trust, shared secrets, or pre-configured verification materials?
Transport CombinationOne connection per request, multiplexed over TCP, or independent QUIC streams?
Implementation ConditionsVersions on both ends, client capabilities, CPU, memory, and observability?

Local entry points and remote exits can be combined; for example, using a remote TCP proxy protocol after TUN interception. This does not automatically grant the remote protocol native UDP capabilities. Similarly, a SOCKS entry can connect to a QUIC remote transport; SOCKS is merely the local interface.

Core Mechanism Comparison

Protocol or CombinationProxy Semantics and Common TransportAuthentication and ProtectionKey Boundaries
HTTP CONNECTCreates tunnels by host/port; can use different HTTP versions for transportProxy authentication and outer TLS can be configured independentlyCONNECT itself is not encrypted; standard CONNECT does not equal UDP proxying
SOCKS5CONNECT, BIND, UDP ASSOCIATEMethod negotiation; username/password does not include encryption by defaultTCP control association and UDP data path are separate
Shadowsocks AEAD SeriesTCP encrypted chunks, UDP datagram protectionPre-shared key and AEADOld AEAD and AEAD-2022 are not the same wire format
VMessOwn request and data security mechanisms; can combine transportsUser identity, time, and encryption settingsOld format and AEAD header versions must be distinguished
TrojanProxy requests inside TLS; TCP and UDP relay encapsulationTLS server identity + proxy credentialsUDP can be encapsulated in reliable streams, but this does not equal native UDP exit semantics
VLESS + TLS/REALITY etc.User and target protocol, paired with transport security/stream modesUser ID still exists; protection depends on the selected combinationVLESS Encryption option currently exists; do not permanently write "no encryption"
Hysteria 2QUIC stream relay for TCP, QUIC DATAGRAM etc. for UDP transportTLS and application authentication, optional obfuscationUDP network conditions, negotiation capabilities, and congestion strategies affect performance

The table describes capability structures and does not guarantee that every client and combination implements all features. Protocol extensions, Mux, and UDP encapsulation must be verified against versions on both ends; do not treat optional modules of a specific implementation as mandatory protocol parts.

Shadowsocks: AEAD Protection and Wire Format Versions

Old AEAD TCP streams first send a salt, then use session sub-keys to protect length blocks and content blocks; the length also has an independent authentication tag. Each chunk undergoes two AEAD operations, with nonces evolving according to the specification. UDP is constructed per independent datagram, not by reusing the chunked state of a TCP stream. Shadowsocks AEAD

Taking the old AEAD format with AES-128-GCM as an example: salt (16 B), length (2 B) plus its tag (16 B), content (N B) plus its tag (16 B). Sending 1000 B of protocol payload as one chunk results in 16+2+16+1000+16=1050 B for the first direction; splitting into two chunks results in 1084 B. Here, the payload may still contain protocol data such as destination addresses, so it does not equal 1000 B of pure application content, nor does it account for TCP/IP headers.

def old_aead_tcp_size(payload_sizes, salt=16, tag=16):
    assert all(0 < size <= 0x3fff for size in payload_sizes)
    return salt + sum(2 + tag + size + tag for size in payload_sizes)

assert old_aead_tcp_size([1000]) == 1050
assert old_aead_tcp_size([500, 500]) == 1084
assert old_aead_tcp_size([500, 500]) - old_aead_tcp_size([1000]) == 34
print('One / Two chunks:', old_aead_tcp_size([1000]), old_aead_tcp_size([500, 500]))

AEAD-2022 updates key requirements, sessions, replay handling, and packet structures. You cannot simply replace the cipher name and continue using the old salt and chunk diagrams. Configuration migration requires checking protocol generations, key formats, and UDP support on both ends. SIP022

Authenticated encryption guarantees confidentiality and integrity under specified conditions; it does not promise that ciphertext length, packet splitting, or connection behavior will match standard HTTPS. If a specific deployment is identified, this does not imply that AEAD cryptography has failed.

How much extra overhead is added by splitting 1000 bytes into smaller chunks?

Changing the number of chunks from 1 to 2, while keeping the total content volume constant, only adds one instance of 34 B overhead; increasing to 20 chunks significantly raises the proportion of authentication and delimiting costs. This explains the budget for a clear wire format, without equating fewer bytes directly with faster real-world speed.

Preparing the visual
How much extra overhead is added by splitting 1000 bytes into smaller chunks?

Smaller chunks reduce the need to wait for filling, but repeatedly pay for length and two tags. The protection boundary and content size jointly determine the wire budget, rather than simply adding one tag to the entire connection.

VMess: Proxy Packets and Outer Transport Separated

VMess uses its own authentication request headers and data formats to express targets, options, and identity; the AEAD header format is a protocol version that needs distinction. Time-related verification means clock conditions affect the handshake; do not simplify it to "some random encrypted bytes inside TCP." V2Fly VMess Specification

Carrying VMess over WebSocket or other transports adds a layer of connection establishment, framing, or proxy behavior. Whether CDN is usable depends on the actual HTTP transport and forwarding configurations it supports; you cannot assume any CDN can relay just because a TCP stream is wrapped in TLS.

Multiplexing multiple logical sessions may reduce the number of connection establishments, but they might also share head-of-line blocking in a single outer TCP stream. Whether to choose multiplexing should depend on the number of short connections, interaction latency, and packet loss conditions, rather than assuming Mux is always faster.

Trojan: TLS Appearance and Application Authentication Are Not the Same Guarantee

Trojan sends proxy authentication and request information inside a TLS connection; its protocol includes TCP CONNECT and UDP ASSOCIATE-like commands. TLS is used to protect the channel and verify the server, while proxy credentials determine whether relaying is allowed; neither can compensate for the absence of the other.

UDP data in this protocol has record formats for target, length, and content, carried over TLS streams. It preserves datagram boundaries, but when the outer reliable stream has gaps, subsequent data still waits for recovery; reliability characteristics suitable for TCP may not suit real-time UDP applications. Trojan Protocol

Normal TLS handshakes and fallback sites help change observed behavior, but handshake parameters, traffic size, timing, and deployment responses may still differ. A valid public certificate only proves the corresponding service identity; it does not guarantee "indistinguishability from normal web browsing."

What Do VLESS, Vision, and REALITY Each Handle?

VLESS retains user IDs and proxy request semantics; it has not removed UUID-like identity fields. The traditional encryption: none combination relies on outer TLS/REALITY etc. for protection; as of September 2026, Project X documentation still defines the VLESS Encryption option, so "VLESS never has protocol encryption" cannot be written as an immutable fact.

Vision is a specific stream processing mode related to inner TLS identification, padding, and applicable path optimization; it is not a new TLS suite and cannot be equated with XUDP or Mux. Mode selection may also change UDP443 handling policies; specific flows should be checked rather than just looking at the "VLESS" label. Project X VLESS Configuration

REALITY: Dedicated authentication path and fallback path need to be distinguished Connections Reaching the Server Processed according to protocol authentication materials and policies Clients Passing Expected Authentication Enter the proxy path after dedicated verification is completed Failed Authentication / Normal Connections Fallback to target services etc. according to configuration No need to hold the private key of a third-party website; copying a public certificate cannot replace proof of TLS private key possession.

REALITY uses dedicated authentication and handshake processing, and designs fallback behavior for connections that fail authentication. The server has its own configuration key, and the client holds corresponding verification materials; this is not obtaining a third-party website's private key, nor is it completing legitimate proxy client authentication by "obtaining the actual certificate of a filed website." REALITY Project

Current Xray client code includes dedicated certificate verification paths based on materials like AuthKey, while distinguishing normal certificate verification from whether the expected REALITY authentication state is reached. Asserting "no identity verification at all" based on reading one InsecureSkipVerify flag is also wrong, because it configures custom verification. Xray REALITY Client Implementation

Copying a public certificate does not allow any server to prove possession of that certificate's private key; fallback forwarding and dedicated client authentication are two separate paths. The mechanism can reduce certain observation differences, but you cannot directly deduce from project goals that all active probes are ineffective, or that there is an indistinguishability guarantee for all observers.

Hysteria 2: QUIC Multi-Stream and Optional Outer Obfuscation

Hysteria 2 uses QUIC/TLS and establishes proxy eligibility through HTTP/3 authentication exchange. After authentication, each TCP connection uses corresponding bidirectional streams, and UDP capabilities are indicated by the server and encapsulated according to the protocol. It does not treat all proxy content as standard web HTTP responses.

QUIC allows independent recovery between streams, but connection congestion control is still shared. Hysteria's congestion and bandwidth configurations affect sending strategies; filling in larger bandwidth values does not increase actual link capacity; bottleneck queuing may even harm small interaction latency. Hysteria 2 Protocol

Salamander is an optional outer obfuscation that adds salt and processes QUIC packet bytes; it does not eliminate packet length, direction, and timing, nor does it guarantee failure of all detection. Current documentation also lists other obfuscation options; do not write one option as the protocol's unique permanent form. QUIC includes TLS handshakes, and Initial protection materials can be derived from public information, so "QUIC has no TLS fingerprint" is inherently incorrect.

In networks with UDP restrictions, QUIC-like transports may be unavailable or unstable; when available, first packet, tail latency, throughput, and CPU should be measured, rather than judging performance solely by "based on UDP." Client settings must match the server and the version used. Hysteria Client Configuration

How to Make Meaningful Comparisons

ScenarioWhat to MeasureCommon Misjudgments
Short RequestsCold/warm connection first byte, p95/p99Only looking at long download peaks
High ConcurrencyNumber of logical streams, CPU, queues, and memoryEquating fewer connections with lower costs
Real-time UDPLatency distribution, loss and reordering, head-of-line waitingOnly confirming UDP can send
Lossy PathsRecovery time, throughput, and interaction fairnessCounting network changes as protocol benefits after changing congestion parameters
Mobile NetworksAddress switch recovery, idle state, and reconnectionAssuming migration will definitely succeed just because CID is present
Traffic DistinguishabilitySpecific observers, features, and test conditionsRanking "high/extremely high" anti-detection levels without data

Comparisons should fix server location, path, load, and client version, and record configuration combinations; a single failure may come from DNS, certificates, UDP paths, or version mismatches. Protocol security goals, implementation correctness, deployment reachability, and identification risks should be evidenced separately.

Continue Reading