HTTP sur UDP - optimisons l'utilisation du protocole QUIC

HTTP sur UDP - optimisons l'utilisation du protocole QUIC

QUIC (Quick UDP Internet Connections) est un protocole basĂ© sur UDP qui prend en charge toutes les fonctionnalitĂ©s de TCP, TLS et HTTP/2, tout en rĂ©solvant la plupart de leurs problĂšmes. Il est souvent qualifiĂ© de nouveau protocole ou de « protocole expĂ©rimental », mais il a depuis longtemps dĂ©passĂ© la phase d'expĂ©rimentation : son dĂ©veloppement dure depuis plus de 7 ans. Au cours de cette pĂ©riode, le protocole n'est pas devenu un standard, mais il a tout de mĂȘme gagnĂ© en popularitĂ©. Par exemple, QUIC est utilisĂ© pour accĂ©lĂ©rer le trafic et rĂ©duire la latence dans les rĂ©seaux mobiles par des gĂ©ants comme Google et Facebook, et l'IETF a dĂ©clarĂ© son fork comme base pour le standard HTTP/3 (alors que HTTP/2 utilise seulement 44,8% des sites).

Concept

QUIC a été développé pour remplacer le TCP obsolÚte, qui était initialement conçu pour des réseaux filaires avec un faible pourcentage de perte. TCP livre les paquets dans un ordre déterminé, donc lorsqu'un paquet est perdu, toute la file d'attente se bloque (head-of-line blocking), ce qui impacte négativement la qualité et la stabilité de la connexion. Pour éviter des pertes massives, les réseaux mobiles utilisent de grands tampons, ce qui entraßne des surcharges et une réaction faussement négative du protocole (bufferbloat). De plus, TCP consacre beaucoup de temps à l'établissement de la connexion : les demandes SYN/ACK et TLS sont traitées séparément, nécessitant trois allers-retours au lieu d'un seul, comme le fait QUIC.

HTTP sur UDP - optimisons l'utilisation du protocole QUIC

Puisque QUIC combine un remplacement du TCP et la mise en Ɠuvre de TLS 1.3, toutes les connexions sont toujours chiffrĂ©es, et il n'est pas plus facile de dĂ©chiffrer ce trafic que s'il circulait via HTTPS. En outre, QUIC est mis en Ɠuvre au niveau applicatif, car une substitution complĂšte de la pile TCP prendrait une Ă©ternitĂ©..

Bien qu'il prenne en charge le multiplexage dans HTTP/2, le problĂšme de head-of-line blocking subsiste Ă  cause de la nĂ©cessitĂ© de livrer les paquets dans l'ordre. QUIC est mis en Ɠuvre au-dessus de l'UDP, ce qui le rend exempt de blocages, et pour Ă©viter que les paquets ne soient irrĂ©mĂ©diablement perdus, ils sont numĂ©rotĂ©s et peuvent contenir des parties de « voisins », assurant ainsi une redondance. De plus, QUIC divise la file d'attente monolithique en plusieurs flux pour diffĂ©rents types de requĂȘtes au sein d'une seule connexion. Ainsi, en cas de perte d'un paquet, les problĂšmes ne peuvent survenir que dans une seule file d'attente (par exemple, lors de la transmission d'un fichier spĂ©cifique) :

HTTP sur UDP - optimisons l'utilisation du protocole QUIC

Utilisation

QUIC a Ă©tĂ© initialement dĂ©veloppĂ© Ă  l'intĂ©rieur de Google et Ă©tait en grande partie conçu pour un usage interne. En 2013, il a Ă©tĂ© transfĂ©rĂ© Ă  l'IETF pour normalisation (ce qui est toujours en cours), et maintenant tout le monde peut participer au dĂ©veloppement du protocole en proposant ce qui lui manque. Le groupe de travail de l'IETF organise chaque annĂ©e des rĂ©unions au cours desquelles un nouveau standard est approuvĂ© et oĂč des innovations sont discutĂ©es. Cette implĂ©mentation de QUIC est considĂ©rĂ©e comme la principale et c'est sur cette base que la norme HTTP/3 est certifiĂ©e.

Actuellement, il n'est pas question d'inclure HTTP/3 comme protocole principal, car il n'est pas encore terminé et n'est presque pas pris en charge :

HTTP sur UDP - optimisons l'utilisation du protocole QUIC

Mais QUIC peut ĂȘtre mis en Ɠuvre comme un transport entre l'application et le serveur, ce qui a Ă©tĂ© rĂ©alisĂ© avec succĂšs chez Uber :

Commentaire d'Uber sur l'implémentation de QUIC

Pour intĂ©grer QUIC avec succĂšs et amĂ©liorer les performances de l'application dans des conditions de mauvaise connexion, nous avons remplacĂ© l'ancienne pile (HTTP/2 sur TLS/TCP) par le protocole QUIC. Nous avons utilisĂ© la bibliothĂšque rĂ©seau Cronet de Chromium Projects, qui contient la version originale de Google du protocole – gQUIC. Cette implĂ©mentation est Ă©galement constamment amĂ©liorĂ©e pour suivre les derniĂšres spĂ©cifications de l'IETF.

Nous avons d'abord intégré Cronet dans nos applications Android pour ajouter le support de QUIC. L'intégration a été effectuée de maniÚre à minimiser au maximum les coûts de migration. Au lieu de remplacer complÚtement l'ancienne pile réseau qui utilisait la bibliothÚque OkHttp, nous avons intégré Cronet SOUS le cadre de l'API OkHttp. En procédant ainsi, nous avons évité des modifications dans nos appels réseau (qui utilisent Retrofit) au niveau de l'API.

Tout comme pour les appareils Android, nous avons intégré Cronet dans les applications Uber sous iOS, en interceptant le trafic HTTP des API, en utilisant NSURLProtocol. Cette abstraction, fournie par iOS Foundation, gÚre les données URL spécifiques au protocole et garantit que nous pouvons intégrer Cronet dans nos applications iOS sans coûts de migration significatifs.

extrait de cette traduction article d'Uber

Sur le backend, ils capturent les connexions QUIC via Google Cloud lb, qui prend en charge le protocole depuis le milieu de 2018.

Il n'est pas surprenant que Google Cloud fonctionne parfaitement avec le protocole développé par Google, mais quelles sont les alternatives ?

Nginx

RĂ©cemment, CloudFlare a essayĂ© de croiser nginx (qui par dĂ©faut ne supporte pas HTTP/3) avec son outil Quiche. L’implĂ©mentation est disponible sous la forme d’un unique fichier .patch, accompagnĂ© d’un tutoriel d’installation :

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

Ici, vous pouvez connecter vos propres modules si nécessaire

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

Il ne reste plus qu'Ă  activer le support de HTTP/3

events {
    worker_connections  1024;
}

http {
    server {
        # Activer QUIC et HTTP/3.
        listen 443 quic reuseport;

        # Activer HTTP/2 (optionnel).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Activer toutes les versions TLS (TLSv1.3 est nécessaire pour QUIC).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # Le buffering de requĂȘtes est actuellement non supportĂ© pour HTTP/3.
        proxy_request_buffering off;

        # Ajouter l'en-tĂȘte Alt-Svc pour nĂ©gocier HTTP/3.
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

Dans les navigateurs classiques, il n'est pas encore possible de se connecter via HTTP/3, mais vous pouvez le prendre Chrome Canary et le lancer avec le drapeau --enable-quic, accéder à votre serveur ou, par exemple, au site quic.rocks et vérifier le type de connexion dans les Outils de développement :
HTTP sur UDP - optimisons l'utilisation du protocole QUIC
Au lieu de HTTP/3, cela affiche http2+quic/99, mais c'est en rĂ©alitĂ© la mĂȘme chose.

D'autres technologies

  • QUIC est Ă©galement supportĂ© par LiteSpeed qui se connectaient avec grand fracas Ă  Facebook via HTTP/3 et le progressif Caddy. Apache ne supporte pas encore, mais le travail avance Ă  grands pas.
  • Le 21 janvier, un brouillon de norme pour WebRTC a Ă©tĂ© mis Ă  jour RĂ©cemment, Microsoft a ouvert
  • le code de son implĂ©mentation msquic , oĂč toutes les fonctionnalitĂ©s du standard IETF ne sont pas encore disponibles, mais c'est dĂ©jĂ  un grand pas en avant.L’intĂ©rĂȘt pour QUIC est instable mais en croissance, le travail sur sa normalisation se poursuit. De nouvelles implĂ©mentations du protocole apparaissent presque chaque mois, et chaque annĂ©e, de plus en plus de dĂ©veloppeurs rĂ©alisent que l'avenir appartient Ă  QUIC. Il est mĂȘme envisagĂ© d'intĂ©grer le protocole dans les prochaines versions de la pile TCP, ce qui signifie qu'un jour ou l'autre, tout Internet se dĂ©placera vers des connexions plus stables et rapides.

Conclusion

HTTP sur UDP - optimisons l'utilisation du protocole QUIC

DĂ©jĂ  maintenant, vous pouvez configurer l'interaction QUIC pour votre infrastructure ou mĂȘme le fournir aux navigateurs — tous prĂ©voient d’ajouter le support du protocole, et les tristes statistiques de caniuse deviendront plus joyeuses.

QUIC (Quick UDP Internet Connections) —.

HTTP sur UDP - optimisons l'utilisation du protocole QUIC

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster