Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

OpenThread ile bir Thread ağını simüle etme

26b7f4f6b3ea0700.png

Google tarafından yayınlanan OpenThread , Thread ağ protokolünün açık kaynaklı bir uygulamasıdır. Google Nest, bağlantılı ev için ürünlerin geliştirilmesini hızlandırmak amacıyla Nest ürünlerinde kullanılan teknolojiyi geliştiricilere yaygın olarak sunmak için OpenThread'i piyasaya sürdü.

İş Parçacığı özelliği , ev uygulamaları için IPv6 tabanlı, güvenilir, güvenli ve düşük güç tüketen kablosuz bir aygıttan aygıta iletişim protokolünü tanımlar. OpenThread, IPv6, 6LoWPAN, IEEE 802.15.4, MAC güvenliği, Mesh Link Establishment ve Mesh Routing dahil olmak üzere tüm Thread ağ katmanlarını uygular.

Bu Codelab, simüle edilmiş cihazlarda bir Thread ağını simüle etme konusunda size yol gösterir.

Ne öğreneceksin

  • OpenThread derleme araç zinciri nasıl kurulur
  • Thread ağı nasıl simüle edilir
  • İş parçacığı düğümleri nasıl doğrulanır
  • OpenThread Daemon ile bir Thread ağı nasıl yönetilir

Neye ihtiyacın olacak

  • git
  • Temel Linux bilgisi, ağ yönlendirme

Git

Bu Codelab'i tamamlamak için Git gereklidir. Devam etmeden önce indirin ve kurun.

Git'i indirin

Kurulduktan sonra, OpenThread'i indirmek ve oluşturmak için kendi işletim sisteminizin talimatlarını izleyin.

Mac OS X için XCode

Mac OS X'te OpenThread'i kurmak ve oluşturmak için XCode gereklidir.

XCode'u indirin

XCode yüklendikten sonra, XCode Komut Satırı Araçlarını kurun:

$ xcode-select --install

Linux / Mac OS X üzerine inşa edin

Bu kurulum talimatları Ubuntu Server 14.04 LTS ve Mac OS X Sierra 10.12.6 üzerinde test edilmiştir.

OpenThread'i yükleyin. bootstrap komutları, araç zincirinin kurulduğundan ve ortamın doğru şekilde yapılandırıldığından emin olun:

$ mkdir -p ~/src
$ cd ~/src
$ git clone --recursive https://github.com/openthread/openthread.git
$ cd openthread
$ ./script/bootstrap
$ ./bootstrap

Windows kullanımı

Windows'u tercih ediyorsanız, bu Codelab'in Docker sürümünü denemenizi öneririz.

Docker'da OpenThread Simulation

Kurulumunuz tamamlandığında, örnek OpenThread uygulamasını oluşturun. Bu Codelab için simülasyon örneğini kullanıyoruz.

$ cd ~/src/openthread
$ make -f examples/Makefile-simulation

Şimdi OpenThread Daemon oluşturun:

$ cd ~/src/openthread
$ make -f src/posix/Makefile-posix DAEMON=1

Bu Codelab için kullanacağınız örnek uygulama, OpenThread konfigürasyonunu ve yönetim arayüzlerini temel bir komut satırı arayüzü (CLI) aracılığıyla ortaya çıkaran minimal bir OpenThread uygulamasını gösterir.

Bu alıştırma, simüle edilmiş bir Thread cihazına başka bir simüle edilmiş Thread cihazından ping atmak için gereken minimum adımlara götürür.

Aşağıdaki şekil temel bir Thread ağ topolojisini açıklamaktadır. Bu alıştırma için, yeşil daire içindeki iki düğümü simüle edeceğiz: aralarında tek bir bağlantı olan bir İş Parçacığı Lideri ve İş Parçacığı Yönlendiricisi.

6e3aa07675f902dc.png

Bir düğüme ping atma

1. Düğüm 1'i Başlatın

openthread dizinine gidin ve ot-cli-ftd ikili dosyasını kullanarak simüle edilmiş bir Thread cihazı için CLI işlemini openthread .

$ cd ~/src/openthread
$ ./output/simulation/bin/ot-cli-ftd 1

Bu ikili, POSIX üzerinde simüle edilen bir OpenThread cihazı uygular. IEEE 802.15.4 radyo sürücüsü, UDP'nin üzerinde uygulanır (IEEE 802.15.4 çerçeveleri UDP yükleri içinde geçirilir).

1 argümanı, simüle edilen cihaz için "fabrikada atanan" IEEE EUI-64'ün en az anlamlı bitlerini temsil eden bir dosya tanımlayıcısıdır. Bu değer, IEEE 802.15.4 radyo emülasyonu için bir UDP bağlantı noktasına bağlanırken de kullanılır (bağlantı noktası = 9000 + dosya tanımlayıcısı). Bu Codelab'deki simüle edilmiş bir Thread aygıtının her bir örneği farklı bir dosya tanımlayıcı kullanacaktır.

Not: Simüle edilmiş bir cihaz için işlemi oluştururken, bu Codelab'de belirtildiği gibi yalnızca 1 veya daha büyük dosya tanımlayıcılarını kullanın. Diğer kullanımlar için 0 dosya tanımlayıcısı ayrılmıştır.

Eğer görmezsen

>

komut isteminde bu komutu çalıştırdıktan sonra

enter

.

Yeni bir Operasyonel Veri Kümesi oluşturun ve onu aktif olan olarak işleyin. Operasyonel Veri Kümesi, oluşturduğunuz İş Parçacığı ağının yapılandırmasıdır.

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 20
Channel Mask: 07fff800
Ext PAN ID: d6263b6d857647da
Mesh Local Prefix: fd61:2344:9a52:ede0/64
Master Key: e4344ca17d1dca2a33f064992f31f786
Network Name: OpenThread-c169
PAN ID: 0xc169
PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4
Security Policy: 0, onrcb
Done

Bu veri kümesini etkin olan olarak kaydedin:

> dataset commit active
Done

IPv6 arayüzünü açın:

> ifconfig up
Done

İş Parçacığı protokol işlemini başlatın:

> thread start
Done

Birkaç saniye bekleyin ve cihazın İş Parçacığı Lideri olduğunu doğrulayın. Lider, yönlendirici kimliği atamasını yönetmekten sorumlu cihazdır.

> state
leader
Done

Düğüm 1'in İş Parçacığı arayüzüne atanan IPv6 adreslerini görüntüleyin (çıktınız farklı olacaktır):

> ipaddr
fd61:2344:9a52:ede0:0:ff:fe00:fc00
fd61:2344:9a52:ede0:0:ff:fe00:5000
fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
fe80:0:0:0:94da:92ea:1353:4f3b
Done

Belirli IPv6 adres türlerine dikkat edin:

  • fd = mesh-local ile başlar
  • fe80 = link-local ile başlar

Mesh-yerel adres türleri ayrıca sınıflandırılır:

  • ff:fe00 içerir ff:fe00 = Yönlendirici Bulucu (RLOC)
  • ff:fe00 içermez ff:fe00 = Uç Nokta Tanımlayıcısı (EID)

Konsol çıktınızda EID'yi tanımlayın, daha sonra kullanmak için bir not alın. Yukarıdaki örnek çıktıda, EID:

fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6

2. Düğüm 2'yi başlatın

Yeni bir terminal açın ve openthread dizinine gidin ve CLI sürecini openthread . Bu, ikinci simüle edilmiş Thread cihazınızdır:

$ cd ~/src/openthread
$ ./output/simulation/bin/ot-cli-ftd 2

Eğer görmezsen

>

komut isteminde bu komutu çalıştırdıktan sonra

enter

.

Düğüm 1'in İşletim Veri Kümesi ile aynı değerleri kullanarak İş Parçacığı Ana Anahtarını ve PAN Kimliğini yapılandırın:

> dataset masterkey e4344ca17d1dca2a33f064992f31f786
Done
> dataset panid 0xc169
Done

Bu veri kümesini etkin olan olarak kaydedin:

> dataset commit active
Done

IPv6 arayüzünü açın:

> ifconfig up
Done

İş Parçacığı protokol işlemini başlatın:

> thread start
Done

Cihaz kendisini bir Çocuk olarak başlatacaktır. Bir İş Parçacığı Alt Öğesi, yalnızca bir Ana aygıtla tek noktaya yayın trafiğini ileten ve alan bir İş Parçacığı aygıtı olan bir Son Aygıta eşdeğerdir.

> state
child
Done

2 dakika içinde, durumun child router görmelisiniz. Bir İş Parçacığı Yönlendirici, İş Parçacığı aygıtları arasında trafiği yönlendirebilir. Aynı zamanda Ebeveyn olarak da anılır.

> state
router
Done

Ağı doğrulayın

Örgü ağını doğrulamanın kolay bir yolu, yönlendirici tablosuna bakmaktır.

1. Bağlantıyı kontrol edin

Düğüm 2'de, RLOC16'yı alın. RLOC16, aygıtın RLOC IPv6 adresinin son 16 bitidir.

> rloc16
5800
Done

Düğüm 1'de, Düğüm 2'nin RLOC16'sı için yönlendirici tablosunu kontrol edin. Önce Düğüm 2'nin yönlendirici durumuna geçtiğinden emin olun.

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQI In | LQI Out | Age | Extended MAC  |
+----+--------+----------+----------+-------+---------+-----+------------------+
| 20 | 0x5000 |       63 |         0 |     0 |      0 |   0 | 96da92ea13534f3b |
| 22 | 0x5800 |       63 |         0 |     3 |      3 |  23 | 5a4eb647eb6bc66c |

Düğüm 1'in 0xa800 0xa800 tabloda bulunur ve ağa bağlı olduğunu doğrular.

2. Düğüm 2'den Düğüm 1'e Ping Yapın

Simüle edilmiş iki Thread cihazı arasındaki bağlantıyı doğrulayın. Düğüm 2'de, Düğüm 1'e atanan EID'ye ping atın:

> ping fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
> 16 bytes from fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6: icmp_seq=1
hlim=64 time=12ms

> CLI istemine dönmek için enter tuşuna basın.

Ağı test edin

Artık simüle edilmiş iki Thread cihazı arasında başarılı bir şekilde ping atabildiğinize göre, bir düğümü çevrimdışına alarak mesh ağını test edin.

Düğüm 1'e dönün ve Konuyu durdurun:

> thread stop
Done

Düğüm 2'ye geçin ve durumu kontrol edin. İki dakika içinde Düğüm 2, liderin (Düğüm 1) çevrimdışı olduğunu algılar ve Ağın leader olarak Düğüm 2 geçişini görmeniz gerekir:

> state
router
Done
...
> state
leader
Done

Onaylandıktan sonra, İş Parçacığını durdurun ve çıkmadan önce Düğüm 2'yi fabrika ayarlarına sıfırlayın. Bu alıştırmada kullandığımız Thread ağ kimlik bilgilerinin bir sonraki alıştırmaya taşınmamasını sağlamak için fabrika ayarlarına sıfırlama yapılır.

> thread stop
Done
> factoryreset
>
> exit

Ayrıca fabrika ayarlarına sıfırlayın ve Düğüm 1'den çıkın:

> factoryreset
>
> exit

Mevcut tüm CLI komutlarını keşfetmek için OpenThread CLI Başvurusu'na bakın.

Önceki alıştırmada, simüle edilmiş iki cihaz ve doğrulanmış bağlantı ile bir Thread ağı kurmuştunuz. Ancak, bu yalnızca kimliği doğrulanmamış IPv6 yerel bağlantı trafiğinin cihazlar arasında geçişine izin verir. Küresel IPv6 trafiğini aralarında (ve bir İş Parçacığı sınır yönlendiricisi aracılığıyla İnternet) yönlendirmek için, düğümlerin kimlik doğrulaması yapılmalıdır.

Kimlik doğrulaması için, bir cihazın Komiser olarak hareket etmesi gerekir. Yetkili, yeni İş Parçacığı aygıtları için şu anda seçilmiş kimlik doğrulama sunucusu ve aygıtların ağa katılması için gereken ağ kimlik bilgilerini sağlayan yetkilendiricidir.

Bu alıştırmada, önceki gibi aynı iki düğümlü topolojiyi kullanacağız. Kimlik doğrulama için, İş Parçacığı Lideri Komiser, İş Parçacığı Yönlendiricisi de Birleştirici olarak hareket edecektir.

d6a67e8a0d0b5dcb.png

1. Bir ağ oluşturun

Önceki alıştırmadan devam ediyorsanız, halihazırda açık iki terminal pencereniz olmalıdır. Değilse, ikisinin açık ve kullanıma hazır olduğundan emin olun. Biri Düğüm 1, diğeri Düğüm 2 olarak görev yapacak.

1. Düğümde, CLI sürecini başlatın:

$ cd ~/src/openthread
$ ./output/simulation/bin/ot-cli-ftd 1

Eğer görmezsen

>

komut isteminde bu komutu çalıştırdıktan sonra

enter

.

Yeni bir Operasyonel Veri Kümesi oluşturun, onu aktif olarak işleyin ve Thread'ı başlatın:

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 12
Channel Mask: 07fff800
Ext PAN ID: e68d05794bf13052
Mesh Local Prefix: fd7d:ddf7:877b:8756/64
Master Key: a77fe1d03b0e8028a4e13213de38080e
Network Name: OpenThread-8f37
PAN ID: 0x8f37
PSKc: f9debbc1532487984b17f92cd55b21fc
Security Policy: 0, onrcb
Done

Bu veri kümesini etkin olan olarak kaydedin:

> dataset commit active
Done

IPv6 arayüzünü açın:

> ifconfig up
Done

İş Parçacığı protokol işlemini başlatın:

> thread start
Done

Birkaç saniye bekleyin ve cihazın İş Parçacığı Lideri olduğunu doğrulayın:

> state
leader
Done

2. Komisyon Üyesi rolünü başlatın

Hala 1. Düğümdeyken, Komisyon Üyesi rolünü başlatın:

> commissioner start
Done

J01NME Marangoz Kimlik J01NME sahip herhangi bir J01NME ( * joker karakterini kullanarak) ağda devreye J01NME izin verin. Bir birleştirici, bir insan yönetici tarafından görevlendirilmiş bir İş Parçacığı Ağına eklenen bir cihazdır.

> commissioner joiner add * J01NME
Done

3. Joiner rolünü başlatın

İkinci bir terminal penceresinde, yeni bir CLI işlemi oluşturun. Bu, Düğüm 2.

$ cd ~/src/openthread
$ ./output/simulation/bin/ot-cli-ftd 2

Düğüm 2'de, J01NME Joiner Kimlik J01NME kullanarak Joiner rolünü etkinleştirin.

> ifconfig up
Done
> joiner start J01NME
Done

... onay için birkaç saniye bekleyin ...

Join success

Bir Joiner olarak, cihaz (Düğüm 2) Yetkili ile (Düğüm 1) kendini başarıyla doğruladı ve İş Parçacığı Ağı kimlik bilgilerini aldı.

Artık Düğüm 2'nin kimliği doğrulanmıştır, İş Parçacığını başlatın:

> thread start
Done

4. Ağ kimlik doğrulamasını doğrulayın

Şimdi ağa katıldığını doğrulamak için Düğüm 2'deki state kontrol edin. İki dakika içinde, Düğüm 2 child router :

> state
child
Done
...
> state
router
Done

5. Yapılandırmayı sıfırlayın

Sonraki egzersize hazırlanmak için yapılandırmayı sıfırlayın. Her Düğümde, İş Parçacığını durdurun, fabrika ayarlarına sıfırlayın ve simüle edilmiş Diş cihazından çıkın:

> thread stop
Done
> factoryreset
>
> exit

factoryreset komutunun ardından > istemini geri getirmek için birkaç kez enter tuşuna basmanız gerekebilir.

Bu alıştırma için, bir CLI örneğini (tek bir yerleşik SoC İş Parçacığı aygıtı) ve bir Radyo Ortak İşlemci (RCP) örneğini simüle edeceğiz.

ot-daemon , OpenThread çekirdeğinin hizmet olarak çalışabilmesi için girdi ve çıktı olarak bir UNIX soketi kullanan OpenThread Posix uygulamasının bir modudur. Bir istemci, protokol olarak OpenThread CLI kullanarak sokete bağlanarak bu hizmetle iletişim kurabilir.

ot-ctl , ot-ctl yönetmek ve yapılandırmak için ot-daemon tarafından sağlanan bir CLI'dir. Bunu kullanarak, RCP'yi Thread cihazı tarafından oluşturulan ağa bağlayacağız.

Ot-arka plan programı kullanın

Bu alıştırma, aşağıdakilere karşılık gelen üç terminal penceresi kullanacaktır:

  1. Simüle edilmiş iş parçacığı aygıtının CLI örneği (Düğüm 1)
  2. ot-daemon süreci
  3. ot-ctl CLI örneği

Önceki alıştırmadan devam ediyorsanız, zaten açık iki terminal pencereniz olmalıdır. Bu alıştırma için kullanılabilir üç terminal pencereniz olduğundan emin olmak için üçte birini açın.

1. Düğüm 1'i Başlatın

İlk terminal penceresinde, simüle edilmiş Thread cihazınız için CLI işlemini başlatın:

$ cd ~/src/openthread
$ ./output/simulation/bin/ot-cli-ftd 1

Eğer görmezsen

>

komut isteminde bu komutu çalıştırdıktan sonra

enter

.

Yeni bir Operasyonel Veri Kümesi oluşturun, onu aktif olarak işleyin ve Thread'ı başlatın:

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 13
Channel Mask: 07fff800
Ext PAN ID: 97d584bcd493b824
Mesh Local Prefix: fd55:cf34:dea5:7994/64
Master Key: ba6e886c7af50598df1115fa07658a83
Network Name: OpenThread-34e4
PAN ID: 0x34e4
PSKc: 38d6fd32c866927a4dfcc06d79ae1192
Security Policy: 0, onrcb
Done

Bu veri kümesini etkin olan olarak kaydedin:

> dataset commit active
Done

IPv6 arayüzünü açın:

> ifconfig up
Done

İş Parçacığı protokol işlemini başlatın:

> thread start
Done

Düğüm 1'in İş Parçacığı arayüzüne atanan IPv6 adreslerini görüntüleyin:

> ipaddr
fd55:cf34:dea5:7994:0:ff:fe00:fc00
fd55:cf34:dea5:7994:0:ff:fe00:d000
fd55:cf34:dea5:7994:460:872c:e807:c4ab
fe80:0:0:0:9cd8:aab6:482f:4cdc
Done
>

Bir İplik Ağını Simüle Et adımında açıklandığı gibi, bir adres yerel bağlantı ( fe80 ) ve üçü ağ-yereldir ( fd ). EID, adreste ff:fe00 içermeyen örgü yerel adrestir. Bu örnek çıktıda, EID fd55:cf34:dea5:7994:460:872c:e807:c4ab .

ipaddr çıktınızdan düğümle iletişim kurmak için kullanılacak belirli EID'yi belirleyin.

2. ot-daemon'u başlatın

İkinci terminal penceresinde, openthread dizinine gidin ve Düğüm 2 olarak adlandıracağımız bir RCP düğümü için ot-daemon başlatın. Günlük çıktısını görebilmek ve çalıştığını doğrulamak için -v ayrıntılı bayrağını kullanın:

$ cd ~/src/openthread
$ ./output/posix/bin/ot-daemon -v \
    'spinel+hdlc+forkpty://output/simulation/bin/ot-rcp?forkpty-arg=2'

Başarılı olduğunda, ayrıntılı moddaki ot-daemon aşağıdakine benzer bir çıktı üretir:

ot-daemon[228024]: Running OPENTHREAD/20191113-00831-gfb399104; POSIX; Jun 7 2020 18:05:15
ot-daemon[228024]: Thread version: 2
ot-daemon[228024]: RCP version: OPENTHREAD/20191113-00831-gfb399104; SIMULATION; Jun 7 2020 18:06:08

3. Ağa katılmak için ot-ctl kullanın

Henüz herhangi bir Thread ağına Düğüm 2'yi ( ot-daemon RCP) görevlendirmedik. ot-ctl burada devreye girer. ot-ctl , OpenThread CLI uygulamasıyla aynı CLI'yi kullanır. Bu nedenle, ot-daemon düğümlerini diğer simüle edilmiş Thread cihazlarıyla aynı şekilde kontrol edebilirsiniz.

Üçüncü bir terminal penceresinde ot-ctl başlatın:

$ ./output/posix/bin/ot-ctl
>

ot-daemon ile başlattığınız Düğüm 2'nin (RCP düğümü) state kontrol edin:

> state
disabled
Done

Belirli Birleştiriciye katılmayı kısıtlamak için Düğüm 2'nin eui64 alın:

> eui64
18b4300000000001
Done

Düğüm 1'de, Komiseri başlatın ve yalnızca şu eui64 ile katılmayı kısıtlayın:

> commissioner start
Done
> commissioner joiner add 18b4300000000001 J01NME
Done

Düğüm 2'de, ağ arayüzünü açın ve ağa katılın:

> ifconfig up
Done
> joiner start J01NME
Done

... onay için birkaç saniye bekleyin ...

Join success

Bir Birleştirici olarak, RCP (Düğüm 2), Komisyon Üyesi (Düğüm 1) ile kendini başarıyla doğruladı ve İş Parçacığı Ağı kimlik bilgilerini aldı.

Şimdi Düğüm 2'yi Thread ağına katılın:

> thread start
Done

4. Ağ kimlik doğrulamasını doğrulayın

Şimdi ağa katıldığını doğrulamak için Düğüm 2'deki state kontrol edin. İki dakika içinde, Düğüm 2 child router :

> state
child
Done
...
> state
router
Done

5. Bağlantıyı doğrulayın

Ctrl + D'yi kullanarak ve ana makinenizin komut satırında, ping6 komutuyla EID'sini kullanarak Düğüm 1'e ping ot-ctl çıkın. ot-daemon RCP örneği, Thread ağına başarıyla katılırsa ve onunla iletişim kurarsa, ping başarılı olur:

$ ping6 -c 4 fd55:cf34:dea5:7994:460:872c:e807:c4ab
PING fd55:cf34:dea5:7994:460:872c:e807:c4ab (fd55:cf34:dea5:7994:460:872c:e807:c4ab): 56 data bytes
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=0 ttl=64 time=4.568 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=1 ttl=64 time=6.396 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=2 ttl=64 time=7.594 ms
64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=3 ttl=64 time=5.461 ms
--- fd55:cf34:dea5:7994:460:872c:e807:c4ab ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 4.568/6.005/7.594/1.122 ms

OpenThread kullanarak ilk Thread ağınızı başarıyla simüle ettiniz. Harika!

Bu Codelab'de şunları öğrendiniz:

  • OpenThread derleme araç zincirini ayarlayın
  • Bir Thread ağını simüle edin
  • İş Parçacığı düğümlerini doğrulayın
  • OpenThread Daemon ile bir Thread ağını yönetin

Daha fazla bilgi edinmek istiyorsanız şu referansları inceleyin: