QUIC Protocol
1. Introduction
This section introduces the QUIC protocol (Quick UDP Internet Connections), describing its main objectives and comparing it with traditional transport protocols like TCP and UDP.
- At the transport layer, TCP and UDP are the most widely used Internet protocols.
- TCP provides reliable, connection-oriented communication, making it suitable for scenarios where data loss is unacceptable.
- In contrast, UDP is a connectionless protocol designed for low-latency applications where occasional data loss is tolerable.
1.1. Challenges in mobility devices
With the rise of mobile internet usage, traditional TCP struggles to handle these scenarios gracefully, often requiring a full connection restart.
- Connection Break on IP Address Change
- Slow Handshake Process
- Poor congestion control
1.2 QUIC as a modern-day solution
QUIC is a protocol developed based on the lessons learned from the history of TCP and UDP. It combines the reliability of TCP with the speed and flexibility of UDP. QUIC introduces several innovations aimed at improving internet performance, especially for modern web and mobile applications.
-
Faster Connection Establishent: It offers faster connection establishment with 0-RTT or 1-RTT handshakes, reducing latency significantly compared to TCP.
-
IP Independence: QUIC supports connection migration, allowing seamless transitions between networks (e.g., switching from Wi-Fi to mobile data) without dropping the connection. This feature is specially important in today's mobility systems where IP changes are normal scenarios.
-
Multiplexed Streams: In single QUIC connection, multiple data streams can be created for different purposes (e.g. text, video, audio), each with its own connection requirments. In TCP, we had to create multiple TCP sessions for each independent data streams.
-
Less Head-of-Line blocking: It enables stream multiplexing over a single connection, which eliminates head-of-line blocking at the transport layer—a major limitation in TCP.
2. Feature 1 (QUIC for IP independence)
-
TCP is built directly on top of the IP layer and adds mechanisms for reliability, such as acknowledgments and retransmissions- .
-
QUIC is built on top of UDP, and it implements its own reliability mechanisms at the application layer.
-
Since TCP is tightly bound to the IP address, any change in IP (e.g., due to network switching) causes the connection to break. This requires a full re-establishment of the connection, leading to performance overhead and a non-seamless experience.
-
QUIC, on the other hand, uses a connection ID (or token) to identify a session instead of relying on the IP:PORT tuple. This allows the session to persist across IP changes without breaking.
-
This feature is known as Connection Migration in QUIC terminology, and it is one of the protocol's biggest advantages over TCP, especially in mobile and wireless environments.
graph TD
subgraph "QUIC Client"
wifi["Wi-Fi Interface<br>IP: 192.168.1.10"]
lte["5G Interface<br>IP: 10.0.0.5"]
end
subgraph "QUIC Server<br>IP: 203.0.113.5"
server["Server"]
end
wifi -->|"Initial QUIC Connection Established<br>(Uses Connection ID, not IP)"| server
switch["✅ Client switches to 5G (IP: 10.0.0.5)"]
switch -->|"✅ Connection Persists (QUIC uses CID)"| server
graph TD
subgraph "TCP Client"
wifi["Wi-Fi Interface<br>IP: 192.168.1.10"]
lte["5G Interface<br>IP: 10.0.0.5"]
end
subgraph "TCP Server<br>IP: 203.0.113.5"
server["Server"]
end
wifi -->|"Initial TCP Connection Established"| server
switch["⚠️ Client switches to 5G (IP: 10.0.0.5)"]
switch -->|"❌ Connection Breaks (TCP tied to IP)"| server
3. Feature 2 (QUIC for multiplexed data channels)
-
One of QUIC's key advantages over TCP is its support for stream multiplexing without head-of-line (HoL) blocking at the transport layer.
-
In TCP, when multiple streams are multiplexed over a single connection, a packet loss in one stream can block the delivery of data in all other streams, due to TCP’s in-order delivery requirement.
-
This can significantly degrade performance, especially on unreliable or high-latency networks. QUIC solves this by handling each stream independently within the same connection.
-
Packet loss affecting a particular stream does not block or delay the others, resulting in more efficient and responsive communication. This particularly important for web browsing, where multiple resources are loaded in parallel.
graph LR
client["QUIC Client"]
subgraph channels
stream1["Channel 1"]
stream2["Channel 2"]
stream3["Channel 3"]
end
server["QUIC Server"]
client <--> channels <--> server
graph LR
client["TCP Client"]
subgraph channel
stream1["SINGLE CHANNEL<br>(application requires logic for multiple streams)"]
end
server["TCP Server"]
client <--> channel <--> server
4. Feature 3 (Different stream types)
-
In QUIC, data can be transmitted over two types of channels: streams and datagrams.
-
Streams provide reliable, ordered delivery similar to TCP, making them suitable for tasks like file transfers or web page loading.
-
Datagrams, on the other hand, offer unreliable, unordered delivery—much like traditional UDP—ideal for real-time applications such as gaming or video conferencing where low latency is more important than reliability.
-
QUIC allows both types of data transmission to coexist within a single connection, giving applications the flexibility to use the most appropriate method for each use case.
graph LR
client["QUIC Client"]
server["QUIC Server"]
subgraph reliable["Reliable Streams"]
reliable_client["Client Streams"]
end
subgraph unreliable["Unreliable Datagrams"]
unreliable_client["Client Datagrams"]
end
client <--> reliable_client
reliable_client <--> server
client <--> unreliable_client
unreliable_client <--> server
5. Feature 4 (Built-in encryption)
-
QUIC integrates TLS directly into the protocol, providing encryption by default for all connections.
-
Unlike TCP, which relies on a separate handshake for TLS (e.g., in HTTPS), QUIC combines the transport and encryption handshakes, reducing round-trip time and startup latency.
-
This integration ensures that all QUIC traffic is secure, with features like forward secrecy, authentication, and integrity protection built in from the start—enhancing both performance and security.
-
In TCP, TLS is optional and implemented through external libraries or protocols (like HTTPS). In contrast, QUIC makes it mandatory.
6. Feature 5 (Multipath support)
-
This feature is experimentsl and under development in most libraries (as of 2025).
-
QUIC is being extended to support multipath communication, allowing a single connection to use multiple network paths simultaneously (e.g., Wi-Fi + 5G). This can improve bandwidth, resilience, and seamless handover across networks.
graph LR
client["Client"]
wifi["Wi-Fi Path<br>IP: x.x.x.x"]
fiveg["5G Path<br>IP: y.y.y.y"]
quic_conn["Single QUIC Connection<br>(Multipath Enabled)"]
server["Server"]
client --> wifi
client --> fiveg
wifi --> quic_conn
fiveg --> quic_conn
quic_conn --> server
7. QUIC vs MPCTP
7.1 Similarities
Feature | QUIC | MPTCP |
---|---|---|
Multipath support | Yes (emerging) | Yes (core feature) |
Improves connection reliability | Yes | Yes |
Enables use of multiple network interfaces | Yes | Yes |
Optimized for mobile/multi-network environments | Yes | Yes |
7.2 Differences
Aspect | QUIC | MPTCP |
---|---|---|
Transport Layer Base | UDP-based | TCP-based |
Encryption | Mandatory (TLS 1.3 built-in) | Optional (external TLS) |
Deployment | User space (easier deployment) | Kernel space (harder to deploy) |
Multipath Standardization | In progress (IETF drafts) | Standardized (RFC 6824) |
Stream Multiplexing | Yes (independent streams) | No (single stream per subflow) |
Head-of-Line Blocking | Avoided | Present (TCP behavior) |
Connection Migration | Supported via Connection ID | Tied to TCP session/subflows |
Performance in Mobile Networks | High (optimized) | Good, with TCP limitations |
Application Compatibility | Requires QUIC-aware apps/libraries | Transparent to apps (like TCP) |
7.3 MPTCP dependence on IP
1. MPTCP and Subflows:
Multipath TCP (MPTCP) allows a single TCP connection to use multiple network interfaces (subflows) simultaneously. Each subflow is tied to an IP address pair (source and destination).
2. IP Address Change on One Interface:
If one interface's IP address changes (for example, due to moving from one Wi-Fi network to another), MPTCP can detect that the subflow tied to the old IP is no longer usable. However, if there are other active subflows on different IP addresses, MPTCP can seamlessly switch traffic to those subflows, maintaining the session without interruption.
3. Both Interfaces Change IPs Without New Subflows:
If after some time, the other interface also changes its IP address, and MPTCP does not establish new subflows using the updated IP addresses, the original subflows become invalid. Since the MPTCP session depends on at least one active and reachable subflow, if all subflows are unusable, the session cannot continue.
4. Session Timeout and Connection Loss:
Without any valid subflows, MPTCP will eventually time out. The connection will be lost, and the application will need to establish a new connection.
This is where QUIC shines:
QUIC is truly independenct of IP andif some or all IPs change, still the connection is intact.
8. Quic programming links
This site contains material on how to writing programs using QUIC protocol. Explore more at: