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

1. מבוא

5abd22afa2f2ee9a.png

מה זה Thread & OTNS

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

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

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

מה תלמדו

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

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

למה תזדקק?

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

2. התקנה

התקנת Go

ל-OTNS צריך להתקין Go 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.

התקנת otns

התקנת 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-אינטרנט

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 להמחשה ולניהול של הרשת. הוא מספק ייצוג חזותי של הצמתים, ההודעות והקישורים של רשת ה-thread. שימו לב לרכיבים השונים של 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.

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

8c6a2e191cdae0c7.png

כבה רדיו

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

a3bf58d9d125f95f.png

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

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

e3d32f85c4a1b990.png

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

הפעל רדיו

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

7370a7841861aa3a.png

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

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> , כדי לציין את ההקשר הנוכחי של הצומת. אפשר להקליד פקודות של OpenThread CLI כדי לבצע אותן בצומת כאילו מתבצעת אינטראקציה ישירה עם הצומת.

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

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 האלה...

מסמכי עזר