2016-09-01 7 views
2

나는 MQTT 프로토콜을 공부하고 사양의 첫 번째 라인에 모순이 있음을 보인다MQTT QoS의 용도/목적은 무엇입니까?

프로토콜 TCP/IP를 통해 실행, 또는 주문을 제공 다른 네트워크 프로토콜을 통해가, 무손실, 양방향 연결. 그것의 기능 은 다음과 같습니다

[...] 메시지 전달에 대한 서비스의

세 가지 자질 : 메시지의 노력에 따라 을 전달 "에서 대부분 한 번"

  • , 운영 환경. 메시지가 손실 될 수 있습니다.. 이 레벨은 예를 들어 주변 센서 데이터와 함께 사용할 수 있습니다. 개별 판독 값 이 손실되면 다음에 곧 공개 될 것입니다. ·
  • " 에서 적어도 한 번"메시지는 도착하지만 복제가 가능하므로 이 발생할 수 있습니다. ·
  • "정확히 한 번", 메시지가 정확히 한번 에 도착하도록 보장됩니다. 이 수준은 예를 들어 결제 시스템에서 중복되거나 분실 된 메시지로 인해 의 요금이 부과 될 수 있습니다.

MQTT는 무손실 네트워크 프로토콜을 통해 실행할 수있는 경우의 QoS (레벨 0)의 손실 수준을 제공의 의미는 무엇인가?

TCP 프로토콜이 손실 된 메시지의 재전송을 처리 할 것이기 때문에 제공하는 것조차 불가능하다고 생각합니다. 이는 MQTT-SN이 비 -TCP를 통해 실행되도록 고안되었고 신뢰할 수없는 네트워크를 의미합니다.

(레벨 : "적어도 한 번"은 TCP가이 보증을 이미 포함하고 있기 때문에 의미가 없지만 다른 무손실 프로토콜이있을 수 있으므로 더 일반적인 경우에는 의미가 있습니다. 사용)

답변

5

엄밀히 말하자면 TCP/IP 계층에서 승인 된 TCP 프레임은 반드시 응용 프로그램 계층에서 패킷을 사용하여 수행해야하는 작업이 효과적으로 수행되었음을 의미하지는 않습니다.

MQTT QoS 0 패킷이 손실 된 경우, TCP 패킷이 브로커에게 전달된다는 사실이 발생할 수 있지만 (즉 클라이언트 관점에서 보았을 때 실제로 ACK가 발생 함) 브로커가 중간에 충돌합니다 모든 가입 된 클라이언트에게 메시지를 전달하는 것.

MQTT 주제에 등록 된 100,000 명의 클라이언트가 있다고 가정하면 등록 된 클라이언트로 데이터를 전달하는 데 시간이 걸리고 브로커가 프로세스 중에 죽을 수 있습니다. 게시자의 관점에서 메시지는 실제로 브로커에 게시되었지만 실제로는 메시지 손실이 있습니다. 일부 가입자는 그 메시지에 대해 절대 듣지 못할 것이기 때문입니다.