HIZLI - QUIC

HIZLI
iletişim protokolü
Amaç genel amaçlı
Geliştirici(ler) IETF
tanıtıldı 12 Ekim 2012 ; 9 yıl önce ( 2012-10-12 )
OSI katmanı Taşıma katmanı
RFC(ler) RFC 8999, RFC 9000
İnternet sitesi hızlı .org

QUIC ("hızlı" olarak telaffuz edilir), başlangıçta Jim Roskind tarafından Google'da tasarlanan, 2012'de uygulanan ve dağıtılan, 2013'te genel olarak duyurulan ve bir IETF toplantısında açıklanan genel amaçlı bir taşıma katmanı ağ protokolüdür . QUIC, Chrome web tarayıcısından Google sunucularına yapılan tüm bağlantıların yarısından fazlası tarafından kullanılır . Microsoft Edge (Chrome'un bir türevi) ve Firefox bunu desteklemektedir. Safari protokolü uygular, ancak varsayılan olarak etkin değildir.

Adı başlangıçta "Hızlı UDP İnternet Bağlantıları"nın kısaltması olarak önerilmiş olsa da, IETF'nin QUIC kelimesini kullanması bir kısaltma değildir; sadece protokolün adıdır. QUIC , şu anda TCP kullanan bağlantı yönelimli web uygulamalarının performansını artırır . Bunu, Kullanıcı Datagram Protokolü (UDP) kullanarak iki uç nokta arasında bir dizi çoklanmış bağlantı kurarak yapar ve birçok uygulama için taşıma katmanında TCP'yi geçersiz kılmak üzere tasarlanmıştır, böylece protokole ara sıra "TCP/2" takma adı verilir.

QUIC, HTTP/2'nin çoğullanmış bağlantılarıyla birlikte çalışır ve birden fazla veri akışının tüm uç noktalara bağımsız olarak ulaşmasına ve dolayısıyla diğer akışları içeren paket kayıplarından bağımsız olarak erişmesine izin verir . Buna karşılık, İletim Kontrol Protokolü'nde (TCP) barındırılan HTTP/2 , TCP paketlerinden herhangi birinin gecikmesi veya kaybolması durumunda çoğullanmış tüm akışların hat başı engelleme gecikmelerine maruz kalabilir .

QUIC'in ikincil hedefleri arasında azaltılmış bağlantı ve aktarım gecikmesi ve tıkanıklığı önlemek için her yönde bant genişliği tahmini bulunur . Ayrıca tıkanıklık kontrol algoritmalarını , bu algoritmaların daha hızlı gelişmesine izin vereceği iddia edilen çekirdek alanı yerine her iki uç noktada da kullanıcı alanına taşır . Ek olarak, hatalar beklendiğinde performansı daha da iyileştirmek için protokol ileri hata düzeltme (FEC) ile genişletilebilir ve bu, protokolün evriminde bir sonraki adım olarak görülür.

Haziran 2015 yılında bir internet Taslak QUIC için şartname sunuldu IETF standardizasyonu. 2016 yılında bir QUIC çalışma grubu kuruldu. Ekim 2018'de, IETF'nin HTTP ve QUIC Çalışma Grupları , dünya çapında bir standart haline getirmeden önce QUIC üzerinden HTTP eşlemesini " HTTP/3 " olarak adlandırmaya ortaklaşa karar verdi . Mayıs 2021'de IETF , RFC 8999 , RFC 9001 ve RFC 9002 tarafından desteklenen QUIC'yi RFC  9000'de standart hale getirdi .    

Arka plan

İletim Kontrol Protokolü veya TCP, iki uç nokta arasında veri akışları göndermek için bir arayüz sağlamayı amaçlar. Veriler, diğer uca tam olarak aynı biçimde ulaşmasını sağlayan TCP sistemine iletilir veya bağlantı bir hata koşulunun var olduğunu gösterir.

Bunu yapmak için TCP, verileri ağ paketlerine böler ve her pakete az miktarda veri ekler. Bu ek veriler, kaybolan veya düzensiz gelen paketleri tespit etmek için kullanılan bir sıra numarası ve paket verileri içindeki hataların tespit edilmesini sağlayan bir sağlama toplamı içerir. Herhangi bir sorun oluştuğunda, TCP , göndericiye kayıp veya hasarlı paketi yeniden göndermesini söylemek için otomatik tekrar isteğini (ARQ) kullanır .

Çoğu uygulamada TCP, bir bağlantıdaki herhangi bir hatayı engelleme işlemi olarak görür ve hata çözülene veya bağlantının başarısız olduğu kabul edilene kadar daha fazla aktarımı durdurur. Birden çok veri akışını göndermek için tek bir bağlantı kullanılıyorsa, HTTP/2 protokolünde olduğu gibi, bu akışların tümü engellenir, ancak bunlardan yalnızca birinde sorun olabilir. Örneğin, bir favicon için kullanılan bir GIF görüntüsünü indirirken tek bir hata oluşursa , bu sorun çözülene kadar sayfanın geri kalanının tamamı bekleyecektir.

TCP sistemi bir "veri borusu" veya akışı gibi görünecek şekilde tasarlandığından, ilettiği veriler hakkında kasıtlı olarak çok az bilgi içerir. Bu verilerin TLS kullanarak şifreleme gibi ek gereksinimleri varsa , bunun TCP'nin üzerinde çalışan sistemler tarafından, bağlantının diğer ucundaki benzer yazılımlarla iletişim kurmak için TCP kullanılarak ayarlanması gerekir. Bu tür kurulum görevlerinin her biri kendi el sıkışma sürecini gerektirir . Bu, bağlantı kurulana kadar genellikle birkaç istek ve yanıt döngüsü gerektirir. Uzun mesafeli iletişimin doğal gecikmesi nedeniyle , bu, genel aktarıma önemli ölçüde ek yük getirebilir.

özellikleri

QUIC, bir TCP bağlantısına neredeyse eşdeğer olmayı hedefler, ancak gecikme süresi çok daha düşüktür. Bunu öncelikle HTTP trafiğinin davranışının anlaşılmasına dayanan iki değişiklik yoluyla yapar .

İlk değişiklik, bağlantı kurulumu sırasında ek yükü büyük ölçüde azaltmaktır. Çoğu HTTP bağlantısı TLS talep edeceğinden , QUIC kurulum anahtarlarının ve desteklenen protokollerin değişimini ilk el sıkışma sürecinin bir parçası yapar. Bir istemci bir bağlantı açtığında, yanıt paketi, gelecekteki paketlerin şifreleme kullanması için gereken verileri içerir. Bu, TCP bağlantısını kurma ve ardından ek paketler aracılığıyla güvenlik protokolünü müzakere etme ihtiyacını ortadan kaldırır. Diğer protokoller, birden çok adımı tek bir istek-yanıtında birleştirerek aynı şekilde hizmet verebilir. Bu veriler daha sonra hem ilk kurulumda aşağıdaki istekler için hem de aksi takdirde ayrı bağlantılar olarak görüşülecek olan gelecekteki istekler için kullanılabilir.

İkinci değişiklik, kayıp kurtarmayı içermeyen, temel olarak TCP yerine UDP'yi kullanmaktır. Bunun yerine, her QUIC akışı ayrı olarak akış kontrollüdür ve kayıp veriler UDP düzeyinde değil QUIC düzeyinde yeniden iletilir. Bu, yukarıdaki favicon örneğinde olduğu gibi bir akışta bir hata meydana gelirse, protokol yığınının diğer akışlara bağımsız olarak hizmet vermeye devam edebileceği anlamına gelir . Bu, hataya açık bağlantılarda performansı iyileştirmede çok yararlı olabilir, çünkü çoğu durumda TCP bir paketin eksik veya bozuk olduğunu fark etmeden önce önemli miktarda ek veri alınabilir ve hata düzeltilirken bu verilerin tümü engellenir veya hatta temizlenir. QUIC'de, tek çoğullanmış akış onarılırken bu veriler işlenmekte serbesttir.

QUIC, genel gecikmeyi ve verimi de iyileştiren bir dizi daha sıradan değişiklik içerir. Örneğin, paketler tek tek şifrelenir, böylece şifrelenmiş verilerin kısmi paketleri beklemesine neden olmazlar. Bu, şifreleme kayıtlarının bir bayt akışında olduğu ve protokol yığınının bu akış içindeki daha yüksek katman sınırlarından habersiz olduğu TCP altında genellikle mümkün değildir. Bunlar, üstte çalışan katmanlar tarafından müzakere edilebilir, ancak QUIC, tüm bunları tek bir el sıkışma sürecinde yapmayı amaçlar.

QUIC sisteminin bir diğer amacı, bir mobil cihazın kullanıcısı yerel bir WiFi etkin noktasından mobil ağa geçtiğinde ne olduğu gibi ağ değiştirme olayları sırasında performansı artırmaktı . Bu TCP'de gerçekleştiğinde, mevcut her bağlantının birer birer zaman aşımına uğradığı ve ardından talep üzerine yeniden kurulduğu uzun bir süreç başlar. Bu sorunu çözmek için QUIC, kaynaktan bağımsız olarak sunucuyla olan bağlantıyı benzersiz şekilde tanımlayan bir bağlantı tanımlayıcısı içerir. Bu, kullanıcının IP adresi değişse bile orijinal bağlantı kimliği hala geçerli olacağından, her zaman bu kimliği içeren bir paket göndererek bağlantının yeniden kurulmasını sağlar .

QUIC, işletim sistemi çekirdeğinde olmak yerine uygulama alanında uygulanabilir . Bu genellikle , veriler uygulamalar arasında taşınırken bağlam anahtarları nedeniyle ek yüke neden olur . Bununla birlikte, QUIC durumunda, protokol yığınının, QUIC kullanan her uygulamanın UDP'de barındırılan kendi bağlantılarına sahip olduğu tek bir uygulama tarafından kullanılması amaçlanmıştır. Sonuçta fark çok küçük olabilir çünkü genel HTTP/2 yığınının çoğu zaten uygulamalarda (veya daha yaygın olarak kitaplıklarında) bulunur. Kalan kısımları bu kitaplıklara yerleştirmek, esasen hata düzeltme, HTTP/2 yığınının boyutu veya genel karmaşıklığı üzerinde çok az etkiye sahiptir.

Bu organizasyon, güncellemeler için çekirdekte değişiklik gerektirmediğinden gelecekteki değişikliklerin daha kolay yapılmasına izin verir . QUIC'in uzun vadeli hedeflerinden biri, ileri hata düzeltme (FEC) ve gelişmiş tıkanıklık kontrolü için yeni sistemler eklemektir .

TCP'den UDP'ye geçişle ilgili bir endişe, TCP'nin geniş çapta benimsenmesi ve internet altyapısındaki "orta kutuların" çoğunun TCP ve hız sınırı ve hatta UDP'yi engellemesi için ayarlanmış olmasıdır. Google, bunu karakterize etmek için bir dizi keşif deneyi gerçekleştirdi ve bu şekilde yalnızca az sayıda bağlantının engellendiğini buldu. Bu, TCP'ye hızlı bir geri dönüş sisteminin kullanılmasına yol açtı; Chromium'un ağ yığını aynı anda hem QUIC hem de geleneksel TCP bağlantısı açar ve bu da ihmal edilebilir gecikmeyle geri dönmesine olanak tanır.

Google QUIC (gQUIC)

Google tarafından oluşturulan ve QUIC adı altında IETF'ye alınan protokol (zaten 2012'de QUIC sürüm 20 civarında) IETF içinde gelişmeye ve rafine edilmeye devam eden QUIC'den oldukça farklıdır. Orijinal Google QUIC, genel amaçlı bir protokol olarak tasarlanmıştı, ancak başlangıçta Chromium'da HTTP(S)'yi desteklemek için bir protokol olarak dağıtıldı. IETF QUIC protokolünün mevcut gelişimi, genel amaçlı bir aktarım protokolüdür. Chromium geliştiricileri, Chromium'da QUIC için en son internet standartlarını benimsemek ve bunlara tam olarak uymak için IETF QUIC'in standardizasyon çabalarının gelişimini izlemeye devam etti.

Benimseme

tarayıcı desteği

QUIC kodu, 2012'den başlayarak Google Chrome'da deneysel olarak geliştirildi ve Chromium sürüm 29'un (20 Ağustos 2013'te yayınlandı) bir parçası olarak duyuruldu. Şu anda Chromium ve Chrome'da varsayılan olarak etkindir.

Firefox'ta destek Mayıs 2021'de geldi.

Apple , Nisan 2020'de Safari Technology Preview 104 aracılığıyla WebKit motoruna deneysel destek ekledi . macOS Big Sur ve iOS 14'te bulunan Safari 14'e resmi destek eklendi ancak özelliğin manuel olarak açılması gerekiyor.

Müşteri desteği

QUIC ve diğer protokoller için cronet kitaplığı, Google Play Hizmetleri aracılığıyla yüklenebilen bir modül olarak Android uygulamaları için mevcuttur .

11 Eylül 2019'da yayınlanan cURL 7.66, HTTP/3'ü (ve dolayısıyla QUIC) destekler.

Ekim 2020'de Facebook, Instagram dahil olmak üzere uygulamalarını ve sunucu altyapısını başarıyla QUIC'e geçirdiğini duyurdu ve İnternet trafiğinin zaten %75'i QUIC kullanıyor. YouTube ve Gmail dahil olmak üzere Google'ın tüm mobil uygulamaları QUIC'i destekler . Uber'in mobil uygulaması da QUIC kullanıyor.

Sunucu desteği

2017 itibariyle, aktif olarak sürdürülen birkaç uygulama var. Google sunucuları QUIC'i destekler ve Google bir prototip sunucu yayınladı. Akamai Technologies , Temmuz 2016'dan beri QUIC'i desteklemektedir. quic-go adlı bir Go uygulaması da mevcuttur ve Caddy sunucusunda deneysel QUIC desteğine güç sağlar . 11 Temmuz 2017'de LiteSpeed ​​Technologies, yük dengeleyici (WebADC) ve LiteSpeed ​​Web Sunucusu ürünlerinde QUIC'i resmi olarak desteklemeye başladı . Ekim 2019 itibariyle, QUIC web sitelerinin %88,6'sı LiteSpeed ​​ve %10,8'i Nginx kullandı . İlk başta yalnızca Google sunucuları QUIC üzerinden HTTP bağlantılarını desteklese de , Facebook da teknolojiyi 2018'de piyasaya sürdü ve Cloudflare 2018'den beri beta bazında QUIC desteği sunuyor. Mart 2021 itibarıyla, tüm web sitelerinin % 5.0'i QUIC kullanıyor. Microsoft Windows Server 2022, MsQuic aracılığıyla QUIC protokolleri üzerinden hem HTTP/3'ü hem de SMB'yi destekler .

Ek olarak, birkaç eski topluluk projesi vardır: libquic, QUIC'in Chromium uygulamasının ayıklanması ve bağımlılık gereksinimlerini en aza indirecek şekilde değiştirilmesiyle oluşturulmuştur ve goquic, libquic'in Go bağlamalarını sağlar . Son olarak, quic-reverse-proxy, QUIC isteklerini kaynak sunucu tarafından anlaşılabilecek düz HTTP'ye çeviren bir ters proxy sunucusu gibi davranan bir Docker görüntüsüdür .

.NET 5 , MsQuic kitaplığını kullanarak QUIC için deneysel destek sunar .

Kaynak kodu

Aşağıdaki QUIC veya gQUIC uygulamaları kaynak biçiminde mevcuttur:
uygulama Lisans Dilim Açıklama
Krom Özgür C++ Bu, Chrome web tarayıcısının kaynak kodu ve referans gQUIC uygulamasıdır. Test için kullanılabilecek bağımsız bir gQUIC ve QUIC istemci ve sunucu programları içerir. Göz atılabilir kaynak kodu . Bu sürüm aynı zamanda temelidir HATTI 'nın stellite ve Google'ın cronet.
QUIC Kitaplığı (mvfst) MIT Lisansı C++ mvfst (Belirtilen hızlı hareket), Facebook tarafından C++'da IETF QUIC protokolünün bir istemci ve sunucu uygulamasıdır.
LiteSpeed ​​QUIC Kitaplığı (lsquic) MIT Lisansı C Bu, LiteSpeed ​​Web Sunucusu ve OpenLiteSpeed tarafından kullanılan QUIC ve HTTP/3 uygulamasıdır .
ngtcp2 MIT Lisansı C Bu, kripto kitaplığı agnostik olan ve OpenSSL veya GnuTLS ile çalışan bir QUIC kitaplığıdır. HTTP/3 için nghttp3 gibi ayrı bir kitaplığa ihtiyacı vardır .
kiş BSD-2-Madde Lisansı Pas Soketten bağımsızdır ve C/C++ uygulamalarında kullanım için bir C API sunar.
çabuk MIT Lisansı C Bu kitaplık, H2O web sunucusu için QUIC uygulamasıdır .
hızlı hareket MIT Lisansı Gitmek Bu kitaplık, Caddy web sunucusunda QUIC desteği sağlar . İstemci işlevselliği de mevcuttur.
Quinn Apache Lisansı 2.0 Pas
neqo Apache Lisansı 2.0 Pas Mozilla'nın bu uygulamasının Firefox web tarayıcısında kullanılan bir ağ kitaplığı olan Necko'ya entegre edilmesi planlanıyor.
aioquic BSD-3-Madde Lisansı piton Bu kitaplık, hem istemcilere hem de sunuculara yerleştirmeye uygun G/Ç'siz bir API'ye sahiptir.
pikokik BSD-3-Madde Lisansı C IETF spesifikasyonlarıyla uyumlu minimal bir QUIC uygulaması
pquic MIT Lisansı C Eklentileri dinamik olarak yükleyebilen bir eBPF sanal makinesi içeren genişletilebilir bir QUIC uygulaması
MsQuic MIT Lisansı C Microsoft'tan genel amaçlı bir QUIC kitaplığı olarak tasarlanmış bir çapraz platform QUIC uygulaması .
MİKTARI BSD-2-Madde Lisansı C Quant, geleneksel POSIX platformlarını (Linux, MacOS, FreeBSD, vb.) ve gömülü sistemleri destekler.
hızlı BSD-3-Madde Lisansı Haskell Bu paket, Haskell hafif iş parçacıklarına dayalı QUIC uygular.
netty-incubator-codec-quic Apache Lisansı 2.0 Java Bu paket, Quiche uygulamasına dayalı olarak netty'de QUIC'yi uygular.

Ayrıca bakınız

Referanslar

Dış bağlantılar