
QUIC (Conexiones Rápidas de Internet sobre UDP) es un protocolo sobre UDP que admite todas las funcionalidades de TCP, TLS y HTTP/2, y resuelve la mayoría de sus problemas. A menudo se le llama un protocolo nuevo o "experimental", pero ya ha pasado mucho tiempo desde su etapa de experimentación: se ha estado desarrollando durante más de 7 años. A lo largo de este tiempo, el protocolo no ha llegado a ser un estándar, pero aún así ha obtenido una amplia distribución. Por ejemplo, QUIC es utilizado para acelerar el tráfico y reducir la latencia en redes móviles por gigantes como Google y Facebook, y la IETF ha declarado su bifurcación como base para el estándar HTTP/3 (mientras que HTTP/2 utiliza de los sitios).
Concepto
QUIC fue desarrollado como una alternativa al desfasado TCP, que originalmente estaba diseñado para redes cableadas con un bajo porcentaje de pérdidas. TCP entrega los paquetes en orden, por lo que la pérdida de un paquete provoca que toda la cola se detenga (), lo que afecta negativamente la calidad y estabilidad de la conexión. Para evitar pérdidas masivas, las redes móviles recurren al uso de grandes búferes, lo que a su vez conduce a la redundancia y la reacción de falso negativo del protocolo (). Además, TCP gasta mucho tiempo en establecer conexiones: las solicitudes SYN/ACK y TLS van por separado, requiriendo tres viajes de ida y vuelta en lugar de uno, como lo hace QUIC.

Dado que QUIC combina una sustitución de TCP y la implementación de TLS 1.3, todas las conexiones siempre están cifradas, y descifrar dicho tráfico no es más fácil que si estuviera pasando por HTTPS. Además, QUIC se implementa en el nivel de aplicación, ya que una sustitución completa de la pila TCP tomaría una eternidad..
A pesar del soporte de multiplexación en HTTP/2, el problema del head-of-line blocking persiste debido a la necesidad de entregar los paquetes en orden. QUIC se implementa sobre UDP, por lo que no tiene bloqueos en principio, y para evitar que los paquetes se pierdan de forma irreversible, se numeran y pueden contener partes de "vecinos", asegurando redundancia. Además, QUIC divide la cola monolítica en varios flujos para diferentes tipos de solicitudes dentro de una conexión. De esta manera, en caso de pérdida de un paquete, los problemas pueden surgir solo en una cola (por ejemplo, al transmitir un archivo específico):

Uso
Inicialmente, QUIC fue desarrollado dentro de Google y estaba muy orientado a su uso interno. En 2013, fue transferido a la IETF para su estandarización (que aún continúa), y ahora cualquier persona puede participar en el desarrollo del protocolo, sugiriendo lo que le falta. El grupo de trabajo de la IETF organiza reuniones anuales donde se aprueba un nuevo estándar y se discuten innovaciones. Esta implementación de QUIC se considera la principal y es sobre la que se certifica el estándar HTTP/3.
Por el momento, no se habla de incluir HTTP/3 como el protocolo principal, ya que aún no está terminado y casi no es compatible:

Pero QUIC se puede implementar como el transporte entre la aplicación y el servidor, lo que Uber ha logrado con éxito:
Comentario de Uber sobre la implementación de QUIC
Para integrar QUIC con éxito y mejorar el rendimiento de la aplicación en condiciones de mala conexión, reemplazamos la antigua pila (HTTP/2 sobre TLS/TCP) por el protocolo QUIC. Utilizamos la biblioteca de red de , que contiene la versión original del protocolo – gQUIC. Esta implementación también se mejora constantemente para seguir la última especificación de la IETF.
Primero, integramos Cronet en nuestras aplicaciones Android para agregar soporte para QUIC. La integración se realizó de tal forma que se minimizaron los costos de migración. En lugar de reemplazar completamente la antigua pila de red, que utilizaba la biblioteca , integramos Cronet BAJO el marco de la API de OkHttp. Al realizar la integración de esta manera, evitamos cambios en nuestras llamadas de red (que utilizan ) a nivel de API.
De manera similar al enfoque para dispositivos Android, implementamos Cronet en las aplicaciones de Uber para iOS, interceptando el tráfico HTTP de las , utilizando . Esta abstracción, proporcionada por iOS Foundation, maneja los datos URL específicos del protocolo y garantiza que podemos integrar Cronet en nuestras aplicaciones de iOS sin costos de migración significativos.
tomado de del artículo de Uber
En el backend, capturaron conexiones QUIC a través de Google Cloud lb, que desde mediados de 2018.
No es de extrañar que Google Cloud funcione perfectamente con un protocolo desarrollado por Google, pero ¿cuáles son las alternativas?
Nginx
No hace mucho, CloudFlare nginx (que por defecto no soporta HTTP/3) con su herramienta Quiche. La implementación está disponible en un solo archivo .patch, acompañado de 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.patchAquí se pueden 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
makeSolo queda habilitar el soporte para HTTP/3
events {
worker_connections 1024;
}
http {
server {
# Habilitar QUIC y HTTP/3.
listen 443 quic reuseport;
# Habilitar HTTP/2 (opcional).
listen 443 ssl http2;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
# Habilitar todas las versiones de TLS (TLSv1.3 es obligatorio para QUIC).
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# El almacenamiento en búfer de solicitudes no es compatible actualmente con HTTP/3.
proxy_request_buffering off;
# Agregar encabezado Alt-Svc para negociar HTTP/3.
add_header alt-svc 'h3-27=":443"; ma=86400';
}
} Aún no se puede conectar a través de HTTP/3 en navegadores comunes, pero se puede tomar y ejecutarlo con la bandera --enable-quic, dirigirse a su servidor o, por ejemplo, al sitio quic.rocks y ver el tipo de conexión en las Developer Tools:

En lugar de HTTP/3 se escribe http2+quic/99, pero en esencia, es lo mismo.
Otras tecnologías
- QUIC también es soportado por (que se conectaron con gran pompa a Facebook a través de HTTP/3) y el progresivo . Apache aún no lo soporta, pero el trabajo está en .
- El 21 de enero se actualizó
- Recientemente, Microsoft abrió , en la que aún no están disponibles todas las funciones del estándar IETF, pero ya es un gran avance.
Conclusión

El interés en QUIC es inestable, pero está creciendo, se está trabajando en su estandarización. Nuevas implementaciones del protocolo aparecen casi todos los meses, y cada año más desarrolladores se convencen de que el futuro es QUIC. Se admite incluso la inclusión del protocolo en futuras versiones de la pila TCP, lo que significa que más tarde o más temprano toda la internet se trasladará a conexiones más estables y rápidas.
Ya puedes configurar la interacción QUIC para tu infraestructura o incluso proporcionarla a los navegadores, todos planean agregar soporte para el protocolo, y la triste estadística de caniuse se volverá más alegre.
Fuente: habr.com
