Algunas reflexiones sobre mi experiencia con TCP, UDP y MQTT, así como algunos recursos adicionales para revisar.
Con UDP, me he encontrado con el problema de falla silenciosa en el que una aplicación en un nodo de red, el cliente, solo ve algunos de los mensajes UDP que se enviaron. Hay demasiadas razones por las cuales el tráfico de red puede salir mal. El problema con UDP es que los paquetes se pueden descartar casi siempre que cualquiera de los nodos en la ruta de red entre el productor de paquetes y el consumidor de paquetes justifica. Consulte el tema de Wikipedia Pérdida de paquetes .
La pregunta es cuál es su tasa de pérdida en cualquier contexto de red actual. Entonces, si esto es comunicación dentro de una LAN o subred, su tasa de pérdida puede ser baja. En una WAN o en Internet, su tasa de pérdida puede ser bastante alta. Los paquetes UDP se descartan por varias razones y se enrutan, sin embargo, las condiciones de red lo permiten con la disminución del conteo de saltos. El envío de paquetes al gran vacío sin responsabilidad deja abierta la posibilidad de fallas silenciosas.
Parece que en su caso, un simple reconocimiento con retransmisión después de un tiempo de espera sin recibir un reconocimiento sería suficiente.
He hecho mensajes XML a través de una conexión TCP mantenida y funcionó muy bien. Tenía una capa que entregaba mensajes completos cada uno en un búfer a la capa de aplicación para manejar. Utilicé XML para empaquetar el mensaje con una etiqueta de inicio XML para el comienzo del mensaje y una etiqueta de finalización XML para saber cuándo se había recibido todo el mensaje.
TCP tiene algunas características, como el orden secuencial de los paquetes, no se repite, y ser un mecanismo de transporte conectado significa que usted sabe si el otro extremo desaparece o no, aunque puede llevar un tiempo descubrirlo. Conectarse y desconectarse puede generar demoras, pero no resulta oneroso en condiciones normales, aunque las condiciones de la red pueden hacer que el rendimiento del TCP disminuya.
MQTT es un protocolo que es transportado por una capa de transporte de red, normalmente TCP. MQTT utiliza un modelo de publicación / suscripción para que no haya almacenamiento de mensajes. Entonces, cuando un editor publica un mensaje si el suscriptor no está conectado en ese momento, cuando se conecta, no verá el mensaje. MQTT es más o menos en tiempo real, supongo que de eso se trata la parte de las siglas de telemetría. Me gusta MQTT para mensajes pequeños y he estado haciendo algunos experimentos con la carga JSON a través de MQTT usando Mosquitto. Consulte este artículo Entrega confiable de mensajes con Mosquitto (MQTT) con una descripción general de MQTT y la calidad del servicio. Y vea este breve artículo con enlaces a recursos que incluyen una aplicación de ejemplo IoT - MQTT Publish and Subscriber C Code .
Mis experimentos con MQTT usando texto JSON y una base de datos SQLite3 en el suscriptor para almacenar mensajes están en https://github.com/RichardChambers/raspberrypi/tree/master/mqtt aunque la fuente está en C y es bastante desordenada.
Aquí hay un video de 13 minutos # 144 Protocolos de Internet: CoAP vs MQTT, Network Sniffing y preparación para el pirateo de IKEA Tradfri . Este es un artículo interesante sobre CoAP, Protocolo de aplicación restringida: CoAP es el protocolo 'moderno' de IoT . Existe esta suma de CoAP:
Los primeros usuarios están de acuerdo en que el Protocolo de aplicación restringida funciona extremadamente bien para redes y dispositivos restringidos. Algo no tan conocido: "En una red inalámbrica muy congestionada (Wi-Fi o celular), CoAP puede continuar funcionando donde un protocolo basado en el Protocolo de control de transmisión (TCP) como MQTT ni siquiera puede lograr completar un apretón de manos, "Dijo Vermillard.
Esto se debe a que, a diferencia de la mayoría de los otros protocolos de IoT, CoAP se basa en UDP. En otras palabras, significa que no hay protocolos de protocolo de enlace o corrección de errores como se encuentra con TCP. "CoAP puede no ser tan confiable como HTTP o garantizar la entrega de mensajes como MQTT, pero es extremadamente rápido", señaló Matthieu. "Si está de acuerdo con que algunos mensajes no se reciban, puede enviar muchos más mensajes dentro del mismo período de tiempo".
Hay algunos otros, como AMQP, STOMP y CBOR, que también podría considerar. Consulte el sitio web estándar de CBOR , así como esta tesis, implementación y evaluación del protocolo CBOR . Consulte este artículo, Cómo elegir su protocolo de mensajería: AMQP, MQTT o STOMP, que compara y contrasta el AMQP, MQTT y STOMP y termina con una nota sobre el corredor RabitMQ:
Con suerte, esto puede ayudar a muchos a comenzar a navegar la sopa de protocolos para cada uno de sus casos de uso. Dado que es común que las empresas tengan muchas aplicaciones con diferentes necesidades, es posible que necesite los tres corredores en diferentes aplicaciones. Ahí es donde entra en juego un agente políglota sólido y multiprotocolo como RabbitMQ, ya que puede enviar STOMP, MQTT o AMQP y obtener uno de los otros. No necesita estar encerrado por uno de estos protocolos: los tres son compatibles con el intermediario RabbitMQ, lo que lo convierte en una opción ideal para la interoperabilidad entre aplicaciones. La arquitectura del complemento también permite que RabbitMQ evolucione para admitir versiones adicionales o actualizadas de estos protocolos en el futuro.
Este paquete de compartir diapositivas de unas 60 diapositivas compara y contrasta entre cuatro protocolos de IoT diferentes que analizan las necesidades de dos grupos de IoT diferentes, Consumers e Industrial, que tienen diferentes necesidades de confiabilidad y robustez. ¿Cuál es el estándar de mensajería correcto para el IoT? .
Ack
ing no es necesario. Creo que trabajar en confiabilidad además de UDP no tiene demasiado sentido, para eso es TCP.