HTTP sobre UDP: use el protocolo QUIC con beneficio



QUIC (Quick UDP Internet Connections) es un protocolo sobre UDP que admite todas las características de TCP, TLS y HTTP / 2 y resuelve la mayoría de sus problemas. A menudo se le llama el protocolo nuevo o "experimental", pero ha sobrevivido durante mucho tiempo a la etapa del experimento: el desarrollo ha estado en curso durante más de 7 años. Durante este tiempo, el protocolo no logró convertirse en un estándar, pero aún se usó ampliamente. Por ejemplo, gigantes como Google y Facebook usan QUIC para acelerar el tráfico y reducir las latencias en las redes móviles, y el IETF anunció su bifurcación del protocolo como base para el estándar HTTP / 3 (a pesar de que HTTP / 2 usa solo el 44.8% de los sitios).

Concepto


QUIC fue desarrollado como un reemplazo para el TCP heredado, que fue originalmente diseñado para redes cableadas con un bajo porcentaje de pérdidas. TCP entrega los paquetes en orden, por lo que cuando se pierde un paquete, la cola completa ( bloqueo de cabecera de línea ) aumenta , lo que afecta negativamente la calidad y la estabilidad de la conexión. Para evitar pérdidas masivas, las redes celulares recurren al uso de grandes amortiguadores, lo que a su vez conduce a la redundancia y a las reacciones falsas negativas del protocolo ( bufferbloat ). Además, TCP pasa mucho tiempo estableciendo una conexión: las solicitudes SYN / ACK y TLS van por separado, lo que requiere tres vueltas redondas en lugar de una, como lo hace QUIC.



Dado que QUIC combina el reemplazo de TCP y la implementación de TLS 1.3, todas las conexiones siempre están encriptadas, desencriptar dicho tráfico no es más fácil que si fuera a través de HTTPS. Además, QUIC se implementa a nivel de aplicación, ya que llevaría una eternidad reemplazar completamente la pila TCP .

A pesar del soporte de multiplexación en HTTP / 2, el problema de bloqueo de la cabecera de línea permaneció allí debido a la necesidad de entregar paquetes en orden. QUIC se implementa sobre UDP, por lo que no tiene ningún bloqueo en principio, y para que los paquetes no se pierdan permanentemente, se numeran y pueden contener partes de "vecinos", lo que proporciona redundancia. Además, QUIC divide una cola monolítica en varios subprocesos para diferentes tipos de solicitudes dentro de la misma conexión. Por lo tanto, cuando se pierde un paquete, los problemas pueden surgir solo en una cola (por ejemplo, para transferir un archivo específico):

imagen

Utilizando


QUIC fue desarrollado originalmente internamente por Google y fue diseñado en gran medida para su uso interno. En 2013, fue transferido al IETF para la estandarización (que todavía está en curso), y ahora todos pueden participar en el desarrollo del protocolo proponiendo lo que le falta. El grupo de trabajo IETF organiza reuniones anuales, dentro de las cuales se aprueba un nuevo estándar y se discuten las innovaciones. Esta implementación de QUIC se considera la principal y se basa en que el estándar HTTP / 3 está certificado.

Hasta ahora, no estamos hablando de habilitar HTTP / 3 como el protocolo principal, porque aún no está terminado y casi no es compatible:



Pero QUIC puede implementarse como un transporte entre la aplicación y el servidor, que se realizó con éxito en Uber:

Comentario de Uber sobre la implementación de QUIC


QUIC , (HTTP/2 TLS/TCP) QUIC. Cronet Chromium Projects, , – gQUIC. , IETF.

Cronet Android-, QUIC. , . , , OkHttp, Cronet OkHttp API. , ( Retrofit) API.

Android-, Cronet Uber iOS, HTTP- API, NSURLProtocol. , iOS Foundation, - URL- , Cronet iOS- .
tomado de esta traducción de un artículo de Uber

En el backend, detectaron conexiones QUIC a través de Google Cloud lb, que ha estado apoyando el protocolo desde mediados de 2018.

No es sorprendente que Google Cloud funcione muy bien con el protocolo desarrollado por Google, pero ¿cuáles son las alternativas?

Nginx


No hace mucho tiempo, CloudFlare intentó cruzar nginx (que por defecto no conoce HTTP / 3) con su herramienta Quiche. La implementación está disponible como un único archivo .patch, que incluye un tutorial de instalación:

curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
tar xvzf nginx-1.16.1.tar.gz
git clone --recursive https://github.com/cloudflare/quiche
cd nginx-1.16.1
patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch

Aquí puede conectar sus módulos si es necesario.

./configure                          	\
   	--prefix=$PWD                       	\
   	--with-http_ssl_module              	\
   	--with-http_v2_module               	\
   	--with-http_v3_module               	\
   	--with-openssl=../quiche/deps/boringssl \
   	--with-quiche=../quiche
 make

Todo lo que queda es habilitar el soporte HTTP / 3.

events {
    worker_connections  1024;
}

http {
    server {
        # Enable QUIC and HTTP/3.
        listen 443 quic reuseport;

        # Enable HTTP/2 (optional).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Enable all TLS versions (TLSv1.3 is required for QUIC).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # Request buffering in not currently supported for HTTP/3.
        proxy_request_buffering off;

        # Add Alt-Svc header to negotiate HTTP/3.
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

En los navegadores normales, todavía no es posible conectarse a través de HTTP / 3, pero puede tomar Chrome Canary y ejecutarlo con la bandera --enable-quic, ir a su servidor o, por ejemplo, al sitio web quic.rocks y ver el tipo de conexión en Herramientas para desarrolladores: en

lugar de HTTP / 3 está escrito http2+quic/99, pero Es esencialmente lo mismo.

Otra tecnologia



Conclusión




El interés en QUIC es inestable, pero cada vez más, se está trabajando para estandarizarlo. Casi todos los meses aparecen nuevas implementaciones de protocolos, y cada año más y más desarrolladores están convencidos de que el futuro está en QUIC. Incluso es posible incluir el protocolo en futuras versiones de la pila TCP, lo que significa que tarde o temprano toda Internet se moverá a conexiones más estables y rápidas.

Ya puede configurar la interacción QUIC para su infraestructura o incluso dársela a los navegadores: todos planean agregar soporte de protocolo, y las estadísticas tristes con caniuse serán más divertidas.




All Articles