1. Введение
Что такое поток и OTNS
Thread — это протокол беспроводной ячеистой сети с низким энергопотреблением на основе IP, который обеспечивает безопасную связь между устройствами и между устройствами и облаком. Сети потоков могут адаптироваться к изменениям топологии, чтобы избежать единой точки отказа.
OpenThread, выпущенный Google, представляет собой реализацию Thread с открытым исходным кодом. Несмотря на небольшой размер кода и объем памяти, OpenThread поддерживает все функции, определенные в спецификации потока .
Симулятор сети OpenThread (OTNS) можно использовать для моделирования сетей потоков путем запуска имитируемых узлов OpenThread на платформах posix. OTNS предоставляет простой в использовании веб-интерфейс (OTNS-Web) для визуализации и управления смоделированными сетями потоков. Также возможно моделирование по сценарию (с помощью Python).
Что вы узнаете
- Установите OTNS и его зависимости.
- Познакомьтесь с основами OTNS-CLI
- Как добавить/переместить/удалить узлы OpenThread в OTNS-Web
- Используйте другие полезные функции OTNS-Web для управления моделированием сети.
- Убедитесь, что OpenThread не имеет единой точки отказа.
- Просмотрите трафик данных между узлами OpenThread в Wireshark.
Эта лаборатория ориентирована на OTNS-CLI и OTNS-Web для интерактивного использования. Другие функции OTNS, такие как сценарии Python, не рассматриваются.
Что вам понадобится
- Предпочтительно Linux x86_64 или Mac OS с Homebrew . Ubuntu 22/24 в Windows WSL2 также должна работать, но может потребоваться ручная настройка параметров.
- Гит .
- Веб-браузер. OTNS-Web использует веб-браузер для отображения моделирования.
- Праймер по резьбе . Вам необходимо знать основные понятия Thread, чтобы понять, чему учит эта лаборатория.
Терминология
Термин «маршрутизатор» используется как технический термин для удлинителя нити Mesh Extender, который первоначально назывался Thread Router. «Узел» относится к любому смоделированному устройству OpenThread в моделировании OTNS.
2. Установка
Получить ОТНС-код
$ git clone https://github.com/openthread/ot-ns.git ./otns $ cd otns
Все последующие консольные команды в этой лаборатории кода выполняются из каталога otns
.
Загрузите и установите
Скрипт bootstrap
установит зависимости (включая Python3 и Go/Golang, если необходимо) и установит OTNS. Он также создает различные типы узлов OT, которые можно использовать непосредственно в моделировании, и выполняет некоторые базовые тесты. Из-за сборки узла это может занять несколько минут.
$ ./script/bootstrap .... .... OTNS installed - use 'otns' to start it. $
Вас могут попросить ввести пароль для sudo
.
Если otns
установлен неправильно
Скрипт может сообщить об ошибке, например:
.... OTNS installed - please add ~/go/bin to your PATH variable first, to use it. $
В этом случае вам нужно добавить $(go env GOPATH)/bin
к вашему $PATH.
В случае других ошибок может быть создана проблема GitHub .
3. Запустите OTNS в первый раз.
Запускаем otns
:
$ otns >_ ← OTNS-CLI prompt
При успешном запуске OTNS войдет в консоль CLI ( OTNS-CLI
) и запустит веб-браузер для визуализации и управления сетью ( OTNS-Web
):
Если вы видите только пустую страницу OTNS-Web, скорее всего, в вашем браузере не включен WebGL. Пожалуйста, обратитесь к https://superuser.com/a/836833 , чтобы узнать, как включить WebGL.
В следующих разделах вы научитесь управлять моделированием OTNS через OTNS-CLI
и OTNS-Web
.
4. Познакомьтесь с OTNS-CLI и OTNS-Web.
ОТНС-CLI
OTNS-CLI
— это интерфейс командной строки (CLI) для управления моделированием OTNS.
$ otns >_ ← OTNS-CLI prompt
Вы можете вводить команды через OTNS-CLI
. Полный список команд см. в справочнике по интерфейсу командной строки OTNS . Не волнуйтесь, в этой Codelab вы будете использовать лишь некоторые из этих команд.
Введите команду help
, чтобы получить обзор команд CLI. Этот список идентичен справочнику по CLI.
> help add Add a node to the simulation and get the node ID. .... .... Done >
Чтобы получить дополнительную справку по конкретной команде, используйте имя команды, например:
> help add add Add a node to the simulation and get the node ID. Definition: .... .... >
ОТНС-Веб
OTNS-Web
— это инструмент визуализации и управления сетью OTNS. Он обеспечивает визуальное представление узлов, сообщений и ссылок моделируемой сети потоков. Обратите внимание на различные элементы OTNS-Web
:
5. Добавьте узлы
Добавляйте узлы через OTNS-CLI
Добавьте Thread Router в симуляцию:
> add router 1 Done
Вы должны увидеть узел, созданный в OTNS-Web
. Узел стартует как Маршрутизатор и через несколько секунд становится Лидером:
Чтобы упростить интерактивный запуск моделирования, каждый новый узел OpenThread по умолчанию запускается со стандартным набором сетевых параметров.
Добавьте больше узлов через OTNS-CLI
Теперь мы добавим несколько узлов разных типов.
> add fed 2 Done > add med 3 Done > add sed 4 Done
Подождите несколько секунд, пока узлы объединятся в один раздел. Вы должны увидеть узлы в OTNS-Web
:
Также в OTNS-Web
можно выбрать любой из узлов, чтобы получить панель с дополнительной информацией об узле. Например, на рисунке ниже выбран узел 1. Запись «Роль» на панели подтверждает, что это Лидер.
Добавить узлы с помощью OTNS-Web
Вы также можете добавлять узлы через OTNS-Web
. Нажмите кнопку New Router
на Action Bar
. Вы должны увидеть создаваемый узел справа от выбранного узла. Новый маршрутизатор должен присоединиться к существующему разделу Thread:
Также нажмите кнопки FED, MED, SSED и BR на панели действий, чтобы создать другие типы узлов. Всего теперь должно быть 9 узлов. Если хотите, перетащите некоторые узлы в другие позиции, чтобы создать другую топологию физической сети.
Теперь вы создали сеть потоков из одного раздела, содержащую множество узлов. В следующем разделе мы собираемся настроить скорость моделирования, чтобы оно выполнялось быстрее.
6. Отрегулируйте скорость
В настоящее время моделирование должно выполняться со скоростью 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
7. Включить/выключить радио
Теперь симуляция должна содержать как минимум 2 маршрутизатора (шестиугольной формы), возможно, пограничный маршрутизатор (квадратной формы) и множество дочерних элементов, и работать на скорости 10X.
Найдите текущего лидера (красная рамка) из двух маршрутизаторов, щелкните один раз, чтобы выбрать его:
Выключить радио
Нажмите кнопку кнопку на панели действий, чтобы отключить радио узла Лидер. Лидер не сможет отправлять или получать сообщения с выключенным радио.
Подождите около 12 секунд (120 секунд во время моделирования), чтобы другой маршрутизатор или пограничный маршрутизатор стал новым лидером:
Сеть потоков автоматически восстанавливается после сбоя лидера путем формирования нового раздела с новым лидером. Новый раздел также имеет новый цвет.
Включи радио
Выберите Лидера, чье радио было выключено. Нажмите кнопку кнопка на
Action Bar
для восстановления радиосвязи:
Лидер должен повторно подключиться к сети после восстановления радиосвязи.
8. Перемещение узлов
OTNS позволяет пользователям легко перемещать узлы через OTNS-CLI
или OTNS-Web
.
Переместить узел через OTNS-CLI
Переместите узел Border Router 9 в новое место:
> move 9 50 50 Done
Переместить узел через OTNS-Web
Переместите узел 5 в правый нижний угол, перетащив его. Поскольку узел 5 теперь находится вне зоны радиопокрытия других маршрутизаторов, он формирует собственный раздел с новым идентификатором раздела. Идентификаторы разделов можно проверить на панели информации об узлах, щелкнув узлы.
Обратите внимание, что между узлами 5 и 9 по-прежнему рисуется одна зеленая линия. Часто это происходит из-за устаревшей информации о дочернем элементе, которая все еще хранится в дочерней таблице бывшего родителя. Или это может быть устаревшая информация о бывшем канале «маршрутизатор-маршрутизатор» между узлами 9 и узлом 5. (Или, в данном случае, возможно, даже ошибка рендеринга.) В конце концов, устаревшая информация очищается на узлах после соответствующего тайм-аута.
9. Удалить узлы
Удаление узлов через OTNS-CLI
Удалить узел 5:
> del 5 Done
Узел 5 должен исчезнуть из моделирования:
Удаление узлов через OTNS-Web
Выберите узел Border Router 9 и нажмите кнопку кнопку на
Action Bar
, чтобы удалить узел 9:
Node 1
должен стать лидером нового раздела, а все оставшиеся узлы будут присоединены как дочерние к узлу 1.
10. Контекст узла 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 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
Переключиться на другой контекст узла
node 1> node 2 Done node 2>
Выход из контекста узла
node 1> exit Done >
Альтернативным способом выхода из контекста узла является команда node 0
.
11. Просмотр журналов узлов и перехвата пакетов
Журналы узлов OpenThread
По умолчанию OTNS генерирует подробные файлы журналов для всех моделируемых узлов OpenThread. Их можно просмотреть в каталоге ./tmp
. Имя файла: 0_
. Например, выдержка из файла журнала показана ниже:
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
Абсолютное время моделирования в микросекундах показано слева. Временная метка hh:mm:ss
показывает собственную временную метку журнала узла OpenThread, которая может отличаться от абсолютного времени моделирования.
Перехват пакетов Wireshark
По умолчанию все передаваемые кадры IEEE 802.15.4 сохраняются в файле PCAP current.pcap
. Этот файл может быть прочитан Wireshark во время или после моделирования. Из-за шифрования потока на канальном уровне необходимо единоразовое действие по настройке в Wireshark, чтобы правильно установить ключ дешифрования для OTNS. По умолчанию используется один известный сетевой ключ, что упрощает расшифровку кадра с помощью Wireshark.
На снимке экрана ниже показан пример проверки пакетов OpenThread в Wireshark.
Чтобы настроить ключ дешифрования, выберите в меню Edit -> Preferences . Затем в окне настроек выберите Протоколы -> IEEE 802.15.4 . Нажмите кнопку «Изменить...» рядом с надписью «Ключи дешифрования». Нажмите + , чтобы создать новую запись, введите ключ 00112233445566778899aabbccddeeff
(32 символа) и выберите «Хеш потока» в поле «Хеш ключа». «Индекс ключа дешифрования» можно оставить равным 0
. Затем нажмите «ОК» и еще раз «ОК» . Теперь файл OTNS PCAP должен корректно расшифровываться при загрузке.
Временные метки, показанные в столбце «Время» (в секундах), соответствуют абсолютным значениям времени моделирования, указанным в журналах узла OpenThread. Это упрощает корреляцию сообщений журнала с переданными или полученными радиокадрами. Однако значения обычно не идентичны с точностью до одной микросекунды: моделируемое радиооборудование IEEE 802.15.4 может добавлять некоторую дополнительную задержку после того, как стек OpenThread запрашивает отправку радиокадра.
12. Поздравления
Поздравляем, вы успешно выполнили свою первую симуляцию OTNS!
Вы узнали, как установить OTNS и его зависимости. Вы запустили моделирование OTNS с смоделированными узлами OpenThread. Вы узнали, как управлять симуляцией различными способами с помощью OTNS-CLI
и OTNS-Web
.
Теперь вы знаете, что такое OTNS и как можно использовать OTNS для моделирования сетей OpenThread.
Что дальше?
Посмотрите некоторые из этих кодовых лабораторий...
- Моделирование сети потоков с помощью OpenThread
- Моделирование сети потоков с использованием OpenThread в Docker
- Создайте сеть Thread с помощью плат nRF52840 и OpenThread.