UDP (User Datagram Protocol) — protokol transmisi data tanpa koneksi, bekerja di atas IP dan memberikan latensi minimal saat mengirim datagram. Berbeda dengan TCP, UDP tidak menjamin pengiriman, urutan paket, atau perlindungan dari duplikasi. Menurut data IETF RFC 768 (2024), UDP memproses lebih dari 40% lalu lintas internet global berkat panggilan video, streaming, dan permintaan DNS.
Poin utama
UDP (User Datagram Protocol) — salah satu protokol kunci dari lapisan transport model TCP/IP, dikembangkan oleh David Reed pada tahun 1980. Protokol ini menyediakan mekanisme transmisi data minimal: aplikasi mengirim datagram, dan protokol tidak melacak apakah telah sampai ke penerima.
Header UDP hanya terdiri dari empat bidang: port sumber, port tujuan, panjang, dan checksum. Setiap bidang membutuhkan 2 byte, sehingga ukuran total header adalah 8 byte. Sebagai perbandingan, header TCP tanpa opsi membutuhkan 20 byte, dan dengan opsi — hingga 60 byte.
Protokol tidak mendukung fragmentasi pada levelnya sendiri — jika datagram melebihi MTU (Maximum Transmission Unit), ia difragmentasi di level IP. Jika satu fragmen hilang, seluruh datagram dibuang, karena UDP tidak dapat meminta transmisi ulang fragmen individual. Pengembang harus mengontrol ukuran datagram — untuk jaringan mobile, MTU sering kali 1400 byte, sehingga ukuran maksimum tidak boleh melebihi nilai ini.
Aplikasi yang menggunakan UDP membuat socket tipe SOCK_DGRAM, menentukan port dan alamat IP tujuan, dan mengirim datagram. Protokol menambahkan header minimal dan meneruskan paket ke lapisan IP. Penerima mendengarkan portnya dan mengekstrak data dari datagram yang masuk.
UDP tidak melakukan kontrol kemacetan — aplikasi dapat mengirim datagram dengan kecepatan maksimum yang didukung jaringan. Ini dapat menyebabkan kelebihan beban saluran, tetapi dalam skenario real-time, agresivitas semacam itu dapat dibenarkan: untuk panggilan video, aliran data dengan kemungkinan kehilangan lebih penting daripada menghentikan transmisi.
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b'Hello, UDP!', ('192.168.1.100', 8888))
sock.close()
Dalam contoh, dibuat socket SOCK_DGRAM untuk UDP. Metode sendto mengirim datagram tanpa koneksi — cukup mengetahui IP dan port penerima. Metode recvfrom di sisi server mengembalikan data dan alamat pengirim untuk respons. Socket UDP di platform mobile dikonfigurasi serupa, tetapi memerlukan izin tambahan: di iOS perlu menambahkan NSAppTransportSecurity untuk koneksi UDP tidak terenkripsi, dan di Android — izin INTERNET di manifes.
Pemilihan UDP dapat dibenarkan dalam skenario di mana kecepatan lebih penting daripada keandalan. Protokol tidak membuang waktu untuk koneksi, konfirmasi, dan transmisi ulang — ini memberikan latensi minimal, tetapi mengharuskan pengembang untuk menangani kehilangan secara mandiri.
| Kelebihan | Kekurangan |
|---|---|
| Latensi rendah — tanpa handshake | Tidak ada jaminan pengiriman |
| Header lebih kecil — 8 byte | Tidak ada kontrol kemacetan |
| Dukungan broadcast dan multicast | Kemungkinan duplikat paket |
| Independensi datagram — tanpa antrian | Ukuran datagram dibatasi MTU |
Di aplikasi mobile, UDP digunakan melalui framework seperti WebRTC, yang menambahkan kontrol kehilangan, bitrate adaptif, dan jitter buffer di atas UDP. Ini memberikan kelebihan kecepatan tanpa kekurangan protokol mentah.
Aspek penting lain dari UDP adalah tidak adanya kontrol kemacetan. Di TCP, algoritma Slow Start dan Congestion Avoidance mengurangi kecepatan transmisi saat kehilangan paket agar tidak membebani jaringan. UDP tidak memiliki mekanisme seperti itu, sehingga pengembang harus mengimplementasikan strategi kontrol kecepatan mereka sendiri — misalnya, bitrate adaptif dalam panggilan video atau rate limiting di server game untuk mencegah kelebihan beban saluran jaringan yang berlebihan.
UDP sangat diperlukan dalam skenario di mana toleransi latensi lebih penting daripada toleransi kehilangan paket. Mari kita lihat area utama penerapan protokol dalam pengembangan mobile dan web.
Protokol RTP dan RTSP, yang bekerja di atas UDP, digunakan untuk mentransmisikan aliran audio dan video secara real-time. WebRTC — standar untuk panggilan video di browser dan aplikasi mobile — menggunakan UDP sebagai transport utama untuk data media dan TCP untuk sinyal. Kehilangan satu paket dalam video 30 fps tidak terlihat oleh pengguna, berbeda dengan latensi transmisi ulang yang menyebabkan pembekuan gambar yang terlihat.
Game tembak-menembak multipemain dan MOBA memerlukan latensi kurang dari 50 ms untuk sinkronisasi yang benar. UDP mentransmisikan posisi pemain, tembakan, dan peristiwa lebih cepat daripada TCP, dan kehilangan paket diabaikan saja — pembaruan berikutnya akan tiba dalam 16–33 ms. Mesin game populer, termasuk Unity dan Unreal Engine, menggunakan UDP melalui lapisan transport mereka sendiri dengan menambahkan keandalan untuk peristiwa kritis melalui konfirmasi di tingkat aplikasi.
Permintaan DNS menggunakan UDP di port 53, karena setiap permintaan adalah satu datagram kecil (biasanya hingga 512 byte). Jika respons tidak tiba, klien cukup mengulangi permintaan setelah timeout, yang lebih cepat daripada membuat koneksi TCP dengan jabat tangan tiga langkahnya. DHCP juga bekerja di atas UDP, karena klien belum memiliki alamat IP dan tidak dapat membuat koneksi TCP, dan paket UDP broadcast memungkinkan menemukan server DHCP di jaringan lokal.
Pilihan antara UDP dan TCP adalah kompromi antara kecepatan dan keandalan. Setiap protokol optimal untuk kelas tugasnya sendiri, dan memahami perbedaannya membantu mengambil keputusan arsitektural yang tepat saat merancang interaksi jaringan di aplikasi mobile.
| Kriteria | UDP | TCP |
|---|---|---|
| Pembuatan koneksi | Tidak diperlukan | Jabat tangan tiga langkah |
| Header | 8 byte | 20–60 byte |
| Jaminan pengiriman | Tidak | Ya, dengan konfirmasi |
| Pengurutan | Tidak | Ya |
| Kontrol kemacetan | Tidak | Ya (AIMD, Slow Start) |
| Penerapan | Streaming, game, DNS | Web, email, file, API |
Dalam proyek mobile, sering digunakan pendekatan hibrida: TCP untuk permintaan andal (otorisasi, pemuatan data) dan UDP untuk aliran media. QUIC — protokol modern Google yang bekerja di atas UDP — menggabungkan kecepatan UDP dengan keandalan TCP dan sudah digunakan di HTTP/3.
Mari kita lihat server UDP sederhana di Python yang menerima pesan dari klien dan mengirim respons. Server mendengarkan di port 8888 dan memproses datagram yang masuk dalam loop tak terbatas.
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('0.0.0.0', 8888))
print('Server UDP berjalan di port 8888')
while True:
data, addr = server.recvfrom(1024)
print(f'Diterima dari {addr}: {data.decode()}')
server.sendto(b'OK', addr)
Server membuat socket UDP, mengikat ke port 8888, dan menunggu datagram masuk. recvfrom mengembalikan data dan alamat klien, memungkinkan respons melalui sendto. Berbeda dengan TCP, server tidak menyimpan status koneksi — setiap datagram diproses secara independen. Ini membuat server UDP dapat diskalakan: satu server dapat menangani jutaan klien tanpa mengalokasikan memori untuk setiap koneksi terpisah, yang penting untuk server DNS dan sistem matchmaking game.
Dalam pengembangan mobile, UDP sering digunakan melalui library tingkat tinggi. Misalnya, CocoaAsyncSocket untuk iOS menyediakan socket UDP dengan delegasi dan GCD untuk pemrosesan peristiwa asinkron. Di Android, kelas DatagramSocket adalah bagian dari library standar java.net dan tidak memerlukan dependensi tambahan. Untuk Flutter, ada paket udp yang menyediakan antarmuka sederhana untuk mengirim dan menerima datagram tanpa mengonfigurasi socket native.
Penting untuk dicatat bahwa banyak jaringan mobile dan firewall perusahaan memblokir lalu lintas UDP, terutama di port di atas 1024. Jika aplikasi Anda menggunakan UDP, perlu menyediakan fallback ke TCP atau pemeriksaan ketersediaan protokol melalui server STUN, seperti yang dilakukan WebRTC. Di iOS, framework sistem Network.framework dengan NWConnection mendukung TCP dan UDP, secara otomatis memilih protokol optimal berdasarkan ketersediaan. Untuk aplikasi real-time, juga disarankan untuk mengimplementasikan bitrate adaptif, yang mengurangi kualitas aliran saat kehilangan paket, memastikan kelancaran pemutaran bahkan pada saluran tidak stabil dengan tingkat kesalahan tinggi.
Pertanyaan yang sering diajukan
UDP tidak membuat koneksi dan tidak menjamin pengiriman paket, yang membuatnya lebih cepat dari TCP. Header UDP — 8 byte dibandingkan 20–60 byte pada TCP. UDP cocok untuk streaming dan game, TCP — untuk permintaan web dan transfer file.
Datagram — paket data independen dengan header UDP (port sumber, port tujuan, panjang, checksum). Setiap datagram diproses secara independen, tanpa hubungan dengan yang sebelumnya. Ukuran datagram dibatasi oleh MTU jaringan dan menurut spesifikasi — hingga 65507 byte.
UDP tidak menyediakan keandalan di tingkat transport — ini diimplementasikan oleh aplikasi. Pengembang menambahkan nomor urut, checksum, permintaan ulang, dan koreksi kesalahan. FEC (Forward Error Correction) memungkinkan pemulihan paket yang hilang tanpa transmisi ulang.
UDP tidak cocok untuk skenario di mana integritas data sangat penting: transfer file, transaksi bank, REST-API. Dalam kasus ini, TCP menjamin bahwa setiap byte akan tiba dalam urutan yang benar. UDP juga tidak disarankan pada saluran tidak stabil dengan tingkat kehilangan tinggi.
QUIC — protokol transport yang bekerja di atas UDP, dikembangkan oleh Google dan distandarisasi oleh IETF sebagai RFC 9000. Ini menggabungkan kecepatan UDP dengan keandalan TCP, mendukung multipleksing tanpa pemblokiran dan enkripsi bawaan. HTTP/3 menggunakan QUIC sebagai lapisan transport.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga