1. บทนำ
OpenThread ที่ Google เปิดตัวเป็นการใช้งานโปรโตคอลเครือข่าย Thread® แบบโอเพนซอร์ส Google Nest ได้เปิดตัว OpenThread เพื่อให้นักพัฒนาซอฟต์แวร์ใช้เทคโนโลยีในผลิตภัณฑ์ Nest ได้ในวงกว้าง เพื่อเร่งการพัฒนาผลิตภัณฑ์สําหรับบ้านที่เชื่อมต่อ
ข้อมูลจําเพาะของเทรดกําหนดโปรโตคอลการสื่อสารระหว่างอุปกรณ์ระหว่างอุปกรณ์ที่เชื่อถือได้และเชื่อถือได้ของ IPv6 สําหรับแอปพลิเคชันภายในบ้าน OpenThread ใช้เลเยอร์เครือข่ายเทรดทั้งหมด รวมถึง IPv6, 6LoWPAN, IEEE 802.15.4 ที่มีการรักษาความปลอดภัย MAC, การสร้าง Mesh Link และการกําหนดเส้นทาง Mesh
ใน Codelab นี้ คุณจะจัดตั้งโปรแกรม OpenThread ในฮาร์ดแวร์จริง สร้างและจัดการเครือข่ายเทรด และส่งข้อความระหว่างโหนดได้
สิ่งที่คุณจะได้เรียนรู้
- การสร้างและไบนารีไบนารีของ OpenThread CLI ไปยังบอร์ด dev
- การสร้าง RCP ซึ่งประกอบด้วยเครื่อง Linux และ Devboard
- การสื่อสารด้วย RCP โดยใช้ OpenThread Daemon และ
ot-ctl
- จัดการโหนดเทรดด้วยตนเองด้วยหน้าจอ GNU และ OpenThread CLI
- การรักษาความปลอดภัยของอุปกรณ์ในเครือข่าย Thread
- วิธีการทํางานของมัลติแคสต์ของ IPv6
- การส่งข้อความระหว่างโหนดเทรดด้วย UDP
สิ่งที่ต้องมี
ฮาร์ดแวร์:
- แผงพัฒนานอร์ดิกเซมิคอนดักเตอร์ 3 เครื่อง nRF52840 dev boards
- สายเชื่อม USB กับไมโคร USB 3 เส้นเพื่อเชื่อมต่อบอร์ด
- เครื่อง Linux ที่มีพอร์ต USB อย่างน้อย 3 พอร์ต
ซอฟต์แวร์:
- เครื่องมือ GNU
- เครื่องมือบรรทัดคําสั่ง nRF5x ของนอร์ดิก
- ซอฟต์แวร์ Segger J-Link
- OpenThread
- Git
2. เริ่มต้นใช้งาน
การจําลองชุดข้อความแบบเปิด
ก่อนเริ่มต้น คุณอาจลองเรียกใช้ OpenThread Simulation Codelab เพื่อทําความคุ้นเคยกับแนวคิดพื้นฐานของเทรดและ OpenThread CLI
เทอร์มินัลพอร์ตอนุกรม
คุณควรทําความคุ้นเคยกับวิธีเชื่อมต่อกับพอร์ตอนุกรมผ่านเทอร์มินัล Codelab นี้ใช้หน้าจอ GNU และให้ภาพรวมการใช้งาน แต่สามารถใช้ซอฟต์แวร์เทอร์มินัลอื่นได้
เครื่อง Linux
Codelab นี้ออกแบบมาให้ใช้เครื่อง Linux ที่ใช้ i386 หรือ x86 เป็นโฮสต์ให้กับอุปกรณ์ Thread Co-Processor (RCP) และใช้ Flash Board ทั้งหมด ทดสอบทุกขั้นตอนใน Ubuntu 14.04.5 LTS (Trusty Tahr)
บอร์ด Nordic Semiconductor nRF52840
Codelab นี้ใช้บอร์ด PDR nRF52840 3 แผง
ติดตั้ง SEGGER J-Link
เราใช้ SEGGER J-Link เพื่อเขียนโปรแกรมบอร์ด nRF52840 ซึ่งมีโมดูล JTAG แบบออนบอร์ด ติดตั้งเครื่องนี้ในเครื่อง Linux
ดาวน์โหลดแพ็กเกจที่เหมาะกับเครื่องแล้วติดตั้งในตําแหน่งที่เหมาะสม ใน Linux นี่ /opt/SEGGER/JLink
ติดตั้งเครื่องมือบรรทัดคําสั่ง nRF5x
เครื่องมือบรรทัดคําสั่ง nRF5x ช่วยให้คุณแฟลชไบนารี OpenThread ไปยังบอร์ด nRF52840 ได้ ติดตั้งบิลด์ nRF5x-Command-Line-Tools-<OS> ที่เหมาะสมบนเครื่อง Linux
วางแพ็กเกจที่แยกออกมาในโฟลเดอร์รูท ~/
ติดตั้ง ARM GNU Toolchain
เครื่องมือเชน ARM GNU ใช้ในการสร้าง
เราขอแนะนําให้วางที่เก็บถาวรที่แยกไว้ใน /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/
บนเครื่อง Linux ทําตามวิธีการในไฟล์ readme.txt
ของที่เก็บถาวรเพื่อดูวิธีการติดตั้ง
ติดตั้งหน้าจอ (ไม่บังคับ)
Screen เป็นเครื่องมือง่ายๆ ในการเข้าถึงอุปกรณ์ที่เชื่อมต่อด้วยพอร์ตอนุกรม Codelab นี้ใช้หน้าจอ แต่คุณสามารถเลือกใช้แอปพลิเคชันพอร์ตพอร์ตใดก็ได้ที่ต้องการ
$ sudo apt-get install screen
3. ทําสําเนาที่เก็บ
OpenThread
โคลนและติดตั้ง OpenThread คําสั่ง script/bootstrap
โปรดตรวจสอบว่าติดตั้งเครื่องมือเชนแล้ว และมีการกําหนดค่าสภาพแวดล้อมอย่างเหมาะสม
$ mkdir -p ~/src $ cd ~/src $ git clone --recursive https://github.com/openthread/openthread.git $ cd openthread $ ./script/bootstrap
สร้าง OpenThread Daemon:
$ script/cmake-build posix -DOT_DAEMON=ON
ขณะนี้คุณพร้อมที่จะสร้างและ OpenOpen กับกระดาน nRF52840 แล้ว
4. ตั้งค่าเครื่องมือเชื่อมต่อ RCP
สร้างและแฟลช
สร้างตัวอย่าง OpenThread nRF52840 ด้วยตัวเชื่อมและฟังก์ชัน USB แบบเนทีฟ อุปกรณ์จะใช้บทบาทผู้เข้าประชุมเพื่อตรวจสอบสิทธิ์และทําซ้ําอย่างปลอดภัยในเครือข่ายชุดข้อความ USB แบบเนทีฟใช้ USB CDC ACM เป็นพอร์ตอนุกรมระหว่าง nRF52840 และโฮสต์
ทําความสะอาดที่เก็บของเวอร์ชันก่อนหน้าก่อนเสมอโดยเรียกใช้ rm -rf build
$ cd ~/src $ git clone --recursive https://github.com/openthread/ot-nrf528xx.git $ cd ot-nrf528xx $ script/build nrf52840 USB_trans
ไปที่ไดเรกทอรีที่มีไบนารี OpenThread RCP และแปลงเป็นรูปแบบฐาน 16
$ cd ~/src/ot-nrf528xx/build/bin $ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex
เสียบสาย USB กับพอร์ตแก้ไขข้อบกพร่อง Micro-USB ถัดจากหมุดไฟฟ้าภายนอกบนบอร์ด nRF52840 แล้วเสียบเข้ากับเครื่อง Linux ตั้งค่าสวิตช์แหล่งพลังงาน nRF บนบอร์ด nRF52840 เป็น VDD เมื่อเชื่อมต่ออย่างถูกต้อง LED5 เปิดอยู่
หากนี่เป็นกระดานแรกที่ติดอยู่กับเครื่อง Linux บอร์ดนี้จะปรากฏเป็นพอร์ตอนุกรม /dev/ttyACM0
(บอร์ด nRF52840 ทั้งหมดใช้ ttyACM
สําหรับตัวระบุพอร์ตอนุกรม)
$ ls /dev/ttyACM* /dev/ttyACM0
ศึกษาหมายเลขซีเรียลของกระดาน nRF52840 ที่ใช้สําหรับ RCP
ไปที่ตําแหน่งของเครื่องมือบรรทัดคําสั่ง nRFx และเปิดไฟล์เลขฐานสิบหกของ OpenThread RCP ลงบนกระดาน nRF52840 โดยใช้หมายเลขซีเรียลของกระดาน โปรดทราบว่าหากฝากธง --verify
ไว้ คุณจะเห็นข้อความเตือนที่แจ้งว่ากระบวนการแฟลชอาจล้มเหลวโดยไม่มีข้อผิดพลาด
$ cd ~/nrfjprog/ $ ./nrfjprog -f nrf52 -s 683704924 --verify --chiperase --program \ ~/src/ot-nrf528xx/build/bin/ot-rcp.hex --reset
ระบบจะสร้างเอาต์พุตต่อไปนี้ขึ้นเมื่อสําเร็จ
Parsing hex file. Erasing user available code and UICR flash areas. Applying system reset. Checking that the area to write is not protected. Programing device. Applying system reset. Run.
ติดป้ายกํากับกระดาน"RCP" เพื่อให้คุณไม่สับสนกับบทบาทของกระดาน
เชื่อมต่อกับ USB ของระบบ
คุณต้องใช้พอร์ต nRF USB บนบอร์ด nRF52840 เพื่อสื่อสารกับโฮสต์ RCP (เครื่อง Linux) เนื่องจากบิลด์ OpenThread RCP จะทําให้ใช้ USB CDC ACM ดั้งเดิมเป็นการส่งแบบอนุกรมได้
ถอดปลายด้านไมโคร USB ของสาย USB ออกจากพอร์ตการแก้ไขข้อบกพร่องของบอร์ด nRF52840 ที่มี Flash แล้วเสียบเข้ากับพอร์ต nRF USB ไมโคร USB ข้างปุ่มรีเซ็ต ตั้งค่าสวิตช์แหล่งพลังงาน nRF เป็น USB
เริ่ม OpenThread Daemon
ในการออกแบบ RCP ให้ใช้ OpenThread Daemon เพื่อสื่อสารและจัดการอุปกรณ์เทรด เริ่มต้น ot-daemon
ด้วยแฟล็กแบบละเอียดของ -v
เพื่อให้คุณดูเอาต์พุตของบันทึกและยืนยันใช้งานได้
$ cd ~/src/openthread $ sudo ./build/posix/src/posix/ot-daemon -v \ 'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200'
เมื่อสําเร็จ ot-daemon
ในโหมดแบบละเอียดจะสร้างเอาต์พุตที่คล้ายกับรายการต่อไปนี้
ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05 ot-daemon[12463]: Thread version: 4 ot-daemon[12463]: Thread interface: wpan0 ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10
เปิดหน้าต่างเทอร์มินัลนี้ทิ้งไว้เพื่อให้ดูบันทึกจาก ot-daemon
ได้
ใช้ ot-ctl
เพื่อสื่อสารกับโหนด RCP ot-ctl
ใช้ CLI เดียวกันกับแอป OpenThread CLI คุณจึงควบคุมโหนด ot-daemon
ในลักษณะเดียวกันกับอุปกรณ์อื่นๆ ของเทรดจําลอง
ในหน้าต่างเทอร์มินัลที่สอง ให้เริ่ม ot-ctl
:
$ sudo ./build/posix/src/posix/ot-ctl >
ตรวจสอบ state
ของโหนด 2 (โหนด RCP) ที่คุณเริ่มต้นด้วย ot-daemon
> state disabled Done
5. ตั้งค่า FTD
โหนดเทรดอีก 2 รายการที่ใช้สําหรับ Codelab นี้คือ Full Thread Devices (FTD) ในการออกแบบ System-on-Chip (SoC) มาตรฐาน ในการตั้งค่าเวอร์ชันที่ใช้งานจริง ผู้ใช้อาจใช้ wpantund
ซึ่งเป็นไดรเวอร์อินเทอร์เฟซเครือข่ายระดับที่ใช้งานจริงเพื่อควบคุมอินสแตนซ์ OpenThread NCP แต่ใน Codelab นี้ เราจะใช้ ot-ctl
ซึ่งเป็น OpenThread CLI
อุปกรณ์หนึ่งทําหน้าที่เป็นคณะกรรมการเพื่อตรวจสอบสิทธิ์และค่าคอมมิชชันอุปกรณ์ในเครือข่ายดังกล่าวอย่างปลอดภัย อุปกรณ์อีกเครื่องหนึ่งทําหน้าที่เป็นตัวผนวกที่ค่าคอมมิชชันสามารถตรวจสอบสิทธิ์กับเครือข่ายเทรดได้
สร้างและแฟลช
สร้างตัวอย่าง OpenThread FTD สําหรับแพลตฟอร์ม nRF52840 โดยเปิดใช้บทบาทค่าคอมมิชชันและตัวเชื่อม ดังนี้
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON
ไปที่ไดเรกทอรีที่มีไบนารี OpenThread Full Thread Device (FTD) CLI และแปลงเป็นรูปแบบเลขฐานสิบหกโดยทําดังนี้
$ cd ~/src/ot-nrf528xx/build/bin $ arm-none-eabi-objcopy -O ihex ot-cli-ftd ot-cli-ftd.hex
เสียบสาย USB เข้ากับพอร์ตไมโคร USB ข้างหมุดไฟฟ้าภายนอกบนบอร์ด nRF52840 แล้วเสียบเข้ากับเครื่อง Linux หาก RCP ยังต่อเชื่อมอยู่กับเครื่อง Linux กระดานใหม่ควรจะปรากฏเป็นพอร์ตอนุกรม /dev/ttyACM1
(บอร์ด nRF52840 ทั้งหมดใช้ ttyACM
เป็นตัวระบุพอร์ตอนุกรม)
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1
ดังเช่นก่อนหน้านี้ โปรดทราบว่าหมายเลขซีเรียลของบอร์ด nRF52840 ที่ใช้สําหรับ FTD
เลื่อนตําแหน่งเครื่องมือบรรทัดคําสั่ง nRFx และเปิดไฟล์เลขฐานสิบหกของ OpenThread CLI FTD ไปยังกระดาน nRF52840 โดยใช้หมายเลขซีเรียลของกระดาน:
$ cd ~/nrfjprog/ $ ./nrfjprog -f nrf52 -s 683704924 --verify --chiperase --program \ ~/src/ot-nrf528xx/build/bin/ot-cli-ftd.hex --reset
ติดป้ายกํากับกระดาน "Commissioner."
เชื่อมต่อกับ USB ของระบบ
คุณต้องใช้พอร์ต nRF USB บนบอร์ด nRF52840 เพื่อสื่อสารกับโฮสต์ RCP (เครื่อง Linux) เนื่องจากบิลด์ OpenThread FTD จะช่วยให้ใช้ USB CDC ACM ดั้งเดิมเป็นการส่งแบบอนุกรมได้
ถอดปลายด้านไมโคร USB ของสาย USB ออกจากพอร์ตการแก้ไขข้อบกพร่องของบอร์ด nRF52840 ที่มี Flash แล้วเสียบเข้ากับพอร์ต nRF USB ไมโคร USB ข้างปุ่มรีเซ็ต ตั้งค่าสวิตช์แหล่งพลังงาน nRF เป็น USB
ยืนยันบิลด์
ยืนยันบิลด์ที่สําเร็จโดยเข้าถึง OpenThread CLI โดยใช้ GNU Screen จากหน้าต่างเทอร์มินัล กระดาน nRF52840 ใช้อัตราการทุจริตที่ 115200
$ screen /dev/ttyACM1 115200
ในหน้าต่างใหม่ ให้กด Return บนแป้นพิมพ์ 2-3 ครั้งเพื่อให้ข้อความแจ้ง OpenThread CLI >
ปรากฏขึ้น เปิดอินเทอร์เฟซ IPv6 และตรวจสอบที่อยู่
> ifconfig up Done > ipaddr fe80:0:0:0:1cd6:87a9:cb9d:4b1d Done
ใช้ Ctrl+a →
d
เพื่อตัดการเชื่อมต่อจากหน้าจอ CLI ของ FTD Commissioner และกลับไปที่เทอร์มินัล Linux เพื่อให้กระดานถัดไปกะพริบได้ หากต้องการป้อน CLI อีกครั้ง ให้ใช้ screen -r
จากบรรทัดคําสั่ง หากต้องการดูรายการหน้าจอที่ใช้ได้ ให้ใช้ screen -ls
$ screen -ls There is a screen on: 74182.ttys000.mylinuxmachine (Detached) 1 Socket in /tmp/uscreens/S-username.
ตั้งค่าเครื่องมือเชื่อมต่อ FTD
ทําตามขั้นตอนข้างต้นซ้ําเพื่อติดกระดาน nRF52840 ที่ 3 โดยใช้บิลด์ ot-cli-ftd.hex
ที่มีอยู่ เมื่อเสร็จแล้ว อย่าลืมเชื่อมต่อบอร์ดกับพีซีอีกครั้งโดยใช้พอร์ต USB nRF และตั้งค่าแหล่งพลังงาน nRF เป็น VDD
หากมีโหนดอีก 2 โหนดแนบอยู่กับเครื่อง Linux เมื่อต่อเชื่อมแผงที่ 3 นี้ โหนดดังกล่าวจะปรากฏเป็นพอร์ตอนุกรม /dev/ttyACM2
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1 /dev/ttyACM2
ติดป้ายกํากับกระดาน "เครื่องมือเข้าร่วม"
เมื่อยืนยันโดยใช้หน้าจอแทนการสร้างอินสแตนซ์ใหม่ของหน้าจอจากบรรทัดคําสั่ง ให้แนบเข้ากับอินสแตนซ์ที่มีอยู่อีกครั้ง แล้วสร้างหน้าต่างใหม่ภายในโฟลเดอร์ (ที่คุณใช้สําหรับ FTD Commissioner) ดังนี้
$ screen -r
สร้างหน้าต่างใหม่ภายในหน้าจอด้วย Ctrl+a → c
พรอมต์บรรทัดคําสั่งใหม่จะปรากฏขึ้น เข้าถึง OpenThread CLI สําหรับเครื่องมือเข้าร่วม FTD:
$ screen /dev/ttyACM2 115200
ในหน้าต่างใหม่ ให้กด "กลับ" บนแป้นพิมพ์ 2-3 ครั้งเพื่อให้ข้อความ OpenThread CLI >
ปรากฏขึ้น เปิดอินเทอร์เฟซ IPv6 และตรวจสอบที่อยู่
> ifconfig up Done > ipaddr fe80:0:0:0:6c1e:87a2:df05:c240 Done
เมื่อ FTDข้อต่อ CLI อยู่ในหน้าจอเดียวกันกับ FTD Commissioner คุณสามารถสลับใช้ Ctrl+a → n
ได้
ใช้ Ctrl+a →
d
ออกจากหน้าจอได้ทุกเมื่อ
6. การตั้งค่าหน้าต่างเทอร์มินัล
นับจากนี้เป็นต้นไป คุณจะต้องสลับไปมาระหว่างอุปกรณ์เทรดเป็นประจํา ดังนั้น โปรดตรวจสอบว่าอุปกรณ์ทุกเครื่องพร้อมทํางานและเข้าถึงได้ง่าย ปัจจุบันเราใช้หน้าจอเพื่อเข้าถึง FTD ทั้ง 2 รายการ และเครื่องมือนี้ยังอนุญาตให้แบ่งหน้าจอในหน้าต่างเทอร์มินัลเดียวกันได้ด้วย ใช้อาร์กิวเมนต์นี้เพื่อดูว่าโหนด 1 โหนดตอบสนองต่อคําสั่งที่ออกในโหนดอื่นอย่างไร
ตามหลักแล้ว คุณควรจะมีหน้าต่าง 4 บานที่พร้อมใช้งาน ได้แก่
- บริการ / บันทึก
ot-daemon
- ตัวเชื่อม RCP ผ่าน
ot-ctl
- FTD Commissioner ผ่าน OpenThread CLI
- ตัวเชื่อม FTD ผ่าน OpenThread CLI
หากต้องการใช้การกําหนดค่าหรือเครื่องมือเทอร์มินัล / ซีเรียลของคุณเอง ให้ข้ามไปยังขั้นตอนถัดไป กําหนดค่าหน้าต่างเทอร์มินัลสําหรับอุปกรณ์ทั้งหมดในรูปแบบที่เหมาะกับคุณที่สุด
การใช้หน้าจอ
เริ่มใช้งานได้ง่ายๆ เพียงเซสชันเดียวเพื่อให้ใช้งานได้ง่าย คุณควรมีขั้นตอนการตั้งค่าอยู่แล้วตอนตั้งค่า FTD ทั้ง 2 รายการ
คําสั่งทั้งหมดบนหน้าจอจะขึ้นต้นด้วย Ctrl+a
คําสั่งพื้นฐานสําหรับหน้าจอ:
แนบกับเซสชันหน้าจออีกครั้ง (จากบรรทัดคําสั่ง) |
|
ออกจากเซสชันหน้าจอ | Ctrl+a → |
สร้างหน้าต่างใหม่ภายในเซสชันหน้าจอ | Ctrl+a → |
สลับไปมาระหว่างหน้าต่างในเซสชันหน้าจอเดียวกัน | Ctrl+a → |
ปิดหน้าต่างปัจจุบันในเซสชันหน้าจอ | Ctrl+a → |
แยกหน้าจอ
สําหรับหน้าจอ คุณสามารถแยกเทอร์มินัลออกเป็นหลายหน้าต่างได้ ดังนี้
เข้าถึงคําสั่งใน screen
ได้โดยใช้ Ctrl+a ทุกคําสั่งควรเริ่มต้นด้วยคอมโบคีย์การเข้าถึงนี้
หากคุณติดตาม Codelab ทุกประการ คุณควรมี 2 หน้าต่าง (FTD Commissioner, FTDเครื่องมือเชื่อม) ในอินสแตนซ์หน้าจอเดียวกัน หากต้องการแบ่งหน้าจอระหว่างทั้ง 2 อย่างนี้ ให้ป้อนเซสชันหน้าจอที่มีอยู่ก่อน โดยทําดังนี้
$ screen -r
คุณควรใช้อุปกรณ์ FTD เครื่องใดเครื่องหนึ่ง ทําตามขั้นตอนต่อไปนี้ในหน้าจอ
- Ctrl+a →
S
เพื่อแบ่งหน้าต่างในแนวนอน - Ctrl+a →
Tab
เพื่อย้ายเคอร์เซอร์ไปที่หน้าต่างใหม่ที่ว่างเปล่า - Ctrl+a →
n
เพื่อเปลี่ยนหน้าต่างใหม่ไปยังหน้าต่างถัดไป - หากเหมือนกับหน้าต่างด้านบน ให้กด Ctrl+a →
n
อีกครั้งเพื่อดูอุปกรณ์ FTD อื่น
ทั้ง 2 อย่างนี้มองเห็นได้แล้ว สลับใช้ Ctrl+a → Tab
ขอแนะนําให้เปลี่ยนชื่อหน้าต่างแต่ละหน้าด้วย Ctrl+a → A
เพื่อไม่ให้สับสน
การใช้งานขั้นสูง
หากต้องการแบ่งหน้าจอออกเป็นควอไทล์อื่นๆ และดูบันทึก ot-daemon
และตัวเชื่อม RCP ot-ctl
บริการเหล่านั้นจะต้องเริ่มต้นภายในอินสแตนซ์หน้าจอเดียวกัน ในการดําเนินการ ให้หยุด ot-daemon
และออกจาก ot-ctl
แล้วรีสตาร์ทภายในหน้าต่างใหม่ของหน้าจอ (Ctrl+a → c
)
ไม่จําเป็นต้องตั้งค่านี้และปล่อยให้ผู้ใช้ออกกําลังกาย
แยกและไปยังหน้าต่างต่างๆ ด้วยคําสั่งต่อไปนี้
สร้างหน้าต่างใหม่ | Ctrl+a → |
แยกหน้าต่างในแนวตั้ง | Ctrl+a → |
แยกหน้าต่างในแนวนอน | Ctrl+a → |
ข้ามไปยังหน้าต่างที่แสดงถัดไป | Ctrl+a → |
สลับหน้าต่างที่แสดงไปด้านหน้าหรือด้านหลัง | Ctrl+a → |
เปลี่ยนชื่อหน้าต่างปัจจุบัน | Ctrl+a → |
ออกจากหน้าจอได้ทุกเมื่อด้วย Ctrl+a → d
และเชื่อมต่อกับ screen -r
อีกครั้งจากบรรทัดคําสั่ง
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับหน้าจอ โปรดดูที่ข้อมูลอ้างอิงด่วนของหน้าจอ GNU
7. สร้างเครือข่ายเทรด
เมื่อกําหนดค่าหน้าต่างและหน้าจอเทอร์มินัลทั้งหมดแล้ว เราจะมาสร้างเครือข่ายเทรดของเรากัน ใน FTD Commissioner ให้สร้างชุดข้อมูลการดําเนินการใหม่และคอมมิตว่าเป็นชุดข้อมูลที่ใช้งานอยู่ ชุดข้อมูลในการดําเนินการคือการกําหนดค่าสําหรับเครือข่ายเทรดที่คุณสร้าง
## FTD Commissioner ## ---------------------- > dataset init new Done > dataset Active Timestamp: 1 Channel: 11 Channel Mask: 07fff800 Ext PAN ID: c0de7ab5c0de7ab5 Mesh Local Prefix: fdc0:de7a:b5c0/64 Network Key: 1234c0de7ab51234c0de7ab51234c0de Network Name: OpenThread-c0de PAN ID: 0xc0de PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4 Security Policy: 0, onrcb Done
จดคีย์เครือข่าย 1234c0de7ab51234c0de7ab51234c0de
ซึ่งจะใช้ภายหลัง
คอมมิตชุดข้อมูลนี้เป็นชุดข้อมูลที่ใช้งานอยู่:
> dataset commit active Done
เปิดอินเทอร์เฟซ IPv6
> ifconfig up Done
การดําเนินการเริ่มต้นโปรโตคอลชุดข้อความ:
> thread start Done
รอสักครู่แล้วตรวจสอบสถานะของอุปกรณ์ ควรเป็นผู้นํา และเรียกดู RLSAOC16 เพื่อใช้อ้างอิงในอนาคต
## FTD Commissioner ## ---------------------- > state leader Done > rloc16 0c00 Done
ตรวจสอบที่อยู่ IPv6 ของอุปกรณ์
## FTD Commissioner ## ---------------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fdc0:de7a:b5c0:0:0:ff:fe00:c00 # Routing Locator (RLOC) fdc0:de7a:b5c0:0:6394:5a75:a1ad:e5a # Mesh-Local EID (ML-EID) fe80:0:0:0:1cd6:87a9:cb9d:4b1d # Link-Local Address (LLA)
ขณะนี้เครือข่าย "codelab" จะแสดงเมื่อสแกนจากอุปกรณ์เทรดอื่น
จาก ot-ctl
ในเครื่องมือเชื่อมต่อ RCP
## RCP Joiner ## ---------------- > scan | PAN | MAC Address | Ch | dBm | LQI | +------+------------------+----+-----+-----+ | c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |
จาก OpenThread CLI บน FTDเครื่องมือเชื่อมต่อ ให้ทําดังนี้
## FTD Joiner ## ---------------- > scan | PAN | MAC Address | Ch | dBm | LQI | +------+------------------+----+-----+-----+ | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |
หากเครือข่าย "codelab" เครือข่าย'ไม่ปรากฏในรายการ ให้ลองสแกนอีกครั้ง
8. เพิ่มตัวเชื่อม RCP
การใช้การจัดชุดข้อความไม่ทํางานในเครือข่าย ซึ่งหมายความว่าเราจะต้องเพิ่มตัวเชื่อม RCP ลงในเครือข่ายเทรดที่เราเพิ่งสร้างขึ้นโดยใช้กระบวนการกําหนดนอกขอบเขต
ในคณะกรรมการ FTD เราได้จดบันทึกเกี่ยวกับคีย์เครือข่ายไว้ เช่น 1234c0de7ab51234c0de7ab51234c0de
หากต้องการค้นหาคีย์เครือข่ายอีกครั้ง ให้เรียกใช้คําสั่งต่อไปนี้บน FTD Commissioner
## FTD Commissioner ## > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done
ถัดไป ในตัวเชื่อม RCP ให้ตั้งค่าคีย์เครือข่ายชุดข้อมูลที่ใช้งานอยู่เป็นคีย์เครือข่ายค่าคอมมิชชัน FTD
## RCP Joiner ## ---------------- > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done > dataset commit active Done
ตรวจสอบชุดข้อมูลว่าได้ตั้งค่าไว้อย่างถูกต้อง
## RCP Joiner ## ---------------- > dataset Network Key: 1234c0de7ab51234c0de7ab51234c0de
เรียกใช้ชุดข้อความเพื่อให้ตัวเชื่อม RCP เข้าร่วมเครือข่าย "codelab" รอสักครู่ ตรวจดูสถานะ RSAOC16 และที่อยู่ IPv6 ของอุปกรณ์ ดังนี้
## RCP Joiner ## ---------------- > ifconfig up Done > thread start Done > state child Done > rloc16 0c01 Done > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:0c01 # Routing Locator (RLOC) fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f # Mesh-Local EID (ML-EID) fe80:0:0:0:18e5:29b3:a638:943b # Link-Local Address (LLA) Done
จดที่อยู่ IPv6 ของ IPv6 ไว้ในเครื่อง (fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f
ที่นี่) ซึ่งคุณจะใช้ในภายหลัง
กลับไปที่คณะกรรมการ FTD แล้วตรวจสอบตารางเราเตอร์และย่อยเพื่อยืนยันว่าอุปกรณ์ทั้งสองเป็นส่วนหนึ่งของเครือข่ายเดียวกัน ใช้ RLSAOC16 เพื่อระบุเครื่องมือเชื่อม RCP
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 35 | 1ed687a9cb9d4b1d | Done > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|VER| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+------------------+ | 1 | 0x0c01 | 240 | 25 | 3 | 89 |1|1|1| 2| 1ae529b3a638943b | Done
ใช้คําสั่ง ping กับที่อยู่แบบ Mesh-Local ของตัวเชื่อม RCP (ที่อยู่ Mesh-Local ที่ได้รับจากเอาต์พุต ipaddr
ของตัวเชื่อม RCP') เพื่อยืนยันการเชื่อมต่อ
## FTD Commissioner ## ---------------------- > ping fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f > 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=1 hlim=64 time=40ms
ตอนนี้เรามีเครือข่ายเทรดที่ประกอบด้วยโหนด 2 โหนด ซึ่งแสดงให้เห็นโดยแผนภาพโทโพโลยีนี้
แผนภาพโทโพโลยี
ขณะที่คุณศึกษาส่วนที่เหลือของ Codelab เราจะแสดงแผนภาพโทโพโลยีชุดข้อความใหม่เมื่อใดก็ตามที่เครือข่ายมีการเปลี่ยนแปลง บทบาทโหนดจะมีการแสดงดังต่อไปนี้
เราเตอร์จะเป็นรูปห้าเหลี่ยมเสมอ และอุปกรณ์ที่สิ้นสุดก็มักจะเป็นวงกลม ตัวเลขในแต่ละโหนดแสดงรหัสเราเตอร์หรือรหัสย่อยที่แสดงในเอาต์พุต CLI โดยขึ้นอยู่กับบทบาทและสถานะปัจจุบันของโหนดแต่ละรายการ
9. ค่าคอมมิชชันเครื่องมือเชื่อมแบบ FTD
ตอนนี้มาเพิ่มอุปกรณ์เทรดที่ 3 ลงในเครือข่าย "codelab" ครั้งนี้เราจะใช้ขั้นตอนค่าคอมมิชชัน (In-Band) ที่ปลอดภัยกว่าและอนุญาตให้เฉพาะผู้ที่เข้าร่วม FTD เข้าร่วมเท่านั้น
ในเครื่องมือเชื่อมต่อ FTD ให้เลือก eui64
เพื่อให้ FTD Commissioner สามารถระบุได้
## FTD Joiner ## ---------------- > eui64 2f57d222545271f1 Done
ใน FTD Commissioner ให้เริ่มค่าคอมมิชชันและระบุ eui64
ของอุปกรณ์ที่เข้าร่วมได้พร้อมข้อมูลเข้าสู่ระบบของผู้เข้าร่วม เช่น J01NME
ข้อมูลเข้าสู่ระบบของสตริงเป็นสตริงเฉพาะอุปกรณ์ที่ประกอบด้วยอักขระที่เป็นตัวอักษรพิมพ์เล็กและตัวเลขคละกันทั้งหมด (0-9 และ A-Y ยกเว้น I, O, Q และ Z) มีความยาวระหว่าง 6 ถึง 32 อักขระ
## FTD Commissioner ## ---------------------- > commissioner start Done > commissioner joiner add 2f57d222545271f1 J01NME Done
เปลี่ยนไปใช้ตัวเชื่อม FTD เริ่มต้นบทบาทผู้ผนวกด้วยข้อมูลเข้าสู่ระบบของผู้ที่เพิ่งตั้งค่าใน FTD Commissioner
## FTD Joiner ## ---------------- > ifconfig up Done > joiner start J01NME Done
ภายในเวลาประมาณ 1 นาที คุณจะได้รับการยืนยันการตรวจสอบสิทธิ์ที่เสร็จสมบูรณ์ ดังนี้
## FTD Joiner ## ---------------- > Join success
แสดงชุดข้อความเพื่อให้ตัวเชื่อม FTD เข้าร่วมเครือข่าย "codelab" และตรวจสอบสถานะและ RSAOC16 ทันที
## FTD Joiner ## ---------------- > thread start Done > state child Done > rloc16 0c02 Done
ตรวจสอบที่อยู่ IPv6 ของอุปกรณ์ โปรดสังเกตว่าไม่มี ALOC นั่นเพราะว่าอุปกรณ์เครื่องนี้ไม่ใช่ผู้นํา และไม่ได้มีบทบาทเฉพาะของ Anycast ที่จําเป็นต้องใช้ ALOC
## FTD Joiner ## ---------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:c02 # Routing Locator (RLOC) fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd # Mesh-Local EID (ML-EID) fe80:0:0:0:e4cd:d2d9:3249:a243 # Link-Local Address (LLA)
เปลี่ยนไปใช้ FTD Commissioner ทันทีและตรวจสอบเราเตอร์และตารางย่อยเพื่อยืนยันว่ามีอุปกรณ์ 3 เครื่องในเครือข่าย "codelab"
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 50 | 1ed687a9cb9d4b1d | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0x0c01 | 240 | 25 | 3 | 89 |1|1|1|1| 1ae529b3a638943b | | 2 | 0x0c02 | 240 | 15 | 3 | 44 |1|1|1|1| e6cdd2d93249a243 | Done
ตัวเชื่อม FTD ได้เชื่อมต่อเครือข่ายในฐานะอุปกรณ์ End Screen (ย่อย) ตาม RSAOC16 โทโพโลยีที่อัปเดตของเรามีดังนี้
10. การทํางานของชุดข้อความ
อุปกรณ์เทรดใน Codelab นี้เป็นอุปกรณ์เทรดเต็มรูปแบบ (FTD) ประเภทหนึ่งที่เรียกว่า End Screen สําหรับอุปกรณ์ที่มีสิทธิ์ (REED) ของเราเตอร์ ซึ่งหมายความว่าอุปกรณ์เหล่านี้จะทํางานเป็นเราเตอร์หรืออุปกรณ์ปลายทาง และโปรโมตตนเองจากผู้ใช้ปลายทางเป็นเราเตอร์ได้
เทรดรองรับเราเตอร์ได้สูงสุด 32 รายการ แต่พยายามเก็บจํานวนเราเตอร์ไว้ระหว่าง 16 ถึง 23 หาก REED แนบเป็นอุปกรณ์ต่อพ่วง (เด็ก) และจํานวนเราเตอร์ต่ํากว่า 16 หลังจากช่วงเวลาแบบสุ่มภายใน 2 นาที ระบบจะโปรโมตตัวเองไปยังเราเตอร์โดยอัตโนมัติ
หากคุณมีบุตรหลาน 2 คนในเครือข่ายชุดข้อความหลังจากเพิ่มตัวเชื่อม FTD ให้รออย่างน้อย 2 นาที แล้วตรวจสอบตารางเราเตอร์และย่อยอีกครั้งในค่าคอมมิชชัน FTD ดังนี้
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 50 | 1ed687a9cb9d4b1d | | 46 | 0xb800 | 63 | 0 | 3 | 3 | 1 | e6cdd2d93249a243 | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0x0c01 | 240 | 61 | 3 | 89 |1|1|1|1| 1ae529b3a638943b | Done
ตัวเชื่อม FTD (MAC แบบขยาย = e6cdd2d93249a243
) ได้โปรโมตตัวเองในเราเตอร์ โปรดทราบว่า เมื่ออุปกรณ์เปลี่ยนจาก "อุปกรณ์" เป็น "เราเตอร์" รหัสเราเตอร์และค่ารหัสรายย่อยก็จะเปลี่ยนแปลงเช่นกัน ดังนั้น {/7}
ยืนยันสถานะใหม่และ RLSAOC16 บนตัวเชื่อม FTD ดังนี้
## FTD Joiner ## ---------------- > state router Done > rloc16 b800 Done
ดาวน์เกรดตัวเชื่อม FTD
คุณทดสอบลักษณะการทํางานนี้ได้โดยดาวน์เกรดเครื่องมือเชื่อมต่อ FTD ด้วยตนเองจากเราเตอร์กลับไปเป็นอุปกรณ์ปลายทาง เปลี่ยนสถานะเป็นผู้เผยแพร่โฆษณาย่อยและตรวจสอบ RSAOC16 โดยทําดังนี้
## FTD Joiner ## ---------------- > state child Done > rloc16 0c03 Done
จากนั้นใน FTD Commissioner เครื่องมือเข้าร่วม FTD จะปรากฏในตารางย่อย (รหัส = 3) และอาจแสดงทั้ง 2 รูปแบบขณะที่ระบบเปลี่ยนแปลง
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 50 | 1ed687a9cb9d4b1d | | 46 | 0xb800 | 63 | 0 | 3 | 3 | 1 | e6cdd2d93249a243 | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0x0c01 | 240 | 61 | 3 | 89 |1|1|1|1| 1ae529b3a638943b | | 3 | 0x0c03 | 240 | 16 | 3 | 94 |1|1|1|1| e6cdd2d93249a243 | Done
หลังจากผ่านไปสักครู่ เราเตอร์จะเปลี่ยนกลับเป็นเราเตอร์ที่มี VROC ของ b800
นําผู้นําออก
ผู้นําเลือกตัวเองจากเราเตอร์เทรดทั้งหมด ซึ่งหมายความว่าเมื่อผู้นําปัจจุบันถูกนําออกจากเครือข่ายเทรด เราเตอร์อื่นๆ จะกลายเป็นเราเตอร์ใหม่
ใน FTD Commissioner ให้ปิด "ชุดข้อความ" เพื่อนําออกจากเครือข่ายเทรด
## FTD Commissioner ## ---------------------- > thread stop Done > ifconfig down Done
ผู้ผนวก FTD จะเป็นผู้นําชุดข้อความใหม่ภายใน 2 นาที ตรวจสอบสถานะและที่อยู่ IPv6 ของตัวเชื่อม FTD เพื่อยืนยัน
## FTD Joiner ## ---------------- > state leader Done > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Now it has the Leader ALOC! fdc0:de7a:b5c0:0:0:ff:fe00:b800 fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd fe80:0:0:0:e4cd:d2d9:3249:a243 Done
โปรดตรวจสอบตารางย่อย ขอแจ้งให้ทราบว่ามี RSAOC16 ใหม่ นี่คือตัวเชื่อม RCP ตามที่ระบุไว้โดยรหัสและ MAC แบบขยาย เพื่อรักษาเครือข่ายเทรดไว้ด้วยกัน เราเตอร์ได้เปลี่ยนเราเตอร์ระดับบนสุด จากค่าคอมมิชชัน FTD ไปเป็นตัวเชื่อม FTD การดําเนินการนี้จะส่งผลให้เกิด RSAOC16 ใหม่สําหรับตัวเชื่อม RCP (เนื่องจากรหัสเราเตอร์มีการเปลี่ยนแปลงจาก 3 เป็น 46)
## FTD Joiner ## ---------------- > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0xb801 | 240 | 27 | 3 | 145 |1|1|1|1| 1ae529b3a638943b | Done
คุณอาจต้องรอสัก 2-3 นาทีเพื่อให้ตัวเชื่อม RCP แนบไปกับตัวเชื่อม FTD ในฐานะเด็ก ตรวจสอบสถานะและ RSAOC16 เพื่อยืนยันว่า
## RCP Joiner ## -------------- > state child > rloc16 b801
เชื่อมต่อ FTD Commissioner อีกครั้ง
เครือข่ายเทรดที่มี 2 โหนดไม่ใช่เรื่องสนุก มาทําให้ FTD Commissioner กลับมาออนไลน์อีกครั้ง
ใน FTD Commissioner ให้รีสตาร์ทชุดข้อความโดยทําดังนี้
## FTD Commissioner ## ---------------------- > ifconfig up Done > thread start Done
ภายใน 2 นาที อุปกรณ์จะต่อเข้ากับเครือข่าย "codelab" เป็นอุปกรณ์ปลายทางโดยอัตโนมัติ แล้วโปรโมตตัวเองกับเราเตอร์
## FTD Commissioner ## ---------------------- > state router Done
ตรวจสอบตารางเราเตอร์และย่อยในตัวเชื่อม FTD เพื่อยืนยันข้อมูลต่อไปนี้
## FTD Joiner ## ---------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 63 | 0 | 3 | 3 | 0 | 1ed687a9cb9d4b1d | | 46 | 0xb800 | 46 | 0 | 0 | 0 | 15 | e6cdd2d93249a243 | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0xb801 | 240 | 184 | 3 | 145 |1|1|1|1| 1ae529b3a638943b | Done
เครือข่ายชุดข้อความของเรามีโหนด 3 โหนดอีกครั้ง
11. การแก้ปัญหา
การจัดการเครือข่ายเทรดด้วยอุปกรณ์หลายเครื่องที่เทอร์มินัลหรือหน้าต่างหน้าจอต่างๆ อาจเป็นเรื่องซับซ้อน ใช้เคล็ดลับเหล่านี้เพื่อ "รีเซ็ต" สถานะของเครือข่ายหรือพื้นที่ทํางานหากพบปัญหา
หน้าจอ
หากการกําหนดค่าขาดหายไป (หน้าต่างหน้าจอหรือหน้าจอภายในหน้าจอมากเกินไป) ให้หยุดหน้าต่างหน้าจอด้วย Ctrl+a → k ต่อไปจนกว่าจะไม่มี และ screen -ls
ในบรรทัดคําสั่งจะแสดงผล No Sockets found
จากนั้นสร้างหน้าจอหน้าจอขึ้นใหม่สําหรับแต่ละอุปกรณ์ สถานะของอุปกรณ์จะยังคงอยู่แม้หน้าจอจะปิดอยู่ก็ตาม
โหนดชุดข้อความ
หากโทโพโลยีเครือข่ายเทรดตามที่อธิบายไว้ใน Codelab นี้ หรือโหนดยกเลิกการเชื่อมต่อด้วยเหตุผลบางอย่าง (อาจเป็นเพราะเครื่อง Linux ที่ขับเคลื่อนเข้าสู่โหมดสลีป) วิธีที่ดีที่สุดคือการลดชุดข้อความ ล้างข้อมูลรับรองเครือข่าย และเริ่มต้นอีกครั้งจากขั้นตอนสร้างเครือข่ายเทรด
วิธีรีเซ็ต FTD
## FTD Commissioner or FTD Joiner ## ------------------------------------ > thread stop Done > ifconfig down Done > factoryreset Done
คุณสามารถรีเซ็ต RCP ได้ในลักษณะเดียวกันผ่านทาง ot-ctl
## RCP Joiner ## ---------------- > thread stop Done > ifconfig down Done > factoryreset Done
12. การใช้มัลติแคสต์
มัลติแคสต์ใช้สําหรับสื่อสารข้อมูลไปยังกลุ่มอุปกรณ์พร้อมกัน ในเครือข่ายเทรด อีเมลที่เจาะจงจะสงวนไว้สําหรับใช้มัลติแคสต์กับกลุ่มอุปกรณ์ต่างๆ โดยขึ้นอยู่กับขอบเขต
ที่อยู่ IPv6 | ขอบเขต | ส่งไปที่ |
| ลิงก์-ท้องถิ่น | FTD และ MED ทั้งหมด |
| ลิงก์-ท้องถิ่น | FTD และเราเตอร์ Border ทั้งหมด |
| Mesh-Local | FTD และ MED ทั้งหมด |
| Mesh-Local | FTD และเราเตอร์ Border ทั้งหมด |
เนื่องจากเราไม่ได้ใช้เราเตอร์ Border ใน Codelab นี้ เรามามุ่งเน้นที่ที่อยู่สําหรับการส่ง FTD และ MED ทั้ง 2 รายการกัน
ลิงก์-ท้องถิ่น
ขอบเขตลิงก์ท้องถิ่นประกอบด้วยอินเทอร์เฟซเทรดทั้งหมดที่เข้าถึงได้ด้วยการส่งข้อมูลทางวิทยุเดียว หรือ "hop." โทโพโลยีเครือข่ายจะกําหนดว่าอุปกรณ์ใดตอบสนองต่อคําสั่ง ping ไปยังที่อยู่มัลติแคสต์ ff02::1
ใช้คําสั่ง ping ff02::1
จาก FTD Commissioner:
## FTD Commissioner ## ---------------------- > ping ff02::1 > 8 bytes from fe80:0:0:0:e4cd:d2d9:3249:a243: icmp_seq=2 hlim=64 time=9ms
มีอุปกรณ์อื่นอีก 2 เครื่องในเครือข่าย (ตัวเชื่อม FTD และตัวเชื่อม RCP) แต่ค่าคอมมิชชัน FTD ได้รับการตอบสนองเพียง 1 ครั้งจากที่อยู่ลิงก์ในพื้นที่ของ FTD และฐานข้อมูล LLA ซึ่งหมายความว่าเครื่องมือเชื่อม FTD เป็นอุปกรณ์เดียวที่ FTD Commissioner เข้าถึงได้ในฮอพเดียว
ขณะนี้ใช้คําสั่ง ping ff02::1
จาก FTDเครื่องมือเชื่อม:
## FTD Joiner ## ---------------- > ping ff02::1 > 8 bytes from fe80:0:0:0:1cd6:87a9:cb9d:4b1d: icmp_seq=1 hlim=64 time=11ms 8 bytes from fe80:0:0:0:18e5:29b3:a638:943b: icmp_seq=1 hlim=64 time=24ms
มี 2 คําตอบ การตรวจสอบที่อยู่ IPv6 สําหรับอุปกรณ์อื่นๆ เราจะเห็นที่อยู่แรก (ลงท้ายด้วย 4b1d
) เป็น FTD Commissioner' SLA และที่ 2 (ลงท้ายด้วย 943b
) คือ LCP Worker' LLA
ซึ่งหมายความว่าเครื่องมือเชื่อมต่อ FTD จะเชื่อมต่อกับทั้ง FTD Commissioner และผู้เข้าร่วม RCP โดยตรง ซึ่งจะยืนยันโทโพโลยีของเรา
Mesh-Local
ขอบเขต Mesh-Local ประกอบด้วยอินเทอร์เฟซเทรดทั้งหมดที่เข้าถึงได้ในเครือข่ายเทรดเดียวกัน มาดูการตอบกลับคําสั่ง ping ไปยังที่อยู่มัลติแคสต์ของ ff03::1
กัน
ใช้คําสั่ง ping ff03::1
จาก FTD Commissioner:
## FTD Commissioner ## ---------------------- > ping ff03::1 > 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:b800: icmp_seq=3 hlim=64 time=9ms 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=3 hlim=64 time=68ms
ในครั้งนี้ FTD Commissioner ได้รับคําตอบ 2 รายการ คําตอบหนึ่งมาจาก FTD Reader's Routing Locator (DLOC, ลงท้ายด้วย b800
) และคําตอบจาก RCPคําเชื่อม 's Mesh-Local EID (ML-EID ที่ลงท้ายด้วย d55f
) นั่นเป็นเพราะขอบเขตภายในของ Mesh ประกอบด้วยเครือข่ายเทรดทั้งหมด ไม่ว่าอุปกรณ์จะอยู่ในเครือข่ายใด อุปกรณ์จะสมัครรับข้อมูลตามที่อยู่ ff03::1
ใช้คําสั่ง ping ff03::1
จาก FTDเครื่องมือเชื่อมต่อ เพื่อยืนยันลักษณะการทํางานเดียวกัน
## FTD Joiner ## ---------------- > ping ff03::1 > 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00: icmp_seq=2 hlim=64 time=11ms 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=2 hlim=64 time=23ms
บันทึกเวลาตอบกลับสําหรับเครื่องมือเชื่อมต่อ RCP ในเอาต์พุต ping ทั้ง 2 เอาต์พุต ตัวเข้าร่วม RCP ใช้เวลานานกว่ามากในการเข้าถึง FTD Commissioner (68 มิลลิวินาที) เมื่อเทียบกับผู้เข้าร่วม FTD (23 มิลลิวินาที) และนั่นก็เพราะว่าต้องเดินทางไปยัง FTD Commissioner จํานวน 2 ครั้ง แทนที่จะเป็น 1 ครั้งสําหรับตัวเข้าร่วม FTD
นอกจากนี้ คุณยังอาจสังเกตเห็นว่าคําสั่ง ping สําหรับมัลติแคสต์แบบ Mesh-local ตอบสนองด้วย RSAOC เฉพาะสําหรับ FTD 2 รายการเท่านั้น ไม่ใช่เครื่องมือเชื่อม RCP เนื่องจาก FTD คือเราเตอร์ในเครือข่าย ในขณะที่ RCP เป็นอุปกรณ์ปลายทาง
ตรวจสอบสถานะของตัวเชื่อม RCP เพื่อยืนยัน
## RCP Joiner ## ---------------- > state child
13. ส่งข้อความด้วย UDP
บริการแอปพลิเคชันหนึ่งที่ OpenThread มีให้คือ User Datagram Protocol (UDP) ซึ่งเป็นโปรโตคอล Transport Layer แอปพลิเคชันที่สร้างใน OpenThread อาจใช้ UDP API เพื่อส่งข้อความระหว่างโหนดในเครือข่ายเทรด หรือไปยังอุปกรณ์อื่นๆ ในเครือข่ายภายนอกได้ (เช่น อินเทอร์เน็ต หากเครือข่ายเทรดมีเราเตอร์ Border)
ซ็อกเก็ต UDP ถูกเปิดเผยผ่าน OpenThread CLI มาใช้ส่งอีเมลระหว่าง FTD ทั้ง 2 รายการ
รับที่อยู่ EID ภายในเครื่องสําหรับตัวเชื่อม FTD เราใช้ที่อยู่นี้เพราะเข้าถึงได้ทุกที่ภายในเครือข่ายเทรด
## FTD Joiner ## ---------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fdc0:de7a:b5c0:0:0:ff:fe00:b800 # Routing Locator (RLOC) fe80:0:0:0:e4cd:d2d9:3249:a243 # Link-Local Address (LLA) fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd # Mesh-Local EID (ML-EID) Done
เริ่มต้น UDP และเชื่อมโยงกับซ็อกเก็ตสําหรับที่อยู่ IPv6 ใดก็ได้:
## FTD Joiner ## ---------------- > udp open Done > udp bind :: 1212
เปลี่ยนไปใช้ FTD Commissioner, เริ่ม UDP และเชื่อมต่อกับซ็อกเก็ตที่คุณตั้งค่าในตัวเชื่อม FTD โดยใช้ ML-EID:
## FTD Commissioner ## ---------------------- > udp open Done > udp connect fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd 1212 Done
การเชื่อมต่อ UDP ควรเผยแพร่อยู่ระหว่าง 2 โหนด วิธีส่งข้อความจากเจ้าหน้าที่ FTD
## FTD Commissioner ## ---------------------- > udp send hellothere Done
ได้รับข้อความ UDP ในเครื่องมือเชื่อมต่อ FTD แล้ว
## FTD Joiner ## ---------------- > 10 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00 49153 hellothere
14. ยินดีด้วย
คุณได้สร้างเครือข่ายเทรดจริงแล้ว
ตอนนี้คุณทราบประเด็นต่อไปนี้แล้ว
- ความแตกต่างระหว่างประเภทอุปกรณ์ บทบาท และขอบเขตของเทรด
- วิธีที่อุปกรณ์เทรดจัดการสถานะภายในเครือข่าย
- วิธีส่งข้อความง่ายๆ ระหว่างโหนดโดยใช้ UDP
ขั้นตอนถัดไป
ลองทําแบบฝึกหัดต่อไปนี้จาก Codelab นี้
- หวนกลับมาเป็นคณะกรรมการของ FTD อีกครั้งในฐานะ MTD โดยใช้ไบนารี
ot-cli-mtd
และสังเกตว่าจะไม่อัปเกรดตัวเองเป็นเราเตอร์หรือพยายามเป็นผู้นํา - เพิ่มอุปกรณ์ (ลองใช้แพลตฟอร์มอื่น) กับเครือข่ายและร่างแบบโทโพโลยีโดยใช้ตารางเราเตอร์และตารางย่อย พร้อมกับคําสั่ง ping ไปยังที่อยู่มัลติแคสต์
- ใช้ pyspinel เพื่อควบคุม NCP
- แปลง NCP เป็นเราเตอร์ Border โดยใช้ OpenThread Border Router และเชื่อมต่อเครือข่ายเทรดกับอินเทอร์เน็ต
อ่านเพิ่มเติม
ไปที่ openthread.io และ GitHub เพื่อดูแหล่งข้อมูล OpenThread ที่หลากหลาย ซึ่งรวมถึงรายการต่อไปนี้
- แพลตฟอร์มที่รองรับ — สํารวจแพลตฟอร์มทั้งหมดที่รองรับ OpenThread
- สร้าง OpenThread - รายละเอียดเพิ่มเติมเกี่ยวกับการสร้างและการกําหนดค่า OpenThread
- Thread Primer - ครอบคลุมแนวคิดเทรดทั้งหมดที่แสดงใน Codelab นี้
ข้อมูลอ้างอิง: