Este artículo inicia una serie de publicaciones con la traducción del manual "" sobre el simulador de redes ns-3.

Este documento es una traducción del documento original en inglés, que fue escrito en para y se encuentra en el directorio doc/tutorial del código fuente de ns-3.
1 Introducción
1.1 Sobre ns-3
1.2 Para usuarios de ns-2
1.3 Participación en el proyecto
1.4 Estructura del manual
2 Fuentes de información
2.1 Red
2.2 Git
2.3 WAF
2.4 Entorno de desarrollo
2.5 Programación de sockets
La documentación primaria para el proyecto ns-3 está disponible en cinco formatos:
- Documentación de la API del simulador: ns-3 .
- Manual, guía y biblioteca de modelos para y .
- ns-3.
Capítulo 1
Prólogo
El simulador ns-3 es un simulador de red con eventos discretos, diseñado principalmente para la investigación y el uso educativo. El proyecto que desarrolla ns-3 comenzó en 2006 y es un proyecto de código abierto.
El objetivo de esta guía es presentar ns-3 a nuevos usuarios de manera sistemática y estructurada. A veces, puede ser difícil para un principiante obtener la información necesaria y convertirla en modelado funcional. En esta guía realizaremos varios ejemplos de modelado, mostrando y explicando conceptos clave y características a lo largo del camino.
A medida que avanzamos, presentaremos la documentación completa de ns-3 y proporcionaremos enlaces al código fuente para aquellos interesados en una comprensión más profunda de cómo funciona el sistema.
Al principio, es importante señalar algunos puntos clave:
- ns-3 tiene un código fuente abierto, y el proyecto busca mantener un entorno abierto donde los investigadores puedan contribuir y compartir sus desarrollos.
- ns-3 no es una extensión compatible con versiones anteriores de ns-2, sino un nuevo simulador. Ambos simuladores están escritos en C++, pero ns-3 es un simulador nuevo que no es compatible con las interfaces API de ns-2.
1.1 Sobre ns-3
El simulador ns-3 fue desarrollado para proporcionar una plataforma abierta y extensible para la modelización de redes, investigación en redes y educación. En resumen, ns-3 ofrece modelos de cómo se implementan y funcionan las redes de paquetes, y proporciona al usuario un motor de simulador para llevar a cabo experimentos de simulación. Las razones para utilizar ns-3 pueden ser situaciones donde se requiere realizar investigaciones que son difíciles o imposibles de ejecutar en un sistema real, la posibilidad de estudiar el comportamiento del sistema en un entorno estrictamente controlado y reproducible, así como aprender sobre el funcionamiento de las redes.
Los usuarios notarán que el conjunto de modelos proporcionado en ns-3 se centra en la modelización del funcionamiento de protocolos de Internet y redes, pero ns-3 no se limita solo a sistemas de Internet; algunos usuarios utilizan ns-3 para modelizar sistemas que no están basados en tecnologías de Internet.
Existen muchas herramientas para la modelización de redes. A continuación, se presentan algunas características distintivas de ns-3 en comparación con otras herramientas.
- ns-3 fue diseñado como un conjunto de bibliotecas que pueden combinarse entre sí, así como con otras bibliotecas de software externas. Mientras que algunas plataformas de modelización proporcionan a los usuarios un entorno integrado con una interfaz gráfica de usuario que gestiona toda la operación, ns-3 es más modular en este aspecto. Con ns-3 se pueden utilizar varios animadores externos, herramientas de análisis de datos y visualización. Sin embargo, se espera que los usuarios trabajen en la línea de comandos y con herramientas de desarrollo de software en C++ y/o Python.
- ns-3 se utiliza principalmente en sistemas Linux o macOS, aunque hay soporte para sistemas BSD y también para plataformas Windows capaces de compilar código para Linux, como el Subsistema de Windows para Linux o Cygwin. Visual Studio nativo de Windows actualmente no es compatible, aunque el desarrollador está trabajando en implementar esta posibilidad. Los usuarios de Windows también pueden usar una máquina virtual con Linux.
- ns-3 no es un producto oficialmente soportado por ninguna empresa. El soporte para ns-3 se realiza con el máximo compromiso en el foro de usuarios de ns-3 (ns-3-users@googlegroups.com).
1.2 Para usuarios de ns-2
Para aquellos que están familiarizados con ns-2 (una herramienta popular que precedió a ns-3), el cambio más notable al pasar a ns-3 es la modificación del lenguaje de scripts. Los programas en ns-2 están escritos en OTcl, y los resultados de la simulación se pueden visualizar utilizando el animador de redes nam. En ns-2, no es posible ejecutar una simulación exclusivamente en C++ (es decir, como un programa main() sin ningún OTcl). Además, algunos componentes de ns-2 están escritos en C++, mientras que otros están en OTcl. En ns-3, el simulador está completamente escrito en C++ con enlaces opcionales a Python. Por lo tanto, los scripts de simulación pueden ser escritos tanto en C++ como en Python. Nuevos animadores y visualizadores están disponibles y continúan en desarrollo. Dado que ns-3 genera archivos de trazas de paquetes pcap, también se pueden utilizar otras utilidades para analizar las trazas. En esta guía, primero nos centraremos en los scripts implementados en C++ y en la interpretación de los resultados a través del análisis de los archivos de traza.
Pero también hay similitudes (por ejemplo, ambas herramientas están basadas en objetos C++, parte del código de ns-2 fue portado a ns-3). A medida que avancemos, intentaremos mostrar las diferencias entre ns-2 y ns-3.
Una pregunta que escuchamos a menudo es: "¿Debería seguir usando ns-2 o cambiar a ns-3?" En opinión del autor, si el usuario no está de alguna manera atado a ns-2 (ya sea por su comodidad y conocimiento existente de ns-2, o por un modelo de simulación específico que solo está disponible en ns-2), entonces con ns-3 será más productivo por las siguientes razones:
- ns-3 es activamente soportado con una lista de correo de usuarios activa y receptiva, mientras que ns-2 está soportado solo ligeramente y no ha visto cambios significativos en su árbol de código principal en más de diez años.
- ns-3 ofrece características que no están disponibles en ns-2, como un entorno de ejecución de código de implementación (que permite a los usuarios ejecutar código real de implementación en el simulador).
- ns-3 proporciona un nivel base de abstracción más bajo en comparación con ns-2, lo que le permite ajustarse mejor a la forma en que interactúan los sistemas reales. Algunas limitaciones encontradas en ns-2 (por ejemplo, el soporte correcto para múltiples tipos de interfaces en un nodo) han sido solucionadas en ns-3.
Gracias a su larga historia, ns-2 tiene un conjunto de módulos soportados más diverso que ns-3. Sin embargo, ns-3 presenta modelos más detallados en varias áreas de investigación populares (incluyendo modelos complejos de LTE y WiFi); su soporte para el código de implementación permite una amplia gama de modelos de alta precisión. Los usuarios pueden sorprenderse al descubrir que toda la pila de red de Linux puede ser encapsulada en un nodo ns-3 utilizando el marco de ejecución de código directo (DCE). Modelos de ns-2 a veces pueden ser portados a ns-3, especialmente si han sido implementados en C++.
Si tienes dudas, una buena recomendación sería mirar ambos simuladores (así como otros) en particular los modelos disponibles para tu investigación, pero ten en cuenta que tu resultado puede ser mejor utilizando una herramienta que actualmente está en desarrollo activo y soporte (ns-3).
1.3 Participación en el proyecto
ns-3 es un simulador educativo e investigativo para la comunidad de investigadores. Se apoyará en las contribuciones actuales de la comunidad para el desarrollo de nuevos modelos, la depuración o el soporte de los existentes y la compartición de resultados. Hay una cierta política que, esperamos, incentivará a las personas a contribuir a ns-3, tal como lo hacen para ns-2:
- Licenciamiento de código abierto compatible con la licencia GNU GPLv2.
- wiki.
- Página , similar a la popular página para ns-2.
- Uso de GitLab.com, incluido el sistema de seguimiento de errores:
Entendemos que incluso si estás leyendo este documento, puede que en este momento no planees contribuir a él. Pero queremos que sepas que contribuir es parte del espíritu del proyecto y que valoraremos tus comentarios sobre tu experiencia temprana con ns-3 (por ejemplo, "esta sección del manual no fue clara …"), informes de documentación obsoleta o comentarios en el código, etc. ... La forma preferida de enviar correcciones es hacer un fork con tus correcciones y crear una solicitud de combinación, o crear una solicitud en nuestro rastreador y agregar un parche. Esta guía asume que los nuevos usuarios pueden avanzar inicialmente, por ejemplo, a través de este camino:
1.4 Estructura del manual
Intentar descargar y compilar una copia;
- Intentar ejecutar algunos ejemplos de programas;
- Intenta ejecutar varios ejemplos de programas;
- Ver el resultado de la simulación y tratar de ajustarlo.
Al final, intentamos organizar la exposición de acuerdo con estos pasos.
Capítulo 2
Fuentes de información
2.1 Red
Hay varios recursos importantes que cualquier usuario de ns-3 debe conocer. El sitio web principal se encuentra en:
y proporciona acceso a información básica sobre el sistema ns-3. La documentación detallada está disponible a través del sitio web principal en: .
En esta misma página web también puede encontrar documentos relacionados con la arquitectura del sistema.
Hay una página wiki que complementa el sitio web principal de ns-3, que puede encontrar en: .
Allí encontrará respuestas a preguntas frecuentes para usuarios y desarrolladores, así como guías de resolución de problemas, código de terceros, documentos, etc.
El código fuente se puede encontrar y ver en GitLab.com:
.
Allí, en el repositorio llamado ns-3-dev se encuentra el árbol de desarrollo actual. Las versiones anteriores y los repositorios experimentales de los desarrolladores del núcleo también se pueden encontrar bajo Mercurial en el antiguo sitio del proyecto en:
.
2.2 Git
Los sistemas de software complejos necesitan algún método para gestionar la organización y los cambios en el código base y la documentación. Hay muchas maneras de lograr esto, y es posible que haya escuchado sobre algunos de los sistemas que se utilizan comúnmente para esto. Hasta hace poco, el proyecto ns-3 utilizaba Mercurial como sistema de control de código fuente, pero en diciembre de 2018, cambiamos a utilizar Git. Aunque no necesita saber mucho sobre Git para leer esta guía, le recomendamos que se familiarice con él y lo utilice para acceder al código fuente. GitLab.com ofrece recursos para dominar habilidades básicas en: .
2.3 WAF
Una vez que haya descargado el código fuente en su computadora, para obtener un programa listo para usar, necesitará compilarlo. Al igual que con la gestión del código fuente, hay muchas herramientas disponibles para llevar a cabo esta función. Probablemente, la más conocida de estas herramientas es make. Aunque esta herramienta es la más famosa, se debe señalar que resulta ser la más complicada de usar en un sistema muy grande y flexible. Esta fue la razón para desarrollar muchas alternativas. Recientemente, se han creado sistemas utilizando el lenguaje Python.
El proyecto ns-3 utiliza el sistema de construcción Waf. Es de nueva generación y se basa en Python. Para construir el sistema existente de ns-3, no necesitará saber Python.
Para aquellos interesados en los detalles sobre el uso de Waf, hay un libro disponible en:
y el código actual:
.
2.4 Entorno de desarrollo
Como se mencionó anteriormente, los scripts en ns-3 se ejecutan en C++ o Python. La mayor parte de la API de ns-3 está disponible en Python, pero los modelos están escritos en C++. Esta guía supone que usted está familiarizado con la programación orientada a objetos en C++. A medida que avanzamos, dedicaremos un tiempo a revisar los conceptos más avanzados y posiblemente características desconocidas del lenguaje, como idiomas y patrones de diseño. No queremos que esta guía se convierta en un libro de texto sobre C++, por lo que presumimos un dominio básico del lenguaje. Hay muchas fuentes de información sobre C++ disponibles en línea o en formato impreso.
Si es nuevo en C++, antes de continuar, familiarícese con los fundamentos del lenguaje utilizando un libro de texto o un sitio web dedicado a la enseñanza o recetas listas. Por ejemplo, uno como este: .
Bajo Linux, el sistema ns-3 utiliza varios componentes del kit de herramientas del proyecto GNU. Un kit de herramientas es un conjunto de herramientas de programación disponibles en este entorno de software. Para una visión rápida de lo que incluye las herramientas de GNU, consulte: .
El simulador ns-3 utiliza gcc, GNU binutils y gdb. Al mismo tiempo, no utilizamos ni make ni autotools del conjunto de herramientas GNU para construir el proyecto. Para estas funciones, usamos Waf.
En macOS se utiliza un conjunto de herramientas de Xcode. Se recomienda encarecidamente a los usuarios de ns-3 en Mac que instalen Xcode y los paquetes de herramientas de línea de comandos desde la Apple App Store, y para más información, visiten la página de instalación de ns-3 en la wiki: ().
Generalmente, el autor de ns-3 trabaja en un entorno Linux o Unix-like. Para aquellos que trabajan en Windows, existen entornos que simulan en diferentes grados el entorno Linux. Para estos usuarios, el proyecto ns-3 había soportado anteriormente, pero no en la actualidad, el desarrollo en el entorno Cygwin. Para obtener detalles sobre la descarga y más información sobre Cygwin y ns-3, visite la página de la wiki de ns-3:
.
MinGW actualmente no está soportado oficialmente. Otra alternativa a Cygwin es establecer un entorno virtual, como VMware server, donde se puede instalar Linux.
2.5 Programación de sockets
En los ejemplos utilizados en esta guía, utilizaremos las capacidades básicas de la interfaz API de sockets de Berkeley (Berkeley Sockets). Si es un principiante en sockets, le recomendamos que revise la API y algunos casos de uso comunes. Como una buena visión general de la programación de sockets TCP/IP, recomendamos el libro: "TCP/IP Sockets in C", de Donahoo y Calvert.
Hay un sitio web relacionado que contiene la fuente de ejemplos del libro, que se puede encontrar en:
.
Si entiende los primeros cuatro capítulos del libro (o para aquellos que no tienen acceso a una copia del libro, los clientes y servidores de eco mostrados en el sitio web del enlace anterior), eso será suficiente para entender el tutorial. Hay un libro similar
"Multicast Sockets, Multicast Sockets", de Makofske y Almeroth.
Cubre el material que puede necesitar si va a estudiar en el distribuidor ejemplos de multidifusión.
Continuación:
Fuente: habr.com
