Quick UDP Internet Connections (QUIC) is a general-purpose transport layer protocol designed to replace the Transmission Control Protocol (TCP) through its flexibility, built-in security, fewer performance issues, and faster adoption rate. Originally developed by Google, QUIC uses User Datagram Protocol (UDP) as the low‑level transport mechanism for moving packets between client and server. Notably, QUIC also incorporates Transport Layer Security (TLS) as an integral component, not as an additional layer like HTTP/1.1 and HTTP/2.

HTTP/3, based on QUIC, is the third major version of the Hypertext Transfer Protocol (HTTP) and was adopted as an IETF standard in 2022. QUIC+HTTP/3 were created to solve inherent limitations with TCP that constrain performance and user experience.

¿Cómo funcionan las API?

Las API son la «cara pública» de las aplicaciones, revelan las funciones que realizan y la información que pueden proporcionar, y definen el formato adecuado de las peticiones. Cuando un desarrollador crea y expone la API de una aplicación, permite que otras aplicaciones se comuniquen con ella.

En muchos casos, las API ahorran un valioso tiempo a los desarrolladores, ya que facilitan el acceso a funciones de uso común. En lugar de duplicar la funcionalidad de una aplicación existente, los desarrolladores pueden integrar la funcionalidad en sus aplicaciones haciendo llamadas a la API de la aplicación existente.

Diagrama http

Visión general de alto nivel de las pilas de transporte HTTP

Conceptos básicos de QUIC+HTTP/3

El objetivo de QUIC es proporcionar un protocolo de transporte de alto rendimiento, alta fiabilidad y alta seguridad, específicamente diseñado para HTTP/3, aunque también es adecuado para el tráfico no HTTP.

Si QUIC es completamente nuevo para usted, le recomendamos que vea el vídeo introductorio que encontrará a continuación.

UDP, TCP y TLS

UDP es un protocolo sencillo y ligero que no necesita un complejo intercambio de tres vías como TCP para establecer la primera conexión. Esta simplicidad hace que UDP sea rápido y sin conexiones, pero también implica que carece de las características esenciales para garantizar una comunicación fiable y segura en comparación con TCP.

QUIC es único porque combina las ventajas de los protocolos UDP y TCP. Aunque no establece una conexión y utiliza UDP como protocolo de transporte de bajo nivel para reducir los retrasos de conexión y transmisión, está orientado a la conexión en las capas superiores, gracias a la reimplementación de las funciones de establecimiento de conexión y detección de pérdidas de TCP, que aseguran la entrega de paquetes. Se encarga de identificar los datos perdidos y gestionar las retransmisiones necesarias para garantizar una experiencia de usuario fluida y sin interrupciones.

QUIC también incorpora TLS como componente integral, no como una capa adicional como ocurre con HTTP/1.1 y HTTP/2. Esta incorporación garantiza que los mensajes estén cifrados de manera predeterminada.

Visión general de una red QUIC

The diagram below depicts the basic anatomy of a QUIC network. As seen in the diagram, the logical objects that contain HTTP/3 requests, responses, or any application data are QUIC streams. For transmission between network endpoints, QUIC streams are wrapped inside multiple logical layers.

Anatomía de red del diagrama Quic

Anatomía de un flujo QUIC

Empezando desde fuera hacia dentro, las capas y objetos lógicos son:

  • Datagrama UDP: Contiene un encabezado que especifica los puertos de origen y destino (junto con datos de longitud y suma de comprobación), seguido de uno o más paquetes QUIC. El datagrama es la unidad de información transmitida de cliente a servidor a través de la red.
  • Paquete QUIC: Contiene un encabezado QUIC y una o más tramas QUIC.
  • Encabezado QUIC: Contiene metadatos sobre el paquete. Hay dos tipos de encabezado:
    • El encabezado largo, utilizado durante el establecimiento de la conexión.
    • El encabezado corto, utilizado una vez establecida la conexión. Contiene (entre otros datos) el ID de conexión, el número de paquete y la fase de clave (utilizada para rastrear qué claves se utilizaron para cifrar el paquete, en apoyo de la rotación de claves). Los números de paquete son únicos (y siempre aumentan) para una conexión y una fase de clave concretas.
  • Trama: Contiene el tipo, el ID de la secuencia, el desplazamiento y los datos de la secuencia. Los datos de la secuencia se reparten en varias tramas, pero se pueden ensamblar utilizando el ID de conexión, el ID de la secuencia y el desplazamiento, que se utiliza para presentar los trozos de datos en el orden correcto.
  • Flujo: Un flujo de datos unidireccional o bidireccional dentro de una única conexión QUIC. Cada conexión QUIC puede soportar múltiples flujos independientes, cada uno con su propio ID de flujo. Si un paquete QUIC que contiene varios flujos se pierde, esto no afecta al progreso de los flujos no contenidos en el paquete perdido, lo cual es crucial para evitar el bloqueo de encabezado de línea experimentado en HTTP/2. Los flujos pueden ser bidireccionales y ser creados por cualquiera de los puntos de conexión.
Cómo funciona QUIC con un intercambio de TLS

A TLS handshake provides a secure connection between client and server. The encryption provided by QUIC requires TLS v1.3. As seen in the diagram below, QUIC keeps the TLS “Content Layer” which provides the cryptographic keys but replaces the “Record Layer” with its own transport mechanism.

QUIC también se basa en TLS para la autenticación y negociación de parámetros críticos para la seguridad y el rendimiento. En lugar de una estratificación estricta, los dos protocolos cooperan: QUIC utiliza el intercambio de TLS para establecer una conexión segura, mientras que TLS utiliza la capa de fiabilidad, entrega ordenada y registro que proporciona QUIC.

A alto nivel, existen dos interacciones principales entre los componentes TLS y QUIC:

  • El componente TLS envía y recibe mensajes a través del componente QUIC, que proporciona una abstracción de flujo fiable a TLS.
  • El componente TLS proporciona una serie de actualizaciones al componente QUIC, incluyendo a) nuevas claves de protección de paquetes para instalar y b) cambios de estado como la finalización del intercambio, el certificado del servidor, etc.

Opciones de soporte HTTP/3 para TLS en QUIC

TLS en QUIC es una variante de TLS que está diseñada específicamente para el protocolo QUIC. Actualmente hay dos opciones para los usuarios que buscan soporte HTTP/3 en TLS en QUIC:

  • OpenSSL QUIC Implementation – OpenSSL is currently working on implementing a complete QUIC stack on its own. This development will encapsulate all QUIC functionality within the implementation, making it much easier for HTTP/3 users to use the OpenSSL TLS API without worrying about QUIC-specific functionality.
  • Libraries supporting BoringSSL QUIC API – Various SSL libraries like BoringSSL, quicTLS, and LibreSSL (which started as a fork of OpenSSL) now provide QUIC TLS functionality by implementing the BoringSSL QUIC API. This is currently the only option for users wanting to use HTTP/3 because the OpenSSL QUIC TLS implementation is not ready yet.
Ventajas de QUIC+HTTP/3

El objetivo de QUIC+HTTP/3 es mejorar el rendimiento de las aplicaciones web reduciendo la latencia y mejorando la entrega de datos en redes poco fiables. Entre sus ventajas destacan:

  • Reducción de la latencia: Los protocolos tradicionales como TCP sufren de latencia debido a su proceso de establecimiento de conexiones. Las capacidades de multiplexación de QUIC+HTTP/3 les permiten establecer conexiones de forma más eficiente, lo que se traduce en una menor latencia para el establecimiento de conexiones y la transmisión de datos.
  • Establecimiento de conexión más rápido: QUIC+HTTP/3 combina el protocolo TLS y la configuración de cifrado en un solo paso, lo que reduce el número de idas y vueltas necesarias para establecer una conexión segura.
  • Multiplexación: Al manejar múltiples flujos de datos dentro de una única conexión, QUIC+HTTP/3 permite un uso más eficiente de los recursos de red y ayuda a evitar el problema del bloqueo de cabecera, en el que un flujo lento podría retrasar a los demás en las conexiones TCP tradicionales.
  • Corrección de errores mejorada: QUIC incorpora técnicas de corrección de errores hacia adelante, que pueden ayudar a recuperar paquetes perdidos sin necesidad de retransmisiones, reduciendo el impacto de la pérdida de paquetes en el rendimiento.
  • Reducción del impacto de la pérdida de paquetes: UDP no establece conexión y permite una transmisión más rápida al prescindir de la rigurosa comprobación de errores de TCP, lo que lo hace especialmente ventajoso en escenarios donde las condiciones de la red son menos estables.
  • Control de congestión adaptativo: QUIC+HTTP/3 están diseñados para ser más eficientes y reactivos que el control de congestión de TCP, lo que resulta en un mejor rendimiento en entornos de red variables.
  • Compatibilidad con la migración: QUIC+HTTP/3 puede pasar sin problemas de una conexión de red a otra (por ejemplo, de Wi-Fi a móvil) sin interrumpir el rendimiento de la aplicación.
  • Seguridad mejorada: QUIC+HTTP/3 integra cifrado por defecto, lo que mejora la seguridad y la privacidad de la transmisión de datos. Este cifrado impide las escuchas y la manipulación de los datos en tránsito.
  • Traspaso de NAT: El uso de UDP por parte de QUIC+HTTP/3 puede ayudar a traspasar la traducción de direcciones de red (NAT), lo que facilita el establecimiento de conexiones en situaciones en las que las conexiones TCP tradicionales podrían plantear problemas.
  • Evolución constante: Dado que QUIC+HTTP/3 fueron diseñados para ser implementados y actualizados a través de software, sin necesidad de modificar la infraestructura de red subyacente, pueden actualizarse y mejorarse con mayor rapidez para adaptarse a las condiciones cambiantes de la red y a los problemas de seguridad.
Más información sobre el uso de QUIC+HTTP/3 con NGINX

Explore los siguientes recursos para conocer la implementación de QUIC+HTTP/3 de NGINX y otras formas de utilizar QUIC+HTTP/3 para una comunicación más rápida y eficaz.