Bosh sahifa Wiki Flow control

Flow control

Flow control — tez sender sekin receiverning buffer va qayta ishlash imkoniyatini oshirib yubormasligi uchun uzatiladigan data miqdorini cheklash mexanizmidir. U network congestion controlidan farq qiladi: flow control qabul qiluvchi endpointni, congestion control esa tarmoq yo‘lidagi umumiy sig‘imni himoya qiladi.

Sliding window

Receiver qancha data qabul qila olishini window orqali e’lon qiladi. Sender acknowledgement olinmagan data miqdorini shu limitdan oshirmaydi. Receiver application data ni o‘qigach buffer bo‘shaydi va window update yuboradi.

Window nol bo‘lsa sender yangi payloadni vaqtincha to‘xtatadi. Connection deadlock bo‘lib qolmasligi uchun TCP zero-window probe kabi mexanizm receiver window qayta ochilganini tekshiradi. Receiver update yo‘qolsa sender abadiy jim qolmasligi kerak.

TCP flow control

TCP headeridagi receive window qabul bufferining bo‘sh hajmini bildiradi. Window scaling optioni yuqori bandwidth-delay productli tarmoqlarda 16-bit maydondan kattaroq window ishlatishga imkon beradi. Scaling handshake vaqtida kelishiladi.

Senderning haqiqiy flight limiti receive window va congestion window orasidagi kichik qiymatdir. Application socketdan sekin o‘qisa receive buffer to‘ladi va advertised window kamayadi. Bu holat network congestion bo‘lmasa ham throughputni pasaytiradi.

QUIC flow control

QUIC connection va har bir stream uchun alohida flow-control limitlariga ega. MAX_DATA butun connection, MAX_STREAM_DATA bitta stream uchun ruxsatni oshiradi. Receiver faqat limitni kattalashtiradi; eski kichik limitga qaytarmaydi.

Ko‘p stream bir connection limitini ulashadi. Bitta stream ko‘p data olib, umumiy creditni band qilishi mumkin, shuning uchun application o‘qish va priorityni boshqaradi. Stream limitining tugashi boshqa streamni har doim to‘xtatmaydi, ammo connection limitining tugashi barchasiga ta’sir qiladi.

Application backpressure

Transport receiver kernel yoki protocol bufferini himoya qiladi, lekin keyingi database yoki worker queueni bilmaydi. Application incoming streamni tez o‘qib, data ni cheksiz ichki queuega joylasa transport flow control foydasini yo‘qotadi. O‘qish tezligi downstream capacity bilan bog‘lanadi.

Reactive pipeline demand, bounded channel yoki semaphore orqali backpressure beradi. Drop mumkin bo‘lgan telemetry bilan yo‘qotilmasligi kerak bo‘lgan transaction turli siyosatga ega. Buffer limiti va overflow natijasi aniq bo‘ladi.

Head-of-line va performance

Kichik window RTT davomida linkni bo‘sh qoldiradi. Keragidan katta window xotirani oshiradi va sekin consumer uchun ko‘p outstanding data yaratadi. Autotuning bandwidth va application o‘qishiga qarab bufferlarni moslashtiradi.

Flow control priority emas. Yuqori priorityli streamga credit ajratilmasa past priority data umumiy limitni egallashi mumkin. Scheduler va application protocol alohida fairness siyosatini bajaradi.

Deadlock xavfi

Ikki tomon protocol message yuborish uchun credit kutsa, lekin credit update ham o‘sha bloklangan oqimga bog‘liq bo‘lsa deadlock yuz beradi. Control frame va flow-control update payload creditidan mustaqil uzatiladi. Application ham response yuborish uchun request bodyni to‘liq bufferlash talabini ehtiyotkor tanlaydi.

Receiver window update ni juda mayda bo‘lakda yuborsa control trafik ko‘payadi. Juda kech update esa senderni bekor ushlab turadi. Threshold bufferning ma’lum qismi bo‘shaganda yoki vaqt bo‘yicha update yuborishni muvozanatlashtiradi.

Window update yo‘qolishi protocol recovery mexanizmi bilan bartaraf etiladi.

Bog‘liq tushunchalar

Receive window, Sliding window, Backpressure, Congestion control, TCP, QUIC, Buffer