Симулируйте сети потоков с помощью 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, чтобы понять, чему учат в этой Codelab.

2. Установка

Установить Go

Для сборки 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 :

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

При успешном запуске OTNS войдет в консоль командной строки ( 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

OTNS-CLI

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

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

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

ОТНС-Веб

OTNS-Web — это инструмент визуализации и управления сетью OTNS. Он обеспечивает визуальное представление узлов, сообщений и ссылок моделируемой сети Thread. Обратите внимание на различные элементы 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 маршрутизатора (шестиугольной формы) и множество дочерних элементов и работать с 10-кратной скоростью.

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

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.

Что дальше?

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

Справочные документы