1. Введение
Что такое Thread и OTNS
Thread — это беспроводной сетевой протокол с низким энергопотреблением на основе IP, который обеспечивает безопасную связь между устройствами и между устройствами и облаком. Сети Thread могут адаптироваться к изменениям топологии, чтобы избежать единой точки отказа.
OpenThread, выпущенный Google, является реализацией Thread с открытым исходным кодом. Несмотря на небольшой размер кода и занимаемую память, OpenThread поддерживает все функции, определенные в спецификации Thread .
OpenThread Network Simulator (OTNS) может использоваться для моделирования сетей Thread путем запуска моделируемых узлов OpenThread на платформах posix. OTNS предоставляет простой в использовании веб-интерфейс (OTNS-Web) для визуализации и эксплуатации моделируемых сетей Thread. Также возможны скриптовые моделирования (с 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 Primer . Вам необходимо знать основные концепции Thread, чтобы понять, чему учит эта практическая работа.
Терминология
Термин «Маршрутизатор» используется как технический термин для Thread Mesh Extender, который изначально назывался Thread Router. «Узел» относится к любому моделируемому устройству OpenThread в симуляции OTNS.
2. Установка
Получить код OTNS
$ 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
OTNS-CLI
OTNS-CLI
— это интерфейс командной строки (CLI) для управления моделированием OTNS.
$ otns >_ ← OTNS-CLI prompt
Вы можете вводить команды через OTNS-CLI
. Обратитесь к справочнику OTNS CLI для полного списка команд. Не волнуйтесь, вы будете использовать только несколько из этих команд в этой 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-Веб
OTNS-Web
— это инструмент визуализации и управления сетью OTNS. Он обеспечивает визуальное представление узлов, сообщений и связей моделируемой сети Thread. Обратите внимание на различные элементы 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 во время или после моделирования. Из-за шифрования на уровне канала Thread требуется одноразовое действие конфигурации в Wireshark, чтобы правильно задать ключ дешифрования для OTNS. По умолчанию используется один известный сетевой ключ, чтобы упростить дешифрование кадров с помощью Wireshark.
На снимке экрана ниже показан пример проверки пакетов OpenThread в Wireshark.
Чтобы настроить ключ дешифрования, выберите в меню Edit -> Preferences . Затем в окне настроек выберите Protocols -> IEEE 802.15.4 . Нажмите кнопку Edit... рядом с «Decryption Keys». Нажмите + , чтобы создать новую запись, и введите ключ 00112233445566778899aabbccddeeff
(32 символа) и выберите «Thread hash» в поле «Key hash». «Decryption key index» можно оставить равным 0
Затем нажмите OK и еще раз OK . Теперь файл 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