1. บทนำ
Thread และ OTNS
Thread เป็นโปรโตคอลเครือข่ายที่ทำงานร่วมกันแบบไร้สายและใช้พลังงานต่ำแบบ IP ซึ่งช่วยให้การสื่อสารระหว่างอุปกรณ์และอุปกรณ์กับระบบคลาวด์มีความปลอดภัย เครือข่ายเทรดสามารถปรับให้เข้ากับการเปลี่ยนแปลงโทโพโลยีเพื่อหลีกเลี่ยงความล้มเหลวในจุดเดียว
OpenThread ที่ Google เปิดตัวเป็นการใช้งาน Thread แบบโอเพนซอร์ส แม้ว่าโค้ดและหน่วยความจำของ OpenThread จะเล็ก แต่ OpenThread ก็รองรับฟีเจอร์ทั้งหมดที่ระบุไว้ในข้อกำหนดของเทรด
OpenThread Network Simulator (OTNS) สามารถใช้เพื่อจำลองเครือข่าย Thread โดยการเรียกใช้โหนด OpenThread ที่จำลองบนแพลตฟอร์ม Posix OTNS มีเว็บอินเทอร์เฟซ (OTNS-Web) ที่ใช้งานง่ายสำหรับการแสดงและใช้งานเครือข่ายเทรดจำลอง
สิ่งที่คุณจะได้เรียนรู้
- ติดตั้ง OTNS และทรัพยากร Dependency
- สร้าง 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 คุณจําเป็นต้องรู้แนวคิดพื้นฐานของเทรดเพื่อทําความเข้าใจสิ่งที่สอนใน Codelab นี้
2. การติดตั้ง
ติดตั้ง Go
OTNS ต้องใช้ Go 1.13+ เพื่อสร้าง
- ติดตั้ง Go จาก https://golang.org/dl/
- เพิ่ม
$(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
ทรัพยากร Dependency ของการติดตั้ง
$ ./script/install-deps grpcwebproxy installed: /usr/local/google/home/simonlin/go/bin/grpcwebproxy
ระบบอาจขอให้คุณป้อนรหัสผ่านสำหรับ sudo
ติดตั้ง OTT
ติดตั้ง otns
ลงใน $GOPATH/bin
:
$ ./script/install otns installed: /usr/local/google/home/simonlin/go/bin/otns
มาตรวจสอบกันว่า otns
ได้รับการติดตั้งอย่างถูกต้องหรือไม่
- เรียกใช้
which otns
เพื่อตรวจสอบว่าไฟล์ปฏิบัติการotns
ค้นหาได้ใน$PATH.
หรือไม่ - หากไม่พบคำสั่ง
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
)
หากคุณเห็นเฉพาะหน้าว่างสำหรับ 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 โดยจะแสดงโหนด ข้อความ และลิงก์ของเครือข่ายเทรดจำลอง โปรดสังเกตองค์ประกอบต่างๆ ของ OTNS-Web
ดังนี้
6. เพิ่มโหนด
เพิ่มโหนดผ่าน OTNS-CLI
เพิ่มเราเตอร์ที่ตำแหน่ง (300, 100)
> add router x 300 y 100 1 Done
คุณควรเห็นโหนดที่สร้างใน OTNS-Web
โหนดจะเริ่มต้นจากเราเตอร์และกลายเป็นผู้นำในไม่กี่วินาที:
เพิ่มโหนดผ่าน 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
:
เพิ่มโหนดด้วย OTNS-Web
คุณเพิ่มโหนดผ่าน OTNS-Web
ได้ด้วย คลิกปุ่ม New Router
ของ Action Bar
คุณควรเห็นการสร้างโหนดอยู่เหนือปุ่ม New Router
ลากโหนดให้อยู่ใกล้ผู้นำที่คุณสร้างผ่าน OTNS-CLI
โหนดทั้งหมดควรรวมกันเป็นพาร์ติชันเดียวในที่สุด
และคลิกปุ่ม FED, MED และ SED บนแถบการทำงานเพื่อสร้างโหนดประเภทอื่นๆ ลากไปยังตำแหน่งใกล้โหนดที่มีอยู่เพื่อเชื่อมต่อกับเครือข่ายเทรด
ตอนนี้คุณได้สร้างเครือข่ายเทรดของพาร์ติชันหนึ่งที่มีหลายโหนดแล้ว ในส่วนถัดไป เราจะปรับความเร็วในการจำลองเพื่อให้การจำลองทำงานได้เร็วขึ้น
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
ปุ่มควบคุมความเร็ว
หาปุ่มควบคุมความเร็ว บน Action Bar
ปุ่มดังกล่าวจะแสดงความเร็วในการจำลองปัจจุบัน และสามารถนำมาใช้เพื่อปรับการจำลองความเร็ว และหยุดชั่วคราว/เล่นต่อ
เร่งความเร็วของการจำลอง
คุณเพิ่มความเร็วของการจำลองได้โดยคลิกปุ่ม จนกว่าความเร็วจะถึง MAX
:
ชะลอการจำลอง
คุณสามารถชะลอการจำลองได้โดยคลิกที่ปุ่ม
หยุดการจำลองชั่วคราว
คลิกปุ่ม เพื่อหยุดการจำลองชั่วคราวเมื่อทำงานอยู่ โดยปุ่มจะเปลี่ยนเป็น
จำลองต่อ
คลิกปุ่ม เพื่อกลับสู่การจำลองเมื่อหยุดชั่วคราว ปุ่มจะเปลี่ยนกลับไปเป็น
ตั้งค่าการจำลองความเร็วเป็น 10X
เพื่อประหยัดเวลา ให้ใช้
OTNS-CLI
เพื่อปรับความเร็วการจำลองเป็น
10X
เพื่อให้เราสังเกตการเปลี่ยนแปลงโทโพโลยีในเครือข่ายได้เร็วขึ้นมาก
> speed 10 Done
8. เปิด/ปิดวิทยุ
ตอนนี้การจำลองควรมีเราเตอร์ 2 ตัว (รูปหกเหลี่ยม) และเด็กจำนวนมาก และวิ่งที่ความเร็ว 10 เท่า
หาผู้นำปัจจุบัน (ขอบสีแดง) ของเราเตอร์ 2 ตัว คลิกครั้งเดียวเพื่อเลือก
ปิดวิทยุ
คลิกปุ่ม บนแถบการทำงานเพื่อปิดวิทยุของโหนดผู้นำ:
ผู้นำจะส่งหรือรับข้อความไม่ได้เมื่อปิดวิทยุ
รอประมาณ 12 วินาที (120 วินาทีในการจำลองเวลา) เพื่อให้เราเตอร์อื่นๆ กลายเป็นผู้นำใหม่:
เครือข่ายเทรดจะกู้คืนจากความล้มเหลวของผู้นำโดยอัตโนมัติด้วยการสร้างพาร์ติชันใหม่ที่มีผู้นำใหม่ พาร์ติชันใหม่จะมีสีพาร์ติชันใหม่ด้วย
เปิดวิทยุ
เลือกผู้นำที่วิทยุปิดอยู่ คลิกปุ่ม บน Action Bar
เพื่อคืนค่าการเชื่อมต่อวิทยุ:
ผู้นำควรเชื่อมต่อกับเครือข่ายอีกครั้งหลังจากเชื่อมต่อวิทยุได้อีกครั้ง
9. ย้ายโหนด
OTNS ช่วยให้ผู้ใช้ย้ายโหนดผ่าน OTNS-CLI
หรือ OTNS-Web
ได้อย่างง่ายดาย
ย้ายโหนดผ่าน OTNS-CLI
ย้ายโหนด 5 ไปยังตำแหน่งใหม่:
> move 5 600 300 Done
เนื่องจากตอนนี้โหนด 5 อยู่ห่างจากเราเตอร์อีกตัวหนึ่ง โหนดจึงควรสูญเสียการเชื่อมต่อระหว่างกัน และหลังจากประมาณ 12 วินาที (120 วินาทีในการจำลองเวลา) ทั้งสองโหนดจะเป็นผู้นำพาร์ติชันของตัวเอง
ย้ายโหนดผ่าน OTNS-เว็บ
ย้ายโหนด 5 กลับไปยังตำแหน่งเดิมด้วยการลาก ทั้ง 2 พาร์ติชันควรรวมกลับมาเป็นพาร์ติชันเดียว ดังนี้
10. ลบโหนด
ลบโหนดผ่าน OTNS-CLI
ลบโหนด 8:
> del 8 Done
โหนด 8 ควรหายไปจากการจำลอง
ลบโหนดผ่าน OTNS-Web
เลือกโหนด 5 และคลิกปุ่ม บน Action Bar
เพื่อลบโหนด 5:
Node 1
ควรกลายเป็น Leader และ Node 7
ควรปลดออก เนื่องจากไม่สามารถเข้าถึงเราเตอร์ใดๆ ได้
ล้างการจำลอง (ลบโหนดทั้งหมด)
คุณล้างการจำลองได้โดยลบโหนดทั้งหมดผ่าน OTNS-Web
คลิกปุ่ม ใน 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 และทรัพยากร Dependency แล้ว คุณได้สร้าง OpenThread สำหรับ OTNS และได้เริ่มการจำลอง OTNS ด้วยอินสแตนซ์การจำลอง OpenThread แล้ว คุณได้เรียนรู้วิธีจัดการการจำลองด้วยวิธีต่างๆ ผ่านทาง OTNS-CLI
และ OTNS-Web
แล้ว
ตอนนี้คุณรู้แล้วว่า OTNS คืออะไร และคุณจะใช้ OTNS เพื่อจำลองเครือข่าย OpenThread ได้อย่างไร
ขั้นตอนถัดไปคือ
ลองดู Codelab เหล่านี้...
- การจำลองเครือข่ายเทรดด้วย OpenThread
- การจำลองเครือข่ายเทรดโดยใช้ OpenThread ใน Docker
- สร้างเครือข่าย Thread ด้วยบอร์ด nRF52840 และ OpenThread