Conexiones rápidas de Internet mediante UDP (QUIC) es un protocolo de capa de transporte de propósito general diseñado para sustituir al Protocolo de Control de Transmisión (TCP) gracias a su flexibilidad, seguridad integrada, menor incidencia de problemas de rendimiento y mayor rapidez de adopción. Desarrollado originalmente por Google, QUIC utiliza el Protocolo de Datagramas de Usuario (UDP) como mecanismo de transporte de bajo nivel para transferir paquetes entre el cliente y el servidor. Cabe destacar que QUIC también incorpora la Seguridad de la Capa de Transporte (TLS) como componente integral, y no como una capa adicional, como ocurre con HTTP/1.1 y HTTP/2.

HTTP/3, basado en QUIC, es la tercera versión principal del Protocolo de Transferencia de Hipertexto (HTTP) y fue adoptado como estándar del IETF en 2022. QUIC+HTTP/3 se crearon para resolver las limitaciones inherentes de TCP que restringen el rendimiento y la experiencia de usuario.

¿Cómo funcionan las API?

Las API son la «cara pública» de las aplicaciones: muestran las funciones que realizan y la información que pueden proporcionar, además de definir el formato adecuado de las solicitudes. 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 tiempo muy valioso a los desarrolladores, ya que permiten acceder fácilmente a funciones de uso habitual. En lugar de duplicar la funcionalidad de una aplicación existente, los desarrolladores pueden integrarla en sus propias aplicaciones mediante llamadas a la API de la aplicación existente.

Diagrama HTTP

Descripció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, gran fiabilidad y elevada seguridad para HTTP/3 (aunque QUIC también es adecuado para tráfico que no sea HTTP).

Si QUIC es algo completamente nuevo para ti, te recomendamos ver el siguiente vídeo introductorio.

UDP, TCP y TLS

UDP es un protocolo sencillo y ligero que no necesita un complejo proceso de negociación en tres pasos, como TCP, para establecer la conexión inicial. Esta simplicidad hace que UDP sea rápido y no esté orientado a la conexión, pero también implica que carece de las funciones esenciales para 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 está orientado a la conexión y utiliza UDP como protocolo de transporte de bajo nivel para reducir los retardos de conexión y transporte, sí está orientado a la conexión en las capas superiores, ya que vuelve a implementar las funciones de establecimiento de conexión y detección de pérdidas de TCP, que garantizan la entrega de los paquetes. Se encarga de identificar los datos perdidos y completar las retransmisiones para garantizar una experiencia de usuario fluida.

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

Descripción general de una red QUIC

El siguiente diagrama muestra la estructura básica de una red QUIC. Como se observa en él, los objetos lógicos que contienen solicitudes y respuestas HTTP/3, o cualquier dato de aplicación, son los flujos QUIC. Para su transmisión entre los extremos de la red, los flujos QUIC se encapsulan en varias capas lógicas.

Diagrama de la anatomía de red de QUIC

Anatomía de un flujo QUIC

De fuera hacia dentro, las capas y los objetos lógicos son:

  • Datagrama UDP: contiene una cabecera que especifica los puertos de origen y destino (junto con los datos de longitud y suma de comprobación), seguida de uno o varios paquetes QUIC. El datagrama es la unidad de información que se transmite del cliente al servidor a través de la red.
  • Paquete QUIC: contiene una cabecera QUIC y una o varias tramas QUIC.
  • Cabecera QUIC: contiene metadatos sobre el paquete. Hay dos tipos de cabecera:
    • La cabecera larga, utilizada durante el establecimiento de la conexión.
    • La cabecera corta, utilizada 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 (que se utiliza para saber qué claves se emplearon para cifrar el paquete y facilitar así la rotación de claves). Los números de paquete son únicos (y siempre aumentan) para cada conexión y fase de clave.
  • Trama: contiene el tipo, el ID del flujo, el desplazamiento y los datos del flujo. Los datos del flujo se distribuyen entre varias tramas, pero pueden recomponerse mediante el ID de conexión, el ID del flujo y el desplazamiento, que permite presentar los fragmentos 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 admitir varios flujos independientes, cada uno con su propio ID de flujo. Si se pierde un paquete QUIC que contiene algunos flujos, esto no afecta al progreso de los flujos que no estén incluidos en el paquete perdido (esto es fundamental para evitar el bloqueo de cabecera de línea que se produce en HTTP/2). Los flujos pueden ser bidireccionales y cualquiera de los dos extremos puede crearlos.

Cómo funciona QUIC con un protocolo de enlace TLS

Un protocolo de enlace TLS proporciona una conexión segura entre el cliente y el servidor. El cifrado proporcionado por QUIC requiere TLS v1.3. Como se muestra en el diagrama siguiente, QUIC conserva la «capa de contenido» de TLS, que proporciona las claves criptográficas, pero sustituye la «capa de registros» por su propio mecanismo de transporte.

capas de QUIC y capas de TLS

QUIC también se basa en TLS para la autenticación y la negociación de parámetros esenciales para la seguridad y el rendimiento. En lugar de seguir una estructura de capas estricta, ambos protocolos cooperan: QUIC utiliza el protocolo de enlace de TLS para establecer una conexión segura, mientras que TLS aprovecha la fiabilidad, la entrega ordenada y la capa de registros que proporciona QUIC.

A grandes rasgos, 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 a TLS una abstracción de flujo fiable.
  • El componente TLS proporciona una serie de actualizaciones al componente QUIC, entre ellas: (a) nuevas claves de protección de paquetes que se deben instalar y (b) cambios de estado, como la finalización del protocolo de enlace, el certificado del servidor, etc.

Opciones de compatibilidad con HTTP/3 para QUIC TLS

QUIC TLS es una variante de TLS diseñada específicamente para el protocolo QUIC. Actualmente, los usuarios que buscan compatibilidad con HTTP/3 en QUIC TLS disponen de dos opciones:

  • Implementación de QUIC de OpenSSL – OpenSSL está trabajando actualmente en la implementación de una pila QUIC completa propia. Este desarrollo integrará toda la funcionalidad de QUIC en la implementación, lo que facilitará considerablemente a los usuarios de HTTP/3 el uso de la API TLS de OpenSSL sin tener que preocuparse por la funcionalidad específica de QUIC.
  • Bibliotecas compatibles con la API QUIC de BoringSSL – Varias bibliotecas SSL, como BoringSSL, quicTLS y LibreSSL (que nació como una bifurcación de OpenSSL), ofrecen ahora funcionalidad TLS para QUIC mediante la implementación de la API QUIC de BoringSSL. Actualmente, esta es la única opción para quienes desean utilizar HTTP/3, ya que la implementación de TLS para QUIC de OpenSSL aún no está lista.

Ventajas de QUIC+HTTP/3

QUIC+HTTP/3 tienen como objetivo mejorar el rendimiento de las aplicaciones web reduciendo la latencia y optimizando la transmisión de datos en redes poco fiables. Entre sus ventajas se incluyen:

  • Latencia reducida – Los protocolos tradicionales como TCP presentan latencia debido a su proceso de establecimiento de la conexión. Las capacidades de multiplexación de QUIC+HTTP/3 permiten establecer conexiones de forma más eficiente, lo que reduce la latencia al establecer conexiones y transmitir datos.
  • Establecimiento de conexión más rápido – QUIC+HTTP/3 combina el protocolo de enlace TLS y la configuración del cifrado en un único paso, lo que reduce el número de viajes de ida y vuelta necesarios para establecer una conexión segura.
  • Multiplexación – Al gestionar varios flujos de datos dentro de una única conexión, QUIC+HTTP/3 permiten utilizar los recursos de red de forma más eficiente y ayudan a evitar el problema del bloqueo de cabecera, por 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 delante que pueden ayudar a recuperar paquetes perdidos sin necesidad de retransmitirlos, lo que reduce el impacto de la pérdida de paquetes en el rendimiento.
  • Menor impacto de la pérdida de paquetes – UDP no está orientado a la conexión y permite una transmisión más rápida sin necesidad de la rigurosa comprobación de errores de TCP. Esto resulta especialmente ventajoso en situaciones en las que 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 responder mejor que el control de congestión de TCP, lo que se traduce en un mejor rendimiento en distintos entornos de red.
  • Compatibilidad con la migración – QUIC+HTTP/3 puede cambiar sin interrupciones entre distintas conexiones de red (por ejemplo, al pasar de Wi-Fi a una red móvil) sin afectar al rendimiento de la aplicación.
  • Seguridad mejorada – QUIC+HTTP/3 incorporan el cifrado de forma predeterminada, lo que aumenta la seguridad y la privacidad de la transmisión de datos. Este cifrado evita las escuchas y la manipulación de los datos en tránsito.
  • Travesía de NAT – El uso de UDP por parte de QUIC+HTTP/3 puede facilitar la travesía de la traducción de direcciones de red (NAT), lo que permite establecer conexiones más fácilmente en situaciones en las que las conexiones TCP tradicionales podrían presentar problemas.
  • Evolución constante – Dado que QUIC+HTTP/3 se diseñaron para implementarse y actualizarse mediante software, sin necesidad de modificar la infraestructura de red subyacente, pueden actualizarse y mejorarse con mayor rapidez para adaptarse a los cambios en las condiciones de la red y a los problemas de seguridad.