Bosh sahifa Wiki QUIC

QUIC

QUICUDP 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:

  • DNS HTTPS record;
  • Alt-Svc header;
  • oldingi ulanish ma’lumoti;
  • brauzer siyosati

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:

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:

  1. TCP handshake;
  2. TLS handshake;
  3. ilova so‘rovi

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:

  • bidirectional;
  • unidirectional;
  • client-initiated;
  • server-initiated

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:

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.

Migration:

  • mobil qurilma;
  • NAT rebinding;
  • network handover;
  • multipathga tayyorgarlik

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:

  • QUIC ulanishga urinadi;
  • timeout yoki xato oladi;
  • TCP asosidagi HTTP/2 yoki HTTP/1.1ga qaytadi.

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:

  • fragmentatsiya;
  • packet loss;
  • handshake xatosi;
  • katta packetning o‘tmasligi

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:

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