1. מבוא
מהו Thread?
Thread הוא פרוטוקול רשתות רשתות רשתות אלחוטיות מבוסס-IP עם צריכת אנרגיה נמוכה, שמאפשר תקשורת מאובטחת בין מכשירים ומכשירים לענן. רשתות של חוטים יכולות להתאים את עצמן לשינויים בטופולוגיה כדי למנוע נקודות כשל בודדות.
מהו OpenThread?
OpenThread שפורסם על ידי Google הוא הטמעה של Thread® בקוד פתוח.
מהו נתב גבולות של OpenThread?
OpenThread Border Router (OTBR) שפורסם על ידי Google הוא הטמעה בקוד פתוח של Thread Border Router.
IPv6 Multicast
ב-Thread מוגדרת סדרה של תכונות לתמיכה ב-multicast ברשת הטרוגנית (קטעי רשת של Thread ו-Wi-Fi/Ethernet) לכתובות multicast עם היקף גדול יותר מהיקף מקומי של תחום.
Thread Border Router רושם את מערך הנתונים של נתב ציר (BBR), ושירות ה-BBR שנבחר הוא Primary Backbone Router (PBBR), שאחראי להעברה של נתוני ה-multicast נכנסים/יוצאים.
מכשיר Thread שולח הודעת CoAP כדי לרשום את כתובת ה-Multicast ל-PBBR (Multicast Listener Registration, MLR בקיצור) אם הכתובת גדולה יותר מ-realm local. PBBR משתמש ב-MLDv2 בממשק החיצוני שלו כדי לתקשר עם הרשת הרחבה יותר של IPv6 LAN/WAN לגבי קבוצות IPv6 של Multicast שהוא צריך להאזין להן, בשם רשת Thread המקומית שלו. בנוסף, PBBR מעביר תנועה של שידור לקבוצה לרשת Thread רק אם לפחות מכשיר Thread אחד רשום למינוי ליעד.
במכשירי קצה עם תמיכה ב-Thread ברמה מינימלית, יכול להיות שהם תלויים בהורה שלהם כדי לצבור את כתובת ה-Multicast ולבצע MLR בשמם, או להירשם בעצמם אם ההורה שלהם הוא Thread 1.1.
פרטים נוספים זמינים במפרט של שרשור.
מה תפַתחו
ב-codelab הזה תלמדו להגדיר נתב גבולות לפרוטוקול Thread ושני מכשירי Thread, ואז להפעיל את התכונות של ניתוב מולטיקאסט במכשירי Thread ובמכשירי Wi-Fi ולאמת אותן.
מה תלמדו
- איך יוצרים קושחת nRF52840 עם תמיכה ב-IPv6 Multicast.
- איך להירשם לכתובות IPv6 של Multicast במכשירי Thread.
מה צריך
- תחנת עבודה של Linux, ליצירה ולתוכנת קושחת של Thread RCP, של CLI של OpenThread ולבדיקת IPv6 multicast.
- Raspberry Pi לנתב הגבולות של Thread.
- 2 מתאמי USB מסוג Nordic Semiconductor nRF52840 (אחד ל-RCP ושניים למכשירי קצה מסוג Thread).
2. הגדרת OTBR
הדרך המהירה ביותר להגדיר OTBR היא לפעול לפי מדריך ההגדרה של OTBR.
אחרי השלמת ההגדרה של OTBR, אפשר להשתמש ב-ot-ctl
כדי לאמת ש-OTBR הפך לנתב הבסיסי הראשי תוך שניות.
> bbr state Primary Done > bbr BBR Primary: server16: 0xF800 seqno: 21 delay: 5 secs timeout: 3600 secs Done
3. פיתוח מכשירים עם Thread ו-Flash
פיתוח אפליקציית ה-CLI של Thread עם Multicast והעברת קובץ האימג' לשתי לוחות ה-DK של nRF52840.
פיתוח קושחה של nRF52840 DK
פועלים לפי ההוראות כדי לשכפל את הפרויקט וליצור קושחת nRF52840.
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_MLR=ON
ממשיכים לפי ההוראות במדריך יצירת רשת Thread באמצעות לוחות nRF52840 ו-OpenThread Codelab. אחרי שתמלאו את השלבים לעדכון הקושחה של מכשיר הקצה באמצעות קובץ ה-CLI, תוכלו להיעזר במאמר הצטרפות הצומת השני לרשת Thread כדי להוסיף את מכשיר Thread לרשת Thread. חוזרים על הפעולה במכשיר הקצה השני של Thread.
4. הרשמה לכתובת ה-Multicast של IPv6
הרשמה ל-ff05::abcd במכשיר הקצה מסוג nRF52840 מס' 1:
> ipmaddr add ff05::abcd Done
מוודאים שהחשבון ff05::abcd
נרשם בהצלחה:
> ipmaddr ff05:0:0:0:0:0:0:abcd <--- ff05::abcd subscribed ff33:40:fdde:ad00:beef:0:0:1 ff32:40:fdde:ad00:beef:0:0:1 ff02:0:0:0:0:0:0:2 ff03:0:0:0:0:0:0:2 ff02:0:0:0:0:0:0:1 ff03:0:0:0:0:0:0:1 ff03:0:0:0:0:0:0:fc Done
מפעילים את המינוי ל-ff05::abcd במחשב הנייד:
אנחנו צריכים סקריפט Python subscribe6.py
כדי להירשם לכתובת מרובת-כתובות במחשב הנייד.
מעתיקים את הקוד שבהמשך ושומרים אותו בתור subscribe6.py
:
import ctypes
import ctypes.util
import socket
import struct
import sys
libc = ctypes.CDLL(ctypes.util.find_library('c'))
ifname, group = sys.argv[1:]
addrinfo = socket.getaddrinfo(group, None)[0]
assert addrinfo[0] == socket.AF_INET6
s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
interface_index = libc.if_nametoindex(ifname.encode('ascii'))
mreq = group_bin + struct.pack('@I', interface_index)
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
print("Subscribed %s on interface %s." % (group, ifname))
input('Press ENTER to quit.')
מריצים את subscribe6.py
כדי להירשם ל-ff05::abcd
בממשק של רשת ה-Wi-Fi (למשל wlan0):
$ sudo python3 subscribe6.py wlan0 ff05::abcd Subscribed ff05::abcd on interface wlan0. Press ENTER to quit.
הטופולוגיה הסופית של הרשת עם מינויים ל-multicast מוצגת בהמשך:
עכשיו, אחרי שרשמנו את כתובת ה-IPv6 להעברה קבוצתית גם במכשיר הקצה nRF52840 1 ברשת Thread וגם במחשב הנייד ברשת ה-Wi-Fi, נבדוק את יכולת ההגעה (reachability) לשידור קבוצתי דו-כיווני ב-IPv6 בקטעים הבאים.
5. אימות Multicast IPv6 נכנס
עכשיו אמורה להיות לנו אפשרות להגיע גם למכשיר הקצה nRF52840 1 ברשת Thread וגם למחשב הנייד באמצעות כתובת ה-IPv6 ff05::abcd
ברשת ה-Wi-Fi.
שולחים פינג אל ff05::abcd ב-OTBR דרך ממשק ה-Wi-Fi:
$ ping -6 -b -t 5 -I wlan0 ff05::abcd PING ff05::abcd(ff05::abcd) from 2401:fa00:41:801:83c1:a67:ae22:5346 wlan0: 56 data bytes 64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=1 ttl=64 time=57.4 ms 64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=1 ttl=64 time=84.9 ms (DUP!) 64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=2 ttl=64 time=54.8 ms 64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=2 ttl=64 time=319 ms (DUP!) 64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=3 ttl=64 time=57.5 ms 64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=3 ttl=64 time=239 ms (DUP!) # If using MacOS, use this command. The interface is typically not "wlan0" for Mac. $ ping6 -h 5 -I wlan0 ff05::abcd
אפשר לראות ש-OTBR יכול לקבל שתי תשובות ל-ping גם ממכשיר הקצה nRF52840 1 וגם מהמחשב הנייד, כי שניהם רשומים ל-ff05::abcd
. התוצאה מראה ש-OTBR יכול להעביר את חבילות ה-multicast של בקשת ה-Ping ב-IPv6 מרשת ה-Wi-Fi לרשת Thread.
6. אימות יצירת הודעות Multicast ב-IPv6
Ping ff05::abcd במכשיר הקצה nRF52840 2:
> ping ff05::abcd 100 10 1 108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=12 hlim=64 time=297ms 108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=12 hlim=63 time=432ms 108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=13 hlim=64 time=193ms 108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=13 hlim=63 time=306ms 108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=14 hlim=64 time=230ms 108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=14 hlim=63 time=279ms
מכשיר הקצה מסוג nRF52840 2 יכול לקבל תשובות ל-ping גם ממכשיר הקצה מסוג nRF52840 1 וגם מהמחשב הנייד. התוצאה מראה ש-OTBR יכול להעביר את חבילות ה-multicast של IPv6 Ping Reply מרשת Thread לרשת Wi-Fi.
7. מזל טוב
מזל טוב, הגדרתם בהצלחה נתב גבולות לפרוטוקול Thread ואימנתם את הMulticast הדו-כיווני של IPv6.
מידע נוסף על OpenThread זמין בכתובת openthread.io.
מסמכי עזר: