סימולציה של רשתות שרשורים באמצעות OTNS

1. מבוא

5abd22afa2f2ee9a.png

מה זה Thread ו-OTNS

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

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

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

מה תלמדו

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

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

דרישות:

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

2. התקנה

להתקנת Go

כדי לבנות OTNS, יש לעבור ל-Go 1.11 ואילך.

  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.

התקנת OTN

התקנת האפליקציה 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/bootstrap
$ ./bootstrap
$ make -f examples/Makefile-simulation OTNS=1

ניתן למצוא את קובצי ההפעלה של OpenThread בספרייה output:

Linux

$ ls ~/src/openthread/output/simulation/bin
ot-cli-ftd        ot-cli-mtd        ot-ncp-ftd        ot-ncp-mtd        ot-rcp

macOS

$ ls ~/src/openthread/output/simulation/bin
ot-cli-ftd        ot-cli-mtd        ot-ncp-ftd        ot-ncp-mtd        ot-rcp

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

4. הפעלת OTNS

הרצה otns:

$ cd ~/src/openthread/output/simulation/bin
$ 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 מספק ממשק של שורת פקודה (LILI) לניהול סימולציות של OTNS.

$ cd ~/src/openthread/output/simulation/bin
$ otns
> ← OTNS-CLI prompt

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

420258bb92561146.png

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

fe15d6f9726a099e.png

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

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 בסרגל הפעולות כדי להשבית את הרדיו של צומת המנהיגים:

a3bf58d9d125f95f.png

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

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

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 וללחוץ על הלחצן 7ff6afd565f4eGoogleDoodle.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> , ופירושה הקשר של הצומת הנוכחי. ניתן להקליד פקודות CTTread 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.

מה השלב הבא?

הנה כמה ממעבדות הקוד...

מסמכים לעיון