1. Введение
Что такое поток и 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+.
- Установите Go с https://golang.org/dl/
- Добавьте
$(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
- Запустите
which otns
, чтобы проверить, доступен ли поиск исполняемого файлаotns
в$PATH.
- Если команда
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
):
Если вы видите только пустую страницу для 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
:
6. Добавьте узлы
Добавляйте узлы через OTNS-CLI
Добавьте маршрутизатор в позицию (300, 100)
> add router x 300 y 100 1 Done
Вы должны увидеть узел, созданный в OTNS-Web
. Узел запускается как Маршрутизатор и через несколько секунд становится Лидером:
Добавьте больше узлов через 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
:
Добавление узлов через OTNS-Web
Вы также можете добавлять узлы через OTNS-Web
. Нажмите кнопку « New Router
» на Action Bar
. Вы должны увидеть, что узел создается прямо над кнопкой New Router
. Перетащите узел рядом с лидером, созданным вами с помощью OTNS-CLI
. В итоге все узлы должны объединиться в один раздел:
Также нажмите кнопки FED, MED и SED на панели действий, чтобы создать другие типы узлов. Перетащите их в позиции рядом с существующими узлами, чтобы присоединить их к этой сети потоков:
Теперь вы создали сеть потоков из одного раздела, которая содержит множество узлов. В следующем разделе мы настроим скорость симуляции, чтобы симуляция работала быстрее.
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
Кнопки управления скоростью
Найдите кнопки управления скоростью на
Action Bar
. Кнопки показывают текущую скорость моделирования и могут использоваться для регулировки скорости моделирования и приостановки/возобновления моделирования.
Ускорьте моделирование
Вы можете ускорить симуляцию, нажав кнопку кнопку, пока скорость не достигнет
MAX
: .
Замедлить симуляцию
Вы можете замедлить симуляцию, нажав кнопку кнопка.
Приостановить моделирование
Нажмите на кнопку, чтобы приостановить симуляцию, когда она запущена. Кнопка изменится на
.
Возобновить моделирование
Нажмите на кнопку, чтобы возобновить симуляцию, когда она была приостановлена. Кнопка снова изменится на
.
Установите скорость моделирования на 10X
В целях экономии времени используйте
OTNS-CLI
для настройки скорости имитации
10X
, чтобы мы могли намного быстрее наблюдать за изменениями топологии в сети.
> speed 10 Done
8. Включить/выключить радио
Теперь симуляция должна содержать 2 маршрутизатора (шестиугольной формы) и множество дочерних элементов и работать с 10-кратной скоростью.
Найдите текущего лидера (красная рамка) из 2 маршрутизаторов, щелкните его одним щелчком мыши, чтобы выбрать его:
Выключить радио
Нажмите на Кнопка на панели действий, чтобы выключить радио узла лидера:
Лидер не сможет отправлять или получать сообщения с выключенным радио.
Подождите около 12 секунд (120 секунд во время моделирования), пока другой маршрутизатор не станет новым лидером:
Сеть потоков автоматически восстанавливается после сбоя лидера, формируя новый раздел с новым лидером. Новый раздел также имеет новый цвет раздела.
Включи радио
Выберите Лидера, чье радио было выключено. Нажмите на кнопку на
Action Bar
, чтобы восстановить радиосвязь:
Лидер должен снова подключиться к сети после восстановления радиосвязи.
9. Переместить узлы
OTNS позволяет пользователям легко перемещать узлы через OTNS-CLI
или OTNS-Web
.
Переместить узел через OTNS-CLI
Переместите узел 5 в новое место:
> move 5 600 300 Done
Поскольку теперь узел 5 находится далеко от другого маршрутизатора, они должны потерять связь друг с другом, и примерно через 12 с (120 с во время моделирования) оба станут лидерами своего раздела:
Переместить узел через OTNS-Web
Переместите узел 5 обратно в исходное положение, перетащив его. Два раздела должны снова объединиться в один раздел:
10. Удалить узлы
Удаление узлов через OTNS-CLI
Удалить узел 8:
> del 8 Done
Узел 8 должен исчезнуть из моделирования:
Удаление узлов через OTNS-Web
Выберите узел 5 и нажмите кнопку кнопку на
Action Bar
, чтобы удалить узел 5:
Node 1
должен стать лидером, а Node 7
должен отсоединиться, так как он не может связаться ни с одним маршрутизатором.
Очистить симуляцию (удалить все узлы)
Вы можете очистить симуляцию, удалив все узлы через OTNS-Web
.
Нажмите кнопку на
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.
Что дальше?
Проверьте некоторые из этих лабораторий кода...
- Моделирование сети потоков с помощью OpenThread
- Моделирование сети потоков с использованием OpenThread в Docker
- Создайте сеть потоков с платами nRF52840 и OpenThread