הדמיה של רשתות Thread באמצעות OTNS

1. מבוא

5abd22afa2f2ee9a.png

מה זה Thread ו-OTNS

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

OpenThread ש-Google פרסמה הוא הטמעת קוד פתוח של Thread. על אף גודל הקוד הקטן וטביעת הרגל של הזיכרון, מערכת OpenThread תומכת בכל התכונות שהוגדרו במפרט השרשורים.

אפשר להשתמש בסימולטור של רשת OpenThread (OTNS) כדי לדמות רשתות שרשור על ידי הדמיה של צומתי OpenThread בפלטפורמות של posix. פרוטוקול OTNS מספק ממשק אינטרנט קל לשימוש (OTNS-Web) להמחשה והפעלה של רשתות שרשור מדומות.

מה תלמדו

  • התקנת OTNS ויחסי התלות שלו
  • פיתוח פרוטוקול OpenThread עבור OTNS
  • איך להוסיף/להעביר/למחוק צמתים ב-OTNS-Web
  • שימוש בתכונות שימושיות אחרות של OTNS-Web כדי להפעיל את סימולציית הרשת
  • בדיקה אם נקודת הכשל היא נקודת כשל אחת ב-OpenThread

מעבדה זו מתמקדת ב-OTNS-CLI וב-OTNS-Web. תכונות אחרות של OTNS, כגון סקריפט של Python, אינן נכללות.

מה הדרישות כדי להצטרף לתוכנית?

  • Linux x86_64 או Mac OS
  • Git.
  • גרסה 1.13 ואילך.
  • דפדפן אינטרנט. OTNS-Web משתמש בדפדפן אינטרנט להצגת סימולציות.
  • Thread Primer. צריך להכיר את המושגים הבסיסיים של Thread כדי להבין מה מלמד ב-Codelab הזה.

2. התקנה

להתקנת Go

כדי ליצור פרוטוקול OTNS, נדרשת גרסה 1.13 ואילך.

  1. להתקין את Go מהכתובת https://golang.org/dl/
  2. הוספה של $(go env GOPATH)/bin (בדרך כלל $HOME/go/bin) אל $PATH:
$ export PATH=$PATH:$(go env GOPATH)/bin

קבלת קוד OTNS

$ git clone https://github.com/openthread/ot-ns.git ./otns
$ cd otns

יחסי תלות של התקנות

$ ./script/install-deps
grpcwebproxy installed: /usr/local/google/home/simonlin/go/bin/grpcwebproxy

יכול להיות שתוצג בקשה להזין סיסמה עבור sudo.

התקנת OTS

התקנת otns אל $GOPATH/bin:

$ ./script/install
otns installed: /usr/local/google/home/simonlin/go/bin/otns

נבדוק אם האפליקציה otns מותקנת נכון

  1. מריצים את הפקודה which otns כדי לבדוק אם אפשר להפעיל את קובץ ההפעלה otns ב-$PATH.
  2. אם הפקודה otns לא נמצאה, יש לוודא שהוספת את $(go env GOPATH)/bin ל-$PATH.

3. פיתוח פרוטוקול OpenThread עבור OTNS

קבלת קוד OpenThread מ-GitHub

$ mkdir -p ~/src
$ git clone https://github.com/openthread/openthread ~/src/openthread

יצירת פרוטוקול OpenThread עם OTNS=1

$ cd ~/src/openthread
$ ./script/cmake-build simulation -DOT_OTNS=ON -DOT_SIMULATION_VIRTUAL_TIME=ON -DOT_SIMULATION_VIRTUAL_TIME_UART=ON -DOT_SIMULATION_MAX_NETWORK_SIZE=999

קובצי ההפעלה של OpenThread מופיעים בספרייה build:

$ ls ~/src/openthread/build/simulation/examples/apps/cli/
ot-cli-ftd        ot-cli-mtd        ot-cli-radio

הגיע הזמן להפעיל את OTNS...

4. הפעלת OTNS

מריצים את otns:

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

כשהתהליך יסתיים, OTNS תיכנס למסוף CLI (OTNS-CLI) ותפעיל דפדפן אינטרנט להצגה חזותית ולניהול של הרשת (OTNS-Web):

a0e05178d66929b1.png

אם מופיע דף ריק עבור OTNS-Web, רוב הסיכויים ש-WebGL לא מופעל בדפדפן. כאן אפשר למצוא מידע נוסף עלhttps://superuser.com/a/836833 הפעלת WebGL.

בסעיפים הבאים נסביר איך לנהל סימולציות ב-OTNS דרך OTNS-CLI ודרך OTNS-Web.

5. היכרות עם OTNS-CLI ו-OTNS-Web

פרוטוקול OTNS-CLI

האפליקציה OTNS-CLI מספקת ממשק שורת פקודה (CLI) לניהול סימולציות ב-OTNS.

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

אפשר להקליד פקודות באמצעות OTNS-CLI. בחומרי העזר של OTNS CLI יש רשימה מלאה של פקודות. אל דאגה, בכוונתך להשתמש רק בכמה מהפקודות האלה ב-Codelab הזה.

פרוטוקול OTNS

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

4c5b43509a2ca0d0.png

6. הוספת צמתים

הוספת צמתים באמצעות OTNS-CLI

הוספת נתב במיקום (300, 100)

> add router x 300 y 100
1
Done

צומת שנוצר ב-OTNS-Web אמור להופיע. הצומת מתחיל כנתב והופך למנהל בתוך מספר שניות:

6ca8c2e63ed9818d.png

הוספת צמתים נוספים דרך OTNS-CLI

> add fed x 200 y 100
2
Done
> add med x 400 y 100
3
Done
> add sed x 300 y 200
4
Done

יש להמתין כמה שניות עד שצמתים ימוזגו למחיצה אחת. הצמתים אמורים להופיע ב-OTNS-WEB:

3ee67903c01aa612.png

הוספת צמתים עד OTNS-Web

אפשר גם להוסיף צמתים דרך OTNS-Web. לוחצים על הלחצן New Router של Action Bar. צומת שנוצר מעל הלחצן New Router אמור להופיע. יש לגרור את הצומת כדי להיות ליד הליד שיצרת דרך OTNS-CLI. כל הצמתים צריכים להתמזג בסופו של דבר למחיצה אחת:

420258bb92561146.png

כמו כן, כדי ליצור סוגים אחרים של צמתים, יש ללחוץ גם על לחצני ה-FED, MED ו-SED בסרגל הפעולות. גוררים אותם למיקומים ליד הצמתים הקיימים כדי לצרף אותם לאותה רשת Thread:

fe15d6f9726a099e.png

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

7. כוונון המהירות

נכון לעכשיו, הסימולציה צריכה לפעול במהירות של 1X. כלומר, זמן הסימולציה עד כה זהה לזמן שחלף מאז יצירת הצומת הראשון.

התאמת המהירות באמצעות OTNS-CLI

אפשר לשנות את מהירות הסימולציה דרך OTNS-CLI.

הגדרת מהירות הסימולציה ל-100X

> speed 100
Done

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

הגדרת מהירות הסימולציה ל-MAX

> speed max
Done

OTNS מנסה ליצור סימולציה מהירה ככל האפשר, לכן אתם אמורים לראות צמתים ששולחים מספר רב של הודעות.

הדמיית השהיה

> speed 0
Done

הגדרת הסימולציה של המהירות ל-0 משהה את הסימולציה.

שחזור הסימולציה במהירות רגילה

> speed 1
Done

הגדרת הסימולציה של המהירות לערך גדול מ-0 ממשיכה את הסימולציה.

התאמת המהירות באמצעות OTNS-Web

לחצני בקרה על מהירות

מוצאים את לחצני בקרת המהירות 9329157c1bd12672.png בAction Bar. הלחצנים מציגים את מהירות הסימולציה הנוכחית, וניתן להשתמש בהם כדי להתאים את מהירות הסימולציה ולהשהות/להמשיך את הסימולציה.

סימולציה של האצה

כדי להאיץ את הסימולציה, לוחצים על הלחצן 39b88331779277ad.png עד שהמהירות מגיעה ל-MAX: f5f460b2586d299b.png.

סימולציה של האטה

ניתן להאט את הסימולציה על ידי לחיצה על הלחצן 31cca8d5b52fa900.png.

הדמיית השהיה

יש ללחוץ על הלחצן 46cc2088c9aa7ab6.png כדי להשהות את הסימולציה כשהיא פועלת. הלחצן ישתנה לce25eda3496ffcd4.png.

המשך הסימולציה

יש ללחוץ על הלחצן ce25eda3496ffcd4.png כדי להמשיך את הסימולציה כשהיא מושהית. הלחצן ישתנה ל46cc2088c9aa7ab6.png.

הגדרת מהירות הסימולציה ל-10X

כדי לחסוך זמן, אפשר להשתמש ב

OTNS-CLI כדי לשנות את מהירות הסימולציה

10X כדי שנוכל לזהות שינויים בטופולוגיה ברשת במהירות רבה יותר.

> speed 10
Done

8. הפעלה/כיבוי של רדיו

עכשיו הסימולציה צריכה לכלול 2 נתבים (צורה משושה) וילדים רבים, והיא פועלת במהירות של פי 10.

מאתרים את הליד (הגבול האדום) הנוכחי של שני הנתבים ולוחצים עליו כדי לבחור אותו:

8c6a2e191cdae0c7.png

כבה רדיו

לוחצים על הלחצן 7ca085f470491dd4.png בסרגל הפעולות כדי להשבית את הרדיו של הצומת Leader:

a3bf58d9d125f95f.png

הליד לא יוכל לשלוח או לקבל הודעות כשהרדיו כבוי.

ממתינים כ-12 שניות (בזמן הדמיה של 120 שניות) כדי שהנתב השני יהפוך למנהיג החדש:

e3d32f85c4a1b990.png

רשת ה-Threading משחזרת את כשל ה-Leader באופן אוטומטי על ידי יצירת מחיצה חדשה עם Leader חדש. למחיצה החדשה יש גם צבע מחיצה חדש.

הפעל רדיו

יש לבחור את הליד שהרדיו שלו הושבת. יש ללחוץ על הלחצן 2d9cecb8612b42aa.png ב-Action Bar כדי לשחזר את קישוריות הרדיו:

7370a7841861aa3a.png

ה-Leader צריך להתחבר מחדש לרשת לאחר שחזור הקישוריות ברדיו.

9. הזזת צמתים

פרוטוקול OTNS מאפשר למשתמשים להעביר צמתים בקלות דרך OTNS-CLI או OTNS-Web.

העברת הצומת דרך OTNS-CLI

העברת צומת 5 למיקום חדש:

> move 5 600 300
Done

מאחר שצומת 5 רחוק מאוד מהנתב השני, הם אמורים לאבד את הקישוריות זה לזה, ואחרי כ-12 שניות (בזמן הדמיה של 120 שניות) הופכים למנהיגים של המחיצה שלהם:

c06b4d0a4f183299.png

העברת הצומת דרך OTNS-Web

כדי להחזיר את צומת 5 למיקום המקורי, גוררים אותו. שתי המחיצות צריכות להתמזג מחדש למחיצה אחת:

9ba305c4c5a5f892.png

10. מחיקת צמתים

מחיקת צמתים דרך OTNS-CLI

מחיקת צומת 8:

> del 8
Done

צומת 8 אמור להיעלם מהסימולציה:

18156770d9f8bf83.png

מחיקת צמתים דרך OTNS-Web

יש לבחור צומת 5 וללחוץ על הלחצן 7ff6afd565f4eafc.png ב-Action Bar כדי למחוק את צומת 5:

d4079cceea0105f0.png

Node 1 אמור להפוך למנהיג ו-Node 7 צריך להתנתק מכיוון שהוא לא יכול להגיע לנתב.

מחיקת הסימולציה (מחיקת כל הצמתים)

כדי לנקות את הסימולציה, צריך למחוק את כל הצמתים דרך OTNS-Web.

לחיצה על הלחצן 89618191721e79a0.png ב-Action Bar. כל הצמתים ייעלמו בבת אחת.

לפני שממשיכים...

כדי להמשיך במדריך הזה, צריך להוסיף כמה צמתים לסימולציה.

11. הקשר לצומת של OTNS-CLI

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

כניסה למצב הקשר של צומת

הזנת ההקשר של צומת 1:

> node 1
Done
node 1>

בקשת ה-CLI שונתה ל-node 1> , מה שמציין את ההקשר הנוכחי של הצומת. אפשר להקליד פקודות CLI של OpenThread כדי לבצע אותן בצומת, כאילו שמקיימים אינטראקציה ישירות עם הצומת.

ביצוע פקודות בהקשר של צומת

node 1> state
leader
Done
node 1> channel
11
Done
node 1> panid
0xface
Done
node 1> networkname
OpenThread
Done
node 1> ipaddr
fdde:ad00:beef:0:0:ff:fe00:fc00
fdde:ad00:beef:0:0:ff:fe00:d800
fdde:ad00:beef:0:2175:8a67:1000:6352
fe80:0:0:0:2075:82c2:e9e9:781d
Done

מעבר להקשר אחר של צומת

node 1> node 2
Done
node 2> 

יציאה מהקשר של הצומת

node 1> exit
Done
>

12. מזל טוב

מעולה! הפעלת את סימולציה ה-OTNS הראשונה שלך.

למדת איך להתקין את OTNS ואת יחסי התלות שלו. יצרתם את OpenThread ל-OTNS והתחלתם ליצור סימולציה של OTNS באמצעות מופעי סימולציה של OpenThread. למדת כיצד לבצע מניפולציות בדרכים שונות באמצעות OTNS-CLI וגם OTNS-Web.

עכשיו אתם יודעים מהי רשת OTNS ואיך אפשר להשתמש ב-OTNS כדי לדמות רשתות OpenThread.

המאמרים הבאים

בדקו כמה מ-Codelabs אלה...

מסמכי עזר