Введение

Данное руководство содержит сведения, необходимые для быстрого начала работы с симулятором компьютерных сетей 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++

$ g++ --version

clang++

$ clang++ --version

python3

$ python3 -V

cmake

$ cmake --version

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.

Работа выполнена в рамках Программы создания и развития центра НТИ на базе МФТИ, Физтех по направлению («сквозной» технологии) Национальной технологической инициативы «Перспективные технологии для космических систем и сервисов» при реализации комплексного научно-исследовательского и опытно-конструкторского проекта “Разработка комплексной среды моделирования и проектирования гибридных инфокоммуникационных сетей наземного, стратосферного и космического сегментов с использованием параметрического и структурного синтеза”.

Комментарии (0)