Datagram — tarmoqda mustaqil birlik sifatida uzatiladigan, manzil va foydali ma’lumotga ega paket. Datagram oldingi yoki keyingi xabarga bog‘lanmasdan alohida yetkaziladi.
Atama ko‘pincha UDP ma’lumot birligini anglatadi. IP ham connectionless datagram modeliga tayanganligi sababli “IP datagram” iborasi ishlatiladi.
Datagram yetkazilishi, tartibi yoki takrorlanmasligi transportning o‘zida har doim kafolatlanmaydi.
Connectionless model
Datagram yuborishdan oldin doimiy sessiya o‘rnatish shart emas.
Sender destination manzil va portni ko‘rsatib, xabarni uzatadi. Har datagram mustaqil route bo‘ylab ketishi mumkin.
Bu model quyidagi afzalliklarga ega:
- handshake talab qilmaydi;
- kichik kechikish;
- serverda kamroq connection state;
- multicast va broadcast imkoniyati;
- qisqa so‘rovlar uchun kichik overhead.
Kamchiligi — reliabilityni ilova o‘zi boshqarishi kerak.
UDP datagram
UDP datagram ikki qismdan tuziladi:
Maydonlar:
| Maydon | Hajmi | Vazifasi |
|---|---|---|
| Source Port | 16 bit | Jo‘natuvchi porti |
| Destination Port | 16 bit | Qabul qiluvchi porti |
| Length | 16 bit | Header va payload umumiy uzunligi |
| Checksum | 16 bit | Xato aniqlash |
UDP xabar chegarasini saqlaydi. Sender bir datagram yuborsa, receiver uni bitta datagram sifatida oladi.
TCP oqimidan farqi
TCP ilovaga tartiblangan bayt oqimini beradi. Yozish va o‘qish chegaralari bir xil bo‘lishi shart emas.
UDPda:
send 100 bayt → receive bitta 100 baytli datagram
Agar receiver bufferi kichik bo‘lsa, datagramning ortiqcha qismi tashlanishi mumkin. Qolgan qism keyingi o‘qishda davom etmaydi.
Yetkazish kafolati
UDP datagram:
- yo‘qolishi;
- takror kelishi;
- tartibi o‘zgarishi;
- kechikishi;
- checksum xatosi sabab tashlanishi
mumkin.
Ilova kerak bo‘lsa quyidagilarni qo‘shadi:
- sequence number;
- acknowledgement;
- timeout;
- retransmission;
- duplicate detection;
- congestion control.
QUIC UDP ustida shu imkoniyatlarning ko‘pini o‘zi amalga oshiradi.
UDP checksum
IPv4da UDP checksum tarixan ixtiyoriy bo‘lishi mumkin. Nol qiymat checksum ishlatilmaganini bildiradi.
IPv6da UDP checksum odatda majburiy.
Checksum pseudo-header orqali quyidagilarni ham hisobga oladi:
Bu noto‘g‘ri endpointga yetgan datagramni aniqlashga yordam beradi.
Hajm
UDP Length 16 bitli bo‘lgani sababli klassik UDP datagram hajmi cheklangan.
IP header va tarmoq MTUsi amaliy hajmni yanada kamaytiradi.
Ethernet MTU 1500 bo‘lsa, IPv4 UDP payload odatda fragmentatsiyasiz:
1500 - 20 IP - 8 UDP = 1472 bayt
IPv6da:
1500 - 40 IPv6 - 8 UDP = 1452 bayt
Extension headerlar bo‘lsa, payload kichrayadi.
Fragmentatsiya
Katta UDP datagram IP fragmentlarga bo‘linishi mumkin.
Bir fragment yo‘qolsa, butun datagram qayta yig‘ilmaydi.
Shu sababli real vaqt va ishonchli tizimlar UDP payloadni Path MTUdan kichik saqlashga harakat qiladi.
Ilova-level fragmentation ham ishlatilishi mumkin. Har bo‘lak alohida identifikator va tartib raqamiga ega bo‘ladi.
Socket bilan ishlash
UDP server portga bind qiladi va recvfrom() orqali datagram oladi.
Har datagram bilan source manzil va port qaytadi.
Server shu manzilga sendto() bilan javob beradi.
UDP socket connect() qilinsa, faqat bitta peerga bog‘lanadi, lekin TCP handshake yaratilmaydi.
Keng qo‘llanishlar
UDP datagramlar quyidagi protokollarda ishlatiladi:
Har protokol loss va qayta uzatishga o‘z talabiga ko‘ra munosabat bildiradi.
Real vaqt media
Ovoz va video uchun kechikib kelgan eski packet ko‘pincha foydasiz.
UDP:
- retransmission kutmaydi;
- kichik overhead;
- ilovaga timingni boshqarish imkonini beradi.
RTP sequence number va timestamp bilan reordering hamda jitter boshqaradi.
DNS
Oddiy DNS so‘rovi va javobi ko‘pincha bitta UDP datagramga sig‘adi.
Javob juda katta bo‘lsa:
- EDNS kattaroq hajm kelishadi;
- IP fragmentation yuz berishi;
- TC biti bilan TCPga o‘tish
mumkin.
Datagram va message queue
“Datagram” tarmoqdagi mustaqil xabarni anglatadi. U message broker queue xabari bilan bir xil tushuncha emas.
Message queue xabarni diskda saqlashi, ack va retry berishi mumkin. UDP datagram esa tarmoqdagi qisqa transport birligi.
Xavfsizlik
UDP connection handshake talab qilmagani sabab source IPni soxtalashtirish osonroq bo‘lishi mumkin.
Katta javob beruvchi UDP servis amplification hujumida ishlatilishi mumkin.
Himoya:
- response rate limit;
- source validation;
- kichik javob;
- cookie yoki token;
- firewall;
- autentifikatsiya;
- DTLS;
- protocol-specific challenge.
Diagnostika
Datagram muammosida:
- source va destination port;
- payload hajmi;
- MTU;
- fragmentation;
- checksum;
- packet loss;
- firewall;
- NAT timeout;
- duplicate;
- sequence number;
- application buffer
tekshiriladi.
UDP port ochiq yoki yopiq ekanini TCP kabi handshake bilan darhol aniqlash qiyin.
Datagramning ilova darajasida qayta ishlanishi
Datagram qabul qiluvchi dasturga to‘liq xabar sifatida beriladi. Shu sababli ilova bitta datagram ichida barcha kerakli maydonlarni, jumladan xabar turi, versiya, identifikator va uzunlikni aniq joylashtiradi.
Server juda ko‘p datagram olsa, har xabarni alohida qayta ishlash CPU va socket bufferga yuk beradi. Batch receive, bir nechta worker va rate limit yuqori yuklamada qo‘llanadi.
Datagram noto‘g‘ri formatda bo‘lsa, receiver uni tashlaydi. Parser payload uzunligini real paket hajmi bilan solishtiradi va chegaradan tashqari o‘qishga yo‘l qo‘ymaydi.
Bog‘liq tushunchalar
UDP, IP datagram, Socket, Payload, Checksum, MTU, Fragmentation, QUIC, RTP, Connectionless protocol