จำลองเครือข่ายเทรดโดยใช้ OTNS

1. บทนำ

5abd22afa2f2ee9a.png

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+ เพื่อสร้าง

  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

ทรัพยากร 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 ได้รับการติดตั้งอย่างถูกต้องหรือไม่

  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 โดยจะแสดงโหนด ข้อความ และลิงก์ของเครือข่ายเทรดจำลอง โปรดสังเกตองค์ประกอบต่างๆ ของ 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 บนแถบการทำงานเพื่อสร้างโหนดประเภทอื่นๆ ลากไปยังตำแหน่งใกล้โหนดที่มีอยู่เพื่อเชื่อมต่อกับเครือข่ายเทรด

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 เท่า

หาผู้นำปัจจุบัน (ขอบสีแดง) ของเราเตอร์ 2 ตัว คลิกครั้งเดียวเพื่อเลือก

8c6a2e191cdae0c7.png

ปิดวิทยุ

คลิกปุ่ม 7ca085f470491dd4.png บนแถบการทำงานเพื่อปิดวิทยุของโหนดผู้นำ:

a3bf58d9d125f95f.png

ผู้นำจะส่งหรือรับข้อความไม่ได้เมื่อปิดวิทยุ

รอประมาณ 12 วินาที (120 วินาทีในการจำลองเวลา) เพื่อให้เราเตอร์อื่นๆ กลายเป็นผู้นำใหม่:

e3d32f85c4a1b990.png

เครือข่ายเทรดจะกู้คืนจากความล้มเหลวของผู้นำโดยอัตโนมัติด้วยการสร้างพาร์ติชันใหม่ที่มีผู้นำใหม่ พาร์ติชันใหม่จะมีสีพาร์ติชันใหม่ด้วย

เปิดวิทยุ

เลือกผู้นำที่วิทยุปิดอยู่ คลิกปุ่ม 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-เว็บ

ย้ายโหนด 5 กลับไปยังตำแหน่งเดิมด้วยการลาก ทั้ง 2 พาร์ติชันควรรวมกลับมาเป็นพาร์ติชันเดียว ดังนี้

9ba305c4c5a5f892.png

10. ลบโหนด

ลบโหนดผ่าน OTNS-CLI

ลบโหนด 8:

> del 8
Done

โหนด 8 ควรหายไปจากการจำลอง

18156770d9f8bf83.png

ลบโหนดผ่าน OTNS-Web

เลือกโหนด 5 และคลิกปุ่ม 7ff6afd565f4eafc.png บน Action Bar เพื่อลบโหนด 5:

d4079cceea0105f0.png

Node 1 ควรกลายเป็น Leader และ 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 และทรัพยากร Dependency แล้ว คุณได้สร้าง OpenThread สำหรับ OTNS และได้เริ่มการจำลอง OTNS ด้วยอินสแตนซ์การจำลอง OpenThread แล้ว คุณได้เรียนรู้วิธีจัดการการจำลองด้วยวิธีต่างๆ ผ่านทาง OTNS-CLI และ OTNS-Web แล้ว

ตอนนี้คุณรู้แล้วว่า OTNS คืออะไร และคุณจะใช้ OTNS เพื่อจำลองเครือข่าย OpenThread ได้อย่างไร

ขั้นตอนถัดไปคือ

ลองดู Codelab เหล่านี้...

เอกสารอ้างอิง