UDP üzerinden HTTP - QUIC protokolünü iyi şekilde kullanmak

UDP üzerinden HTTP - QUIC protokolünü iyi şekilde kullanmak

QUIC (Hızlı UDP İnternet Bağlantıları), TCP, TLS ve HTTP/2'nin tüm özelliklerini destekleyen ve sorunlarının çoğunu çözen, UDP'nin üzerinde yer alan bir protokoldür. Genellikle yeni veya "deneysel" protokol olarak adlandırılır, ancak deneysel aşamayı çoktan geride bıraktı: geliştirme 7 yıldan fazla süredir devam ediyor. Bu süre zarfında protokol standart olmayı başaramadı ancak yine de yaygınlaştı. Örneğin QUIC, Google ve Facebook gibi devler tarafından trafiği hızlandırmak ve mobil ağlardaki gecikmeleri azaltmak için kullanılıyor ve IETF, kendi protokol çatalını HTTP/3 standardının temeli olarak ilan etti (HTTP/2 kullanmasına rağmen) sadece% 44.8 Siteler).

Kavram

QUIC, başlangıçta düşük kayıplı kablolu ağlar için tasarlanan eski TCP'nin yerine geçmek üzere geliştirildi. TCP paketleri sırayla iletir, böylece bir paket kaybolursa tüm kuyruk durdurulur (hat başı engelleme), bu da bağlantının kalitesini ve stabilitesini olumsuz etkiler. Büyük kayıpları önlemek için hücresel ağlar büyük tamponlar kullanmaya başvurur, bu da protokolün fazlalığına ve yanlış negatif yanıtına yol açar (tampon şişkinliği). Ek olarak, TCP bağlantı kurmak için çok zaman harcar: SYN/ACK ve TLS istekleri ayrı ayrı işlenir ve QUIC'in yaptığı gibi bir yerine üç gidiş-dönüş gerektirir.

UDP üzerinden HTTP - QUIC protokolünü iyi şekilde kullanmak

QUIC, TCP değişimini ve TLS 1.3 uygulamasını birleştirdiğinden, tüm bağlantılar her zaman şifrelenir ve bu tür trafiğin şifresini çözmek, HTTPS üzerinden geçerken olduğundan daha kolay değildir. Ek olarak QUIC, TCP yığınının tamamen değiştirilmesi gerekeceğinden uygulama düzeyinde uygulanır. sonsuzluk.

HTTP/2'deki çoğullama desteğine rağmen, paketlerin sırayla teslim edilmesi ihtiyacı nedeniyle hat başı engelleme sorunu devam etti. QUIC, UDP'nin üzerinde uygulanır, bu nedenle prensipte herhangi bir engelleme yoktur ve paketlerin sonsuza kadar kaybolmasını önlemek için numaralandırılırlar ve artıklık sağlayan "komşuların" bölümlerini içerebilirler. Ayrıca QUIC, tek bir bağlantı içindeki farklı istek türleri için monolitik kuyruğu birden çok iş parçacığına böler. Bu nedenle, eğer bir paket kaybolursa, yalnızca bir kuyrukta sorunlar ortaya çıkabilir (örneğin, belirli bir dosyayı aktarmak için):

UDP üzerinden HTTP - QUIC protokolünü iyi şekilde kullanmak

kullanımı

Başlangıçta QUIC Google bünyesinde geliştirildi ve büyük ölçüde şirket içinde kullanılmak üzere tasarlandı. 2013 yılında standardizasyon için IETF'ye devredildi (ki bu hala devam ediyor) ve artık herkes eksiklerini önererek protokolün geliştirilmesine katılabiliyor. IETF çalışma grubu, yeni bir standardın onaylandığı ve yeniliklerin tartışıldığı yıllık toplantılar düzenlemektedir. QUIC'in bu uygulaması ana uygulama olarak kabul edilir ve HTTP/3 standardının onaylanması esasına dayanır.

Şu ana kadar HTTP/3'ün ana protokol olarak dahil edilmesi konusunda herhangi bir konuşma yapılmadı çünkü henüz tamamlanmadı ve neredeyse desteklenmiyor:

UDP üzerinden HTTP - QUIC protokolünü iyi şekilde kullanmak

Ancak QUIC, Uber'de başarıyla gerçekleştirilen uygulama ile sunucu arasında bir aktarım olarak uygulanabilir:

Uber'in QUIC'in tanıtımıyla ilgili yorumu

QUIC'i başarıyla yerleştirmek ve zayıf bağlantı ortamlarında uygulama performansını artırmak için eski yığını (TLS/TCP üzerinden HTTP/2) QUIC protokolüyle değiştirdik. Ağ kütüphanesini kullandık Taç arasında Krom Projeleri, protokolün orijinal Google sürümünü içeren gQUIC. Bu uygulama aynı zamanda en son IETF spesifikasyonunu takip edecek şekilde sürekli olarak geliştirilmektedir.

QUIC desteği eklemek için ilk olarak Cronet'i Android uygulamalarımıza entegre ettik. Entegrasyon, göç maliyetlerini mümkün olduğunca azaltacak şekilde gerçekleştirildi. Kütüphaneyi kullanan eski ağ yığınını tamamen değiştirmek yerine TamamHttpCronet'i OkHttp API çerçevesi ALTINA entegre ettik. Entegrasyonu bu şekilde yaparak, ağ çağrılarımızda (şirketlerin kullandığı) değişikliklerden kaçındık. Retrofit) API düzeyinde.

Android cihazlara yönelik yaklaşıma benzer şekilde, Cronet'i iOS'taki Uber uygulamalarına uyguladık ve ağdan gelen HTTP trafiğini yakaladık APIkullanma NSURLProtokolü. iOS Foundation tarafından sağlanan bu soyutlama, protokole özel URL verilerini işler ve Cronet'i önemli geçiş maliyetleri olmadan iOS uygulamalarımıza entegre edebilmemizi sağlar.

-dan alındı bu çeviri Uber makaleleri

Arka uçta Google Cloud lb aracılığıyla QUIC bağlantılarını yakaladılar. protokolü destekler 2018 ortasından beri.

Google Cloud'un Google tarafından geliştirilen protokolle harika çalışması şaşırtıcı değil, ancak alternatifler neler?

nginx

Kısa bir süre önce CloudFlare karşıya geçmeye çalıştım nginx'i (varsayılan olarak HTTP/3'ü desteklemeyen) Quiche aracıyla yönetin. Uygulama, bir kurulum eğitimiyle birlikte gelen tek bir .patch dosyası olarak mevcuttur:

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

Gerekirse modüllerinizi buraya bağlayabilirsiniz

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

Geriye kalan tek şey HTTP/3 desteğini etkinleştirmektir

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';
    }
}

Normal tarayıcılarda HTTP/3 üzerinden bağlanmak henüz mümkün değil, ancak Krom Kanarya ve onu bayrakla çalıştır --enable-quic, sunucunuza veya örneğin quic.rocks sitesine gidin ve Geliştirici Araçları'ndaki bağlantı türüne bakın:
UDP üzerinden HTTP - QUIC protokolünü iyi şekilde kullanmak
HTTP/3 yerine yazılır http2+quic/99ama aslında aynı şey.

Diğer teknolojiler

  • QUIC ayrıca destekliyor LiteSpeed (Facebook'a HTTP/3 aracılığıyla büyük bir tantanayla bağlanan) ve ilerici Çay kutusu. Apache bunu henüz yapamıyor ancak çalışmalar devam ediyor tüm hızıyla.
  • 21 Ocak güncellendi WebRTC için taslak standart
  • Daha geçen gün Microsoft açıldı msquic uygulama koduIETF standardındaki tüm işlevler henüz mevcut değildir, ancak bu zaten büyük bir atılımdır.

Sonuç

UDP üzerinden HTTP - QUIC protokolünü iyi şekilde kullanmak

QUIC'e olan ilgi istikrarsız ancak artıyor ve onu standartlaştırma çalışmaları sürüyor. Protokolün yeni uygulamaları neredeyse her ay ortaya çıkıyor ve her yıl giderek daha fazla geliştirici QUIC'in geleceği olduğuna inanıyor. Protokolü TCP yığınının gelecekteki sürümlerine dahil etmek bile mümkündür; bu, er ya da geç tüm İnternet'in daha kararlı ve daha hızlı bağlantılara geçeceği anlamına gelir.

Şimdiden altyapınız için QUIC etkileşimini yapılandırabilir veya hatta tarayıcılara verebilirsiniz - hepsi protokol için destek eklemeyi planlıyor ve caniuse ile ilgili üzücü istatistikler daha neşeli hale gelecektir.

UDP üzerinden HTTP - QUIC protokolünü iyi şekilde kullanmak

Kaynak: habr.com

Yorum ekle