Введение
Данное руководство содержит сведения, необходимые для быстрого начала работы с симулятором компьютерных сетей NS-3 и модулем симуляции спутниковой связи Satellite. Описаны установка, проверка функционирования, запуск симуляции, организация папок проекта и т.д. Официальное руководство по началу работы с NS-3 версии 3.29 (русский перевод) можно скачать по следующей ссылке: https://vk.cc/awFMSX. Перевод был опубликован 25 июня 2020 года. При ознакомлении следует учитывать, что NS-3 не останавливался в своем развитии - какие-то подходы и инструменты себя не оправдали или устарели. Это явилось одной из причин написания данного оригинального руководства по NS-3 версии 3.45 и модулю Satellite.
NS-3 (NS3, ns3, Network Simulator 3) - это дискретнособытийный симулятор сетей с открытым исходным кодом, предназначенный в первую очередь для исследований и обучения в области сетевых технологий. Он разрабатывается и поддерживается международным сообществом исследователей.
Модуль спутниковой связи (Satellite) изначально разработанный при поддержке ЕКА и CNES, полностью интегрирован в основную ветку NS-3 и предназначен для детального моделирования спутниковых систем связи и гибридных наземно-космических сетей. Ключевые возможности модуля:
Поддержка орбит GEO, MEO и LEO, включая автоматическое формирование группировок (созвездий) с расчётом положений по TLE/SGP4.
Моделирование физики канала: доплеровские сдвиги, переменные задержки распространения, атмосферные и ионосферные потери, многолучевое распространение.
Поддержка стандартов DVB-S2/S2X, DVB-RCS2, LoRa, настройка использования частотного ресурса, мощности передатчиков, схем модуляции и кодирования, а также моделей ошибок (PER/BER на основе SNR).
Реализация механизмов переключения между спутниками (handover) и работы с многолучевыми антенными системами с диаграммами направленности.
Полная интеграция с транспортными протоколами (TCP, UDP, QUIC) и механизмами маршрутизации (AODV, OLSR, статические таблицы) для сквозного моделирования трафика.
Область применения
Моделирование компьютерных сетей (проводных, беспроводных, WiFi, WiMAX, LTE, 5G, спутниковых и т.д.).
Тестирование новых сетевых протоколов и архитектур.
Анализ производительности сетей.
Образование (позволяет изучать поведение сетей без реального оборудования).
Рабочий процесс
Пользователь пишет программу на C++ или Python, описывающую топологию сети, настраивающую устройства и приложения. Симулятор обрабатывает события (например, отправку пакета) в хронологическом порядке. Результаты выводятся в виде трасс (pcap–файлы), статистики или файлов логов.
Большинство пользователей NS-3 при создании программ описания топологии используют C++. Есть поддержка Python, но она используется реже. Начиная с версии ns3.37, NS-3 использует cppyy. для генерации привязок Python во время выполнения, NS-3 доступен в репозиториях Pip начиная с версии ns-3.39. Симулятор может быть установлен в следующих операционных системах:
Linux
macOS
Windows(Subsystem for Linux)
В дальнейшем изложении описывается установка и использование симулятора на примере ОС Linux (Ubuntu).
Глава 1. Установка
В некоторые системы, такие как Ubuntu, NS-3 можно установить обычным образом, используя готовые пакеты установки. Однако, на данный момент проект NS-3 не уделяет особого внимания такому способу установки. Вместо этого рекомендуется скачивать исходный код и компилировать симулятор без установки на системном уровне. Это связано, главным образом, с тем, что большинство пользователей NS-3 предпочитают изменять или расширять библиотеки NS-3, возможно, собирать их определенным образом (для отладки, оптимизации или крупномасштабных симуляций). Система сборки симулятора активируется командой install, которую можно использовать для установки библиотек и заголовочных файлов в системные каталоги. При этом часто требуются права администратора, но обычно библиотеки просто собираются и используются из каталога сборки NS-3. Симулятор NS-3 использует систему сборки CMake (до версии 3.36 использовалась система сборки Waf). Порядок установки описан здесь: https://www.nsnam.org/docs/installation/html/
1.1 Подготовка инструментов
Необходимые для установки и функционирования инструменты перечисляются в таблице 1.1.
Таблица 1.1: Инструменты сборки
Назначение |
Инструмент |
Минимально необходимая версия |
|---|---|---|
Скачивание |
git (для скачивания через Git) или tar и bunzip2 (для Web–загрузки) |
Любая версия |
Компилятор |
g++ / clang++ |
>= 10 / >= 11 |
Конфигурирование |
python3 |
>= 3.8 |
Система сборки |
cmake и хотя бы одна из списка: make, ninja, Xcode |
>= 3.13 / любая версия |
В таблице 1.2 показаны способы проверки версии установленных инструментов.
Таблица 1.2: Проверка версий инструментов
Инструмент |
Команда проверки версии |
|---|---|
g++ |
|
clang++ |
|
python3 |
|
cmake |
|
1.2 Скачивание исходного кода
Скорее всего, в дальнейшем на компьютере пользователя будут установлены несколько версий симулятора. Почему же нужно сохранять старые версии? Дело в том, что новая версия нередко оказывается несовместимой с проектами для прежних версий или в ходе улучшений в ней происходит поломка какого-то функционала. Именно поэтому при установке новой версии рекомендуется создавать отдельную рабочую папку с именем:
workspace_ns[version name]
и уже в неё устанавливать симулятор. В главе 4 нам как раз потребуется использовать не новейшую версию симулятора, а более раннюю - ту с которой способна работать и протестирована модель спутниковой связи Satellite.
Допустим, мы устанавливаем версию 3.45. Для этого переходим в домашнюю директорию пользователя и создаем директорию workspace_ns3.45:
$ cd ~ $ mkdir workspace_ns3.45
Переходим в созданную директорию:
$ cd workspace_ns3.45
Выполняем скачивание исходного кода симулятора:
$ wget https://www.nsnam.org/releases/ns-allinone-3.45.tar.bz2
Разархивируем исходный код:
$ tar xfj ns-allinone-3.45.tar.bz2
Переходим в папку с файлами симулятора:
$ cd ns-allinone-3.45
1.3 Сборка симулятора
Чтобы собрать симулятор, из директории ns-allinone-3.45 переходим в директорию ns-3.45:
$ cd ns-3.45
и выполняем команду конфигурирования сборки:
$ ./ns3 configure --enable-examples --enable-tests
Затем используем программу ns3 для сборки библиотек модулей и исполняемых файлов симулятора:
$ ./ns3 build
По завершению сборки выполняем проверку результата, запустив тесты:
$ ./test.py
Если тесты завершаются без ошибок, в консоль выводится сообщение примерно такого содержания:
927 of 927 tests passed (927 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
Это означает, что симулятор был успешно установлен. Для версии симулятора 3.43, с которой способен работать модуль Satellite, результат будет такой:
866 of 866 tests passed (866 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
1.4 Документация
Документацию по симулятору можно найти онлайн:
wiki: https://www.nsnam.org/wiki/Main_Page
Документация по API симулятора: https://www.nsnam.org/docs/doxygen/index.html
При необходимости, актуальную версию документации по API можно собрать самостоятельно по исходным кодам скачанной вами версии симулятора. Для этого требуется Doxygen версии 1.11. Порядок сборки описан здесь: https://www.nsnam.org/docs/doxygen/index.html
К сожалению, полученная таким образом документация не обладает полнотой и пригодна только для первоначального знакомства. В данном руководстве, по возможности, будет дано более развернутое описание классов моделей.
Глава 2. Запуск моделирования
Замечание
Следует отметить: не смотря на то, что программы симуляции были написаны на языке Си++, в контексте NS-3 они называются сценариями.
После установки симулятора мы можем запустить пробный сценарий, предоставленный разработчиками. Делается это следующей командой:
$ ./ns3 run hello-simulator
Сценарий выводит в консоль текст: Hello Simulator
Если изменить код сценария, то при вызове команды run автоматически будет вызвана команда сборки build и затем сценарий будет выполнен. Скрип может иметь аргументы командной строки, в таком случае при запуске название сценария и его аргументы должны быть заключены в двойные кавычки.
NS-3 позволяет превращать внутренние переменные сценария (с простыми типами) в аргументы командной строки сценария. Это дает возможность изменять параметры моделирования без перекомпиляции кода сценария, что сильно экономит время при запусках с перебором параметров. Кроме того, открывает возможность создавать узкоспециальные симуляторы. Более подробно об этом будет рассказано позже.
Ниже показан пример запуска сценария с именем second:
$ ./ns3 run "second --nCsma=10 --verbose=True"
Для последовательного запуска нескольких сценариев ( пакетный запуск сценариев) можно воспользоваться утилитой nsbt (Github) которой нужно передать путь к исполняемому файлу симулятора и JSON-файл с именами тестов и аргументами:
$ ./nsbt.py --ns3path /home/igor/workspace_ns3.43/ns-3.43/ run tests.json
JSON-файл со списком файлов должен иметь следующий формат:
{ "test_1": { "test_name": "hello-simulator", "arguments": {} }, "test_2": { "test_name": "second", "arguments": { "nCsma": 10, "verbose": true } }, "test_3": { "test_name": "fourth", "arguments": { "parameter": "value" } } }
После запуска утилиты с указанным конфигурационным файлом мы получим следующий вывод в консоль:
============================================================ Starting Test ID: test_1 Test Name: hello-simulator ============================================================ Command: /home/igor/workspace_ns3.43/ns-3.43/ns3 run "hello-simulator" [SUCCESS] Test test_1 passed. Output: [0/2] Re-checking globbed directories... ninja: no work to do. ============================================================ Starting Test ID: test_2 Test Name: second ============================================================ Command: /home/igor/workspace_ns3.43/ns-3.43/ns3 run "second --nCsma=10 --verbose=True" [SUCCESS] Test test_2 passed. Output: [0/2] Re-checking globbed directories... ninja: no work to do. ============================================================ Starting Test ID: test_3 Test Name: fourth ============================================================ Command: /home/igor/workspace_ns3.43/ns-3.43/ns3 run "fourth --parameter=value" [SUCCESS] Test test_3 passed. Output: [0/2] Re-checking globbed directories... ninja: no work to do. Traced 0 to 1234
В этом листинге мы видим, что было выполнено 3 теста. Утилита выводит команды, которые применила для запуска конкретного теста.
Сегодня мы кратко ознакомились с возможностями модуля Satellite, научились устанавливать современную версию симулятора NS-3, запускать примеры симуляции. На сегодня это всё. В следующей статье мы сосредоточимся на вопросе как правильно организовать дерево проекта и приступим к рассмотрению модуля Satellite.
Работа выполнена в рамках Программы создания и развития центра НТИ на базе МФТИ, Физтех по направлению («сквозной» технологии) Национальной технологической инициативы «Перспективные технологии для космических систем и сервисов» при реализации комплексного научно-исследовательского и опытно-конструкторского проекта “Разработка комплексной среды моделирования и проектирования гибридных инфокоммуникационных сетей наземного, стратосферного и космического сегментов с использованием параметрического и структурного синтеза”.