OTNS kullanarak ileti dizisi ağlarını simüle etme

Bu codelab hakkında
schedule30 dakika
subjectSon güncelleme 23 Mayıs 2025
account_circleYazan: Simon Lin, Colin Tan, Esko Dijk

1. Giriş

Thread örgülü ağ topolojisinin gösterimi

Thread ve OTNS nedir?

Thread, cihazlar arası ve cihazdan buluta güvenli iletişim sağlayan IP tabanlı, düşük güç tüketimine sahip bir kablosuz örgülü ağ protokolüdür. Konu ağları, tek bir hata noktasını önlemek için topoloji değişikliklerine uyum sağlayabilir.

Google tarafından yayınlanan OpenThread, Thread'in açık kaynaklı bir uygulamasıdır. OpenThread, küçük kod boyutuna ve bellek kullanımına rağmen Thread Spesifikasyonu'nda tanımlanan tüm özellikleri destekler.

OpenThread Network Simulator (OTNS), posix platformlarında simüle edilmiş OpenThread düğümleri çalıştırarak Thread ağlarını simüle etmek için kullanılabilir. OTNS, simüle edilmiş Thread ağlarını görselleştirmek ve çalıştırmak için kullanımı kolay bir web arayüzü (OTNS-Web) sağlar. Komut dosyası simülasyonları (Python ile) da mümkündür.

Neler öğreneceksiniz?

  • OTNS'yi ve bağımlılarını yükleme
  • OTNS-CLI'nin temel özelliklerini öğrenin
  • OTNS-Web'de OpenThread düğümleri ekleme/taşıma/silme
  • Ağ simülasyonunu kontrol etmek için OTNS-Web'in diğer kullanışlı özelliklerini kullanın
  • OpenThread'ın tek bir hata noktası olmadığını doğrulama
  • Wireshark'ta OpenThread düğümleri arasındaki veri trafiğini görme

Bu codelab, etkileşimli kullanım için OTNS-CLI ve OTNS-Web'e odaklanmaktadır. OTNS'nin Python komut dosyası yazma gibi diğer özellikleri bu kapsamda değildir.

İhtiyacınız olanlar

  • Tercihen Linux x86_64 veya Homebrew yüklü Mac OS. Windows WSL2'de Ubuntu 22/24 de çalışır ancak ayarlarda manuel olarak bazı düzenlemeler yapılması gerekebilir.
  • Git.
  • Web tarayıcısı. OTNS-Web, simülasyonları görüntülemek için bir web tarayıcısı kullanır.
  • İleti dizisiyle ilgili temel bilgiler. Bu Codelab'de öğretilenleri anlamak için Thread'in temel kavramlarını bilmeniz gerekir.

Terminoloji

"Yönlendirici" terimi, başlangıçta Thread Yönlendirici olarak adlandırılan Thread Mesh Extender için teknik terim olarak kullanılır. "Düğüm", bir OTNS simülasyonundaki tüm simüle edilmiş OpenThread cihazlarını ifade eder.

2. Kurulum

OTNS kodu alma

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

Bu Codelab'deki sonraki tüm konsol komutları otns dizininden çalıştırılır.

Bootstrap ve yükleme

bootstrap komut dosyası, bağımlılıkları (gerekirse Python3 ve Go/Golang dahil) ve OTNS'yi yükler. Ayrıca doğrudan bir simülasyonda kullanılabilecek çeşitli OT düğümü türlerini oluşturur ve bazı temel testler gerçekleştirir. Düğüm derlemeleri nedeniyle bu işlem birkaç dakika sürebilir.

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

sudo için şifre girmeniz istenebilir.

otns düzgün şekilde yüklenmemişse

Komut dosyası aşağıdaki gibi bir hata bildirebilir:

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

Bu durumda, $PATH. dosyanıza $(go env GOPATH)/bin eklemeniz gerekir.

Diğer hatalar için GitHub sorunu oluşturulabilir.

3. OTNS'yi ilk kez çalıştırma

otns'ü çalıştırın:

$ otns
>_ ← OTNS-CLI prompt

OTNS başarıyla başlatıldığında bir CLI konsoluna (OTNS-CLI) girer ve ağ görselleştirme ve yönetimi için bir web tarayıcısı (OTNS-Web) açar:

Başlangıçta OTNS-Web penceresi

OTNS-Web için yalnızca boş bir sayfa görüyorsanız tarayıcınızda WebGL etkin olmayabilir. WebGL'yi etkinleştirme hakkında bilgi edinmek için lütfen https://superuser.com/a/836833 adresine bakın.

Aşağıdaki bölümlerde, OTNS simülasyonlarını OTNS-CLI ve OTNS-Web aracılığıyla yönetmeyi öğreneceksiniz.

4. OTNS-CLI ve OTNS-Web'i Tanıma

OTNS-CLI

OTNS-CLI, OTNS simülasyonlarını yönetmek için kullanılan komut satırı arayüzüdür (KSA).

$ otns
>_ ← OTNS-CLI prompt

OTNS-CLI üzerinden komut yazabilirsiniz. Komutların tam listesi için OTNS KSA referansına bakın. Endişelenmeyin, bu Codelab'de bu komutlardan yalnızca birkaçını kullanacaksınız.

CLI komutlarına genel bakış için help komutunu yazın. Bu liste, CLI referansıyla aynıdır.

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

Belirli bir komut hakkında daha fazla yardım almak için komutun adını kullanın. Örneğin:

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

OTNS-Web

OTNS-Web, OTNS'nin ağ görselleştirme ve yönetim aracıdır. Bu sayfa, simüle edilen mesaj dizisi ağının düğümlerini, mesajlarını ve bağlantılarını görsel olarak temsil eder. OTNS-Web öğesinin çeşitli unsurlarına dikkat edin:

OTNS-Web elements explained

5. Düğüm ekleme

OTNS-CLI aracılığıyla düğüm ekleme

Simülasyona bir mesaj ağı yönlendiricisi ekleyin:

> add router
1
Done

OTNS-Web alanında oluşturulan bir düğüm görürsünüz. Düğüm, Yönlendirici olarak başlar ve birkaç saniye içinde Lider olur:

Lider rolündeki bir düğüm

Simülasyonları etkileşimli olarak başlatmayı kolaylaştırmak için her yeni OpenThread düğümü varsayılan olarak standart bir ağ parametresi grubuyla devreye alınır.

OTNS-CLI üzerinden daha fazla düğüm ekleme

Şimdi farklı türde bazı düğümler ekleyeceğiz.

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

Nodların tek bir bölümde birleştirilmesi için birkaç saniye bekleyin. OTNS-Web içindeki düğümleri görürsünüz:

4 düğüm içeren Thread ağı

Ayrıca OTNS-Web'te, düğümlerden herhangi birini seçerek düğümle ilgili daha fazla bilgi içeren bir panel açabilirsiniz. Örneğin, aşağıdaki şekilde 1. düğüm seçilidir. Paneldeki "Roll" (Roll) girişi, kullanıcının lider olduğunu onaylar.

4 düğüm içeren ve 1. düğümün seçili olduğu İleti Dizisi Ağı

OTNS-Web ile düğüm ekleme

OTNS-Web aracılığıyla da düğüm ekleyebilirsiniz. Action Bar'un New Router düğmesini tıklayın. Seçilen düğümün sağında bir düğümün oluşturulduğunu görürsünüz. Yeni yönlendirici, mevcut Thread bölümüne katılmalıdır:

Bir yönlendirici eklenir, toplam 5 düğüm

Diğer düğüm türlerini oluşturmak için işlem çubuğundaki FED, MED, SSED ve BR düğmelerini de tıklayabilirsiniz. Artık toplamda 9 düğüm olmalıdır. İsterseniz farklı bir fiziksel ağ topolojisi oluşturmak için bazı düğümleri diğer konumlara sürükleyebilirsiniz.

Toplam 9 düğüm olmak üzere birden fazla yeni düğüm eklendi

Artık birçok düğüm içeren bir bölümden oluşan bir iş parçacığı ağı oluşturdunuz. Sonraki bölümde, simülasyonun daha hızlı çalışması için simülasyon hızını ayarlayacağız.

6. Hızı ayarlama

Şu anda simülasyon 1X hızında çalışıyor olmalıdır. Yani, şu ana kadar geçen simülasyon süresi, ilk düğümü oluşturduğumuz andan itibaren geçen gerçek süreyle aynıdır.

OTNS-CLI ile hızı ayarlama

OTNS-CLI simgesini kullanarak simülasyon hızını ayarlayabilirsiniz.

Simülasyon hızını 100X olarak ayarlama

> speed 100
Done

Nod'ların mesajları eskisinden çok daha sık gönderdiğini göreceksiniz.

Simülasyon hızını MAX olarak ayarlama

> speed max
Done

OTNS, olabildiğince hızlı bir şekilde simülasyon yapmak için elinden geleni yapıyor. Bu nedenle, düğümlerin çok sayıda mesaj gönderdiğini göreceksiniz.

Simülasyonu duraklat

> speed 0
Done

Simülasyon hızını 0 olarak ayarlamak simülasyonu duraklatır.

Simülasyonu normal hızda geri yükleme

> speed 1
Done

Simülasyon hızını 0'ten büyük bir değere ayarlamak simülasyonu devam ettirir.

OTNS-Web ile hızı ayarlama

Hız kontrol düğmeleri

Action Bar üzerinde hız kontrol düğmelerini Hız kontrol düğmeleri bulun. Düğmeler, mevcut simülasyon hızını gösterir ve simülasyon hızını ayarlamak ve simülasyonu duraklatmak/devam ettirmek için kullanılabilir.

Simülasyonu hızlandırma

Hız MAX'a ulaşana kadar Hızı artır düğmesi düğmesini tıklayarak simülasyonu hızlandırabilirsiniz: MAKS simülasyon hızı göstergesi.

Simülasyonu yavaşlatma

Hızı azalt düğmesi düğmesini tıklayarak simülasyonu yavaşlatabilirsiniz.

Simülasyonu duraklat

Çalışan simülasyonu duraklatmak için Duraklat düğmesi düğmesini tıklayın. Düğme Oynat düğmesi olarak değiştirilir.

Simülasyonu devam ettirme

Duraklatılmış simülasyonu devam ettirmek için Oynat düğmesi düğmesini tıklayın. Düğme tekrar Duraklat düğmesi olarak değiştirilir.

Simülasyon hızını 10X olarak ayarlama

Zamandan tasarruf etmek için

OTNS-CLI simulasyon hızını

10X ağdaki topoloji değişikliklerini çok daha hızlı gözlemleyebiliriz.

> speed 10
Done

7. Radyoyu Açma/Kapatma

Artık simülasyonda en az 2 yönlendirici (altıgen şeklinde), muhtemelen bir sınır yönlendirici (kare şeklinde) ve birçok alt öğe bulunmalıdır. Ayrıca simülasyon 10 kat hızda çalışmalıdır.

2 yönlendiricinin mevcut liderini (kırmızı kenarlıklı) bulun ve tek tıklamayla seçin:

Lider düğümü 1 seçili ileti dizisi ağı

Radyoyu kapat

Lider düğümün radyosunu kapatmak için işlem çubuğundaki Radyo Kapalı düğmesi düğmesini tıklayın. Lider, radyo kapalıyken mesaj gönderip alamaz.

Diğer yönlendiricinin veya sınır yönlendiricinin yeni lider olması için yaklaşık 12 saniye (simülasyon süresinde 120 saniye) bekleyin:

Yeni bölüm, yeni yönetici olarak 9. düğümle oluşturulur

İleti dizisi ağı, yeni bir liderle yeni bir bölüm oluşturarak lider hatasından otomatik olarak kurtarır. Yeni bölümde yeni bir bölüm rengi de vardır.

Radyoyu aç

Radyosu kapalı olan Lideri seçin. Radyo bağlantısını geri yüklemek için Action Bar üzerindeki Radyo açma düğmesi düğmesini tıklayın:

1. düğüm, radyosu tekrar açıldıktan sonra bölüme katılır

Radyo bağlantısı yeniden kurulduktan sonra lider ağa yeniden bağlanmalıdır.

8. Düğümleri taşıma

OTNS, kullanıcıların OTNS-CLI veya OTNS-Web üzerinden kolayca düğüm taşımasını sağlar.

Düğümü OTNS-CLI üzerinden taşıma

Sınır Yönlendiricisi düğümü 9'u yeni bir konuma taşıyın:

> move 9 50 50
Done

OTNS-Web üzerinden düğüm taşıma

5. düğümü sürükleyerek sağ alta taşıyın. 5. düğüm artık diğer yönlendiricilerin radyo kapsama alanından çıktığı için yeni bir bölüm kimliğiyle kendi bölümünü oluşturur. Bölüm kimlikleri, düğümleri tıklayarak düğüm bilgileri panelinde kontrol edilebilir.

5. düğüm diğer düğümlerden ayrılır ve yeni bir bölüm oluşturur

5. düğüm ile 9. düğüm arasında hâlâ tek bir yeşil çizginin çizildiğini unutmayın. Bu durum genellikle, eski bir ebeveynin çocuk tablosunda hâlâ tutulan, çocukla ilgili eski bilgilerden kaynaklanır. Ya da 9. düğüm ile 5. düğüm arasındaki eski yönlendirici-yönlendirici bağlantısıyla ilgili eski bilgiler olabilir. (Bu durumda, oluşturma hatası da olabilir.) Uygun zaman aşımı süresinin ardından eski bilgiler düğümlerden temizlenir.

9. Düğümleri silme

OTNS-CLI üzerinden düğümleri silme

5. düğümü silin:

> del 5
Done

5. düğüm simülasyondan kaybolur:

5. düğüm simülasyondan silinir.

OTNS-Web üzerinden düğümleri silme

9. sınır yönlendirici düğümünü seçin ve 9. düğümü silmek için Action Bar üzerindeki Sil düğmesi düğmesini tıklayın:

Sınır Yönlendiricisi düğümü 9 silinir.

Node 1 yeni bir bölümün lideri olur ve kalan tüm düğümler 1. düğüme alt düğüm olarak bağlanır.

10. OTNS-CLI Düğüm Bağlamı

OTNS-CLI, geliştiricilerin düğümlerin durumunu teşhis etmesine yardımcı olmak için düğümlerle kolayca etkileşim kurmak üzere düğüm bağlamı modu sağlar. Ayrıca bu moddan düğüm işlemleri de başlatılabilir.

Düğüm bağlamı moduna girme

1. düğümün düğüm bağlamını girin:

> node 1
Done
node 1>

CLI istemi , mevcut düğüm bağlamını belirten node 1> olarak değişti. Düğümle doğrudan etkileşim kuruyormuş gibi düğümde yürütülecek OpenThread CLI komutlarını yazabilirsiniz.

Komutları düğüm bağlamında yürütme

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

Başka bir düğüm bağlamına geçme

node 1> node 2
Done
node 2> 

Düğüm bağlamından çıkma

node 1> exit
Done
>

Düğüm bağlamından çıkmanın alternatif bir yolu da node 0 komutudur.

11. Düğüm günlüklerini ve paket yakalamalarını görüntüleme

OpenThread düğüm günlükleri

OTNS, varsayılan olarak tüm simüle edilmiş OpenThread düğümleri için ayrıntılı günlük dosyaları oluşturur. Bu dosyaları ./tmp dizininde görebilirsiniz. Dosya adı 0_.log. Örneğin, aşağıdaki günlük dosyası alıntısı gösterilmektedir:

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

Sol tarafta, mikrosaniye cinsinden mutlak simülasyon süresi gösterilir. hh:mm:ss zaman damgası, OpenThread düğümünün kendi günlük zaman damgasını gösterir. Bu zaman damgası, mutlak simülasyon zamanından farklı olabilir.

Wireshark paket yakalamaları

Varsayılan olarak, iletilen tüm IEEE 802.15.4 çerçeveleri current.pcap PCAP dosyasında yakalanır. Bu dosya, simülasyon sırasında veya sonrasında Wireshark tarafından okunabilir. Thread'in bağlantı katmanı şifrelemesi nedeniyle, OTNS için şifre çözme anahtarını doğru şekilde ayarlamak üzere Wireshark'ta tek seferlik bir yapılandırma işlemi gerekir. Wireshark tarafından çerçeve şifresinin kolayca çözülmesi için varsayılan olarak iyi bilinen bir ağ anahtarı kullanılır.

Wireshark'ta OpenThread paket denetimi örneği için aşağıdaki ekran görüntüsüne bakın.

Wireshark'taki OpenThread paket analizinin ekran görüntüsü

Şifre çözme anahtarını yapılandırmak için menüden Düzenle -> Tercihler'i seçin. Ardından, tercihler penceresinde Protokol -> IEEE 802.15.4'ü seçin. "Şifre Çözme Anahtarları"nın yanındaki Düzenle... düğmesini tıklayın. Yeni bir giriş oluşturmak için + simgesini tıklayın, 00112233445566778899aabbccddeeff anahtarını (32 karakter) girin ve "Anahtar karması" alanında "Mesaj dizisi karması"nı seçin. "Şifre çözme anahtarı dizini" 0 olarak bırakılabilir. Ardından Tamam'ı ve tekrar Tamam'ı tıklayın. Artık OTNS PCAP dosyası yüklendiğinde şifresi düzgün şekilde çözülecektir.

"Saat" sütununda gösterilen zaman damgaları (saniye cinsinden), OpenThread düğüm günlüklerinde gösterilen mutlak simülasyon süresi değerlerine karşılık gelir. Bu sayede günlük mesajlarını, iletilen veya alınan radyo çerçeveleriyle ilişkilendirmek daha kolay olur. Ancak değerler genellikle tek mikrosaniye hassasiyetine kadar aynı değildir: OpenThread yığını tarafından bir radyo çerçevesinin gönderilmesi istendikten sonra, simüle edilen IEEE 802.15.4 radyo donanımı biraz daha gecikme ekleyebilir.

12. Tebrikler

Tebrikler, ilk OTNS simülasyonunuzu başarıyla çalıştırdınız.

OTNS'yi ve bağımlılarını nasıl yükleyeceğinizi öğrendiniz. OpenThread simülasyonlu düğümlerle bir OTNS simülasyonu başlattınız. Hem OTNS-CLI hem de OTNS-Web aracılığıyla simülasyonu çeşitli şekillerde nasıl değiştireceğinizi öğrendiniz.

Artık OTNS'nin ne olduğunu ve OpenThread ağlarını simüle etmek için OTNS'yi nasıl kullanabileceğinizi biliyorsunuz.

Sırada ne var?

Bu codelab'lerden bazılarına göz atın...

Referans dokümanları