רמות איכות השירות (QoS 0, 1, 2)
איזון בין מהירות לאמינות: At most once, At least once, ו-Exactly once. איכות השירות (QoS - Quality of Service) היא אחד המאפיינים החזקים ביותר ב-MQTT. הפרוטוקול מאפשר למפתח לבחור את רמת האמינות הרצויה לכל הודעה והודעה בנפרד, בהתאם לחשיבות הנתונים ולמגבלות הרשת.
פתחו את היחידה האינטראקטיבית עם הסימולטור ←🎥 סרטון ההדרכה
🖼️ היחידה באינפוגרפיקה

💡 מושגי מפתח
QoS 0: At most once (שגר ושכח)
ההודעה נשלחת פעם אחת ללא אישור (ACK) מצד המקבל. אם חבילת המידע אבדה או שהרשת נותקה לרגע – ההודעה אובדת. מתאים לחיישנים שמשדרים בתדירות גבוהה (למשל נתוני מהירות רוח כל חצי שנייה).
✏️ דוגמה: פאקטה יחידה: PUBLISH בלבד (ללא Packet Identifier).
QoS 1: At least once (הגעה מובטחת עם אפשרות כפילות)
השולח שומר את ההודעה עד לקבלת אישור PUBACK מהמקבל. אם לא התקבל אישור בפרק זמן מוגדר, ההודעה משודרת שוב עם דגל DUP=1. ההודעה מובטחת להגיע לפחות פעם אחת, אך ייתכנו כפילויות.
✏️ דוגמה: זרימת פאקטות: PUBLISH -> PUBACK.
QoS 2: Exactly once (בדיוק פעם אחת – האמינות המרבית)
רמת האמינות הגבוהה והבטוחה ביותר. מתבצעת לחיצת יד מרובעת (Four-step handshake) שמבטיחה שההודעה תתקבל בדיוק פעם אחת, ללא שום אובדן וללא שום שכפול.
✏️ דוגמה: זרימת פאקטות: PUBLISH -> PUBREC -> PUBREL -> PUBCOMP.
חוק ה-QoS Downgrade
רמת ה-QoS הסופית שבה מנוי מקבל הודעה נקבעת על פי המינימום (MIN) בין ה-QoS שבו ההודעה פורסמה לבין ה-QoS שהמנוי ביקש בהרשמה שלו.
✏️ דוגמה: אם Publisher שלח ב-QoS 2, אך ה-Subscriber נרשם עם QoS 0 – המנוי יקבל את ההודעה ב-QoS 0 בלבד!
📌 מה לקחת מהיחידה
- QoS 0 מספק מהירות מרבית וחיסכון בסוללה, אך ללא אישורי קבלה.
- QoS 1 מבטיח הגעה באמצעות PUBACK אך עשוי לייצר כפילויות (At least once).
- QoS 2 מבטיח הגעה מדויקת פעם אחת בלבד בעזרת לחיצת יד מרובעת.
- ה-QoS שהמנוי חווה נקבע לפי ה-MIN בין פרסום המקור להרשמת המנוי.
❓ שאלות ותשובות
איזו רמת QoS כוללת לחיצת יד בת ארבעה שלבים (PUBLISH, PUBREC, PUBREL, PUBCOMP)?
QoS 2. QoS 2 משתמשת בלחיצת יד של 4 שלבים כדי לוודא ששני הצדדים מסונכרנים וההודעה תועבר לשכבת האפליקציה פעם אחת בדיוק.
מכשיר מפרסם הודעה ב-QoS 1 אך לא מקבל PUBACK בתוך 5 שניות. מה יקרה?
השולח ישלח שוב את ה-PUBLISH עם אותו Packet ID ודגל DUP מסומן. ב-QoS 1 השולח מבצע Retry (שידור חוזר) עם דגל Duplicate (DUP=1) ואותו מזהה פאקטה עד לקבלת ה-PUBACK.
מפרסם שלח הודעה ב-QoS 2, ומנוי נרשם לאותו נושא ב-QoS 1. באיזו רמת QoS יקבל המנוי את ההודעה?
QoS 1 (הכלל הוא MIN בין שניהם). כלל ה-Downgrade ב-MQTT קובע: QoS שמתקבל = MIN(Publish_QoS, Subscribe_QoS). מכיוון ש-MIN(2, 1) = 1, המנוי יקבל ב-QoS 1.
→ יחידה קודמת: שפת הנושאים (Topics) ו-Wildcards · יחידה הבאה: הודעות שמורות (Retained) וצוואה אחרונה (LWT) ←