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

О практической работе
schedule30 минут
subjectПоследнее обновление: 15 мая 2025 г.
account_circleАвторы: Simon Lin, Colin Tan, Esko Dijk

1. Введение

Впечатление от топологии сети Thread Mesh

Что такое поток и 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 при запуске

Если вы видите только пустую страницу 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 :

Объяснение элементов 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 :

Сеть потоков с 4 узлами

Также в OTNS-Web можно выбрать любой из узлов, чтобы получить панель с дополнительной информацией об узле. Например, на рисунке ниже выбран узел 1. Запись «Роль» на панели подтверждает, что это Лидер.

Сеть потоков с 4 узлами, выбран узел 1.

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

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

Добавлен маршрутизатор, всего 5 узлов.

Также нажмите кнопки FED, MED, SSED и BR на панели действий, чтобы создать другие типы узлов. Всего теперь должно быть 9 узлов. Если хотите, перетащите некоторые узлы в другие позиции, чтобы создать другую топологию физической сети.

Добавлено несколько новых узлов, всего 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.

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

Сеть потоков с выбранным узлом-лидером 1

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

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

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

Новый раздел формируется с узлом 9 в качестве нового лидера.

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

Включи радио

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

Узел 1 присоединяется к разделу после того, как его радио снова включено.

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

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

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

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

Переместите узел Border Router 9 в новое место:

> move 9 50 50
Done

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

Переместите узел 5 в правый нижний угол, перетащив его. Поскольку узел 5 теперь находится вне зоны радиопокрытия других маршрутизаторов, он формирует собственный раздел с новым идентификатором раздела. Идентификаторы разделов можно проверить на панели информации об узлах, щелкнув узлы.

Узел 5 отодвигается от остальных узлов и образует новый раздел.

Обратите внимание, что между узлами 5 и 9 по-прежнему рисуется одна зеленая линия. Часто это происходит из-за устаревшей информации о дочернем элементе, которая все еще хранится в дочерней таблице бывшего родителя. Или это может быть устаревшая информация о бывшем канале «маршрутизатор-маршрутизатор» между узлами 9 и узлом 5. (Или, в данном случае, возможно, даже ошибка рендеринга.) В конце концов, устаревшая информация очищается на узлах после соответствующего тайм-аута.

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

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

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

> del 5
Done

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

Узел 5 удален из моделирования.

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

Выберите узел Border Router 9 и нажмите кнопку Кнопка «Удалить» кнопку на Action Bar , чтобы удалить узел 9:

Узел пограничного маршрутизатора 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_ .log . Например, выдержка из файла журнала показана ниже:

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.

Скриншот анализа пакетов 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.

Что дальше?

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

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