9.9. UDP -- kirim paket, harap yang terbaik

UDP, User Datagram Protocol, adalah yang lebih sederhana dari dua layanan yang ditawarkan lapisan transport. Setiap pengiriman UDP adalah satu datagram -- potongan byte yang berdiri sendiri yang dialamatkan ke IP dan port, dilempar ke jaringan sendiri. Protokol mengantarkannya jika bisa; jika tidak bisa, ia tidak mencoba ulang, tidak memperingatkan pengirim, dan tidak mempertahankan urutan apa pun di antara datagram.

9.9.1. Apa yang UDP tambahkan ke IP

UDP adalah lapisan tipis di atas IP. Ia menambahkan tiga hal ke pengiriman IP mentah:

  • Nomor port di kedua ujung, sehingga datagram dapat dikirimkan ke program yang tepat di host tujuan, bukan hanya host-nya (lihat Port).

  • Bidang panjang sehingga penerima tahu persis berapa banyak byte payload yang harus dibaca.

  • Checksum kecil atas header dan payload, sehingga penerima dapat mendeteksi datagram yang rusak dan membuangnya.

Hanya itu saja. Semua hal lain yang dilakukan atau tidak dilakukan IP tetap sama di UDP. Datagram tidak dicoba ulang. Mereka bisa tiba dalam urutan yang salah. Mereka bisa terduplikasi akibat keanehan jaringan yang mendasarinya. Mereka bisa dijatuhkan secara diam-diam jika jaringan macet, buffer di tujuan penuh, atau salah satu router di antaranya memutuskan demikian.

A diagram with sender on the left and receiver on the right. Three arrows point from sender to receiver, labelled "datagram 1", "datagram 2", "datagram 3". The arrow for datagram 2 is shown as a dashed line with an X over it, indicating loss.

Setiap datagram UDP dikirim secara independen. Jika satu hilang dalam perjalanan, tidak ada yang memberitahu pengirim atau penerima -- celahnya diam saja.

9.9.2. Mengapa ada yang mau menggunakannya

Jika UDP begitu tidak andal, mengapa ada? Tiga alasan.

  • Kecepatan dan overhead. Pengiriman UDP adalah satu paket yang keluar; tidak ada jabat tangan, tidak ada pengakuan, tidak ada status koneksi yang perlu dipertahankan. Latensi dan biaya bandwidth sangat minimal.

  • Pesan independen. Beberapa lalu lintas adalah aliran pembaruan status di mana setiap pesan adalah snapshot segar dan yang lama tidak berharga. Kamera yang mempublikasikan "Saya masih hidup, ini pembacaan terkini saya" setiap detik peduli pada pengiriman setiap pembacaan baru, bukan pada pemutaran ulang pembacaan yang hilang.

  • Multicast. Satu datagram UDP dapat dikirim ke banyak penerima sekaligus. (TCP tidak bisa melakukan itu; setiap koneksi TCP adalah antara tepat dua titik ujung.) Berguna untuk penemuan layanan, telemetri ke banyak pendengar, streaming video.

Di mana jaringan bagus dan toleransi pengirim terhadap kehilangan tinggi, UDP adalah jawaban yang tepat. Di mana pengiriman dan pengurutan harus dijamin, UDP memerlukan lapisan keandalan tambahan di atasnya, atau aplikasi sebaiknya menggunakan TCP.

9.9.3. Kapan tidak menggunakannya

Kebalikannya juga perlu dijelaskan secara eksplisit. UDP adalah pilihan yang salah ketika:

  • Setiap byte penting. Data konfigurasi, pembaruan kode, transaksi yang ditandatangani -- kasus apa pun di mana byte yang hilang membuat hasilnya salah.

  • Urutan penting. Datagram UDP 2 mungkin tiba sebelum datagram 1.

  • Pesan berukuran besar. Payload besar harus dipecah menjadi datagram yang lebih kecil oleh aplikasi; lapisan transport tidak akan melakukannya. Jika satu bagian saja hilang, seluruh pesan tidak lengkap.

Jika salah satu dari hal tersebut berlaku, gunakan TCP.

9.9.4. Contoh konkret pada kamera

Contoh lalu lintas UDP di sisi kamera dalam praktik nyata:

  • Penemuan. Kamera menyiarkan datagram "siapa yang ada di sini" ke jaringan lokal saat mulai; perangkat lain membalas.

  • Telemetri. Setiap detik, kamera mengirim datagram kecil berisi pembacaan sensor saat ini ke kolektor. Kehilangan sampel sesekali tidak masalah karena yang berikutnya tiba dalam satu detik.

  • Sinkronisasi waktu. NTP, protokol waktu jaringan, berjalan melalui UDP. Client mengirim permintaan kecil, server membalas dengan waktu saat ini; jika balasan hilang, client cukup bertanya lagi nanti.

  • Pencarian DNS. Menanyakan jaringan "IP apa yang dipetakan untuk nama ini?" berjalan melalui UDP. (Dibahas di Nama dan DNS.)

Python API untuk mengirim dan menerima datagram ada di UDP sockets, setelah sisa kisah lapisan transport tersedia.