Laboratorio de Simulación de redes: el simulador ns-3 en una VM Ubuntu privada
Este laboratorio da a cada alumno el simulador de redes que usan muchos cursos universitarios, ns-3, en una sola VM Ubuntu. El alumno construye una red pequeña dentro de un programa en C++, lo ejecuta, lee la traza de paquetes que escribe y mide el retardo, el caudal y la pérdida de paquetes. Dos programas que escribe el alumno los califica un script que los ejecuta con valores que el alumno nunca ve.
No se instala nada en el ordenador del alumno y no hacen falta cables. ns-3 es el simulador de verdad, instalado desde el archivo de Ubuntu, y un programa se compila en unos segundos. Las trazas de paquetes son archivos pcap reales, así que el mismo comando tcpdump sirve para ellas y para una captura de una red real.
Qué aprenden los alumnos
Cómo se describe y se mide una red. Un primer programa une dos nodos con un enlace punto a punto y envía un eco UDP. Su archivo pcap muestra la petición y la respuesta con sus tiempos, y al cambiar el retardo y la tasa de datos se ve qué parte del tiempo de ida y vuelta mueve cada uno: el retardo es el mismo para todos los paquetes, y la tasa de datos pesa más cuanto mayor es el paquete. Después varios emisores comparten un enlace más lento a través de un router, y FlowMonitor cuenta lo que envió cada flujo y lo que llegó, lo que muestra cuándo se pierden paquetes y por qué.
Las cinco partes
Primero dos nodos y un eco: se compila un programa dado con sim build y se ejecuta. Segundo una traza: sim pcap lista los paquetes que cruzaron un dispositivo. Tercero el enlace cambiado desde la línea de comandos, con una predicción antes de cada ejecución. Cuarto un cuello de botella con FlowMonitor: emisores, un router y un enlace más lento, con la pérdida y el caudal contados por flujo. Quinto dos programas que escribe el alumno, scenario.cc y loss.cc, a partir de un comentario que dice exactamente qué debe hacer cada uno. Todo lo que el alumno edita está en la carpeta ns3, y README.md en la carpeta personal dice qué hacer y no da ninguna respuesta.
Ejecútalo en tu navegador
Los laboratorios VM se ponen como tarea de laboratorio en un módulo, y el ejemplo está en la página del laboratorio. La máquina es pequeña: una CPU, 1 GB de memoria y 10 GB de disco. Un programa se compila en dos a cinco segundos.
- Añadir el laboratorio. En un módulo que enseñes, añade una tarea y elige la tarjeta de laboratorio VM Ubuntu. La página muestra una breve descripción de la máquina en lugar de un archivo compose.
- Empezar desde el ejemplo. La página ofrece laboratorios ya hechos para empezar. Elige Network simulation. Usar un ejemplo reemplaza el texto, y Deshacer recupera el tuyo.
- Publicar e iniciar tu propia copia. Publica y luego pulsa Iniciar. El script setup del laboratorio instala ns-3, un compilador de C++ y tcpdump desde el archivo de Ubuntu y escribe el comando de ayuda sim, los programas de trabajo y el README, la primera vez que arranca la VM, en unos minutos.
- Abrir el terminal. Abre su terminal y lee README.md en la carpeta personal. No se abre nada en el navegador: el laboratorio es el terminal.
Una lección básica en este laboratorio
Network Simulation Basics es una lección pequeña que se da en este laboratorio, una VM Ubuntu. Tiene un gancho, un objetivo «Puedo», palabras clave, una pregunta de partida, una comprobación después de cada idea, un error común y una comprobación final, y cada paso tiene un botón Ejecutar que escribe su comando en el terminal de la máquina. El alumno compila y ejecuta el eco, lee su pcap, lo ejecuta de nuevo con más retardo y una tasa más baja, y ejecuta el cuello de botella dos veces para ver cuándo se pierden paquetes.
La lección echa un vistazo y deja al alumno la tarea propia del laboratorio, los dos programas: por eso no da ninguna respuesta.
Cómo se califica
El laboratorio tiene una comprobación. Se ejecuta sobre una copia de la máquina guardada y compila scenario.cc y loss.cc. Ejecuta scenario.cc dos veces con un retardo, una tasa de datos y un tamaño de paquete que saca de nuevo cada vez, y el tiempo de ida y vuelta que imprime el programa debe coincidir con la aritmética y con las dos marcas de tiempo del pcap que escribió el programa. Ejecuta loss.cc con un número de emisores, una tasa y un cuello de botella que saca de nuevo cada vez, una vez sobrecargado y otra no, y la pérdida y el caudal que imprime el programa deben coincidir con el XML que escribió FlowMonitor y con una ejecución del programa de cuello de botella dado. Se rechaza un programa que inicie otro programa o que no tenga ns-3 dentro. La primera línea de lo que imprimió la comprobación dice por qué.
- Entregarlo. Asigna el laboratorio como cualquier tarea, con fecha límite si quieres. Cada alumno recibe una VM propia, que se conserva entre sesiones.
- Ejecutar la comprobación. En la fila de un alumno en la lista de la clase, pulsa Ejecutar la comprobación. Inicia una copia de su máquina guardada que no se vuelve a guardar, ejecuta el script de comprobación del laboratorio como root y muestra si pasó, qué imprimió y cuándo. Al alumno no se le comunica el resultado.
- Calificarlo. Lee la primera línea de lo que imprimió la comprobación: dice qué no está bien, por ejemplo un tiempo de ida y vuelta que no coincide con el pcap que escribió el programa, o una pérdida que no coincide con loss.xml. Devuelve el trabajo con un motivo si necesita más.
La definición en GitHub
El archivo es toda la definición del laboratorio, el mismo texto que ejecuta la plataforma: tamaño, script setup, comando de ayuda, programas de trabajo, README y comprobación. Cópialo y cambia la topología o los números para hacer un laboratorio más largo.
Prueba este laboratorio, y lo que cuesta
Con una cuenta personal gratuita puedes seguir las lecciones básicas de este laboratorio, con crédito gratuito suficiente cada mes para seguir la mayoría de las lecciones y sin tarjeta. Para una clase, un centro tiene gratis sus primeros 365 días, hasta 50 alumnos, y después paga por alumno y año, con todos los laboratorios incluidos y el profesorado gratis.
Preguntas frecuentes
- ¿El laboratorio necesita licencia?
- No. ns-3 es de código abierto, con la Licencia Pública General de GNU versión 2, y se instala desde el archivo de Ubuntu cuando arranca la VM del alumno, así que no distribuimos nada de él.
- ¿Por qué C++ y no Python?
- Ubuntu 26.04 trae ns-3 3.46 con sus bibliotecas y cabeceras pero sin enlaces de Python, así que el laboratorio usa el lenguaje en que está escrito ns-3 y el de sus tutoriales. El alumno edita una función main corta, y sim build la compila contra las bibliotecas instaladas en unos segundos.
- ¿Pueden los alumnos romper algo?
- Solo su propia copia. La máquina de un visitante sin cuenta llega al archivo de Ubuntu y a nada más, la red simulada está dentro de un programa y no toca ninguna real, y si un alumno estropea un archivo, sim reset lo deja como se entregó.
- ¿Se probó el laboratorio en una VM real de alumno?
- El script setup, los comandos de la lección y la comprobación, con cada manera de engañarla, se ejecutaron en un contenedor Ubuntu 26.04 real que hace de VM, en una máquina arm64. Una VM de alumno ya arrancada y los paquetes amd64 de las máquinas de los alumnos merecen una prueba antes de una clase.