1. Pengantar
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
):
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
:
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:
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
:
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.
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:
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.
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 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 hingga kecepatan mencapai
MAX
: .
Memperlambat simulasi
Anda dapat memperlambat simulasi dengan mengklik tombol .
Jeda simulasi
Klik tombol untuk menjeda simulasi saat sedang berjalan. Tombol akan diubah menjadi
.
Melanjutkan simulasi
Klik tombol untuk melanjutkan simulasi saat dijeda. Tombol akan diubah kembali menjadi
.
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:
Matikan radio
Klik tombol 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:
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 di
Action Bar
untuk memulihkan konektivitas radio:
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.
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:
Menghapus node melalui OTNS-Web
Pilih node Border Router 9, lalu klik tombol di
Action Bar
untuk menghapus node 9:
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_
. 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.
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...
- Menyimulasikan jaringan Thread dengan OpenThread
- Mensimulasikan jaringan Thread menggunakan OpenThread di Docker
- Mem-build jaringan Thread dengan board nRF52840 dan OpenThread