Данная статья открывает серию публикаций с переводом учебника "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 Программирование сокетов
глава 3
глава 4
глава 5
глава 6
глава 7
главы 8, 9 Скачать перевод одним pdf-файлом Первичная документация для проекта ns-3 доступна в пяти формах: Симулятор ns-3 — это симулятор сети с дискретными событиями, предназначенный, главным образом, для исследований и использования в образовательных целях. Проект, разрабатывающий ns-3, начат в 2006 году и является проектом с открытым исходным кодом. Цель данного руководства — представить ns-3 новым пользователям в системном, структурированном виде. Иногда новичку бывает сложно получить необходимую информацию и преобразовать её в рабочее моделирование. В этом руководстве мы реализуем несколько примеров моделирования, по ходу движения показывая и объясняя ключевые понятия и особенности. По мере изложения, мы представим полную документацию по ns-3 и дадим ссылки на исходный код для тех, кто заинтересован в углубленном понимании работы системы. В начале стоит отметить несколько ключевых моментов: Симулятор ns-3 был разработан для того, чтобы обеспечить открытую расширяемую платформу для моделирования сетей, исследований сети и образования. Вкратце, ns-3 предоставляет модели того, как реализованы и работают сети пакетной передачи данных и дает пользователю движок симулятора для проведения имитационных экспериментов. Причинами использовать ns-3 могут быть ситуации когда требуется, провести исследование которое трудно или невозможно выполнять на реальной системе, возможность изучать поведение системы в строго контролируемой среде, воспроизводимой среде, а также узнать о том, как работают сети.  Пользователи заметят, что предоставляемый в ns-3 набор моделей сфокусирован на моделировании работы интернет-протоколов и сетей, но ns-3 не ограничен только интернет-системами, некоторые пользователи используют ns-3 для моделирования систем не основанных на Интернет-технологиях. Существует множество инструментов моделирования сетей. Ниже приведены несколько отличительных черт ns-3 в сравнении с другими инструментами. Для тех, кто знаком с 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-2 имеет более разнообразный набор поддерживаемых модулей, чем ns-3. Тем не менее, ns-3 имеет более подробные модели в нескольких популярных областях исследований (включая сложные модели LTE и WiFi), его поддержка кода реализации допускает очень широкий спектр моделей высокой точности. Пользователи могут быть удивлены узнав, что весь сетевой стек Linux может быть инкапсулирован в узел ns-3 с использованием фреймворка прямого выполнения кода (DCE). Модели из ns-2 иногда можно портировать в ns-3, особенно если они были реализованы в C++. Если вы сомневаетесь, хорошей рекомендацией было бы взглянуть на оба имитатора (а также на другие имитаторы), в частности на модели доступные для вашего исследования, но имейте в виду, что ваш результат может быть лучше при использовании инструмента, который в настоящее время активно развивается и поддерживается (ns-3). ns-3 — это научно-образовательный симулятор для исследовательского сообщества. Он будет опираться на текущие вклады сообщества в разработке новых моделей, отладке или поддержке существующих и обмене результатами. Есть некоторая политика, которая, как мы надеемся, побудит людей внести свой вклад в ns-3, как они это делают для ns-2: Мы понимаем, что если даже вы читаете этот документ, вы, возможно, на этом этапе не планируете внести в него свой вклад. Но мы хотим, чтоб вы знали, что внесение вклада соответствует духу проекта и что для нас будут ценны ваш отзыв даже о вашем раннем опыте работы с ns-3 (например, "этот раздел учебника не был понятен ..."), сообщение об устаревшей документации или комментарий в коде и т.д… Предпочтительный способ отправки исправлений либо сделать ответвление (форк) на https://www.gitlab.com/nsnam с вашими исправлениями и создать запрос на слияние, либо создать запрос на нашем трекере и добавить патч. Это руководство предполагает, что новые пользователи могут изначально двигаться, например, по такому пути: Есть несколько важных ресурсов, о которых должен знать любой пользователь 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. Сложным программным системам нужен какой-то способ управления организацией и изменением базового кода и документации. Есть много способов этого достичь, и вы, возможно, слышали о некоторых из систем, которые обычно используются для этого. До недавнего времени проект ns-3 использовал Mercurial в качестве системы управления исходным кодом, но в декабре 2018, мы переключились на использование Git. Не смотря на то, что для чтения этого руководства вам не нужно много знать о Git, мы рекомендуем ознакомиться с ним и использовать его для доступа к исходному коду. GitLab.com предоставляет ресурсы для овладения основными навыками по адресу: https://git-scm.com/book/ru/v2. После того, как вы скачали исходный код на ваш компьютер, для получения готовой к работе программы, вам нужно будет его скомпилировать. Как и в случае с управлением исходным кодом, для выполнения этой функции доступно множество инструментов. Вероятно, наиболее известным из этих инструментов является make. Наряду с тем, что этот инструмент является самым известным, следует заметить, что он оказывается наиболее сложным при использования в очень большой и гибко конфигурируемой системе. Это явилось причиной разработки множества альтернатив. Недавно, были разработаны такие системы с использованием языка Python. В проекте ns-3 используется система сборки Waf. Она из нового поколения систем сборки на основе Python. Для сборки существующей системы ns-3, Вам не понадобится знать Python. Для тех, кто интересуется подробностями использования Waf, есть книга, доступная по адресу:
https://waf.io/book/
и текущий код:
https://gitlab.com/ita1024/waf/. Как уже упоминалось выше, сценарии в 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. В примерах, использованных в этом руководстве, мы будем использовать базовые возможности 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 Разработчик ПО для радиосвязи