לקורס האינטראקטיבי ←

MQTT Bite › יחידה 3

🛡️ יחידה 3 מתוך 6 · אמינות⏱️ 5 דק׳ קריאה🎥 סרטון 4 דק׳

רמות איכות השירות (QoS 0, 1, 2)

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

פתחו את היחידה האינטראקטיבית עם הסימולטור ←

🎥 סרטון ההדרכה

🖼️ היחידה באינפוגרפיקה

אינפוגרפיקה: רמות איכות השירות (QoS 0, 1, 2)

💡 מושגי מפתח

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) ←