Introduction
Imagine sending important messages over a network where some might get lost or arrive multiple times. The challenge is to control how messages are delivered to make sure they reach safely and correctly without wasting resources.
Imagine mailing letters with different levels of care: dropping a postcard in the mailbox without tracking, sending a registered letter that requires a signature, and sending a courier package that confirms delivery and prevents duplicates.
┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │Sender │ │Network │ │Receiver │ ├───────────────┤ ├───────────────┤ ├───────────────┤ │QoS 0: Send →─┐│──────▶│ │──────▶│ Receive once │ │No ack needed ││ │ │ │or lost │ ├───────────────┤ │ │ ├───────────────┤ │QoS 1: Send →─┐│──────▶│ │ │Send ack ◀─────┤ │Wait for ack ││◀──────│ │ │May receive │ │Resend if no ││ │ │ │duplicates │ │ack ││ │ │ ├───────────────┤ │QoS 2: Send →─┐│──────▶│ │ │Send ack 1 ◀───┤ │2-step handshake│ │ │ │Send ack 2 ◀───┤ │Ensures once ││◀──────│ │ │Receive once │ └───────────────┘ └───────────────┘ └───────────────┘