HTTP/3

  • Posted on: 12 January 2024
  • By: ReYDeS

El protocolo de transporte QUIC tiene varias características deseables en un transporte para HTTP, como multiplexación de flujo, control de flujo por flujo, y establecimiento de conexión con baja latencia.

Introducción

La semántica HTTP se utiliza para una amplio rango de servicios en Internet. Esta semántica se ha utilizado más comúnmente con HTTP/1.1 y HTTP/2. HTTP/1.1 se ha utilizado en una variedad de capas de transporte y sesión, mientras HTTP/2 se ha utilizado principalmente con TLS sobre TCP. HTTP/3 admite la misma semántica a través de un nuevo protocolo de transporte: QUIC.

Versiones anteriores de HTTP

HTTP/1.1 utiliza campos de texto delimitados por espacios en blanco para transmitir mensajes HTTP. Aunque estos intercambios son legibles por los humanos, utilizar espacios en blanco para formatear mensajes conduce a una complejidad para interpretación, además de una tolerancia excesiva de comportamiento variante.

Debido a HTTP/1.1 no incluye una capa para multiplexación, múltiples conexiones TCP son utilizadas frecuentemente para atender solicitudes en paralelo. Sin embargo esto tiene un impacto negativo para el control de la congestión y la eficiencia de la red, pues TCP no comparte el control de la congestión entre múltiples conexiones.

HTTP/2 introdujo una capa de multiplexación y encuadre binario para mejorar la latencia sin modificar la capa de transporte. Sin embargo debido a la naturaleza paralela de la multiplexación en HTTP/2 no es visible en los mecanismos para recuperación de pérdidas de TCP, un paquete perdido o reordenado causa todas las transacciones activas experimenten un bloqueo, independientemente de si esa transacción se vio directamente afectada por el paquete perdido.

Delegación en QUIC

El protocolo de transporte QUIC incorpora multiplexación de flujo y control de flujo por flujo, similar al proporcionado por la capa de entramado de HTTP/2. Al proporcionar confiabilidad a nivel de flujo y control de congestión en toda la conexión, QUIC tiene la capacidad de mejorar el rendimiento de HTTP en comparación con un mapeo TCP. QUIC también incorpora TLS 1.3 en la capa de transporte, ofreciendo confidencialidad e integridad comparables con la ejecución de TLS sobre TCP, con la latencia de configuración de conexión mejorada de TCP Fast Open.

Descripción general del protocolo HTTP/3

HTTP/3 proporciona un transporte para la semántica HTTP utilizando el protocolo de transporte QUIC, además de una capa de estructura interna similar a HTTP/2.

Una vez el cliente conoce existe un servidor HTTP/3 en un determinado endpoint, abre una conexión QUIC. QUIC proporciona negociación de protocolos, multiplexación basada en flujos y control de flujo.

Dentro de cada flujo, la unidad básica de comunicación HTTP/3 es una trama. Cada tipo de trama sirve para propósitos diferentes. Por ejemplo las tramas HEADERS y DATA forman la base para las peticiones y respuestas HTTP. Las tramas aplicadas a toda la conexión se transmiten en un flujo de control dedicado.

La multiplexación de peticiones se realiza utilizando la abstracción de flujo QUIC. Cada par de petición-respuesta consume un único flujo QUIC. Las transmisiones son independientes entre si, por lo cual una transmisión bloqueada o la cual sufrió una pérdida de paquetes, no impide el progreso de otras transmisiones.

La inserción del servidor es un modo de interacción introducido en HTTP/2, la cual permite a un servidor enviar un intercambio de petición-respuesta hacia un cliente antes de el cliente realice la petición indicada. Esto compensa el uso de la red con una posible ganancia de latencia. Se utilizan varios tramas HTTP/3 para administrar la inserción del servidor, como PUSH_PROMISE, MAX_PUSH_ID y CANCEL_PUSH.

Al igual de HTTP/2, los campos de petición y respuesta se comprimen para su transmisión. Debido a HPACK se basa en la transmisión ordenada de secciones de campos comprimidos (una garantía no proporcionada por QUIC), HTTP/3 reemplaza HPACK con QPACK. QPACK utiliza flujos unidireccionales separados para modificar y rastrear el estado de la tabla de campos, mientras las secciones de campos codificados se refieren al estado de la tabla sin modificarla.

Fuentes:

https://httpwg.org/specs/rfc9114.html

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero