Menyimulasikan Jaringan Thread menggunakan OTNS

1. Pengantar

Tayangan topologi jaringan mesh Thread

Apa yang dimaksud dengan 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 titik tunggal kegagalan.

OpenThread yang dirilis oleh Google adalah implementasi Thread open source. 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 simulasi di platform posix. OTNS menyediakan antarmuka Web (OTNS-Web) yang mudah digunakan untuk memvisualisasikan dan mengoperasikan jaringan Thread simulasi. Simulasi dengan skrip (dengan Python) juga dapat dilakukan.

Yang akan Anda pelajari

  • Menginstal OTNS dan dependensinya
  • Memahami dasar-dasar OTNS-CLI
  • Cara menambahkan/memindahkan/menghapus node OpenThread di OTNS-Web
  • Menggunakan fitur berguna lainnya di OTNS-Web untuk mengontrol simulasi jaringan
  • Memverifikasi OpenThread tanpa titik kegagalan tunggal
  • 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 tercakup.

Yang Anda butuhkan

  • Sebaiknya Linux x86_64, atau Mac OS dengan Homebrew. Ubuntu 22/24 di Windows WSL2 juga akan berfungsi, tetapi mungkin memerlukan beberapa penyesuaian setelan manual.
  • Git.
  • Browser web. OTNS-Web menggunakan browser web untuk menampilkan simulasi.
  • Primer Thread. Anda harus mengetahui konsep dasar Thread untuk memahami apa yang diajarkan dalam Codelab ini.

Terminologi

Istilah "Router" digunakan sebagai istilah teknis untuk Thread Mesh Extender, yang awalnya disebut Thread Router. "Node" mengacu pada perangkat OpenThread simulasi 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.

Melakukan bootstrap dan menginstal

Skrip bootstrap akan menginstal dependensi (termasuk Python3 dan Go/Golang, jika diperlukan) dan menginstal OTNS. Alat ini juga membuat berbagai jenis node OT yang dapat digunakan langsung dalam simulasi, dan melakukan beberapa pengujian dasar. Karena build node, proses ini dapat memerlukan waktu beberapa menit.

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

Anda mungkin diminta untuk memasukkan sandi untuk sudo.

Jika otns tidak diinstal dengan benar

Skrip mungkin 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 $PATH.

Jika terjadi error lain, masalah GitHub dapat dibuat.

3. Menjalankan OTNS untuk pertama kalinya

Jalankan otns:

$ otns
>_ ← OTNS-CLI prompt

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

Jendela OTNS-Web saat memulai

Jika Anda hanya dapat melihat halaman kosong untuk OTNS-Web, kemungkinan WebGL tidak diaktifkan di browser Anda. Lihat https://superuser.com/a/836833 untuk mengetahui 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 melihat ringkasan perintah CLI. Daftar ini sama persis dengan referensi CLI.

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

Untuk mendapatkan bantuan selengkapnya tentang 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 pengelolaan dan visualisasi jaringan OTNS. Alat ini memberikan representasi visual 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 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 memudahkan memulai simulasi secara interaktif, setiap node OpenThread baru secara default diaktifkan dengan kumpulan parameter jaringan standar.

Menambahkan node lainnya 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

Di OTNS-Web, Anda juga dapat memilih node mana pun untuk mendapatkan panel yang berisi informasi selengkapnya tentang node tersebut. Misalnya, pada gambar di bawah, node 1 dipilih. Entri "Peran" di panel mengonfirmasi bahwa ini adalah Varian Terbaik.

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 dari 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 seharusnya 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 akan berjalan dengan kecepatan 1X, yang berarti bahwa 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 jauh lebih sering daripada sebelumnya.

Setel kecepatan simulasi ke MAX

> speed max
Done

Sekarang, OTNS mencoba melakukan simulasi 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 ini 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 tingkatkan kecepatan hingga kecepatan mencapai MAX: Indikator kecepatan simulasi MAX.

Memperlambat simulasi

Anda dapat memperlambat simulasi dengan mengklik tombol Tombol turunkan 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 ke

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 Router Perbatasan (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 Pemimpin 1 dipilih

Matikan radio

Klik tombol Tombol Nonaktif di Panel Tindakan untuk menonaktifkan radio node Pemimpin. Pemimpin tidak akan dapat mengirim atau menerima pesan jika radio dinonaktifkan.

Tunggu sekitar 12 detik (120 detik dalam waktu simulasi) agar Router atau Border Router lain 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 dinonaktifkan. Klik tombol Tombol radio aktif di Action Bar untuk memulihkan konektivitas radio:

Node 1 bergabung ke partisi setelah radionya diaktifkan 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 menarik. Karena node 5 kini berada di luar cakupan 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 lain dan membentuk partisi baru

Perhatikan bahwa satu garis hijau masih digambar antara node 5 dan node 9. Hal ini sering kali disebabkan oleh informasi yang sudah tidak berlaku tentang turunan, yang masih disimpan di tabel turunan dari induk sebelumnya. Atau, mungkin informasi yang sudah tidak berlaku tentang link router-ke-router sebelumnya antara node 9 dan node 5. (Atau mungkin, dalam hal ini, bahkan bug rendering.) Pada akhirnya, informasi yang sudah tidak berlaku akan dihapus di node setelah waktu tunggu yang sesuai.

9. Menghapus Node

Menghapus node melalui OTNS-CLI

Menghapus 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 harus 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 interaksi yang mudah dengan node guna membantu developer mendiagnosis status node. Selain itu, tindakan node dapat dimulai dari mode ini.

Masuk ke mode konteks node

Masukkan konteks node node 1:

> node 1
Done
node 1>

Perintah CLI berubah menjadi node 1> , yang menunjukkan konteks node saat ini. Anda dapat mengetik perintah CLI OpenThread 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> 

Keluar dari konteks node

node 1> exit
Done
>

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

11. Melihat log node dan rekaman paket

Log node OpenThread

Secara default, OTNS menghasilkan file log mendetail untuk semua node OpenThread yang disimulasikan. Hal 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 sendiri, yang mungkin berbeda dengan waktu simulasi absolut.

Rekaman paket Wireshark

Secara default, semua frame IEEE 802.15.4 yang dikirim akan direkam dalam file PCAP current.pcap. File ini dapat dibaca oleh Wireshark selama atau setelah simulasi. Karena enkripsi lapisan link Thread, tindakan konfigurasi satu kali di Wireshark diperlukan untuk menetapkan kunci dekripsi OTNS dengan benar. Secara default, satu Kunci Jaringan yang terkenal 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 -> Preferensi di menu. Kemudian, di jendela preferensi, pilih Protocols -> IEEE 802.15.4. Klik tombol Edit... di samping "Kunci Dekripsi". Klik + untuk membuat entri baru dan 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 "Waktu" (dalam detik) sesuai dengan nilai waktu simulasi absolut yang ditampilkan di log node OpenThread. Hal ini memudahkan korelasi pesan log dengan frame radio yang dikirim atau diterima. Namun, nilainya biasanya tidak identik hingga presisi satu mikrodetik: 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 sudah mengetahui apa itu OTNS dan cara menggunakan OTNS untuk menyimulasikan jaringan OpenThread.

Apa langkah selanjutnya?

Lihat beberapa codelab ini...

Dokumen referensi