UDP (User Datagram Protocol) — ulanish o'rnatmasdan ma'lumot uzatish protokoli bo'lib, IP ustida ishlaydi va datagramlarni jo'natishda minimal kechikishni ta'minlaydi. TCP dan farqli o'laroq, UDP yetkazib berish, paketlar tartibi yoki takrorlanishdan himoya qilishni kafolatlamaydi. IETF RFC 768 (2024) ma'lumotlariga ko'ra, UDP videoqo'ng'iroqlar, streaming va DNS so'rovlari hisobiga jahon internet trafigining 40% dan ortig'ini qayta ishlaydi.
Asosiy fikrlar
UDP (User Datagram Protocol) — TCP/IP modelining transport qatlamidagi asosiy protokollardan biri bo'lib, 1980 yilda Devid Rid tomonidan ishlab chiqilgan. U minimal ma'lumot uzatish mexanizmini ta'minlaydi: ilova datagram jo'natadi va protokol uning qabul qiluvchiga yetib borganligini kuzatmaydi.
UDP sarlavhasi faqat to'rtta maydondan iborat: manba porti, belgilangan port, uzunlik va nazorat summasi. Har bir maydon 2 baytni egallaydi, shuning uchun sarlavhaning umumiy hajmi 8 bayt. Taqqoslash uchun, TCP sarlavhasi opsiyalarsiz 20 baytni, opsiyalar bilan esa 60 baytgacha egallaydi.
Protokol o'z darajasida fragmentatsiyani qo'llab-quvvatlamaydi — agar datagram MTU (Maximum Transmission Unit) dan oshsa, IP darajasida fragmentlanadi. Bir fragment yo'qolganda butun datagram bekor qilinadi, chunki UDP alohida fragmentlarning qayta jo'natilishini so'ray olmaydi. Dasturchilar datagram hajmini nazorat qilishlari kerak — mobil tarmoqlar uchun MTU ko'pincha 1400 baytni tashkil qiladi, shuning uchun maksimal hajm bu qiymatdan oshmasligi kerak.
UDP dan foydalanuvchi ilova SOCK_DGRAM tipidagi soket yaratadi, belgilangan port va IP manzilni ko'rsatadi va datagram jo'natadi. Protokol minimal sarlavha qo'shadi va paketni IP darajasiga uzatadi. Qabul qiluvchi o'z portini tinglaydi va kelgan datagramlardan ma'lumotlarni ajratib oladi.
UDP tiqilib qolish nazoratini amalga oshirmaydi — ilova datagramlarni tarmoq qo'llab-quvvatlaydigan maksimal tezlikda jo'natishi mumkin. Bu kanalning haddan tashqari yuklanishiga olib kelishi mumkin, ammo real vaqt ssenariylarida bunday agressivlik oqlanadi: videoqo'ng'iroq uchun uzatishni to'xtatishdan ko'ra mumkin bo'lgan yo'qotishlar bilan ma'lumot oqimi muhimroqdir.
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b'Hello, UDP!', ('192.168.1.100', 8888))
sock.close()
Misolda UDP uchun SOCK_DGRAM soketi yaratiladi. sendto metodi ulanish o'rnatmasdan datagram jo'natadi — qabul qiluvchining IP va portini bilish kifoya. Server tomonida recvfrom metodi ham ma'lumotlarni, ham javob uchun jo'natuvchining manzilini qaytaradi. Mobil platformalarda UDP soketlari xuddi shunday sozlanadi, lekin qo'shimcha ruxsatlar talab qiladi: iOS da shifrlanmagan UDP ulanishlari uchun NSAppTransportSecurity qo'shish, Android da esa manifestda INTERNET ruxsatini berish kerak.
UDP ni tanlash tezlik ishonchlilikdan muhimroq bo'lgan ssenariylarda oqlanadi. Protokol ulanish o'rnatish, tasdiqlash va qayta uzatishlarga vaqt sarflamaydi — bu minimal kechikishni beradi, lekin dasturchidan yo'qotishlarni mustaqil boshqarishni talab qiladi.
| Afzalliklar | Kamchiliklar |
|---|---|
| Past kechikish — handshake yo'q | Yetkazib berish kafolati yo'q |
| Kichik sarlavha — 8 bayt | Tiqilib qolish nazorati yo'q |
| Broadcast va multicast qo'llab-quvvatlashi | Paketlarning takrorlanishi mumkin |
| Datagramlarning mustaqilligi — navbatlar yo'q | Datagram hajmi MTU bilan cheklangan |
Mobil ilovalarda UDP WebRTC kabi freymvorklar orqali qo'llaniladi, ular UDP ustida yo'qotish nazorati, adaptiv bitrate va jitter buferi qo'shadi. Bu xom protokolning kamchiliklarisiz tezlik afzalliklarini beradi.
UDP ning yana bir muhim jihati — tiqilib qolish nazoratining yo'qligi. TCP da Slow Start va Congestion Avoidance algoritmlari paket yo'qotilishida uzatish tezligini kamaytiradi, shunda tarmoqni ortiqcha yuklamaslik uchun. UDP da bunday mexanizmlar yo'q, shuning uchun dasturchilar o'zlarining tezlik nazorati strategiyalarini amalga oshirishlari kerak — masalan, videoqo'ng'iroqlarda adaptiv bitrate yoki o'yin serverlarida tarmoq kanalining haddan tashqari yuklanishining oldini olish uchun rate limiting.
UDP kechikish tolerantligi paket yo'qotish tolerantligidan muhimroq bo'lgan ssenariylarda ajralmas hisoblanadi. Protokolning mobil va veb ishlanmada asosiy qo'llanish sohalarini ko'rib chiqaylik.
UDP ustida ishlaydigan RTP va RTSP protokollari real vaqtda audio va video oqimlarini uzatish uchun ishlatiladi. WebRTC — brauzerlar va mobil ilovalarda videoqo'ng'iroqlar uchun standart — media ma'lumotlar uchun UDP ni asosiy transport sifatida, signallash uchun esa TCP ni ishlatadi. 30 fps videoda bitta paketning yo'qolishi foydalanuvchi uchun sezilmaydi, qayta uzatish kechikishidan farqli o'laroq, bu tasvirning sezilarli muzlashiga olib keladi.
Ko'p o'yinchili otishmalar va MOBA to'g'ri sinxronizatsiya uchun 50 ms dan kam kechikishni talab qiladi. UDP o'yinchilarning pozitsiyalarini, otishmalarni va hodisalarni TCP dan tezroq uzatadi, paket yo'qotilishi esa shunchaki e'tiborga olinmaydi — keyingi yangilanish 16–33 ms ichida keladi. Mashhur o'yin dvigatellari, jumladan Unity va Unreal Engine, UDP ni o'z transport qatlamlari orqali ishlatadi va muhim hodisalar uchun ilova darajasida tasdiqlashlar bilan ishonchlilik qo'shadi.
DNS so'rovlari 53-portda UDP dan foydalanadi, chunki har bir so'rov bitta kichik datagram (odatda 512 baytgacha). Agar javob kelmasa, mijoz shunchaki taym-autdan keyin so'rovni takrorlaydi, bu uch bosqichli qo'l siqish bilan TCP ulanishini o'rnatishdan tezroqdir. DHCP ham UDP ustida ishlaydi, chunki mijoz hali IP manzilga ega emas va TCP ulanishini o'rnatolmaydi, broadcast UDP paketlari esa mahalliy tarmoqda DHCP serverini topishga imkon beradi.
UDP va TCP o'rtasidagi tanlov tezlik va ishonchlilik o'rtasidagi kelishuvdir. Har bir protokol o'z vazifalar sinfi uchun maqbuldir va ularning farqlarini tushunish mobil ilovalarda tarmoq o'zaro aloqasini loyihalashda to'g'ri arxitektura qarorlarini qabul qilishga yordam beradi.
| Mezon | UDP | TCP |
|---|---|---|
| Ulanish o'rnatish | Talab qilinmaydi | Uch bosqichli qo'l siqish |
| Sarlavha | 8 bayt | 20–60 bayt |
| Yetkazib berish kafolati | Yo'q | Ha, tasdiqlash bilan |
| Tartiblash | Yo'q | Ha |
| Tiqilib qolish nazorati | Yo'q | Ha (AIMD, Slow Start) |
| Qo'llanish | Streaming, o'yinlar, DNS | Veb, email, fayllar, API |
Mobil loyihalarda ko'pincha gibrid yondashuv qo'llaniladi: TCP ishonchli so'rovlar uchun (avtorizatsiya, ma'lumot yuklash) va UDP media oqimlari uchun. QUIC — UDP ustida ishlaydigan zamonaviy Google protokoli — UDP tezligini TCP ishonchliligi bilan birlashtiradi va allaqachon HTTP/3 da qo'llaniladi.
Python da mijozlardan xabarlarni qabul qiladigan va javob jo'natadigan oddiy UDP serverini ko'rib chiqaylik. Server 8888 portini tinglaydi va kelgan datagramlarni cheksiz sikl ichida qayta ishlaydi.
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('0.0.0.0', 8888))
print('UDP serveri 8888 portida ishga tushirildi')
while True:
data, addr = server.recvfrom(1024)
print(f'{addr} dan olindi: {data.decode()}')
server.sendto(b'OK', addr)
Server UDP soket yaratadi, 8888 portiga bog'lanadi va kelgan datagramlarni kutadi. recvfrom ma'lumotlar va mijoz manzilini qaytaradi, bu sendto orqali javob berishga imkon beradi. TCP dan farqli o'laroq, server ulanish holatini saqlamaydi — har bir datagram mustaqil qayta ishlanadi. Bu UDP serverlarini masshtablanadigan qiladi: bitta server millionlab mijozlarni qayta ishlay oladi, har bir alohida ulanish uchun xotira ajratmasdan, bu DNS serverlari va o'yin matchmaking tizimlari uchun muhimdir.
Mobil ishlanmada UDP ko'pincha yuqori darajali kutubxonalar orqali ishlatiladi. Masalan, iOS uchun CocoaAsyncSocket UDP soketlarini delegatlar va GCD bilan asinxron hodisalarni qayta ishlash uchun ta'minlaydi. Android da DatagramSocket sinfi standart java.net kutubxonasiga kiradi va qo'shimcha bog'liqliklarni talab qilmaydi. Flutter uchun udp paketi mavjud bo'lib, u native soketlarni sozlamasdan datagram jo'natish va qabul qilish uchun oddiy interfeysni ta'minlaydi.
Shuni ta'kidlash kerakki, ko'plab mobil tarmoqlar va korporativ firevollar UDP trafigini bloklaydi, ayniqsa 1024 dan yuqori portlarda. Ilovangiz UDP dan foydalansa, TCP ga fallback yoki WebRTC kabi STUN serverlari orqali protokol mavjudligini tekshirishni ko'zda tutish kerak. iOS da tizim freymvorki Network.framework NWConnection bilan ham TCP, ham UDP ni qo'llab-quvvatlaydi, mavjudlikka qarab avtomatik ravishda optimal protokolni tanlaydi. Real vaqt ilovalari uchun shuningdek paket yo'qotilishida oqim sifatini pasaytiradigan, hatto yuqori xatolik darajasiga ega beqaror kanallarda ham uzluksiz ijro etishni ta'minlaydigan adaptiv bitrate ni joriy etish tavsiya etiladi.
Ko'p beriladigan savollar
UDP ulanish o'rnatmaydi va paketlarning yetkazilishini kafolatlamaydi, bu uni TCP dan tezroq qiladi. UDP sarlavhasi — 8 bayt, TCP da esa 20–60 bayt. UDP streaming va o'yinlar uchun mos, TCP — veb so'rovlar va fayl uzatish uchun.
Datagram — UDP sarlavhasi (manba porti, belgilangan port, uzunlik, nazorat summasi) bo'lgan mustaqil ma'lumot paketi. Har bir datagram oldingilari bilan bog'liqliksiz mustaqil qayta ishlanadi. Datagram hajmi tarmoq MTU si bilan cheklangan va spetsifikatsiyaga ko'ra 65507 baytgacha.
UDP transport darajasida ishonchlilikni ta'minlamaydi — uni ilova amalga oshiradi. Dasturchilar tartib raqamlari, nazorat summalari, qayta so'rovlar va xato tuzatishni qo'shadilar. FEC (Forward Error Correction) yo'qotilgan paketlarni qayta jo'natmasdan tiklashga imkon beradi.
UDP ma'lumot yaxlitligi muhim bo'lgan ssenariylar uchun mos emas: fayl uzatish, bank operatsiyalari, REST-API. Bunday hollarda TCP har bir baytning to'g'ri tartibda yetib borishini kafolatlaydi. UDP shuningdek yuqori yo'qotish darajasiga ega beqaror kanallarda tavsiya etilmaydi.
QUIC — UDP ustida ishlaydigan, Google tomonidan ishlab chiqilgan va IETF tomonidan RFC 9000 sifatida standartlashtirilgan transport protokoli. U UDP tezligini TCP ishonchliligi bilan birlashtiradi, bloklamasdan multiplekslash va o'rnatilgan shifrlashni qo'llab-quvvatlaydi. HTTP/3 transport qatlami sifatida QUIC dan foydalanadi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.