Menyimulasikan Jaringan Thread menggunakan OTNS

1. Pengantar

Tayangan iklan topologi jaringan mesh Thread

Apa itu Thread & OTNS

Thread adalah protokol jaringan mesh nirkabel berdaya rendah berbasis IP yang memungkinkan komunikasi perangkat-ke-perangkat dan perangkat-ke-cloud yang aman. Jaringan Thread dapat beradaptasi dengan perubahan topologi untuk menghindari satu titik kegagalan.

OpenThread yang dirilis oleh Google adalah implementasi open source Thread. Meskipun ukuran kode dan jejak memorinya kecil, OpenThread mendukung semua fitur yang ditentukan dalam Spesifikasi Thread.

OpenThread Network Simulator (OTNS) dapat digunakan untuk menyimulasikan jaringan Thread dengan menjalankan node OpenThread yang disimulasikan pada platform posix. OTNS menyediakan antarmuka Web yang mudah digunakan (OTNS-Web) untuk memvisualisasikan dan mengoperasikan jaringan Thread yang disimulasikan. Simulasi yang dibuat dengan skrip (menggunakan Python) juga dapat dilakukan.

Yang akan Anda pelajari

  • Instal OTNS dan dependensinya
  • Mengenal dasar-dasar OTNS-CLI
  • Cara menambahkan/memindahkan/menghapus node OpenThread di OTNS-Web
  • Gunakan fitur berguna lainnya di OTNS-Web untuk mengontrol simulasi jaringan
  • Memverifikasi tidak adanya satu titik kegagalan di OpenThread
  • Melihat traffic data antara node OpenThread di Wireshark

Codelab ini berfokus pada OTNS-CLI dan OTNS-Web untuk penggunaan interaktif. Fitur OTNS lainnya, seperti pembuatan skrip Python, tidak dibahas.

Yang Anda butuhkan

  • Dasar-Dasar Thread. Anda harus mengetahui konsep dasar Thread untuk memahami apa yang diajarkan dalam Codelab ini.
  • Sebaiknya Linux x86_64, atau Mac OS dengan Homebrew. Ubuntu versi 24 atau yang lebih tinggi di WSL2 Windows juga akan berfungsi, tetapi mungkin memerlukan penyesuaian setelan secara manual.
  • Git.
  • Browser web. OTNS-Web menggunakan browser web untuk menampilkan simulasi.
  • Penganalisis protokol jaringan Wireshark (opsional).
  • Go versi 1.23 atau yang lebih baru.
    • Skrip penginstalan akan memeriksa versi Go yang diinstal.
    • Jika Go belum diinstal, Go akan menginstal versi >= 1.23, jika tersedia dari pengelola paket.
    • Jika tidak tersedia dari pengelola paket, penginstalan manual diperlukan.
    • Perhatikan bahwa Ubuntu 24.04 atau yang lebih lama tidak mendukung Go 1.23 secara otomatis. Lihat halaman Versi Golang yang tersedia dalam dokumentasi Ubuntu untuk mengetahui detailnya. Penginstalan manual, menggunakan snap, atau prosedur lainnya, dapat dilakukan.
  • Python versi 3.9 atau yang lebih baru.
    • Skrip penginstalan akan memeriksa versi Python yang terinstal.
    • Jika Python 3 belum diinstal, Python 3 akan menginstal versi >= 3.9 jika tersedia dari pengelola paket.
    • Jika tidak tersedia dari pengelola paket, penginstalan manual diperlukan.

Terminologi

Istilah "Router" digunakan sebagai istilah teknis untuk Thread Mesh Extender, yang awalnya disebut Thread Router. "Node" mengacu pada perangkat OpenThread tersimulasi dalam simulasi OTNS.

2. Penginstalan

Mendapatkan kode OTNS

$ git clone https://github.com/openthread/ot-ns.git ./otns
$ cd otns

Semua perintah konsol berikutnya dalam Codelab ini dijalankan dari direktori otns.

Bootstrapping dan penginstalan

Skrip bootstrap akan menginstal dependensi (termasuk Python 3 dan Go/Golang, jika diperlukan) dan menginstal OTNS. Perhatikan bahwa skrip dapat berhenti jika tidak dapat menginstal dependensi tertentu secara otomatis, seperti Python versi >= 3.9 atau Go versi >= 1.23. Penginstalan otomatis mengharuskan paket dapat ditemukan di repositori paket yang dikonfigurasi sistem operasi.

Skrip ini juga membangun berbagai jenis node OT yang dapat digunakan langsung dalam simulasi, dan melakukan beberapa pengujian dasar. Karena build node ini, prosesnya dapat memerlukan waktu beberapa menit.

$ ./script/bootstrap
....
....
OTNS installed - use 'otns' to start it.
$

Anda mungkin diminta memasukkan sandi untuk sudo selama eksekusi skrip.

Jika otns tidak diinstal dengan benar

Skrip dapat melaporkan error seperti:

....
OTNS installed - please add ~/go/bin to your PATH variable first, to use it.
$

Dalam hal ini, Anda perlu menambahkan $(go env GOPATH)/bin ke variabel $PATH.

Jika terjadi error lain, masalah GitHub dapat dibuat.

3. Menjalankan OTNS untuk pertama kalinya

Jalankan otns:

$ otns
>_ ← OTNS-CLI prompt

Setelah berhasil dimulai, OTNS akan memasuki konsol CLI (OTNS-CLI) dan meluncurkan browser web untuk visualisasi dan pengelolaan jaringan (OTNS-Web):

Jendela OTNS-Web saat dimulai

Jika Anda hanya dapat melihat halaman kosong untuk OTNS-Web, kemungkinan WebGL tidak diaktifkan di browser Anda. Lihat https://superuser.com/a/836833 tentang cara mengaktifkan WebGL.

Di bagian berikut, Anda akan mempelajari cara mengelola simulasi OTNS melalui OTNS-CLI dan OTNS-Web.

4. Mengenal OTNS-CLI & OTNS-Web

OTNS-CLI

OTNS-CLI adalah Antarmuka Command Line (CLI) untuk mengelola simulasi OTNS.

$ otns
>_ ← OTNS-CLI prompt

Anda dapat mengetik perintah melalui OTNS-CLI. Lihat referensi OTNS CLI untuk mengetahui daftar lengkap perintah. Jangan khawatir, Anda hanya akan menggunakan beberapa perintah ini dalam Codelab ini.

Ketik perintah help untuk mengetahui ringkasan perintah CLI. Daftar ini sama dengan referensi CLI.

> help
add             Add a node to the simulation and get the node ID.
....
....
Done
> 

Untuk mendapatkan bantuan lebih lanjut terkait perintah tertentu, gunakan nama perintah, misalnya:

> help add
add
  Add a node to the simulation and get the node ID.
  
Definition:
....
....
> 

OTNS-Web

OTNS-Web adalah alat visualisasi dan pengelolaan jaringan OTNS. Alat ini memberikan representasi visual dari node, pesan, dan link jaringan Thread yang disimulasikan. Perhatikan berbagai elemen OTNS-Web:

Penjelasan elemen OTNS-Web

5. Menambahkan Node

Menambahkan node melalui OTNS-CLI

Tambahkan Thread Router ke dalam simulasi:

> add router
1
Done

Anda akan melihat node yang dibuat di OTNS-Web. Node dimulai sebagai Router dan menjadi Pemimpin dalam beberapa detik:

Satu node dalam peran Pemimpin

Untuk mempermudah memulai simulasi secara interaktif, setiap node OpenThread baru secara default di-commissioning dengan serangkaian parameter jaringan standar.

Menambahkan lebih banyak node melalui OTNS-CLI

Sekarang kita akan menambahkan beberapa node dari berbagai jenis.

> add fed
2
Done
> add med
3
Done
> add sed
4
Done

Tunggu beberapa detik hingga node digabungkan menjadi satu partisi. Anda akan melihat node di OTNS-Web:

Jaringan Thread dengan 4 node

Selain itu, di OTNS-Web, Anda dapat memilih salah satu node untuk mendapatkan panel dengan informasi selengkapnya tentang node tersebut. Misalnya, pada gambar di bawah, node 1 dipilih. Entri "Peran" di panel mengonfirmasi bahwa pengguna tersebut adalah Pemimpin.

Jaringan Thread dengan 4 node, node 1 dipilih

Menambahkan node menurut OTNS-Web

Anda juga dapat menambahkan node melalui OTNS-Web. Klik tombol New Router pada Action Bar. Anda akan melihat node yang dibuat di sebelah kanan node yang dipilih. Router baru harus bergabung dengan partisi Thread yang ada:

Router ditambahkan, total 5 node

Klik juga tombol FED, MED, SSED, dan BR di Panel Tindakan untuk membuat jenis node lainnya ini. Sekarang akan ada total 9 node. Jika mau, tarik beberapa node ke posisi lain untuk membuat topologi jaringan fisik yang berbeda.

Beberapa node baru ditambahkan, total 9 node

Sekarang Anda telah membuat jaringan Thread dari satu partisi yang berisi banyak node. Di bagian berikutnya, kita akan menyesuaikan kecepatan simulasi agar simulasi berjalan lebih cepat.

6. Menyesuaikan Kecepatan

Saat ini, simulasi harus berjalan dengan kecepatan 1X, yang berarti waktu simulasi yang telah berlalu sejauh ini sama dengan waktu sebenarnya sejak kita membuat node pertama.

Menyesuaikan kecepatan melalui OTNS-CLI

Anda dapat menyesuaikan kecepatan simulasi melalui OTNS-CLI.

Setel kecepatan simulasi ke 100X

> speed 100
Done

Anda akan melihat node mengirim pesan lebih sering daripada sebelumnya.

Setel kecepatan simulasi ke MAX

> speed max
Done

Sekarang, OTNS akan mencoba mensimulasikan secepat mungkin, sehingga Anda akan melihat node mengirim banyak pesan.

Jeda simulasi

> speed 0
Done

Menyetel kecepatan simulasi ke 0 akan menjeda simulasi.

Memulihkan simulasi dengan kecepatan normal

> speed 1
Done

Menetapkan kecepatan simulasi ke nilai yang lebih besar dari 0 akan melanjutkan simulasi.

Menyesuaikan kecepatan melalui OTNS-Web

Tombol kontrol kecepatan

Temukan tombol kontrol kecepatan Tombol kontrol kecepatan di Action Bar. Tombol menampilkan kecepatan simulasi saat ini dan dapat digunakan untuk menyesuaikan kecepatan simulasi serta menjeda/melanjutkan simulasi.

Mempercepat simulasi

Anda dapat mempercepat simulasi dengan mengklik tombol Tombol peningkatan kecepatan hingga kecepatan mencapai MAX: Indikator kecepatan simulasi MAX.

Memperlambat simulasi

Anda dapat memperlambat simulasi dengan mengklik tombol Tombol kurangi kecepatan.

Jeda simulasi

Klik tombol Tombol jeda untuk menjeda simulasi saat sedang berjalan. Tombol akan diubah menjadi Tombol putar.

Melanjutkan simulasi

Klik tombol Tombol putar untuk melanjutkan simulasi saat dijeda. Tombol akan diubah kembali menjadi Tombol jeda.

Setel kecepatan simulasi ke 10X

Untuk menghemat waktu, gunakan

OTNS-CLI untuk menyesuaikan kecepatan simulasi menjadi

10X sehingga kita dapat mengamati perubahan topologi di jaringan dengan lebih cepat.

> speed 10
Done

7. Mengaktifkan/Menonaktifkan Radio

Sekarang, simulasi harus berisi minimal 2 Router (bentuk segi enam), mungkin Border Router (bentuk persegi) dan banyak turunan, serta berjalan dengan kecepatan 10X.

Temukan Pemimpin saat ini (batas merah) dari 2 Router, klik sekali untuk memilihnya:

Jaringan Thread dengan node Leader 1 dipilih

Matikan radio

Klik tombol Tombol Radio Mati di Panel Tindakan untuk menonaktifkan radio node Leader. Pemimpin tidak akan dapat mengirim atau menerima pesan jika radio dimatikan.

Tunggu sekitar 12 detik (120 detik dalam waktu simulasi) hingga Router atau Router Perbatasan lainnya menjadi Pemimpin baru:

Partisi baru dibentuk dengan node 9 sebagai Pemimpin baru

Jaringan Thread pulih dari kegagalan Pemimpin secara otomatis dengan membentuk partisi baru dengan Pemimpin baru. Partisi baru juga memiliki warna partisi baru.

Hidupkan radio

Pilih Pemimpin yang radionya dimatikan. Klik tombol Tombol Radio di Action Bar untuk memulihkan konektivitas radio:

Node 1 bergabung ke partisi setelah radionya aktif kembali

Pemimpin harus terhubung kembali ke jaringan setelah konektivitas radio dipulihkan.

8. Memindahkan Node

OTNS memungkinkan pengguna memindahkan node dengan mudah melalui OTNS-CLI atau OTNS-Web.

Memindahkan node melalui OTNS-CLI

Pindahkan node Border Router 9 ke lokasi baru:

> move 9 50 50
Done

Memindahkan node melalui OTNS-Web

Pindahkan node 5 ke kanan bawah dengan menariknya. Karena node 5 kini berada di luar jangkauan radio Router lain, node tersebut membentuk partisi sendiri dengan ID Partisi baru. ID Partisi dapat diperiksa di panel informasi node dengan mengklik node.

Node 5 dipindahkan dari node lainnya dan membentuk partisi baru

Perhatikan bahwa satu garis hijau masih ditarik di antara node 5 dan node 9. Hal ini sering terjadi karena informasi yang sudah tidak berlaku tentang anak, yang masih disimpan di tabel anak dari mantan orang tua. Atau, bisa juga informasi usang tentang link router-ke-router sebelumnya antara node 9 dan node 5. (Atau mungkin, dalam kasus ini, bahkan bug rendering.) Pada akhirnya, informasi yang sudah tidak berlaku akan dibersihkan di node setelah waktu tunggu yang sesuai.

9. Menghapus Node

Menghapus node melalui OTNS-CLI

Hapus node 5:

> del 5
Done

Node 5 akan menghilang dari simulasi:

Node 5 dihapus dari simulasi

Menghapus node melalui OTNS-Web

Pilih node Border Router 9, lalu klik tombol Tombol hapus di Action Bar untuk menghapus node 9:

Node Border Router 9 dihapus

Node 1 akan menjadi Pemimpin partisi baru dan semua node yang tersisa akan dilampirkan sebagai Turunan ke node 1.

10. Konteks Node OTNS-CLI

OTNS-CLI menyediakan mode konteks node untuk memudahkan interaksi dengan node guna membantu developer mendiagnosis status node. Tindakan node juga dapat dimulai dari mode ini.

Masuk ke mode konteks node

Masukkan konteks node 1:

> node 1
Done
node 1>

Prompt CLI berubah menjadi node 1> , yang menunjukkan konteks node saat ini. Anda dapat mengetik perintah OpenThread CLI untuk dieksekusi di node seolah-olah Anda berinteraksi dengan node secara langsung.

Menjalankan perintah dalam konteks node

node 1> state
leader
Done
node 1> channel
11
Done
node 1> panid
0xface
Done
node 1> networkname
otns
Done
node 1> ipaddr
fdde:ad00:beef:0:0:ff:fe00:fc00
fdde:ad00:beef:0:0:ff:fe00:b400
fd00:f00d:cafe:0:2505:8719:3685:ebfb
fdde:ad00:beef:0:4fd9:b9ba:44e0:96cb
fe80:0:0:0:e86a:e07:ec97:777
Done

Beralih ke konteks node lain

node 1> node 2
Done
node 2> 

Konteks node keluar

node 1> exit
Done
>

Cara alternatif untuk keluar dari konteks node adalah perintah node 0.

11. Melihat log node dan penangkapan paket

Log node OpenThread

Secara default, OTNS menghasilkan file log mendetail untuk semua node OpenThread yang disimulasikan. File ini dapat dilihat di direktori ./tmp. Nama filenya adalah 0_.log. Misalnya, cuplikan file log ditampilkan di bawah:

7616488 00:00:06.326 [I] MeshForwarder-: Received IPv6 UDP msg, len:90, chksum:5915, ecn:no, from:ca72650db7b856af, sec:no, prio:net, rss:-58.0
7616488 00:00:06.326 [I] MeshForwarder-:     src:[fe80:0:0:0:c872:650d:b7b8:56af]:19788
7616488 00:00:06.326 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:1]:19788
7616488 00:00:06.326 [D] Mle-----------: Receive MLE message
7616488 00:00:06.326 [D] Mac-----------: Idle mode: Radio receiving on channel 11
7657544 00:00:06.367 [D] Mac-----------: ==============================[RX len=063]==============================
7657544 00:00:06.367 [D] Mac-----------: | 41 D8 7F CE FA FF FF 46 | 74 5A 33 9E 76 51 4E 7F | A......FtZ3.vQN. |
7657544 00:00:06.367 [D] Mac-----------: | 3B 02 F0 4D 4C 4D 4C 81 | E6 00 15 03 00 00 00 00 | ;..MLML......... |
7657544 00:00:06.367 [D] Mac-----------: | 00 00 00 01 46 86 7D FE | 06 CC DB 94 86 9C 88 0B | ....F.}......... |
7657544 00:00:06.367 [D] Mac-----------: | 1C 1E 26 9B 8D 21 2E 65 | 53 5A 43 4E A2 59 D6    | ..&..!.eSZCN.Y.  |
7657544 00:00:06.367 [D] Mac-----------: ------------------------------------------------------------------------
7657544 00:00:06.367 [I] MeshForwarder-: Received IPv6 UDP msg, len:84, chksum:81e6, ecn:no, from:4e51769e335a7446, sec:no, prio:net, rss:-48.0
7657544 00:00:06.367 [I] MeshForwarder-:     src:[fe80:0:0:0:4c51:769e:335a:7446]:19788
7657544 00:00:06.367 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788
7657544 00:00:06.367 [D] Mac-----------: Idle mode: Radio receiving on channel 11
7833912 00:00:06.543 [I] Mle-----------: AttachState ParentReq -> Idle
7833912 00:00:06.543 [N] RouterTable---: Allocate router id 12
7833912 00:00:06.543 [N] Mle-----------: RLOC16 fffe -> 3000
7833912 set node RLOC16: fffe -> 3000
7833912 00:00:06.543 [D] SubMac--------: RadioShortAddress: 0x3000
7833912 00:00:06.543 [N] Mle-----------: Role detached -> leader
7833912 00:00:06.543 [N] Mle-----------: Partition ID 0x24c35f10
7833912 00:00:06.543 [I] RouterTable---: Route table
7833912 00:00:06.543 [I] RouterTable---:     12 0x3000 - me - leader

Waktu simulasi absolut dalam mikrodetik ditampilkan di sebelah kiri. Stempel waktu hh:mm:ss menampilkan stempel waktu log node OpenThread itu sendiri, yang mungkin berbeda dengan waktu simulasi absolut.

Penangkapan paket Wireshark

Secara default, semua frame IEEE 802.15.4 yang dikirimkan dicatat dalam file PCAP current.pcap. File ini dapat dibaca oleh Wireshark selama atau setelah simulasi. Karena enkripsi link-layer Thread, tindakan konfigurasi satu kali di Wireshark diperlukan untuk menyetel kunci dekripsi OTNS dengan benar. Secara default, satu Kunci Jaringan yang sudah dikenal digunakan sehingga dekripsi frame oleh Wireshark menjadi mudah.

Lihat screenshot di bawah untuk contoh pemeriksaan paket OpenThread di Wireshark.

Screenshot analisis paket OpenThread di Wireshark

Untuk mengonfigurasi kunci dekripsi, pilih Edit -> Preferences di menu. Kemudian, di jendela preferensi, pilih Protocols -> IEEE 802.15.4. Klik tombol Edit... di samping "Kunci Dekripsi". Klik + untuk membuat entri baru, lalu masukkan kunci 00112233445566778899aabbccddeeff (32 karakter) dan pilih "Hash thread" di kolom "Hash kunci". "Indeks kunci dekripsi" dapat dibiarkan 0. Kemudian, klik OK, lalu OK lagi. Sekarang file PCAP OTNS akan didekripsi dengan benar saat dimuat.

Stempel waktu yang ditampilkan di kolom "Time" (dalam detik) sesuai dengan nilai waktu simulasi absolut yang ditampilkan di log node OpenThread. Hal ini mempermudah korelasi pesan log dengan frame radio yang dikirim atau diterima. Namun, nilai biasanya tidak identik hingga presisi mikrodetik tunggal: hardware radio IEEE 802.15.4 yang disimulasikan dapat menambahkan beberapa penundaan tambahan, setelah frame radio diminta untuk dikirim oleh stack OpenThread.

12. Selamat

Selamat, Anda telah berhasil menjalankan simulasi OTNS pertama Anda.

Anda telah mempelajari cara menginstal OTNS dan dependensinya. Anda memulai simulasi OTNS dengan node simulasi OpenThread. Anda telah mempelajari cara memanipulasi simulasi dengan berbagai cara melalui OTNS-CLI dan OTNS-Web.

Sekarang Anda mengetahui apa itu OTNS dan cara menggunakan OTNS untuk menyimulasikan jaringan OpenThread.

Apa langkah selanjutnya?

Lihat beberapa codelab ini...

Dokumen referensi