QUIC — UDP ustida ishlaydigan, ishonchli transport, shifrlash va bir nechta mustaqil oqimni bitta protokolda birlashtirgan zamonaviy transport protokoli.
QUIC dastlab Google tomonidan ishlab chiqilgan, keyinchalik IETF tomonidan standartlashtirilgan. HTTP/3 ilova so‘rov va javoblarini QUIC orqali tashiydi.
QUIC TCPning oddiy kengaytmasi emas. U ulanish boshqaruvi, paket yo‘qolishini tiklash, congestion control, stream, connection migration va TLS 1.3 asosidagi himoyani user space implementatsiyasida bajaradi.
UDP ustida ishlashi
QUIC odatda UDP datagramlar ichida uzatiladi.
UDP tanlanishining sabablari:
- deyarli barcha operatsion tizimlarda mavjud;
- yangi transport protokolini kernel yangilanishisiz joriy qilish;
- user space’da tez rivojlantirish;
- NAT va firewall orqali mavjud UDP yo‘lidan foydalanish;
- applicationga mos congestion control.
UDP QUICga ishonchlilikni avtomatik bermaydi. Qayta uzatish, oqim nazorati va congestion controlni QUICning o‘zi bajaradi.
QUIC porti
HTTP/3 odatda UDP 443-portda ishlaydi.
Server TCP 443da HTTP/2 yoki HTTP/1.1, UDP 443da HTTP/3 taqdim etishi mumkin.
Client serverning HTTP/3 imkoniyatini:
orqali bilishi mumkin.
Connection ID
TCP ulanishi odatda manba va destination IP hamda port juftligi bilan aniqlanadi.
QUIC qo‘shimcha Connection ID ishlatadi.
Connection ID afzalliklari:
- client IP o‘zgarsa ulanishni davom ettirish;
- load balancer routing;
- NAT rebinding;
- server workerga yo‘naltirish;
- connection migration.
Telefon Wi‑Fi tarmog‘idan mobil tarmoqqa o‘tganda IP manzil o‘zgarishi mumkin. QUIC server ruxsat bergan holatda sessiyani yangi yo‘l orqali davom ettiradi.
TLS 1.3 integratsiyasi
QUICda TLS 1.3 handshake transport bilan birlashtirilgan.
TLS quyidagilarni beradi:
QUIC paket headerining ayrim qismlari ham himoyalanadi. Tarmoqdagi kuzatuvchi TCPdagidek barcha transport holatini to‘liq ko‘ra olmaydi.
1-RTT ulanish
Yangi server bilan aloqa odatda bir round trip ichida transport va kriptografik sessiyani tayyorlaydi.
TCP + TLSda tarixan:
alohida kechikish qo‘shgan.
TLS 1.3 va TCP optimizatsiyalari bu farqni kamaytirgan bo‘lsa ham, QUIC handshake integratsiyasi uzoq tarmoqda foyda beradi.
0-RTT
Client oldin ulangan serverga session ticket bilan qayta ulansa, handshake tugashini kutmasdan 0-RTT application data yuborishi mumkin.
Afzalligi:
- birinchi so‘rov kechikishi kamayadi.
Xavfi:
Shu sababli 0-RTTda:
- GET kabi idempotent amallar;
- replayga chidamli so‘rovlar;
- alohida server siyosati
ishlatiladi.
Pul yechish yoki qaytarib bo‘lmaydigan amal 0-RTTga ehtiyotkorlik bilan qo‘yiladi.
Stream
Bitta QUIC connection ichida ko‘plab mustaqil stream mavjud.
Streamlar:
bo‘lishi mumkin.
Har stream o‘z byte offset va flow control holatiga ega.
Head-of-line blocking
TCP bitta tartiblangan bayt oqimi beradi. Bir TCP segment yo‘qolsa, undan keyingi baytlar kelgan bo‘lsa ham ilovaga berilmaydi.
HTTP/2 bir TCP connection ichida bir nechta mantiqiy stream ishlatadi, lekin transport darajasida TCP head-of-line blocking saqlanadi.
QUICda paket yo‘qolishi faqat shu paketdagi stream ma’lumotiga ta’sir qiladi. Boshqa streamlarning to‘liq kelgan data qismi ilovaga berilishi mumkin.
Bu HTTP/3da parallel resurslarni samaraliroq uzatadi.
Paket raqami
QUIC paketlarga packet number beradi.
Xususiyatlari:
- qayta uzatilgan paket yangi packet number oladi;
- ACK qaysi packetlar olinganini bildiradi;
- yo‘qolish aniqlanadi;
- replay va tartib boshqariladi.
TCP sequence number baytlar oqimiga tegishli. QUIC packet number esa alohida paket uzatish urinishiga tegishli.
ACK
QUIC ACK frame qabul qilingan packet number diapazonlarini bildiradi.
ACK:
- bir nechta diapazon;
- ACK delay;
- yo‘qolgan oraliqlar
haqida ma’lumot beradi.
Har paketga darhol ACK yuborish shart emas. Delayed ACK trafikni kamaytiradi, lekin loss detectionga ta’sir qiladi.
Loss recovery
QUIC paket yo‘qolishini:
- packet threshold;
- time threshold;
- PTO
orqali aniqlashi mumkin.
Yo‘qolgan packetning o‘zi aynan qayta yuborilmaydi. Undagi kerakli frame ma’lumoti yangi packet number bilan qayta jo‘natiladi.
Ba’zi frame qayta uzatilmaydi, chunki keyingi yangiroq holat ularning o‘rnini bosadi.
Congestion control
QUIC tarmoqni haddan tashqari yuklamaslik uchun congestion control ishlatadi.
Keng tarqalgan algoritmlar:
- NewReno;
- CUBIC;
- BBR;
- implementatsiyaga xos variantlar.
Congestion control quyidagilarni boshqaradi:
- congestion window;
- bytes in flight;
- sending rate;
- packet pacing;
- lossga javob;
- RTT hisoblash.
QUIC UDP ustida ishlagani bilan “cheksiz tezlikda” paket yubormaydi.
Flow control
QUIC receiver xotirasini himoyalash uchun flow control beradi.
Ikki daraja:
- connection-level;
- stream-level.
Receiver qancha data qabul qilishga tayyorligini MAX_DATA va MAX_STREAM_DATA kabi frame bilan bildiradi.
Sender limitdan oshsa, protocol error yuz beradi.
Stream priority
HTTP/3 bir nechta resurs streamini ochadi. Qaysi resurs oldin uzatilishi priority siyosatiga bog‘liq.
Masalan:
- HTML;
- asosiy CSS;
- muhim JavaScript;
- rasm;
- background download.
Priority protokol versiyasi va browser implementatsiyasiga bog‘liq.
Connection migration
Client tarmoq yo‘lini o‘zgartirganda yangi manzilni tekshirish uchun path challenge va path response ishlatilishi mumkin.
Server yangi manzil haqiqatan clientga tegishli ekanini tekshiradi.
uchun foydali.
Server migrationni taqiqlashi yoki Connection ID siyosatini cheklashi mumkin.
Stateless reset
Server connection holatini yo‘qotgan bo‘lsa, odatiy close frame yubora olmaydi.
Stateless reset clientga connection endi mavjud emasligini maxsus token orqali bildiradi.
Tokenni bilmagan begona tomon soxta reset yaratishi qiyin bo‘lishi kerak.
Version negotiation
Client server qo‘llamaydigan QUIC versiya bilan paket yuborsa, server qo‘llaydigan versiyalar ro‘yxatini bildirishi mumkin.
Version negotiation downgrade hujumiga qarshi himoyalanishi kerak.
Retry
Server client manzilini tekshirish yoki DDoS holatida state saqlamaslik uchun Retry packet yuborishi mumkin.
Client token bilan Initial packetni qayta yuboradi. Server token orqali client shu IP manzildan paket qabul qila olishini tekshiradi.
Bu spoofed source address bilan amplification xavfini kamaytiradi.
Amplification limiti
Server client manzili tasdiqlanmaguncha, qabul qilgan baytlaridan bir necha baravardan ortiq data yubormasligi kerak.
Bu hujumchining kichik so‘rov bilan qurbon manzilga katta javob yo‘naltirishini cheklaydi.
HTTP/3
HTTP/3 QUIC streamlarida HTTP semantikasini tashiydi.
Asosiy qismlar:
HTTP/2dagi HPACK TCP tartibiga tayangan. HTTP/3dagi QPACK streamlar mustaqilligiga moslashtirilgan.
Middlebox va firewall
Ayrim tarmoqlar UDPni yoki uzoq UDP sessiyasini bloklaydi.
Bunday holatda client:
Firewall UDP 443ga ruxsat bersa ham:
QUICga ta’sir qilishi mumkin.
MTU va packet size
QUIC Initial packet ma’lum minimal UDP payload hajmiga mos bo‘lishi kerak.
Path MTU noto‘g‘ri bo‘lsa:
kuzatiladi.
QUIC implementatsiyasi datagram hajmini yo‘lga moslashtiradi va packetizationni boshqaradi.
Load balancer
Connection ID server cluster ichida routing ma’lumotini kodlashi mumkin.
Load balancer packet payloadini ochmasdan:
bo‘yicha yo‘naltiradi.
Connection ID maxfiy yoki kuzatish uchun doimiy identifikatorga aylanib qolmasligi uchun server uni yangilashi mumkin.
Diagnostika
QUIC muammosida:
- UDP 443;
- Alt-Svc;
- DNS HTTPS record;
- TLS sertifikat;
- QUIC version;
- Initial packet;
- Retry;
- Connection ID;
- MTU;
- NAT timeout;
- packet loss;
- congestion;
- browser loglari;
- qlog;
- packet capture
tekshiriladi.
Packet payload shifrlangan bo‘lsa ham, packet turi, hajm, vaqt va Connection IDning ayrim qismlari ko‘rinishi mumkin.
Bog‘liq tushunchalar
UDP, HTTP/3, TLS 1.3, Connection ID, Stream, 0-RTT, Congestion control, Flow control, Packet loss, QPACK, Connection migration