Данная статья открывает серию публикаций с переводом учебника "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 доступна в пяти формах:
- Документация к API симулятора:ns-3 Doxygen.
- Учебное пособие, руководство и библиотека моделей для последней версии и дерева разработки.
- Вики 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
vanyas
Из статьи так и не понял для чего оно. Чем лучше тех же популярных GNS3 и EVE-NG? Они прекрасно справляются с описанной вначале статьи задачей: «провести исследование которое трудно или невозможно выполнять на реальной системе, возможность изучать поведение системы в строго контролируемой среде, воспроизводимой среде, а также узнать о том, как работают сети»
Chetverovod Автор
Я не хотел бы предвосхищать последующее повествование, по ходу изложения станет более понятно. В этом и цель книги.
Но мне кажется первый абзац говорит в чем разница:
Поскольку я не имел опыта с названными вами инструментами, могу только предположить, что отличие состоит в том, что ns-3 находится в полной вашей власти, вы можете поправить, дописать имеющуюся модель или сделать свою, не дожидаясь, когда у разработчиков дойдут руки.