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

1. Giriş

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

Thread ve OTNS nedir?

Thread, cihazdan cihaza ve cihazdan buluta güvenli iletişimi sağlayan, IP tabanlı düşük güçte kablosuz mesh ağ protokolüdür. Thread ağları, tek bir hata noktası olması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 boyutu ve bellek ayak izine 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ı oluşturulmuş simülasyonlar (Python ile) da mümkündür.

Neler öğreneceksiniz?

  • OTNS'yi ve bağımlılarını yükleme
  • OTNS-CLI'nın temel özelliklerini öğrenin
  • OTNS-Web'de OpenThread düğümlerini ekleme/taşıma/silme
  • Ağ simülasyonunu kontrol etmek için OTNS-Web'in diğer faydalı özelliklerini kullanma
  • OpenThread'in tek hata noktası içermediğini 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. Python komut dosyası oluşturma gibi OTNS'nin diğer özellikleri ele alınmamıştır.

İhtiyacınız olanlar

  • Thread Primer. Bu Codelab'de öğretilenleri anlamak için Thread'in temel kavramlarını bilmeniz gerekir.
  • Tercihen Linux x86_64 veya Homebrew yüklü Mac OS. Windows WSL2'de Ubuntu 24 veya sonraki sürümler de çalışır ancak ayarlarda bazı manuel değişiklikler yapılması gerekebilir.
  • Git.
  • Web tarayıcısı. OTNS-Web, simülasyonları görüntülemek için web tarayıcısı kullanır.
  • Wireshark ağ protokolü analiz aracı (isteğe bağlı).
  • Go 1.23 veya sonraki bir sürümü.
    • Yükleme komut dosyası, yüklü Go sürümünü kontrol eder.
    • Go yüklü değilse paket yöneticisinde varsa 1.23 veya daha yeni bir sürüm yüklenir.
    • Paket yöneticisinden kullanılamıyorsa manuel yükleme gerekir.
    • Ubuntu 24.04 veya daha eski sürümlerin Go 1.23'ü otomatik olarak desteklemediğini unutmayın. Ayrıntılar için Ubuntu belgelerindeki Available Golang versions (Kullanılabilir Golang sürümleri) sayfasına bakın. snap kullanılarak veya başka yöntemlerle manuel yükleme yapılabilir.
  • Python 3.9 veya sonraki sürümler.
    • Yükleme komut dosyası, yüklü Python sürümünü kontrol eder.
    • Python 3 henüz yüklenmemişse paket yöneticisinde varsa 3.9 veya daha yeni bir sürüm yüklenir.
    • Paket yöneticisinden kullanılamıyorsa manuel yükleme gerekir.

Terminoloji

Başlangıçta Thread Router olarak adlandırılan Thread Mesh Extender için teknik terim olarak "Router" kullanılır. "Düğüm", OTNS simülasyonundaki herhangi bir simüle edilmiş OpenThread cihazını ifade eder.

2. Kurulum

OTNS kodu alma

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

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

Bootstrap ve yükleme

bootstrap komut dosyası, bağımlılıkları (gerekirse Python 3 ve Go/Golang dahil) ve OTNS'yi yükler. Python sürümü >= 3.9 veya Go sürümü >= 1.23 gibi belirli bağımlılıkları otomatik olarak yükleyemezse komut dosyasının durabileceğini unutmayın. Otomatik yükleme için paketlerin, işletim sisteminin yapılandırılmış paket deposunda bulunması gerekir.

Komut dosyası, doğrudan simülasyonda kullanılabilecek çeşitli OT düğüm türlerini de oluşturur ve bazı temel testler gerçekleştirir. Bu düğüm derlemeleri nedeniyle birkaç dakika sürebilir.

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

Komut dosyası yürütülürken sudo için şifre girmeniz istenebilir.

otns düzgün yüklenmemişse

Komut dosyası şu gibi bir hata bildirebilir:

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

Bu durumda, $(go env GOPATH)/bin değerini $PATH değişkeninize eklemeniz gerekir.

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

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

Koşu otns:

$ otns
>_ ← OTNS-CLI prompt

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

Başlangıçta OTNS-Web penceresi

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

Aşağıdaki bölümlerde, OTNS-CLI ve OTNS-Web üzerinden OTNS simülasyonlarını 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 komutların 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. Simüle edilmiş Thread ağının düğümlerini, mesajlarını ve bağlantılarını görsel olarak gösterir. 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 Thread yönlendirici ekleyin:

> add router
1
Done

OTNS-Web içinde oluşturulan bir düğümü görmelisiniz. Düğüm, yönlendirici olarak başlar ve birkaç saniye içinde lider olur:

Lider rolünde 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ğ parametreleri grubuyla devreye alınır.

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

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

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

Düğümlerin tek bir bölüntüde birleşmesi için birkaç saniye bekleyin. OTNS-Web içinde düğümleri görmeniz gerekir:

4 düğümlü Thread ağı

Ayrıca OTNS-Web bölümünde, düğüm hakkında daha fazla bilgi içeren bir panel görüntülemek için düğümlerden herhangi birini seçebilirsiniz. Örneğin, aşağıdaki şekilde 1. düğüm seçilmiştir. Paneldeki "Rol" girişi, kullanıcının lider olduğunu onaylar.

4 düğümlü Thread ağı, 1. düğüm seçili

OTNS-Web ile düğüm ekleme

OTNS-Web simgesini kullanarak da düğüm ekleyebilirsiniz. Action Bar simgesinin New Router düğmesini tıklayın. Seçilen düğümün sağında bir düğüm 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

Bu diğer düğüm türlerini oluşturmak için işlem çubuğundaki FED, MED, SSED ve BR düğmelerini de tıklayın. Toplamda 9 düğüm olmalıdır. İsterseniz farklı bir fiziksel ağ topolojisi oluşturmak için bazı düğümleri başka konumlara sürükleyin.

Birden fazla yeni düğüm eklendi, toplam 9 düğüm

Artık birçok düğüm içeren tek bölümlü bir Thread ağı oluşturdunuz. Bir 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. Bu, simülasyon süresinin, ilk düğümü oluşturduğumuzdan beri geçen gerçek süreyle aynı olduğu anlamına gelir.

Hızı OTNS-CLI üzerinden ayarlama

Simülasyon hızını OTNS-CLI üzerinden ayarlayabilirsiniz.

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

> speed 100
Done

Düğümlerin mesajları eskisinden çok daha sık gönderdiğini görürsünüz.

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

> speed max
Done

OTNS, olabildiğince hızlı simülasyon yapmaya çalışır. Bu nedenle, düğümlerin çok sayıda mesaj gönderdiğini görürsünüz.

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 değerinden büyük bir değere ayarladığınızda simülasyon devam eder.

Hızı OTNS-Web üzerinden ayarlama

Hız kontrolü düğmeleri

Action Bar üzerindeki hız kontrolü düğmelerini Hız kontrolü düğmeleri bulun. Düğmelerde mevcut simülasyon hızı gösterilir. Bu düğmeler, simülasyon hızını ayarlamak ve simülasyonu duraklatıp devam ettirmek için kullanılabilir.

Simülasyonu hızlandırma

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

Simülasyonu yavaşlatma

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

Simülasyonu duraklat

Simülasyon çalışırken duraklatmak için Duraklat düğmesi düğmesini tıklayın. Düğme Oynat düğmesi olarak değiştirilir.

Simülasyonu devam ettir

Simülasyon duraklatıldığında 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 ayarla

Zaman kazanmak için

OTNS-CLI simülasyon hızını ayarlamak için

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

> speed 10
Done

7. Radyoyu Açma/Kapatma

Simülasyon artık en az 2 yönlendirici (altıgen şekli), muhtemelen bir sınır yönlendirici (kare şekli) ve birçok alt öğe içermeli ve 10 kat hızda çalışmalıdır.

2 yönlendiricinin mevcut liderini (kırmızı kenarlık) bulun ve seçmek için tek tıklayın:

1 numaralı lider düğümün seçili olduğu Thread ağı

Radyoyu kapat

Lider düğümün radyosunu kapatmak için işlem çubuğundaki Radyoyu kapatma düğmesi düğmesini tıklayın. Lider, radyo kapalıyken mesaj gönderemez veya 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 lider olarak 9. düğümle oluşturulur.

Thread ağı, yeni bir bölüm oluşturup yeni bir lider seçerek lider arızasından otomatik olarak kurtulur. Yeni bölümün de yeni bir bölüm rengi vardır.

Radyoyu aç

Radyosu kapatılan lideri seçin. Radyo bağlantısını geri yüklemek için Radyo düğmesi düğmesini tıklayın:Action Bar

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

Radyo bağlantısı geri yüklendikten sonra Lider, ağa yeniden bağlanmalıdır.

8. Düğümleri taşıma

OTNS, kullanıcıların OTNS-CLI veya OTNS-Web aracılığıyla düğümleri kolayca taşımasını sağlar.

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

Sınır yönlendirici düğümünü 9 yeni bir konuma taşıyın:

> move 9 50 50
Done

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

5. düğümü sürükleyerek en sağ alta taşıyın. 5. düğüm artık diğer yönlendiricilerin radyo kapsama alanı dışında olduğundan 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 uzaklaştırılır ve yeni bir bölüm oluşturur.

5. düğüm ile 9. düğüm arasında tek bir yeşil çizgi çizildiğini unutmayın. Bu durum genellikle bir çocukla ilgili eski bilgilerden kaynaklanır. Bu bilgiler, eski bir ebeveynin çocuk tablosunda saklanmaya devam eder. Alternatif olarak, 9. düğüm ile 5. düğüm arasındaki eski yönlendiriciden yönlendiriciye bağlantıyla ilgili güncel olmayan bilgiler de olabilir. (Veya bu durumda, oluşturma hatası da olabilir.) Sonunda, uygun zaman aşımından sonra eski bilgiler düğümlerde temizlenir.

9. Düğümleri Silme

OTNS-CLI üzerinden düğümleri silme

5. düğümü silin:

> del 5
Done

5. düğüm simülasyondan kaybolmalıdır:

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

OTNS-Web üzerinden düğümleri silme

9 numaralı Border Router düğümünü seçin ve 9 numaralı düğümü silmek için Action Bar üzerindeki Sil düğmesi düğmesini tıklayın:

Border Router düğümü 9 silindi

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

10. OTNS-CLI Node Context

OTNS-CLI, geliştiricilerin bir düğümün durumunu teşhis etmesine yardımcı olmak için düğümlerle kolay etkileşim kurmaya yönelik düğüm bağlamı modu sağlar. Ayrıca, bu modda 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 , geçerli 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 KSA 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> 

Çıkış düğümü bağlamı

node 1> exit
Done
>

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

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. Bunlar ./tmp dizininde görüntülenebilir. Dosya adı 0_.log. Örneğin, bir günlük dosyası alıntısı aşağıda 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

Mikrosaniye cinsinden mutlak simülasyon süresi solda 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 PCAP dosyasında current.pcap 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ı düzgün şekilde ayarlamak üzere Wireshark'ta tek seferlik bir yapılandırma işlemi yapılması gerekir. Varsayılan olarak, Wireshark tarafından çerçeve şifre çözme işleminin kolaylaştırılması için 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'ta OpenThread paket analizinin ekran görüntüsü

Şifre çözme anahtarını yapılandırmak için menüde Düzenle -> Tercihler'i seçin. Ardından, tercihler penceresinde Protocols -> 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 "İş parçacığı 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 düzgün şekilde şifresi çözülmelidir.

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

12. Tebrikler

Tebrikler, ilk OTNS simülasyonunuzu başarıyla gerçekleştirdiniz.

OTNS'yi ve bağımlılarını nasıl yükleyeceğinizi öğrendiniz. OpenThread simüle edilmiş düğümleriyle bir OTNS simülasyonu başlattınız. OTNS-CLI ve 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?

Aşağıdaki codelab'lere göz atın:

Referans belgeleri