# What Is QUIC (RFC 9000 transport protocol)?

> QUIC is a UDP-based, always-encrypted transport protocol that builds the TLS 1.3 handshake into the transport and carries HTTP/3.

Source: https://ssl.sh/glossary/quic/
Last updated: 2026-11-10

QUIC is standardized in [RFC 9000](https://www.rfc-editor.org/rfc/rfc9000), with RFC 9001 describing how it uses [TLS 1.3](https://ssl.sh/glossary/tls-1-3/). Instead of running TLS records over TCP, QUIC carries TLS handshake messages in its own CRYPTO frames and uses the resulting keys to protect its packets; the TLS record layer is not used. HTTP/3 (RFC 9114) is HTTP mapped onto QUIC.

## Why it matters
Because the transport and cryptographic handshakes are combined, a new QUIC connection typically needs one round trip before application data flows, and resumed connections can use [0-RTT](https://ssl.sh/glossary/0-rtt/). Streams are independent, so one lost packet does not stall every request the way it can with HTTP/2 over TCP. Certificates need no change: QUIC uses the same X.509 certificates and keys as HTTPS over TCP. Clients usually discover HTTP/3 through an `Alt-Svc` response header or a DNS HTTPS record and negotiate it with the [ALPN](https://ssl.sh/glossary/alpn/) value `h3`. Operationally, UDP port 443 must be reachable; where a firewall blocks it, browsers fall back to TCP.

## Example
nginx built with HTTP/3 support can serve QUIC next to TCP with the same certificate:

```nginx
server {
    listen 443 ssl;
    listen 443 quic reuseport;
    http2 on;
    server_name example.com;
    ssl_certificate     /etc/ssl/example.com/fullchain.pem;
    ssl_certificate_key /etc/ssl/example.com/privkey.pem;
    add_header Alt-Svc 'h3=":443"; ma=86400';
}
```

## Common misconceptions
- **QUIC needs a special certificate.** Any certificate that works for HTTPS works for QUIC.
- **QUIC is plain UDP, or uses DTLS.** QUIC always encrypts and uses the TLS 1.3 handshake directly, not DTLS; there is no plaintext mode and no older TLS version.
- **HTTP/3 replaces the TCP listener.** Browsers usually connect over TCP first and switch to QUIC after discovering it, so both listeners are needed.

## Related terms

- [TLS 1.3](https://ssl.sh/zh/glossary/tls-1-3/): TLS 1.3 是当前最新的传输层安全协议版本（2018 年的 RFC 8446，现行规范为 RFC 9846），完整握手只需一个往返，且只保留 AEAD 加密算法。
- [ALPN](https://ssl.sh/zh/glossary/alpn/): ALPN 是一个 TLS 扩展，让客户端和服务器在握手过程中直接商定上层协议，例如 h2 或 http/1.1，不需要额外往返。
- [0-RTT](https://ssl.sh/zh/glossary/0-rtt/): 0-RTT 是 TLS 1.3 和 QUIC 的特性，允许回访的客户端用上一次会话留下的密钥，在第一个数据包里就发送应用数据。
- [TLS 握手](https://ssl.sh/zh/glossary/tls-handshake/): TLS 握手是 TLS 连接开始时的一组消息交换，客户端与服务器在其中协商协议版本和密码套件、验证服务器身份并派生会话密钥。
- [TLS 终止](https://ssl.sh/zh/glossary/tls-termination/): TLS 终止是指网络路径上客户端 TLS 连接结束并被解密的位置，可以是 CDN 边缘、负载均衡、反向代理，也可以是应用服务器本身。
- [SNI](https://ssl.sh/zh/glossary/sni/): SNI 是 TLS 的一个扩展，客户端在 ClientHello 中写明要访问的域名，使同一个 IP 能为多个 HTTPS 站点分别返回各自的证书。
