QUIC, UDP üzerinde şifreli veri iletimi sağlayan bir taşıma protokolüdür. UDP veriyi datagram adı verilen bağımsız iletim birimleri halinde taşır. QUIC ise akışlardaki kayıp veriyi yeniden gönderir, alıcının kapasitesine göre veri miktarını sınırlar ve ağın taşıma kapasitesine göre gönderim hızını ayarlar. Bu son iki işlev sırasıyla akış kontrolü ve tıkanıklık kontrolü olarak adlandırılır.

QUIC, taşıma bağlantısının kurulumu ile kriptografik el sıkışmayı birlikte yürütür. Böylece web istekleri gibi birden fazla veri akışı tek bağlantıda taşınabilir; bir akıştaki eksik veri diğer akışların sıralı teslimatını bekletmez.

Bu yapı, QUIC'in her ağda daha hızlı veya sorunsuz olacağı anlamına gelmez. QUIC bağlantısının performansı gecikmeye, paket kaybına, UDP erişimine, istemci ve sunucu uygulamalarına, ara ağ cihazlarına ve yapılandırmaya bağlıdır.

QUIC Bağlantısında UDP ve TLS 1.3

İstemci, QUIC bağlantısını başlatırken kullandığı QUIC sürümünü belirtir, taşıma parametrelerini gönderir ve kriptografik el sıkışmayı başlatır. QUIC'in 1. sürümü, TLS 1.3'ü bağlantı kurulumuyla bütünleştirir. TLS 1.3, sunucunun kimliğini doğrulamak ve bağlantı için şifreleme anahtarları üretmek amacıyla kullanılır. El sıkışma ilerledikçe uygulama verisi şifreli ve bütünlüğü korunan paketlerle taşınır.

QUIC, işletim sistemlerinde ve ağ cihazlarında yaygın olarak desteklenen UDP'yi temel paket taşıma arayüzü olarak kullanır. UDP bağlantı kurmaz, teslim garantisi vermez ve paketleri sıralamaz. QUIC bağlantıyı yönetir ve her akışın verisini kendi içinde sıralı ve güvenilir biçimde teslim eder; farklı akışlar arasında ortak bir teslim sırası kurmaz.

El Sıkışma ve Erken Veri

Yeni bir bağlantıda istemci ile sunucu, taşıma parametrelerini ve güvenlik bilgilerini aynı el sıkışma sürecinde paylaşır. İstemci, uygun önceki oturum bilgileri varsa sunucudan yeni bir yanıt beklemeden 0-RTT olarak adlandırılan erken veriyi gönderebilir; sunucu bunu kabul etmek zorunda değildir. RTT, bir iletinin karşı uca gidip yanıtının dönmesi için geçen süredir. 0-RTT bu beklemeyi azaltır, ağdaki iletim süresini ortadan kaldırmaz.

Erken veri, saldırganın aynı isteği yeniden göndermesine dayanan yeniden oynatma saldırısına açık olabilir. Ödeme gibi tekrarlandığında istenmeyen sonuç doğuran işlemlerde uygulama bu riski engellemeli veya erken veriyi kabul etmemelidir; şifreleme tek başına aynı işlemin iki kez yapılmasını önlemez.

QUIC Paketleri, Çerçeveleri ve Bağımsız Akışları

QUIC paketleri, akış verisi, alındı bildirimi, bağlantı yönetimi ve yol doğrulama gibi farklı amaçlara sahip çerçeveler taşıyabilir. Her akışın bir numarası vardır ve uygulama bu akışlara veri yazar. Tek yönlü akışta yalnız bir uç, çift yönlü akışta iki uç da veri gönderebilir. Her akışın kendi veri sırası bulunduğu için alıcı, bir akıştaki eksik parçayı beklerken başka bir akışın tamamlanmış verisini uygulamaya iletebilir.

QUIC, destekleyen uç noktalar arasında DATAGRAM uzantısıyla uygulama verisi de taşıyabilir. Bu uzantıyla gönderilen veri kaybolursa QUIC onu yeniden göndermez. Veri yine de şifrelenir ve tıkanıklık kontrolüne tabidir.

QUIC Paket Kaybını Nasıl Telafi Eder?

Alıcı, aldığı paketleri bildiren onay çerçeveleri gönderir. Gönderici, paket numaraları, zaman ölçümleri ve onay bilgileriyle hangi paketlerin kayıp sayıldığını belirler. Kaybolan paketin aynısını yeniden göndermek yerine, yeniden iletilmesi gereken akış ve kontrol bilgisini yeni çerçevelerle yeni paketlerde gönderir.

Bir Akıştaki Kayıp Diğer Akışları Ne Zaman Etkiler?

QUIC, bir akıştaki kayıp verinin sıralı teslimatını yalnız o akışta bekletir; başka bir akışın tamamlanan verisi uygulamaya ulaşabilir. Tıkanıklık kontrolü ise ağ yolu için ortak olduğundan yoğun paket kaybı veya dar bant genişliği aynı yolu kullanan bütün akışları yavaşlatabilir.

QUIC Bağlantı Kimliği ve Ağ Değişiminde Devamlılık

TCP bağlantısı genellikle kaynak ve hedef IP adresleri ile portların birleşimiyle tanınır. QUIC buna ek olarak uç noktaların yönettiği bağlantı kimliklerini kullanır. Böylece istemcinin Wi-Fi ağından mobil veriye geçmesi veya NAT yapan cihazın bağlantıya atadığı dış IP adresi ya da portun değişmesi gibi durumlarda, sunucu yeni paketleri mevcut bağlantıyla ilişkilendirebilir.

Yeni Ağ Yolunun Doğrulanması

IP adresi veya port değiştiğinde QUIC, yeni ağ yolunun aynı uç nokta tarafından kullanılabildiğini bir sınama gönderip yanıt alarak doğrular. Doğrulama tamamlanmadan gönderilebilecek veri miktarı sınırlandırılabilir. Sunucu, istemcinin kendi isteğiyle başka bir yerel adrese geçmesini sınırlayabilir; bu kısıtlama NAT cihazının yaptığı adres veya port değişimini yasaklamaz. Bağlantı kimliği kullanılmayan bir kurulumda adres değişimi bağlantının eşleştirilmesini bozabilir. Güvenlik duvarı, bağlantı zaman aşımı veya yeni yolda UDP trafiğinin engellenmesi de devamlılığı önleyebilir.

QUIC Bağlantı Kimliği Kullanıcı Kimliği Değildir

Bağlantı kimliği, paket yönlendirmede kullanılan IP adresinin veya oturum açmış kullanıcı hesabının yerine geçmez. Temel görevi, QUIC uç noktalarının paketleri doğru bağlantıya eşleştirmesidir. Uzun süre değişmeden kullanılan tanımlayıcılar izlenebilirlik riski doğurabileceği için uygulamalar bağlantı kimliklerini yenileyebilir.

HTTP/3 ile QUIC Arasındaki İlişki

HTTP/3 ile QUIC aynı protokol değildir. QUIC taşıma katmanında güvenli bağlantı, akış, kayıp kurtarma ve tıkanıklık kontrolü sunar; HTTP/3 ise HTTP istekleri, yanıtları, başlıkları ve kontrol mesajlarının bu taşıma üzerinde nasıl düzenleneceğini tanımlar.

  • UDP, IP üzerinde datagram taşır.
  • QUIC, UDP üzerinde şifreli ve güvenilir bir bağlantıda birden çok bağımsız akışı destekler.
  • HTTP/3, HTTP istek ve yanıtlarını QUIC akışlarında düzenler.

Bir QUIC bağlantısı yalnız HTTP/3 için kullanılmak zorunda değildir; başka uygulama protokolleri de QUIC üzerinde tanımlanabilir. Web tarayıcısının HTTP/3 kullanması için istemci ve sunucunun TLS el sıkışmasındaki ALPN uzantısıyla HTTP/3 üzerinde anlaşması gerekir. ALPN, aynı güvenli bağlantıda hangi uygulama protokolünün kullanılacağını seçer.

QUIC Performansı Hangi Koşullara Bağlıdır?

QUIC, taşıma ve güvenlik el sıkışmalarını birleştirdiği için özellikle yüksek gecikmeli ağlarda bağlantı kurma süresini azaltabilir. Bağımsız akışlar da tek bir kaybın bütün HTTP isteklerini taşıma katmanında bekletmesini önleyebilir. Ancak bu mekanizmalar tek başına daha yüksek indirme hızı veya her durumda daha düşük gecikme garantisi vermez.

  • UDP trafiği engellenirse veya ciddi biçimde sınırlandırılırsa istemci başka bir taşıma seçeneğine dönebilir.
  • Sık paket kaybı, ağ yolundaki tıkanıklık kontrolü nedeniyle toplam aktarım hızını düşürebilir.
  • Sunucu, istemci bağlantılarını karşılayıp arka uç sunuculara ileten ters proxy ve trafiği sunucular arasında dağıtan yük dengeleyici QUIC trafiğini doğru yönlendirmeli ve bağlantı kimliklerini tutarlı biçimde işlemelidir.
  • Şifreleme, paket işleme ve günlükleme maliyeti kullanılan yazılım ile donanıma göre değişebilir.

Bir Web Sunucusunda QUIC ve HTTP/3 Desteği Nasıl Doğrulanır?

Bir sunucunun HTTP/3 seçeneğini duyurması tek başına başarılı QUIC bağlantısını kanıtlamaz. Bir web sunucusunun QUIC ve HTTP/3 desteğini doğrulamak için istemcinin UDP üzerinden hedefe ulaştığını, el sıkışmasının tamamlandığını, sertifikanın doğrulandığını ve HTTP/3 oturumunun gerçekten seçildiğini görmek gerekir.

HTTP/3 çoğu web kurulumunda UDP'nin 443 numaralı portunda sunulur. İstemci veya sunucu günlüklerinde gerçekten seçilen protokol ve bağlantı hataları kontrol edilir; sonuç test yapılan ağın o andaki erişimini gösterir. Ayrıca bir süre veri gönderilmediğinde bağlantının ne zaman kapandığı ve UDP engellendiğinde desteklenen TCP tabanlı HTTP sürümüne geri dönüşün çalışıp çalışmadığı denenir.