Apakah UDP melakukan sesuatu?

Sep 15 2020

Pemahaman saya bahwa TCP memiliki logika untuk memastikan komunikasi yang andal, tetapi UDP secara naif mengirimkan informasi di sepanjang saluran yang diatur untuknya menggunakan IP dan hal-hal di lapisan bawah.

Apakah UDP sebenarnya melakukan sesuatu? Saya agak bingung mengapa itu memiliki nama.

Jawaban

60 JeffWheeler Sep 15 2020 at 07:10

Perspektif dan pertanyaan yang menarik!

Ya, sebagian besar dari apa yang dilakukan UDP adalah menyediakan sarana standar untuk beberapa aplikasi untuk hidup berdampingan menggunakan alamat IP yang sama, dengan mendefinisikan konsep port UDP .

Bagian yang menarik tentang UDP bukanlah protokol jaringan tetapi API yang diimplementasikan oleh sistem operasi dan pustaka soket. Meskipun bukan bagian dari spesifikasi UDP itu sendiri, kemampuan untuk menggunakan abstraksi seperti API soket POSIX untuk dengan mudah mengembangkan perangkat lunak di atas protokol seperti UDP adalah kunci keberhasilan tumpukan Protokol Internet.

45 RonMaupin Sep 15 2020 at 06:11

UDP adalah protokol transport, seperti TCP. Itu berarti menyediakan protokol untuk aplikasi untuk menggunakan IP. Seperti TCP, UDP memiliki pengalamatan (port) yang diikat aplikasi sehingga datagram yang ditujukan ke aplikasi terikat dikirim oleh UDP ke aplikasi yang benar. UDP untuk IPv4 juga menyediakan checksum opsional, tetapi checksum diperlukan untuk IPv6.

UDP adalah protokol berbasis pesan, di mana TCP adalah protokol berbasis aliran. UDP dapat berguna untuk protokol lapisan aplikasi untuk menyediakan beberapa, tetapi tidak semua fitur TCP, dan banyak aplikasi atau protokol lapisan aplikasi tidak dapat menggunakan, atau bahkan rusak oleh, keandalan TCP. Misalnya, protokol waktu nyata, seperti VoIP, video, atau bahkan game, tidak dapat menggunakan datagram yang hilang setelah tidak lagi berguna, jadi meminta TCP mengirim ulang data akan berakibat buruk. Saat Anda menggunakan VoIP, dan orang lain menjawab, Anda ingin mendengar, "Halo," bukan, "Oh, sial."

Hal lain, seperti multicast, bersifat searah, tetapi TCP memerlukan pengaturan koneksi dua arah antara dua aplikasi, sementara aplikasi multicast mengirimkan data ke banyak penerima. TCP tidak bisa benar-benar melakukan itu, tetapi UDP mudah digunakan dengan multicast.

14 AustinHemmelgarn Sep 16 2020 at 05:27

Saya akan mendorong Anda untuk melihat bagaimana protokol tingkat tinggi yang memanfaatkan UDP benar-benar menggunakannya. Contoh klasik dan terdokumentasi dengan baik adalah DNS (setidaknya dalam banyak kasus, dimungkinkan untuk melakukan DNS melalui TCP tetapi sangat jarang), DHCP, NTP, dan PTP.

Semua protokol ini memiliki beberapa kesamaan:

  • Mereka peduli untuk dapat hidup berdampingan dengan layanan lain di sistem yang sama.
  • Mereka peduli dengan beberapa derajat integritas data dari pesan mereka.
  • Mereka berorientasi pada pesan , tidak berorientasi pada arus .
  • Mereka terutama melibatkan pertukaran data yang sangat singkat dan sering kali jarang terjadi.

Dua poin pertama secara remeh dicakup oleh protokol lapisan transport yang masuk akal (bahkan hal-hal eksotis seperti TIPC), termasuk TCP. Namun, TCP sangat buruk untuk dua poin lainnya, karena mengharuskan Anda untuk menggulung protokol pembingkaian pesan Anda sendiri di atas alirannya untuk protokol berorientasi pesan dan permulaan koneksi yang signifikan dan biaya pemeliharaan berarti sangat tidak efisien untuk pertukaran data yang jarang terjadi. .

Dengan kata lain, 'fitur' UDP yang membuatnya patut dikhawatirkan adalah menyediakan minimal dua poin pertama tanpa menghalangi Anda seperti yang dilakukan TCP untuk jenis aplikasi ini. Ini juga memiliki sedikit keunggulan dibandingkan TCP karena sepeleuntuk mengimplementasikan baik secara murni di perangkat keras atau pada sistem yang sangat kecil dengan RAM kurang dari 1Kb dan jumlah ruang penyimpanan yang sangat kecil untuk kode (ini adalah bagian dari mengapa BOOTP, RARP, TFTP, dan protokol bootstrap lainnya awalnya menggunakannya). Kerugiannya adalah keandalan dan kerentanan terhadap jenis serangan tertentu jika menggunakan 'koneksi' stateful berumur panjang di atasnya tanpa manajemen yang sangat hati-hati, tetapi protokol yang menggunakannya dan peduli tentang itu menanganinya sendiri (lihat TFTP untuk contoh menangani masalah keandalan, meskipun dengan mengorbankan kecepatan).

Sekarang, ada opsi yang dapat mencapai set fitur serupa (atau bahkan set fitur yang lebih komprehensif) ke TCP dengan overhead yang jauh lebih sedikit dan masih memungkinkan untuk komunikasi berorientasi pesan (contoh utama termasuk RUDP, DCCP, dan SCTP), mereka belum benar-benar tertangkap karena kombinasi alasan, jadi UDP hanya bertahan.

7 iBug Sep 15 2020 at 23:26

Ada poin penting bahwa UDP tidak memerlukan pengaturan "koneksi" .

Misalnya, akan sulit dan kompleks, jika bukan tidak mungkin, untuk mengimplementasikan DHCP di atas TCP, di mana klien tidak memiliki alamat IP dan pengetahuan nol tentang lingkungan jaringan yang ada. Oleh karena itu, tidak ada artinya "menyiapkan koneksi", karena klien tidak mengetahui alamat target dan tidak memiliki alamat sumber. UDP membuat ini mudah dengan mengizinkan siaran permintaan DHCP ke jaringan yang ada, dan satu (dan mudah-mudahan hanya satu) server DHCP akan merespon dengan tawaran.

Demikian pula, sebagian besar tindakan siaran jaringan tidak masuk akal dengan TCP *, karena Anda tidak dapat memiliki "koneksi" dengan "target siaran" di mana setiap host menerima dan merespons. Hal-hal seperti nomor urut dan checksum tidak bertambah.

* Kami tidak sedang membicarakan hal-hal seperti MPI_Bcast(). Mereka benar-benar di luar jangkauan pertanyaan ini.

6 PeterGreen Sep 17 2020 at 04:42

Bagi saya hal utama yang dilakukan UDP adalah menyediakan nomor port sumber dan tujuan dan karenanya memungkinkan tidak hanya beberapa protokol aplikasi yang berbeda, tetapi juga beberapa contoh dari protokol aplikasi yang sama.

Pada prinsipnya Anda dapat membangun protokol aplikasi Anda langsung di atas IP dan mendapatkan nomor protokol untuk itu. Itu berfungsi dengan baik jika Anda hanya memiliki satu contoh protokol aplikasi Anda pada setiap host, namun itu tidak bekerja dengan baik jika Anda ingin memiliki beberapa contoh protokol aplikasi yang sama pada setiap host.

Dengan memiliki nomor port sumber dan tujuan yang terpisah dan menetapkan konvensi bahwa klien menggunakan port sementara sementara server menggunakan port yang terkenal dan respons tersebut menukar nomor port, UDP mendukung beberapa contoh protokol aplikasi yang sama pada host yang sama.

3 VictorCasado Sep 17 2020 at 22:16

Ini menawarkan layanan multiplexing / demultiplexing ke lapisan atas (Aplikasi) sehingga dapat menangani data dari proses yang berbeda. Dengan checksum, itu juga akan memberi Anda deteksi kesalahan.

UDP, menjadi protokol yang sederhana, berguna untuk protokol lapisan atas yang lebih menyukai komunikasi cepat, tanpa perlu membuat sambungan atau transfer data yang andal.

Selain itu, beberapa protokol seperti DNS, menggunakan UDP untuk tujuannya ...

1 cybernard Sep 16 2020 at 01:51

Saya pikir penting untuk dicatat bahwa DHCP bergantung pada UDP 100%, dan ini sangat banyak digunakan.

DNS juga secara historis menggunakan UDP, dan hanya menggunakan TCP jika responsnya terlalu besar untuk paket UDP.