Multi-streaming — bitta transport connection ichida bir nechta mustaqil mantiqiy ma’lumot oqimini parallel olib borish imkoniyatidir. QUIC har streamga alohida byte tartibi va flow-control holati beradi. HTTP/3 requestlari bir connectiondagi turli streamlarda uzatiladi, shu sabab bir stream paket yo‘qotishi boshqasining tayyor data sini applicationga berishni to‘liq to‘xtatmaydi.
Stream identifikatori
QUIC stream ID streamni kim boshlagani, bir yoki ikki yo‘nalishli ekanini va tartib raqamini kodlaydi. Client-initiated bidirectional stream HTTP request-response uchun, unidirectional stream control yoki encoder ma’lumoti uchun ishlatilishi mumkin. Har endpoint faqat o‘ziga ruxsat etilgan turdagi IDni yaratadi.
Stream IDlar qayta ishlatilmaydi. Yopilgan stream o‘rniga yangi ID olinadi. Juda ko‘p stream ochish peer state va xotirasini bosmasligi uchun MAX_STREAMS limiti mavjud.
Mustaqil tartib
Har stream byte lari o‘z offseti bo‘yicha tartiblanadi. 3-streamdagi yo‘qolgan packet shu streamning keyingi byte larini kutdiradi, ammo 7-streamning complete data si deliver qilinishi mumkin. Bu TCP connectiondagi umumiy byte tartibiga nisbatan head-of-line blockingni kamaytiradi.
Network congestion baribir connection bo‘yicha umumiy. Paket yo‘qolishi congestion window va umumiy throughputga ta’sir qiladi. Multi-streaming network capacityni ko‘paytirmaydi, faqat application oqimlari orasidagi transport bog‘liqligini kamaytiradi.
Flow control
Har streamda MAX_STREAM_DATA, connectionda MAX_DATA limiti bor. Bitta oqim individual limitga yetib to‘xtashi, boshqasi davom etishi mumkin. Umumiy limit tugasa barcha stream yangi data yubora olmaydi.
Receiver streamlarni o‘z vaqtida o‘qimasa buffer to‘ladi. Application faqat yuqori priority streamni o‘qib, qolganini cheksiz tashlab qo‘ymasligi kerak. Cancellation va reset resource creditni boshqaradi.
Priority va scheduling
Transport barcha streamga biznes priorityni avtomatik bilmaydi. HTTP/3 priority signali server scheduleriga muhim response ni oldinroq yuborishni ko‘rsatishi mumkin. Fair scheduling bitta katta downloadning kichik control requestlarini siqib chiqarishini kamaytiradi.
Juda mayda ko‘p stream ochish header va state overheadini oshiradi. Aksincha, barcha ishni bitta streamga joylash mustaqillik foydasini yo‘qotadi. Stream chegarasi application operatsiyasi va cancellation lifecycleiga mos tanlanadi.
Tugatish va xatolar
FIN stream sender tomoni data tugaganini bildiradi. RESET_STREAM yuboruvchi oqimni xato bilan tugatadi, STOP_SENDING receiver endi data xohlamasligini bildiradi. Bir stream xatosi har doim connectionni yopmaydi.
Protocol invariant buzilishi yoki critical control stream yopilishi connection-level xato bo‘lishi mumkin. HTTP/3 qaysi stream turlari majburiyligini belgilaydi. Application stream resetini umumiy network failuredan farqli qayta ishlaydi.
HTTP/2 bilan qiyosiy qatlam
HTTP/2 ham bitta TCP connectionda ko‘p application streamni multiplex qiladi. Biroq TCP segmenti yo‘qolsa barcha HTTP/2 streamlar byte stream tartibi sabab kutadi. HTTP/3ning QUIC streamlari transport darajasida mustaqil reassemblyga ega.
Bu HTTP/3 har doim tez degani emas. Handshake, CPU, network loss va server implementation natijaga ta’sir qiladi. Kichik yo‘qotishsiz tarmoqda farq kam bo‘lishi mumkin. Multi-streamingning asosiy xususiyati isolation semantikasi, marketing tezlik va’dasi emas.
QPACK header compression control streamlari orqali state almashadi. Encoder reference qilgan dynamic table entry decoderga hali yetmagan bo‘lsa ayrim request stream header decodingni kutishi mumkin. Blocked stream limiti memory va head-of-line xavfini cheklaydi.
Bog‘liq tushunchalar
QUIC stream, HTTP/3, Stream ID, Multiplexing, Flow control, Head-of-line blocking, Stream reset