1. Giriş
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:
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:
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:
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:
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.
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:
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.
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 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 düğmesini tıklayarak simülasyonu hızlandırabilirsiniz:
.
Simülasyonu yavaşlatma
düğmesini tıklayarak simülasyonu yavaşlatabilirsiniz.
Simülasyonu duraklat
Çalışan simülasyonu duraklatmak için düğmesini tıklayın. Düğme
olarak değiştirilir.
Simülasyonu devam ettirme
Duraklatılmış simülasyonu devam ettirmek için düğmesini tıklayın. Düğme tekrar
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:
Radyoyu kapat
Lider düğümün radyosunu kapatmak için işlem çubuğundaki 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:
İ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 düğmesini tıklayın:
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 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:
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 düğmesini tıklayın:
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_
. Ö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.
Ş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...
- OpenThread ile Thread ağını simüle etme
- Docker'da OpenThread kullanarak bir Thread ağını simüle etme
- nRF52840 kartları ve OpenThread ile Thread ağı oluşturma