TLDR;
- TCP - berorientasi pada aliran, membutuhkan koneksi, andal, lambat
- UDP - berorientasi pesan, tanpa koneksi, tidak dapat diandalkan, cepat
Sebelum kita mulai, ingatlah bahwa semua kerugian dari sesuatu adalah kelanjutan dari kelebihannya . Hanya ada alat yang tepat untuk suatu pekerjaan, tidak ada obat mujarab. TCP / UDP hidup berdampingan selama beberapa dekade, dan karena suatu alasan.
TCP
Itu dirancang untuk menjadi sangat andal dan melakukan tugasnya dengan sangat baik. Ini sangat kompleks karena menyelesaikan tugas yang berat: membuktikan transportasi yang andal atas protokol IP yang tidak dapat diandalkan.
Karena semua logika kompleks TCP dienkapsulasi ke dalam tumpukan jaringan, Anda bebas dari melakukan banyak hal tingkat melelahkan yang rawan kesalahan di lapisan aplikasi.
Ketika Anda mengirim data melalui TCP, Anda menulis aliran byte ke soket di pengirim di mana ia dipecah menjadi paket, melewati tumpukan dan dikirim melalui kabel. Di sisi penerima, paket-paket dipasang kembali menjadi aliran byte yang berkelanjutan.
Mempertahankan abstraksi yang bagus ini memiliki biaya dalam hal kompleksitas dan kinerja. Jika paket pertama dari aliran byte hilang, penerima akan menunda pemrosesan paket-paket berikutnya bahkan yang sudah tiba.
Selain itu, agar dapat diandalkan, TCP mengimplementasikan ini:
- TCP membutuhkan koneksi yang sudah mapan, yang membutuhkan 3 kali pulang pergi (jabat tangan 3 arah yang terkenal).
- TCP memiliki fitur yang disebut "mulai lambat" ketika secara bertahap meningkatkan tingkat transmisi setelah membuat koneksi untuk memungkinkan penerima untuk mengikuti data.
- Setiap paket yang dikirim harus diakui atau pengirim akan berhenti mengirim lebih banyak data
- Dan terus dan terus dan terus ...
Semua ini diperburuk dalam jaringan nirkabel lambat yang tidak dapat diandalkan sementara TCP dirancang untuk jaringan kabel di mana penundaan dapat diprediksi dan hilangnya paket tidak begitu umum. Selain itu, seperti banyak orang telah sebutkan, untuk beberapa hal TCP tidak berfungsi sama sekali (DHCP). Namun, jika relevan, TCP masih bekerja dengan sangat baik.
Menggunakan analogi surat, sesi TCP mirip dengan menceritakan kisah kepada sekretaris Anda yang memecahnya menjadi surat dan mengirim lebih dari layanan surat jelek ke penerbit. Di sisi lain sekretaris lain merakit surat menjadi satu bagian teks. Beberapa email hilang, beberapa rusak, sehingga diperlukan prosedur yang sangat rumit untuk pengiriman yang andal dan kisah 10 halaman Anda dapat memakan waktu lama untuk mencapai penerbit Anda.
UDP
UDP, di sisi lain, berorientasi pada pesan, sehingga penerima menulis pesan (paket) ke soket dan kemudian dikirim ke penerima apa adanya, tanpa pemisahan / perakitan.
Dibandingkan dengan TCP, spesifikasinya sangat sederhana. Intinya, semua yang dilakukannya untuk Anda adalah menambahkan checksum ke paket sehingga penerima dapat mendeteksi korupsi. Segala sesuatu yang lain harus diimplementasikan oleh Anda, pengembang perangkat lunak. Sekarang bacalah spec TCP yang tebal dan coba pikirkan untuk mengimplementasikan kembali beberapa bagiannya.
Beberapa orang menggunakan cara ini dan mendapatkan hasil yang sangat baik, sampai-sampai HTTP / 3 menggunakan QUIC - protokol yang didasarkan pada UDP. Namun, ini lebih merupakan pengecualian. Aplikasi umum UDP adalah aplikasi streaming audio / video dan konferensi seperti Skype, Zoom atau Google Hangout di mana kehilangan paket tidak begitu penting dibandingkan dengan penundaan yang diperkenalkan oleh TCP.