מודל הנתונים (DM) של צומת לא רלוונטי אם אי אפשר לבצע עליו פעולות. מודל האינטראקציה (IM) מגדיר את הקשר של DM של צומת עם ה-DM של צמתים אחרים: שפה משותפת לתקשורת בין DM.
הצמתים יוצרים אינטראקציה זה עם זה באמצעות:
- קריאה והרשמה למאפיינים ולאירועים
- כתיבה למאפיינים
- הפעלת פקודות
בכל פעם שצומת יוצר רצף תקשורת מוצפן עם צומת אחר, נוצר ביניהם קשר של אינטראקציה. אינטראקציות יכולות לכלול עסקה אחת או יותר, ועסקאות יכולות לכלול פעולה אחת או יותר. פעולות הן הודעות ברמת ה-IM בין צמתים.
יש כמה פעולות נתמכות בטרנזקציות, כמו פעולת בקשת קריאה שמבקשת מאפיין או אירוע מצומת אחר, או התגובה שלה, פעולת דיווח הנתונים, שמעבירה את המידע מהשרת ללקוח.
אירועים להפעלה ויעדים
הצומת שיוזם את העסקה הוא היוזם, והצומת שמגיב הוא היעד. בדרך כלל, הצד היוזם הוא אשכול לקוחות והיעד הוא אשכול שרתים. עם זאת, יש חריגים לדפוס הזה, כמו האינטראקציות עם המינוי שמנותחות בהמשך הקטע הזה.
קבוצות
צמתים ב-Matter יכולים להשתייך לקבוצה. קבוצת מכשירים היא מנגנון לטיפול בהודעות ולשליחת הודעות לכמה מכשירים בו-זמנית באותה פעולה. לכל הצמתים בקבוצה יש אותו מזהה קבוצה, שהוא מספר שלם בן 16 ביט.
כדי לבצע תקשורת ברמת הקבוצה (Groupcast), Matter משתמש בהודעות Multicast של IPv6, ולכל חברי הקבוצה יש את אותה כתובת Multicast.
נתיבים
בכל פעם שרוצים ליצור אינטראקציה עם מאפיין, אירוע או פקודה, צריך לציין את הנתיב של האינטראקציה הזו: המיקום של מאפיין, אירוע או פקודה בהיררכיה של מודל הנתונים של צומת. החיסרון הוא שבנתיבים אפשר להשתמש גם בקבוצות או באופרטורים של תו כללי כדי להתייחס לכמה צמתים או אשכולות בו-זמנית, לצבור את האינטראקציות האלה וכך להקטין את מספר הפעולות.
המנגנון הזה חשוב לשיפור התגובה של התקשורת. לדוגמה, כשמשתמש רוצה לכבות את כל האורות, עוזר קולי יכול ליצור אינטראקציה אחת עם כמה אורות בקבוצה במקום ליצור רצף של אינטראקציות נפרדות. אם הגורם היוזם יוצר אינטראקציות נפרדות עם כל נורה, יכול להיות שיווצר זמן אחזור שניתן לתפיסה אנושית בתגובתיות של המכשיר. האפקט הזה גורם לכך שמספר מכשירים מגיבים לפקודה עם עיכובים נראים לעין ביניהם. התופעה הזו נקראת לעיתים קרובות 'אפקט הפופקורן'.
אפשר להרכיב נתיב ב-Matter באמצעות אחת מהאפשרויות הבאות:
<path> = <node> <endpoint> <cluster> <attribute | event | command>
<path> = <group ID> <cluster> <attribute | event | command>
בנוסף, בבלוקים של הנתיב, endpoint ו-cluster יכולים לכלול גם אופרטורים של תווים כלליים כדי לבחור יותר ממופע אחד של צומת.
מתוזמנות ולא מתוזמנות
יש שתי דרכים לבצע פעולת כתיבה או הפעלה של טרנזקציה: עם הגבלת זמן וללא הגבלת זמן. במסגרת עסקאות עם הגבלת זמן מוגדר זמן קצוב לתפוגה מקסימלי לשליחת פעולת הכתיבה או ההפעלה. מטרת פסק הזמן הזה היא למנוע מתקפת יירוט על העסקה. האימות הזה חשוב במיוחד למכשירים שמאפשרים גישה לנכסים, כמו פותחי שערים ומנעולים.
כדי להבין מהן עסקאות מתוזמנות, כדאי להבין איך מתרחשות מתקפות יירוט ולמה עסקאות מתוזמנות חשובות.
התקפת יירוט
הדפוס של מתקפת יירוט הוא:
- אליס שולחת לבוב הודעה ראשונית, למשל פעולה של בקשת כתיבה.
- איב, אדם בתווך, מיירטת את ההודעה ומונעת מבוב לקבל אותה, למשל באמצעות שיבוש רדיו כלשהו.
- אליס לא מקבלת תשובה מבוב, אז היא שולחת הודעה שנייה.
- איב שוב מיירטת את ההודעה ומונעת מבוב לקבל אותה.
- חווה שולחת את ההודעה הראשונה שיירטה לתמר, כאילו היא הגיעה מדפנה.
- יוסי שולח את התשובה לשרה (ולאבי).
- איב שומרת את ההודעה השנייה שיירטה כדי להפעיל אותה מחדש מאוחר יותר. בוב מעולם לא קיבל את ההודעה השנייה המקורית שנחטפה מאליס, ולכן הוא יקבל אותה. ההודעה הזו מייצגת פרצת אבטחה אם היא מכילה פקודה כמו 'פתיחת הנעילה'.
כדי למנוע סוגים כאלה של התקפות, התכונה 'פעולות מתוזמנות' מגדירה פסק זמן מקסימלי לעסקה בתחילת העסקה. גם אם איב תצליח לבצע את ששת השלבים הראשונים של וקטור המתקפה, היא לא תוכל לשחזר את ההודעה בשלב 7 בגלל פסק זמן שחלף בעסקה.
עסקאות עם תזמון מגדילות את המורכבות ואת מספר הפעולות. לכן לא מומלץ להשתמש בהן בכל עסקה, אלא רק בפעולות קריטיות במכשירים שיש להם שליטה על נכסי אבטחה ופרטיות פיזיים או וירטואליים.
הפשטות של SDK
בקטעים Read Transactions (קריאת עסקאות), Write Transactions (כתיבת עסקאות) ו-Invoke Transactions (הפעלת עסקאות) מופיעה סקירה כללית של הפעולות במודל האינטראקציה שה-SDK מבצע.
המפתח שיוצר מוצר שמשתמש ב-Matter SDK בדרך כלל לא מבצע קריאות להפעלת פעולות באופן ישיר. הפעולות מופשטות על ידי פונקציות SDK שיעטפו אותן באינטראקציה. עם זאת, חשוב להבין את הפעולות של IM כדי לספק למהנדס מידע על היכולות של Matter, וגם על שליטה מדויקת בהטמעה של ה-SDK.