
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 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 (), 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 (). 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.

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) :

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 :

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 de , 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 , 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 ) 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 , en utilisant . 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 article d'Uber
Sur le backend, ils capturent les connexions QUIC via Google Cloud lb, qui 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 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.patchIci, 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
makeIl 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 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 :

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 qui se connectaient avec grand fracas à Facebook via HTTP/3 et le progressif . Apache ne supporte pas encore, mais le travail avance .
- Le 21 janvier, un brouillon de norme pour WebRTC a été mis à jour
- le code de son implĂ©mentation msquic 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

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) â.
Source : habr.com
