Beberapa pemikiran tentang pengalaman saya dengan TCP, UDP, dan MQTT serta beberapa sumber tambahan untuk ditinjau.
Dengan UDP saya telah mengalami masalah kegagalan diam di mana aplikasi pada satu node jaringan, klien, hanya melihat beberapa pesan UDP yang dikirim. Ada terlalu banyak alasan mengapa lalu lintas jaringan menjadi serba salah. Masalah dengan UDP adalah bahwa paket dapat dibuang cukup banyak setiap kali ada node di jalur jaringan antara produsen paket dan konsumen paket menjamin. Lihat topik Wikipedia Paket loss .
Pertanyaannya adalah berapa tingkat kerugian Anda dalam konteks jaringan apa pun saat ini. Jadi, jika ini adalah komunikasi dalam LAN atau sub-jaringan tingkat kerugian Anda mungkin rendah. Di WAN atau di internet, tingkat kerugian Anda mungkin cukup tinggi. Paket UDP dibuang karena beberapa alasan dan dialihkan namun kondisi jaringan memungkinkan dengan pengurangan jumlah hop itu. Mengirim paket ke kekosongan besar tanpa pertanggungjawaban membuka kemungkinan kegagalan diam-diam.
Kedengarannya seperti dalam kasus Anda hanya ack sederhana dengan mentransmisikan kembali setelah batas waktu tanpa menerima ack akan cukup.
Saya telah melakukan pesan XML melalui koneksi TCP yang terpelihara dan itu bekerja dengan baik. Saya memiliki lapisan yang mengirimkan pesan lengkap masing-masing dalam buffer ke lapisan aplikasi untuk ditangani. Saya menggunakan XML untuk mengemas pesan dengan tag awal XML untuk awal pesan dan tag akhir XML untuk mengetahui kapan seluruh pesan telah diterima.
TCP memang memiliki beberapa fitur seperti urutan paket yang berurutan, tidak ada pengulangan, dan menjadi mekanisme transportasi yang terhubung berarti Anda tahu jika ujung yang lain hilang atau tidak meskipun mungkin perlu beberapa saat untuk mengetahuinya. Menghubungkan dan memutuskan sambungan dapat menyebabkan penundaan tetapi tidak memberatkan dalam kondisi biasa meskipun kondisi jaringan dapat menyebabkan throughput TCP melambat.
MQTT adalah protokol yang diangkut oleh lapisan transport jaringan, biasanya TCP. MQTT menggunakan model terbitkan / berlangganan sehingga tidak ada penyimpanan pesan. Jadi, ketika penerbit menerbitkan pesan jika pelanggan tidak terhubung pada saat itu ketika terhubung, ia tidak akan melihat pesan. MQTT cukup real time, saya kira itulah bagian telemetri dari akronim itu. Saya suka MQTT untuk pesan kecil dan telah melakukan beberapa percobaan dengan muatan JSON melalui MQTT menggunakan Mosquitto. Lihat artikel ini Pengiriman pesan yang dapat diandalkan dengan Mosquitto (MQTT) dengan gambaran umum tentang MQTT dan kualitas layanan. Dan melihat artikel singkat ini dengan link ke sumber daya termasuk aplikasi sampel IOT - MQTT Publikasikan dan Subscriber C Kode .
Eksperimen saya dengan MQTT menggunakan teks JSON dan database SQLite3 di pelanggan untuk menyimpan pesan ada di https://github.com/RichardChambers/raspberrypi/tree/master/mqtt meskipun sumbernya ada di C dan cukup berantakan.
Berikut adalah 13 menit video # 144 Protokol Internet: CoAP vs MQTT, Network Sniffing, dan persiapan untuk IKEA Tradfri Hacking . Ini adalah artikel yang menarik tentang CoAP, Constrained Application Protocol: CoAP adalah protokol 'modern' IoT . Ada penjumlahan dari CoAP ini:
Pengadopsi awal setuju bahwa Protokol Aplikasi Terbatas berfungsi sangat baik untuk jaringan dan perangkat terbatas. Sesuatu yang tidak diketahui: "Pada jaringan nirkabel yang sangat padat - Wi-Fi atau seluler - CoAP dapat terus bekerja di mana protokol berbasis Protokol Kontrol Transmisi (TCP) seperti MQTT bahkan tidak dapat mengatur untuk berjabat tangan, "Kata Vermillard.
Ini karena tidak seperti kebanyakan protokol IOT lainnya, CoAP dibangun di atas UDP. Dengan kata lain, itu berarti tidak ada jabat tangan protokol atau koreksi kesalahan seperti yang dijumpai dengan TCP. "CoAP mungkin tidak dapat diandalkan seperti HTTP atau menjamin pengiriman pesan seperti MQTT, tapi ini sangat cepat," kata Matthieu. "Jika Anda setuju dengan beberapa pesan yang tidak diterima, Anda dapat mengirim lebih banyak pesan dalam jangka waktu yang sama."
Ada beberapa yang lain seperti AMQP, STOMP, dan CBOR yang mungkin Anda lihat juga. Lihat situs web standar CBOR serta tesis ini, Implementasi dan evaluasi protokol CBOR . Lihat artikel ini, Memilih Protokol Perpesanan Anda: AMQP, MQTT, atau STOMP yang membandingkan dan membedakan AMQP, MQTT, dan STOMP dan diakhiri dengan catatan tentang broker RabitMQ:
Mudah-mudahan, ini dapat membantu banyak orang mulai menavigasi sup protokol di luar sana untuk setiap kasus penggunaan Anda. Karena sudah umum bagi perusahaan untuk memiliki banyak aplikasi dengan kebutuhan yang berbeda, tentu saja mungkin Anda memerlukan ketiga broker di berbagai aplikasi yang berbeda. Di situlah multiprotocol yang solid, broker polyglot seperti RabbitMQ masuk — karena dapat mengirim STOMP, MQTT, atau AMQP ke dalam dan mengeluarkan salah satu dari yang lain. Anda tidak perlu dikunci oleh salah satu protokol ini — ketiganya didukung oleh broker RabbitMQ, menjadikannya pilihan ideal untuk interoperabilitas antar aplikasi. Arsitektur plugin juga memungkinkan RabbitMQ untuk berkembang untuk mendukung versi tambahan atau yang diperbarui dari protokol-protokol ini di masa depan.
Paket slide share dari sekitar 60 slide ini melakukan perbandingan dan kontras antara empat protokol IoT yang berbeda yang melihat kebutuhan dua kelompok IoT yang berbeda, Konsumen dan Industri, yang memiliki kebutuhan yang berbeda untuk keandalan dan ketahanan. Apa Standar Perpesanan yang Tepat untuk IoT? .
Ack
tidak perlu. Saya pikir bekerja pada keandalan di atas UDP tidak masuk akal, itulah gunanya TCP.