Данная статья открывает серию публикаций с переводом учебника "ns-3 Tutorial Release ns-3.29" по симулятору сетей ns-3.



Этот документ является переводом оригинального документа на английском, который написан в reStructuredText для Sphinx и хранится в директории doc/tutorial исходного кода ns-3.


1 Предисловие
1.1 О ns-3
1.2 Для пользователей ns-2
1.3 Участие в проекте
1.4 Организация руководства
2 Источники информации
2.1 Сеть
2.2 Git
2.3 WAF
2.4 Среда разработки
2.5 Программирование сокетов


Первичная документация для проекта ns-3 доступна в пяти формах:



Глава 1


Предисловие


Симулятор ns-3 — это симулятор сети с дискретными событиями, предназначенный, главным образом, для исследований и использования в образовательных целях. Проект, разрабатывающий ns-3, начат в 2006 году и является проектом с открытым исходным кодом.


Цель данного руководства — представить ns-3 новым пользователям в системном, структурированном виде. Иногда новичку бывает сложно получить необходимую информацию и преобразовать её в рабочее моделирование. В этом руководстве мы реализуем несколько примеров моделирования, по ходу движения показывая и объясняя ключевые понятия и особенности.


По мере изложения, мы представим полную документацию по ns-3 и дадим ссылки на исходный код для тех, кто заинтересован в углубленном понимании работы системы.


В начале стоит отметить несколько ключевых моментов:


  • ns-3 имеет открытый исходный код, проект стремится поддерживать открытую среду, в которой исследователи могут внести свой вклад и поделиться своим программными наработками.
  • ns-3 не является обратно совместимым расширением ns-2, это новый симулятор. Оба симулятора написаны на C++, но ns-3 — это новый симулятор, который не поддерживает API-интерфейсы ns-2.

1.1 О ns-3


Симулятор ns-3 был разработан для того, чтобы обеспечить открытую расширяемую платформу для моделирования сетей, исследований сети и образования. Вкратце, ns-3 предоставляет модели того, как реализованы и работают сети пакетной передачи данных и дает пользователю движок симулятора для проведения имитационных экспериментов. Причинами использовать ns-3 могут быть ситуации когда требуется, провести исследование которое трудно или невозможно выполнять на реальной системе, возможность изучать поведение системы в строго контролируемой среде, воспроизводимой среде, а также узнать о том, как работают сети.


Пользователи заметят, что предоставляемый в ns-3 набор моделей сфокусирован на моделировании работы интернет-протоколов и сетей, но ns-3 не ограничен только интернет-системами, некоторые пользователи используют ns-3 для моделирования систем не основанных на Интернет-технологиях.


Существует множество инструментов моделирования сетей. Ниже приведены несколько отличительных черт ns-3 в сравнении с другими инструментами.


  • ns-3 разработан как набор библиотек, которые можно объединять вместе, а также с другими внешними библиотеками программного обеспечения. В то время, когда некоторые платформы моделирования предоставляют пользователям единую интегрированную среду с графическим интерфейсом пользователя, управляющим всей работой, ns-3 является более модульной в этом отношении. С ns-3 могут быть использованы несколько внешних аниматоров, инструменты анализа данных и визуализации. Тем не менее, пользователей ожидает работа в командной строке и с инструментами разработки программного обеспечения C++ и / или Python.
  • ns-3 в основном используется в системах Linux или macOS, хотя существует поддержка для систем BSD, а также для платформ Windows, способных компилировать код для Linux, таких как Windows Subsystem для Linux или Cygwin. Родная для Windows Visual Studio в настоящее время не поддерживается, хотя разработчик работает над реализацией этой возможности. Пользователи Windows также могут использовать виртуальную машину с Linux.
  • ns-3 не является официально поддерживаемым программным продуктом какой-либо компании. Поддержка ns-3 сделана с максимальной отдачей на форуме пользователей ns-3 (ns-3-users@googlegroups.com).

1.2 Для пользователей ns-2


Для тех, кто знаком с ns-2 (популярным инструментом, предшествовавшим ns-3), при переходе на ns-3 наиболее заметным внешним изменением является смена языка сценариев. Программы в ns-2 написаны в OTcl, и результаты моделирования можно визуализировать используя аниматор сетей nam. В ns-2 невозможно запустить симуляцию исключительно из C++ (то есть как main() программу без каких-либо OTcl). Более того, некоторые компоненты ns-2 написаны на C++, а другие на OTcl. В ns-3, симулятор написан полностью на C++ с необязательными привязками Python. Поэтому сценарии моделирования могут быть написаны как на C++, так и на Python. Доступны новые аниматоры и визуализаторы и продолжают разрабатываться. Так как ns-3 генерирует файлы трассировки пакетов pcap, другие утилиты также могут быть использованы для анализа трасс. В этом руководстве мы сначала сосредоточимся на сценариях, реализованных на C++ и интерпретации результатов через анализ файлов трассировки.


Но есть и сходство (например, оба инструмента основаны на объектах C++, часть кода ns-2 была портирована в ns-3). По мере изложения, мы попытаемся показать различия между ns-2 и ns-3.


Вопрос, который мы часто слышим: "Должен ли я по-прежнему использовать ns-2 или перейти на ns-3?" По мнению автора, если пользователь каким-то образом не привязан к ns-2 (на основе существующего личного комфорта и знания ns-2, либо на основе конкретной имитационной модели, которая доступна только в ns-2), то с ns-3 он будет более продуктивным по следующим причинам:


  • ns-3 активно поддерживается с активным, отзывчивым списком рассылки пользователей, в то время как ns-2 поддерживается только слегка и более десяти лет не видел значительных изменений в своем основном дереве кода.
  • ns-3 предоставляет функции, недоступные в ns-2, такие как среда выполнения кода реализации (позволяющая пользователям запускать в симуляторе реальный код реализации).
  • ns-3 обеспечивает более низкий базовый уровень абстракции по сравнению с ns-2, что позволяет ему лучше соответствовать тому как взаимодействуют реальные системы. Некоторые ограничения, обнаруженные в ns-2 (например, корректная поддержка нескольких типов интерфейсов на узле) были исправлены в ns-3.

Благодаря своей долгой истории, ns-2 имеет более разнообразный набор поддерживаемых модулей, чем ns-3. Тем не менее, ns-3 имеет более подробные модели в нескольких популярных областях исследований (включая сложные модели LTE и WiFi), его поддержка кода реализации допускает очень широкий спектр моделей высокой точности. Пользователи могут быть удивлены узнав, что весь сетевой стек Linux может быть инкапсулирован в узел ns-3 с использованием фреймворка прямого выполнения кода (DCE). Модели из ns-2 иногда можно портировать в ns-3, особенно если они были реализованы в C++.


Если вы сомневаетесь, хорошей рекомендацией было бы взглянуть на оба имитатора (а также на другие имитаторы), в частности на модели доступные для вашего исследования, но имейте в виду, что ваш результат может быть лучше при использовании инструмента, который в настоящее время активно развивается и поддерживается (ns-3).


1.3 Участие в проекте


ns-3 — это научно-образовательный симулятор для исследовательского сообщества. Он будет опираться на текущие вклады сообщества в разработке новых моделей, отладке или поддержке существующих и обмене результатами. Есть некоторая политика, которая, как мы надеемся, побудит людей внести свой вклад в ns-3, как они это делают для ns-2:


  • Лицензирование с открытым исходным кодом на основе совместимости с лицензией GNU GPLv2.
  • wiki.
  • Страница Код контрибуторов, похожая на популярную страницу для ns-2.
  • Использование GitLab.com, включая систему отслеживания ошибок:
    https://www.gitlab.com/nsnam

Мы понимаем, что если даже вы читаете этот документ, вы, возможно, на этом этапе не планируете внести в него свой вклад. Но мы хотим, чтоб вы знали, что внесение вклада соответствует духу проекта и что для нас будут ценны ваш отзыв даже о вашем раннем опыте работы с ns-3 (например, "этот раздел учебника не был понятен ..."), сообщение об устаревшей документации или комментарий в коде и т.д… Предпочтительный способ отправки исправлений либо сделать ответвление (форк) на https://www.gitlab.com/nsnam с вашими исправлениями и создать запрос на слияние, либо создать запрос на нашем трекере и добавить патч.


1.4 Организация руководства


Это руководство предполагает, что новые пользователи могут изначально двигаться, например, по такому пути:


  • Попробовать скачать и собрать копию;
  • Попробовать запустить несколько примеров программ;
  • Посмотреть на результат симуляции и попробовать подстроить его.
    В конечном итоге, мы попытались организовать изложение в соответствии с этими шагами.

Глава 2


Источники информации


2.1 Сеть


Есть несколько важных ресурсов, о которых должен знать любой пользователь ns-3. Основной веб-сайт расположен по адресу: https://www.nsnam.org
и предоставляет доступ к базовой информации о системе ns-3. Подробная документация доступна через основной веб-сайт по адресу: https://www.nsnam.org/documentation/.


На этой же веб-странице Вы также можете найти документы, относящиеся к архитектуре системы.


Существует вики-страница, которая дополняет основной веб-сайт ns-3, её вы найдете по адресу: https://www.nsnam.org/wiki/.


Там найдутся ответы на часто задаваемые вопросы для пользователей и разработчиков, а также руководства по устранению неполадок, сторонний код, документы и т. д.
Исходный код можно найти и просмотреть на GitLab.com:
https://gitlab.com/nsnam/.


Там же в репозитории с именем ns-3-dev находится текущее дерево разработки. Прошлые релизы и экспериментальные репозитории разработчиков ядра также можно найти под Mercurial на старом сайте проекта по адресу:
http://code.nsnam.org.


2.2 Git


Сложным программным системам нужен какой-то способ управления организацией и изменением базового кода и документации. Есть много способов этого достичь, и вы, возможно, слышали о некоторых из систем, которые обычно используются для этого. До недавнего времени проект ns-3 использовал Mercurial в качестве системы управления исходным кодом, но в декабре 2018, мы переключились на использование Git. Не смотря на то, что для чтения этого руководства вам не нужно много знать о Git, мы рекомендуем ознакомиться с ним и использовать его для доступа к исходному коду. GitLab.com предоставляет ресурсы для овладения основными навыками по адресу: https://git-scm.com/book/ru/v2.


2.3 WAF


После того, как вы скачали исходный код на ваш компьютер, для получения готовой к работе программы, вам нужно будет его скомпилировать. Как и в случае с управлением исходным кодом, для выполнения этой функции доступно множество инструментов. Вероятно, наиболее известным из этих инструментов является make. Наряду с тем, что этот инструмент является самым известным, следует заметить, что он оказывается наиболее сложным при использования в очень большой и гибко конфигурируемой системе. Это явилось причиной разработки множества альтернатив. Недавно, были разработаны такие системы с использованием языка Python.


В проекте ns-3 используется система сборки Waf. Она из нового поколения систем сборки на основе Python. Для сборки существующей системы ns-3, Вам не понадобится знать Python.


Для тех, кто интересуется подробностями использования Waf, есть книга, доступная по адресу:
https://waf.io/book/
и текущий код:
https://gitlab.com/ita1024/waf/.


2.4 Среда разработки


Как уже упоминалось выше, сценарии в ns-3 выполняются на C++ или Python. Большая часть API ns-3 доступна на Python, но модели в любом случае написаны на C++. Это руководство предполагает, что вы знакомы с объектно-ориентированным программированием на C++. По мере изложения, мы посвятим некоторое время обзору наиболее продвинутых концепций и, возможно, незнакомых особенностей языка таких как идиомы и шаблоны дизайна. Мы не хотим, чтобы это руководство превратилось в учебник по C++, поэтому мы ожидаем базового владения языком. Существует множество источников информации о C++ доступных в Интернете или в печати.


Если вы новичок в C++, то прежде чем продолжить, освойте азы языка, воспользовавшись учебником или веб-сайтом, посвященным обучению или готовым рецептам. Например, таким: https://github.com/ashtanyuk/CPP-2018.


Под Linux, система ns-3 использует несколько компонентов из инструментария проекта GNU. Инструментарий — это набор инструментов программирования, доступных в данной программной среде. Для быстрого обзора того, что входит в инструменты GNU см. http://en.wikipedia.org/wiki/GNU_toolchain.


Симулятор ns-3 использует gcc, GNU binutils и gdb. В то же время, мы не используем для сборки проекта ни make, ни autotools из инструментов GNU. Для этих функций мы используем Waf.


В macOS используется набор инструментов Xcode. Пользователям ns-3 на Mac настоятельно рекомендуется установить Xcode и пакеты инструментов командной строки из Apple App Store, а также, для получения дополнительной информации, посетите вики-страницу установки ns-3: (https://www.nsnam.org/wiki/Installation).


Обычно, автор ns-3 работает в Linux или Unix-подобной среде. Для тех, кто работает под Windows, существуют среды, которые в разной степени имитируют среду Linux. Для таких пользователей, проект ns-3 в прошлом (но не в настоящее время) поддерживал разработку в среде Cygwin. Для получения подробностей о загрузке и дополнительной информации о Cygwin и ns-3 посетите вики-страницу ns-3:
http://www.cygwin.com/.


MinGW в настоящее время официально не поддерживается. Другой альтернативой Cygwin является установка виртуальной среды, такой как VMware server, где установить Linux.


2.5 Программирование сокетов


В примерах, использованных в этом руководстве, мы будем использовать базовые возможности API-интерфейса сокетов Беркли (Berkeley Sockets). Если вы новичок в сокетах, мы рекомендуем ознакомиться с API и некоторыми распространенными случаями их использования. В качестве хорошего обзора программирования сокетов TCP/IP мы рекомендуем использовать: "TCP/IP Sockets in C", Donahoo and Calvert.


Существует связанный веб-сайт, который содержит источник примеров в книге, который вы можете найти по адресу:
http://cs.baylor.edu/~donahoo/practical/CSockets/.


Если вы понимаете первые четыре главы книги (или для тех, кто не имеет доступа к копии книги, эхо клиенты и серверы, показанные на веб-сайте по ссылке выше), этого будет достаточно, чтобы понять учебник. Существует похожая книга
"Multicast Sockets, Multicast Sockets", Makofske и Almeroth.


Она охватывает материал, который вам может понадобиться, если вы будете изучать в дистрибутиве примеры многоадресной рассылки.


Продолжение: глава 3