מושגים של מודלים של אינטראקציות

מודל הנתונים (DM) של צומת לא רלוונטי אם אי אפשר לבצע בו פעולות. מודל האינטראקציה (IM) מגדיר את הקשר של מודל הנתונים של צומת עם מודל הנתונים של צמתים אחרים: שפה משותפת לתקשורת בין מודלי נתונים.

הצמתים יוצרים אינטראקציה זה עם זה בדרכים הבאות:

  • קריאה והרשמה למאפיינים ולאירועים
  • כתיבה למאפיינים
  • הפעלת פקודות

בכל פעם שצומת יוצר רצף תקשורת מוצפן עם צומת אחר, הם יוצרים קשר של אינטראקציה. אינטראקציות יכולות להיות מורכבות מטרנזקציה אחת או יותר, וטרנזקציות מורכבות מפעולה אחת או יותר, שאפשר להבין אותן כהודעות ברמת IM בין צמתים.

היררכיית מודל האינטראקציה
איור 1: היררכיה של מודל אינטראקציה

יש כמה פעולות שנתמכות בטרנזקציות, כמו פעולת בקשת קריאה שמבקשת מאפיין או אירוע מצומת אחר, או התגובה שלה, פעולת דיווח נתונים, שמעבירה את המידע בחזרה מהשרת ללקוח.

יוזמים ויעדים

הצומת שיוזם את הטרנזקציה הוא היוזם, והצומת שמגיב הוא היעד. בדרך כלל, היוזם הוא אשכול לקוח והיעד הוא אשכול שרת. עם זאת, יש חריגים לדפוס הזה, כמו אינטראקציות עם מינויים, שמנותחות בהמשך הקטע הזה.

קבוצות

צמתים ב-Matter יכולים להשתייך לקבוצה. קבוצת מכשירים היא מנגנון שמאפשר לפנות לכמה מכשירים ולשלוח להם הודעות בו-זמנית באותה פעולה. כל הצמתים בקבוצה חולקים את אותו מזהה קבוצה, מספר שלם של 16 ביט.

כדי לאפשר תקשורת ברמת הקבוצה (Groupcast), מערכת Matter משתמשת בהודעות Multicast של IPv6, ולכל חברי הקבוצה יש את אותה כתובת Multicast.

נתיבים

בכל פעם שרוצים לבצע אינטראקציה עם מאפיין, אירוע או פקודה, צריך לציין את הנתיב לאינטראקציה הזו: המיקום של מאפיין, אירוע או פקודה בהיררכיית מודל הנתונים של צומת. ההסתייגות היא שבנתיבים יכולים להיות גם קבוצות או אופרטורים של תווים כלליים לחיפוש כדי לטפל בכמה צמתים או אשכולות בו-זמנית, לצבור את האינטראקציות האלה וכך להקטין את מספר הפעולות.

המנגנון הזה חשוב כדי לשפר את מהירות התגובה של התקשורת. לדוגמה, כשמשתמש רוצה לכבות את כל האורות, עוזר קולי יכול ליצור אינטראקציה אחת עם כמה נורות בקבוצה במקום רצף של אינטראקציות נפרדות. אם המכשיר היוזם יוצר אינטראקציות נפרדות עם כל נורה, יכול להיות שיהיה עיכוב מורגש בתגובה של המכשיר. ההשפעה הזו גורמת למכשירים השונים להגיב לפקודה עם עיכובים גלויים ביניהם. התופעה הזו נקראת לפעמים "אפקט הפופקורן".

אפשר להרכיב נתיב ב-Matter באמצעות אחת מהאפשרויות הבאות:

<path> = <node> <endpoint> <cluster> <attribute | event | command>
<path> = <group ID>        <cluster> <attribute | event | command>

ובתוך אבני הבניין האלה של הנתיב, endpoint ו-cluster יכולים לכלול גם אופרטורים של תווים כלליים לחיפוש כדי לבחור יותר ממופע אחד של צומת.

עם זמן קצוב וללא זמן קצוב

יש שתי דרכים לבצע טרנזקציית כתיבה או הפעלה: מתוזמנת ולא מתוזמנת. עסקאות מתוזמנות קובעות זמן קצוב מקסימלי לשליחת פעולת הכתיבה או ההפעלה. מטרת הזמן הקצוב לתפוגה היא למנוע מתקפת יירוט על העסקה. הדבר נכון במיוחד למכשירים ששולטים בגישה לנכסים, כמו מנעולים ושלטים לפתיחת חניונים.

כדי להבין מהן עסקאות מתוזמנות, כדאי להבין איך מתרחשות התקפות יירוט ולמה עסקאות מתוזמנות חשובות.

התקפת יירוט

מתקפת יירוט מתבצעת באופן הבא:

  1. אליס שולחת לבוב הודעה ראשונית, כמו פעולת בקשת כתיבה.
  2. אווה, אדם בתווך, מיירטת את ההודעה ומונעת מבוב לקבל אותה, למשל באמצעות סוג כלשהו של שיבוש רדיו.
  3. אליס לא מקבלת תשובה מבוב, אז היא שולחת הודעה שנייה.
  4. אווה מיירטת שוב את ההודעה ומונעת מבוב לקבל אותה.
  5. אווה שולחת את ההודעה הראשונה שהיא יירטה ליוסי, כאילו היא הגיעה מאליס.
  6. יוסי שולח את התשובה לאליס (ולחווה).
  7. Eve שומרת את ההודעה השנייה שהיא יירטה כדי להפעיל אותה מחדש מאוחר יותר. מכיוון שדני אף פעם לא קיבל את ההודעה השנייה המקורית שיירטה, הוא יקבל אותה. ההודעה הזו מייצגת פרצת אבטחה כשההודעה מקודדת פקודה כמו "פתיחת נעילה".

כדי למנוע התקפות מהסוג הזה, פעולות מתוזמנות מגדירות זמן קצוב מקסימלי לעסקה בתחילת העסקה. גם אם איב תצליח לבצע את ששת השלבים הראשונים של וקטור התקיפה, היא לא תוכל להפעיל מחדש את ההודעה בשלב 7 כי הזמן הקצוב לתפוגה של הטרנזקציה יסתיים.

עסקאות מתוזמנות מגדילות את המורכבות ואת מספר הפעולות. לכן, לא מומלץ להשתמש בהם בכל טרנזקציה, אלא רק בפעולות קריטיות במכשירים שיש להם שליטה על נכסי אבטחה ופרטיות פיזיים או וירטואליים.

הפשטות של SDK

בקטעים Read Transactions,‏ Write Transactions ו-Invoke Transactions יש סקירה כללית על הפעולות של מודל האינטראקציה שמבוצעות על ידי ה-SDK.

המפתח שיוצר מוצר שמשתמש ב-SDK של Matter בדרך כלל לא מבצע קריאות כדי להפעיל פעולות באופן ישיר. הפעולות מופשטות על ידי פונקציות SDK שיכילו אותן באינטראקציה. עם זאת, חשוב להבין את הפעולות של IM כדי שהמהנדס יכיר היטב את היכולות של Matter, וגם כדי לשלוט בצורה מדויקת בהטמעה של ה-SDK.