Bosh sahifa Wiki Datagram

Datagram

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:

Kamchiligi — reliabilityni ilova o‘zi boshqarishi kerak.

UDP datagram

UDP datagram ikki qismdan tuziladi:

UDP header 8 bayt.

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:

Diagnostika

Datagram muammosida:

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