Google’da çalışan Jim Roskind tarafından tasarlanan bir protokoldür. Fikir ilk olarak 2012 yılında ortaya atılmış, ortaya atılan bu fikir oldukça tutmuş olacak ki 2013 yılında halka duyurulmaya karar verilmiş. QUIC kelimesi size çabuk anlamına gelen quick andırıyor olabilir. Protokolün yeni adını seçerken böyle güzel bir isim bulmuşlar. Türkçe’mize ise hızlı, çabukça, fişeqqqqq diye çevirebileceğimizi düşünüyorum.
QUIC Nedir?
QUIC (Quick UDP Internet Connections)yapısı gereği UDP protokolünü kullanan bir network taşıma protokolüdür. Çoğaltılmış bağlantı kümelenmesini destekler ve TLS/SSL ile benzer özellikler taşıyarak güvenli bir şekilde veri iletimini sağlamayı amaçlar. Network tıkanıklığını çözmek için içerisinde algoritmaları barındırır. QUIC’in ana hedefi, şu anda TCP kullanan bağlantı yönelimli web uygulamalarının algılanan performansını artırmak ve kullanıcı deneyimini iyileştirmektir. 2015 yılında IETF’e taslak olarak sunuldu, aradan biraz vakit geçtikten sonra 2016 da çalışma ekibi kuruldu ve bu günlere geldik.
QUIC Temel Özellikleri Nelerdir?
- Düşük gecikme süresi
- Güvenilir veri akışı
- Basitleştirilmiş tıkanıklık kontrolü
- TLS1.3 kullanımı
- HTTP/1.1 üzerinde çalışılabilirlik
- Hata düzeltmelerini destekler
QUIC çalışma grubu, bir sonraki adım olarak çoklu yol desteğini getirmiş ve isteğe bağlı hata düzeltmesini (FEC) destekler hale gelmiş.
Çalışma grubu, aynı zamanda QUIC’in sunabileceği ağ yönetimi konularına özellikle odaklandı.
Yeni çıkan bu protokol ise haliyle UDP kullandığı için üzerindeki TCP yükünden kurtulmuş oldu. Verileri bir birleri arasında bağlantı aramaksızın gönderecek olması protokolde rahatlamaya izin vererek minimum protokol mekanizmasını tetikliyor. Paketleri öyle dümdüz iletiyor. İstemci sunucu arasında aşağıda geçen durumlar otomatik olarak yaşanmamış oluyor.
Tabi burada TCP ve UDP protokollerinin en iyi yanları alınıp harmanlanıyor. Böylece hantal yapıdan kurtulunmuş oluyor. Güvenliği arttırılmış daha optimize bir network taşıma protokolü ortaya çıkıyor. QUIC ise tarayıcının hızlı bir şekilde sunucu ile iletişim kurmaya başlamasını sağlıyor. QUIC, bir bilgisayar (özellikle telefon) ile sunucu arasında bir HTTPS bağlantısı kurmaya çalışır ve kötü koşullara rağmen güvenilir şekilde bağlantı sağlar, bunu bir dizi yeni teknoloji ile yapar.
Peki bir örnek ile devam edelim konuyu bu şekilde daha iyi anlayabileceğinizi düşünüyorum, facebook ve twitter akışınızı kontrol ediyorsunuz herşey iyi güzel evde kullandığınız internetiniz iyi ve bir dizi api isteğini sorunsuz işleme aldınız.
Bu bahsettiklerimiz, TCP üzerinden çalışan HTTPS için mükemmel koşullar. Paket kaybımız yok, tıkanıklığımız yok, dalgalanma yok. Peki bağlantınız kötü olsaydı ve internet gezinme geçmişiniz kötü olsaydı? o zaman ne yapardınız.
İşte bu noktada QUIC devreye giriyor.
QUIC Hedefleri?
Kötü olan bağlantıları düzeltmeyi amaçlamış, 3g ve wifi gibi gecikmeli olan bağlantılar için kullanılması düşünülmüştür.
- Bağlantı gecikmelerini düşürmek için daha az gidiş ve dönüş yapılır.
- İstemci sunucudan aldığı bir senkronizasyon çerezini depolar böylelikle 0 RTT sağlanır.
- QUIC, kriptografik blok sınırlarını paket sınırları ile hizalar, böylece paket kaybının etkisi daha da düşüktür.
- Paket pacing özelliği (devam eden bant genişliği tahmini)
- Proaktif spekülatif yeniden iletim (hata düzeltme ve/veya ilk şifreleme bilgisini içermek gibi en önemli paketlerin kopyalarını gönderme)
- Yedekli veri iletimi azaltabilir veya sıkıştırabilir.
- Tek bir tıkanıklık isteği ile çok sayıda HTTP ve HTTPS isteği yapılabilir
- UDP engellendiği durumlarda otomatik TCP’ye geçiş
- Gelişmiş gizlilik özellikleri(çözümleme gerektirmez)
TCP bu noktada yüksek gecikmeli bağlantılar üzerinde çalışırken (3G kullanılan bir cep telefonu vb) oldukça fark edilebilir bir gecikme ile kullanıcıya içerik ulaştırılır. QUIC, bağlantının tüm yönlerini kontrol ettiğinden, bağlantıyı ve şifrelemeyi tek bir el sıkışmada birleştirir. Sonuçta içerik kullanıcıya eskisinden daha hızlı bir şekilde tek bir istekde ulaştırılmış olur.
QPACK Nedir?
HTTP/2 tarafından sunulan bir fayda’dan bahsetmek istiyorum, HTTP istekleri ve yanıtlarından gelen fazlalıklar bildiğiniz gibi HTTP/2 doğası gereği kaldırılmıştı daha doğrusu sıkıştırılmıştı ve bunada HPACK adı verilmişti.
Özellikle, diğer kullanılan teknikler arasında HPACK, önceki HTTP isteklerinden (veya yanıtlarından) gönderilen ve (veya alınan) başlıklarla(header) doldurulmuş dinamik tabloları kullanırdı, böylece son noktaların daha önce karşılaşılan başlıkları(header) yeni isteklerde (veya yanıtlarda) değil de hepsini tekrar iletmek için kullanırdı.
HPACK’in dinamik tablolarının (bir HTTP isteği veya yanıtı gönderen taraf) ve kod çözücü (bunları alan taraf) arasında senkronize edilmesi gerekirdi, aksi takdirde kod çözücü, aldıklarını çözemezdi.
TCP üzerinden HTTP/2 kullanımı basitti ve şeffaftı, çünkü aktarım katmanı (TCP), gönderdiği sıraya göre HTTP isteklerini ve yanıtlarını iletmekten sorumluydu, tabloları güncelleştirme işlemleri, kodlayıcı tarafından yalnızca parçalı olarak gönderilebilirdi.
Fakat QUIC için bu daha karmaşık bir hale geldi.
QUIC, farklı akışlar üzerinden bağımsız olarak birden fazla HTTP isteği (veya yanıtı) sunabilir, bu da tek bir akış söz konusu olduğunda verinin teslim edilmesini sağlarken, birden fazla akışta verilerin tesliminin garantisinin verilmemesi anlamınada geliyor.
Örneğin, bir istemci QUIC kullanarak A üzerinden bir HTTP isteğini gönderiyorsa ve B akışı üzerinden B’yi talep ederse, paket yeniden sıralama veya ağdaki kayıp nedeniyle yerine ulaşamayabilir, bu durumda B isteği, istekte bulunulmadan önce sunucu tarafından alınabilir. B isteği, A talebinden bir başlık(header) isteğinde bulunacak şekilde tasarlanmıştır, sunucu henüz A’yı görmediği için isteği anlayamaz.
GQUIC protokolünde, bu sorun sadece tüm HTTP istekleri ve cevap başlıklarının(header) aynı gQUIC akışı üzerinden dizi kullanılarak çözmesini sağlar. Bu, başlıkların (header) ne olursa olsun teslim edilmesi anlamınada gelir. Ayrıca, uygulama mevcut HTTP/2 isteklerinin çoğunu yeniden kullanılmasına izin veren çok basit bir yapıyı da içinde barındırır, diğer yandan, QUIC istek küçültme özelliklerinide içerisinde barındırır.
https://en.wikipedia.org/wiki/QUIC
QUIC, a multiplexed stream transport over UDP
QUIC: Design Document and Specification Rationale