TCP, UDP 및 MQTT에 대한 내 경험과 검토 할 추가 리소스에 대한 몇 가지 생각.
UDP를 사용하면 하나의 네트워크 노드, 클라이언트의 응용 프로그램에서 보낸 UDP 메시지 중 일부만 볼 수있는 자동 실패 문제가 발생했습니다. 네트워크 트래픽이 잘못 될 수있는 이유는 너무 많습니다. UDP의 문제점은 패킷 생산자와 패킷 소비자 사이의 네트워크 경로에있는 노드가 필요할 때마다 패킷을 거의 버릴 수 있다는 것입니다. Wikipedia 주제 패킷 손실을 참조하십시오 .
문제는 현재 네트워크 상황에 상관없이 손실률은 얼마입니까? 따라서 LAN 또는 하위 네트워크 내에서 통신하는 경우 손실률이 낮을 수 있습니다. WAN 또는 인터넷에서 손실률이 상당히 높을 수 있습니다. UDP 패킷은 여러 가지 이유로 버려지지만 라우팅되지만 네트워크 조건에 따라 홉 수가 감소합니다. 책임이없는 상태로 패킷을 큰 빈 공간으로 보내면 자동 실패 가능성이 있습니다.
귀하의 경우에는 시간 초과 후 재전송이있는 간단한 ack가 충분하지 않은 것처럼 들립니다.
유지 관리 된 TCP 연결을 통해 XML 메시지를 작성했으며 훌륭하게 작동했습니다. 처리 할 응용 프로그램 계층으로 버퍼에 각각 완전한 메시지를 전달하는 계층이있었습니다. XML을 사용하여 메시지 시작을위한 XML 시작 태그와 전체 메시지 수신시기를 알기위한 XML 끝 태그로 메시지를 패키지했습니다.
TCP에는 순차적 순서의 패킷, 반복 없음과 같은 몇 가지 기능이 있으며 연결된 전송 메커니즘은 다른 쪽 끝이 사라지는 지 알아내는 데 시간이 걸릴 수 있음을 의미합니다. 네트워크 상태로 인해 TCP 처리 속도가 느려질 수 있지만 연결 및 연결 해제로 인해 지연이 발생할 수 있지만 일반적인 조건에서는 부담이되지 않습니다.
MQTT는 네트워크 전송 계층 (일반적으로 TCP)에 의해 전송되는 프로토콜입니다. MQTT는 발행 / 구독 모델을 사용하므로 메시지 저장이 없습니다. 따라서 구독자가 당시에 연결되지 않았을 때 게시자가 메시지를 게시하면 연결될 때 메시지가 표시되지 않습니다. MQTT는 거의 실시간으로, 그것이 약어의 원격 측정 부분이 전부라고 생각합니다. 작은 메시지에 대해서는 MQTT를 좋아하고 Mosquitto를 사용하여 MQTT를 통해 JSON 페이로드로 몇 가지 실험을 해왔습니다. MQTT 및 서비스 품질에 대한 개요를 제공하는 Mosquitto (MQTT)를 사용한 안정적인 메시지 전달 기사를 참조하십시오 . 또한 샘플 애플리케이션 IoT – MQTT 공개 및 가입자 C 코드를 포함한 자원에 대한 링크가있는이 간략한 기사를 참조하십시오 .
메시지를 저장하기 위해 구독자에서 JSON 텍스트와 SQLite3 데이터베이스를 사용하여 MQTT를 사용한 실험은 https://github.com/RichardChambers/raspberrypi/tree/master/mqtt에 있지만 소스는 C이고 상당히 지저분합니다.
13 분짜리 비디오 # 144 인터넷 프로토콜 : CoAP vs MQTT, 네트워크 스니핑 및 IKEA Tradfri 해킹 준비 . CoAP, Constrained Application Protocol 에 대한 흥미로운 기사입니다 . CoAP는 IoT의 '현대적인'프로토콜 입니다. CoAP의 요약은 다음과 같습니다.
얼리 어답터는 제한된 애플리케이션 프로토콜이 제한된 네트워크 및 장치에 매우 효과적이라는 데 동의합니다. 잘 알려지지 않은 내용 : "혼잡 한 무선 네트워크 (Wi-Fi 또는 셀룰러)에서 CoAP는 MQTT와 같은 TCP (Transmission Control Protocol-based) 프로토콜이 핸드 셰이크를 완료 할 수없는 곳에서도 계속 작동 할 수 있습니다. "버 밀라 드는 말했다.
다른 대부분의 IoT 프로토콜과 달리 CoAP는 UDP를 기반으로하기 때문입니다. 즉, TCP에서 발생하는 프로토콜 핸드 셰이크 또는 오류 수정이 없음을 의미합니다. Matthieu는 "CoAP는 HTTP만큼 안정적이지 않거나 MQTT와 같은 메시지 전달을 보장하지만 매우 빠르다"고 지적했다. "일부 메시지가 수신되지 않으면 동일한 시간 내에 더 많은 메시지를 보낼 수 있습니다."
AMQP, STOMP 및 CBOR과 같은 다른 항목도 있습니다. CBOR 프로토콜의 논문, 구현 및 평가 뿐만 아니라 CBOR 표준 웹 사이트 를 참조하십시오 . AMQP, MQTT 및 STOMP 를 비교 및 대조하고 RabitMQ 브로커에 대한 메모로 끝나는 메시징 프로토콜 선택 : AMQP, MQTT 또는 STOMP 문서를 참조하십시오 .
다행히도 많은 사용자가 각 사용 사례마다 프로토콜 수프를 탐색하는 데 도움이 될 수 있습니다. 회사가 서로 다른 요구를 가진 많은 응용 프로그램을 갖는 것이 일반적이므로 여러 응용 프로그램에서 세 개의 브로커가 모두 필요할 수 있습니다. 바로 RabbitMQ와 같은 견고한 멀티 프로토콜, 폴리 글 로트 브로커가 들어오는 곳입니다. STOMP, MQTT 또는 AMQP를 보내고 다른 하나를 가져올 수 있기 때문입니다. 이러한 프로토콜 중 하나에 의해 고정 될 필요는 없습니다.이 3 가지 모두 RabbitMQ 브로커에서 지원되므로 애플리케이션 간 상호 운용성을위한 이상적인 선택입니다. 플러그인 아키텍처를 통해 RabbitMQ는 향후 이러한 프로토콜의 추가 또는 업데이트 버전을 지원하도록 발전 할 수 있습니다.
약 60 개의 슬라이드로 구성된이 슬라이드 공유 패키지는 신뢰성과 견고성에 대한 요구가 다른 두 가지 다른 IoT 그룹 (소비자 및 산업)의 요구를보고있는 4 개의 다른 IoT 프로토콜을 비교 및 대조합니다. IoT에 적합한 메시징 표준은 무엇입니까? .
Ack
노래가 필요하지 않습니다. UDP 위에서 안정성에 대한 작업은 그다지 의미가 없다고 생각합니다. 이것이 바로 TCP입니다.