Симулируйте сети потоков с помощью OTNS

1. Введение

5abd22afa2f2ee9a.png

Что такое поток и OTNS

Thread — это протокол беспроводной ячеистой сети с низким энергопотреблением на основе IP, который обеспечивает безопасную связь между устройствами и между устройствами и облаком. Сети потоков могут адаптироваться к изменениям топологии, чтобы избежать единой точки отказа.

OpenThread , выпущенный Google, представляет собой реализацию Thread с открытым исходным кодом. Несмотря на небольшой размер кода и объем памяти, OpenThread поддерживает все функции, определенные в спецификации потока .

Симулятор сети OpenThread (OTNS) можно использовать для моделирования сетей потоков путем запуска имитируемых узлов OpenThread на платформах posix. OTNS предоставляет простой в использовании веб-интерфейс (OTNS-Web) для визуализации и управления смоделированными сетями потоков.

Что вы узнаете

  • Установите OTNS и его зависимости.
  • Сборка OpenThread для OTNS
  • Как добавлять/перемещать/удалять узлы в OTNS-Web
  • Используйте другие полезные функции OTNS-Web для моделирования сети.
  • Убедитесь, что OpenThread не имеет единой точки отказа.

Эта лаборатория ориентирована на OTNS-CLI и OTNS-Web. Другие функции OTNS, такие как сценарии Python, не рассматриваются.

Что вам понадобится

  • Linux x86_64 или Mac OS.
  • Гит .
  • Иди 1.13+ .
  • Веб-браузер. OTNS-Web использует веб-браузер для отображения моделирования.
  • Праймер по резьбе . Вам необходимо знать основные понятия Thread, чтобы понять, чему учит эта лаборатория.

2. Установка

Установить Го

Для сборки OTNS требуется Go 1.13+.

  1. Установите Go с https://golang.org/dl/.
  2. Добавьте $(go env GOPATH)/bin (обычно $HOME/go/bin ) в $PATH :
$ export PATH=$PATH:$(go env GOPATH)/bin

Получить ОТНС-код

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

Установить зависимости

$ ./script/install-deps
grpcwebproxy installed: /usr/local/google/home/simonlin/go/bin/grpcwebproxy

Вас могут попросить ввести пароль для sudo .

Установить отнс

Установите otns в $GOPATH/bin :

$ ./script/install
otns installed: /usr/local/google/home/simonlin/go/bin/otns

Проверим, правильно ли установлен otns

  1. Запустите which otns чтобы проверить, доступен ли поиск исполняемого файла otns в $PATH.
  2. Если команда otns не найдена, убедитесь, что вы добавили $(go env GOPATH)/bin в $PATH.

3. Создайте OpenThread для OTNS.

Получите код OpenThread с GitHub.

$ mkdir -p ~/src
$ git clone https://github.com/openthread/openthread ~/src/openthread

Создайте OpenThread с OTNS=1

$ cd ~/src/openthread
$ ./script/cmake-build simulation -DOT_OTNS=ON -DOT_SIMULATION_VIRTUAL_TIME=ON -DOT_SIMULATION_VIRTUAL_TIME_UART=ON -DOT_SIMULATION_MAX_NETWORK_SIZE=999

Вы можете найти исполняемые файлы OpenThread в каталоге build :

$ ls ~/src/openthread/build/simulation/examples/apps/cli/
ot-cli-ftd        ot-cli-mtd        ot-cli-radio

Теперь пришло время запустить OTNS...

4. Запустите OTNS

Запускаем otns :

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

При успешном запуске OTNS войдет в консоль CLI ( OTNS-CLI ) и запустит веб-браузер для визуализации и управления сетью ( OTNS-Web ):

a0e05178d66929b1.png

Если вы видите только пустую страницу OTNS-Web, скорее всего, в вашем браузере не включен WebGL. Пожалуйста, обратитесь к https://superuser.com/a/836833 , чтобы узнать, как включить WebGL.

В следующих разделах вы научитесь управлять моделированием OTNS через OTNS-CLI и OTNS-Web .

5. Познакомьтесь с OTNS-CLI и OTNS-Web.

ОТНС-CLI

OTNS-CLI предоставляет интерфейс командной строки (CLI) для управления моделированием OTNS.

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

Вы можете вводить команды через OTNS-CLI . Полный список команд см. в справочнике по интерфейсу командной строки OTNS . Не волнуйтесь, в этой Codelab вы будете использовать лишь некоторые из этих команд.

ОТНС-Веб

OTNS-Web — это инструмент визуализации и управления сетью OTNS. Он обеспечивает визуальное представление узлов, сообщений и ссылок моделируемой сети потоков. Обратите внимание на различные элементы OTNS-Web :

4c5b43509a2ca0d0.png

6. Добавьте узлы

Добавляйте узлы через OTNS-CLI

Добавьте маршрутизатор в позицию (300, 100)

> add router x 300 y 100
1
Done

Вы должны увидеть узел, созданный в OTNS-Web . Узел стартует как Маршрутизатор и через несколько секунд становится Лидером:

6ca8c2e63ed9818d.png

Добавьте больше узлов через OTNS-CLI

> add fed x 200 y 100
2
Done
> add med x 400 y 100
3
Done
> add sed x 300 y 200
4
Done

Подождите несколько секунд, пока узлы объединятся в один раздел. Вы должны увидеть узлы в OTNS-WEB :

3ee67903c01aa612.png

Добавить узлы с помощью OTNS-Web

Вы также можете добавлять узлы через OTNS-Web . Нажмите кнопку New Router на Action Bar . Вы должны увидеть создаваемый узел прямо над кнопкой New Router . Перетащите узел так, чтобы он оказался рядом с лидером, который вы создали с помощью OTNS-CLI . Все узлы в конечном итоге должны объединиться в один раздел:

420258bb92561146.png

Также нажмите кнопки FED, MED и SED на панели действий, чтобы создать другие типы узлов. Перетащите их рядом с существующими узлами, чтобы прикрепить их к этой сети потоков:

fe15d6f9726a099e.png

Теперь вы создали сеть потоков из одного раздела, содержащую множество узлов. В следующем разделе мы собираемся настроить скорость моделирования, чтобы оно выполнялось быстрее.

7. Отрегулируйте скорость

В настоящее время моделирование должно выполняться со скоростью 1X , а это означает, что время моделирования, прошедшее на данный момент, такое же, как фактическое время с момента создания первого узла.

Отрегулируйте скорость через OTNS-CLI

Вы можете настроить скорость моделирования через OTNS-CLI .

Установите скорость моделирования на 100X

> speed 100
Done

Вы должны увидеть, что узлы отправляют сообщения гораздо чаще, чем раньше.

Установите скорость моделирования на MAX

> speed max
Done

Теперь OTNS пытается провести симуляцию как можно быстрее, поэтому вы должны увидеть узлы, отправляющие большое количество сообщений.

Приостановить симуляцию

> speed 0
Done

Установка скорости моделирования на 0 приостанавливает моделирование.

Восстановить симуляцию на нормальной скорости

> speed 1
Done

Установка скорости моделирования на значение больше 0 возобновляет моделирование.

Отрегулируйте скорость через OTNS-Web

Кнопки управления скоростью

Найдите кнопки управления скоростью. 9329157c1bd12672.png на Action Bar . Кнопки показывают текущую скорость моделирования и могут использоваться для регулировки скорости моделирования, а также приостановки/возобновления моделирования.

Ускорьте симуляцию

Вы можете ускорить симуляцию, нажав кнопку 39b88331779277ad.png кнопку, пока скорость не достигнет MAX : f5f460b2586d299b.png .

Замедлить симуляцию

Вы можете замедлить симуляцию, нажав кнопку 31cca8d5b52fa900.png кнопка.

Приостановить симуляцию

Нажмите кнопку 46cc2088c9aa7ab6.png Кнопка, чтобы приостановить симуляцию во время ее работы. Кнопка будет изменена на ce25eda3496ffcd4.png .

Возобновить моделирование

Нажмите кнопку ce25eda3496ffcd4.png Кнопка, чтобы возобновить симуляцию, когда она приостановлена. Кнопка снова изменится на 46cc2088c9aa7ab6.png .

Установите скорость моделирования на 10X

Для экономии времени используйте

OTNS-CLI для настройки скорости моделирования

10X , чтобы мы могли наблюдать изменения топологии в сети гораздо быстрее.

> speed 10
Done

8. Включить/выключить радио

Теперь симуляция должна содержать 2 маршрутизатора (шестиугольной формы) и множество дочерних элементов и работать на скорости 10X.

Найдите текущего лидера (красная рамка) из двух маршрутизаторов, щелкните один раз, чтобы выбрать его:

8c6a2e191cdae0c7.png

Выключить радио

Нажмите кнопку 7ca085f470491dd4.png кнопка на панели действий, чтобы отключить радио узла Лидер:

a3bf58d9d125f95f.png

Лидер не сможет отправлять или получать сообщения с выключенным радио.

Подождите около 12 секунд (120 секунд во время моделирования), чтобы другой маршрутизатор стал новым лидером:

e3d32f85c4a1b990.png

Сеть потоков автоматически восстанавливается после сбоя лидера путем формирования нового раздела с новым лидером. Новый раздел также имеет новый цвет.

Включи радио

Выберите лидера, чье радио было выключено. Нажмите кнопку 2d9cecb8612b42aa.png кнопка на Action Bar для восстановления радиосвязи:

7370a7841861aa3a.png

Лидер должен повторно подключиться к сети после восстановления радиосвязи.

9. Перемещение узлов

OTNS позволяет пользователям легко перемещать узлы через OTNS-CLI или OTNS-Web .

Переместить узел через OTNS-CLI

Переместите узел 5 в новое место:

> move 5 600 300
Done

Поскольку теперь узел 5 находится далеко от другого Маршрутизатора, они должны потерять связь друг с другом, и примерно через 12 с (120 с по времени моделирования) оба станут Лидерами своего собственного раздела:

c06b4d0a4f183299.png

Переместить узел через OTNS-Web

Переместите узел 5 обратно в исходное положение, перетащив его. Два раздела должны снова объединиться в один:

9ba305c4c5a5f892.png

10. Удалить узлы

Удаление узлов через OTNS-CLI

Удалить узел 8:

> del 8
Done

Узел 8 должен исчезнуть из моделирования:

18156770d9f8bf83.png

Удаление узлов через OTNS-Web

Выберите узел 5 и нажмите кнопку 7ff6afd565f4eafc.png кнопку на Action Bar , чтобы удалить узел 5:

d4079cceea0105f0.png

Node 1 должен стать лидером, а Node 7 должен отсоединиться, поскольку он не может связаться ни с одним маршрутизатором.

Очистить симуляцию (удалить все узлы)

Вы можете очистить симуляцию, удалив все узлы через OTNS-Web .

Нажмите 89618191721e79a0.png кнопку на Action Bar. Все узлы исчезнут сразу.

Прежде чем продолжить...

Добавьте несколько узлов в симуляцию самостоятельно, чтобы продолжить работу с этим уроком.

11. Контекст узла OTNS-CLI

OTNS-CLI обеспечивает контекстный режим узла для простого взаимодействия с узлами, помогая разработчикам диагностировать состояние узла.

Войти в контекстный режим узла

Введите контекст узла 1:

> node 1
Done
node 1>

Приглашение CLI изменилось на node 1> , указывая текущий контекст узла. Вы можете вводить команды OpenThread CLI , которые будут выполняться на узле, как если бы вы напрямую взаимодействовали с узлом.

Выполнение команд в контексте узла

node 1> state
leader
Done
node 1> channel
11
Done
node 1> panid
0xface
Done
node 1> networkname
OpenThread
Done
node 1> ipaddr
fdde:ad00:beef:0:0:ff:fe00:fc00
fdde:ad00:beef:0:0:ff:fe00:d800
fdde:ad00:beef:0:2175:8a67:1000:6352
fe80:0:0:0:2075:82c2:e9e9:781d
Done

Переключиться на другой контекст узла

node 1> node 2
Done
node 2> 

Выход из контекста узла

node 1> exit
Done
>

12. Поздравления

Поздравляем, вы успешно выполнили свою первую симуляцию OTNS!

Вы узнали, как установить OTNS и его зависимости. Вы создали OpenThread для OTNS и запустили моделирование OTNS с помощью экземпляров моделирования OpenThread. Вы узнали, как управлять симуляцией различными способами с помощью OTNS-CLI и OTNS-Web .

Теперь вы знаете, что такое OTNS и как можно использовать OTNS для моделирования сетей OpenThread.

Что дальше?

Посмотрите некоторые из этих кодовых лабораторий...

Справочная документация