Social Icons

twitterfacebookgoogle plusemail

martes, 9 de abril de 2013

Generación de topologías

Como práctica de laboratorio realice una topología estrella usando el simulador ns-3. Aquí una muestra de lo que es una topología estrella que consiste en un conjunto de nodos al cual se comunican a tráves de un nodo para comunicar a otro nodo en el otro extremo.


El código que hace la simulación fue realizado en C++ como se puede apreciar en la parte de abajo.

//Librerias usadas de ns3
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
#include "ns3/netanim-module.h"
#include "ns3/point-to-point-layout-module.h"
using namespace ns3;
//Nombre del componente
NS_LOG_COMPONENT_DEFINE ("Topologia Estrella");
int main (int argc, char *argv[]) {
//Numero de nodos usados en la topologia
uint32_t numberOfNodes = 8;
//Primero se crea una topologia base
PointToPointHelper pointToPoint;
//Asignacion de velocidad de datos
pointToPoint.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
//Asignacion de retraso
pointToPoint.SetChannelAttribute("Delay", StringValue("2ms"));
//Creamos una topologia estrella donde toma como parametros
//el numero de nodos y la topologia base pointopoint
PointToPointStarHelper star(numberOfNodes, pointToPoint);
//Se crea la configuracion de los nodos y apartir de que ip se asignaran a los nodos
// y que mascara de subred se utilizara
InternetStackHelper internet;
star.InstallStack(internet);
star.AssignIpv4Addresses( Ipv4AddressHelper("10.1.1.0", "255.255.255.0") );
//Numero de puerto que utilizamos
uint16_t portNumber = 9;
//Se asigna una direccion cualquiera con un numero de puerto
Address hub = InetSocketAddress( Ipv4Address::GetAny(), portNumber );
//Se hace la asignacion del protocolo de transporte y se pasa como
//parametro el objeto hub que contiene la direccion y puerto asignado
PacketSinkHelper packetSinkHelper( "ns3::TcpSocketFactory", hub );
//Apartir del objeto que tiene la informacion del protocolo se instala
//al nodo que sera el hub (nodo del centro) el protocolo de transporte
// y la direccion antes asignada con su puerto, en el cual este comenzara
// a generar trafico de datos al segundo 1.0 y se detiene al segundo 10
ApplicationContainer hubApp = packetSinkHelper.Install( star.GetHub() );
hubApp.Start( Seconds( 1.0 ) );
hubApp.Stop( Seconds( 10.0 ) );
//Se generara trafico con el protocolo de transporte TCP a una cierta direccion que mas adelante
//sera asignada
OnOffHelper onOffHelper( "ns3::TcpSocketFactory", Address() );
//Se les asigna el tiempo de trafico "OnTime" y tiempo de no trafico "OffTime"
onOffHelper.SetAttribute( "OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]") );
onOffHelper.SetAttribute( "OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]") );
//Se crea el objeto que contiene los nodos y simula la capa de aplicacion
ApplicationContainer nodeApps;
//Se iteran los nodos de la topologia
for (uint32_t i = 0; i < star.SpokeCount() ; i++){
//Se les asigna una direccion Ip y un puerto
AddressValue remoteAddress = AddressValue( InetSocketAddress ( star.GetHubIpv4Address(i), portNumber ) );
onOffHelper.SetAttribute( "Remote", remoteAddress );
//Se crea la capa de aplicacion que generara el trafico
nodeApps.Add( onOffHelper.Install( star.GetSpokeNode(i) ) );
}
//Se asigna el tiempo de trafico
nodeApps.Start( Seconds( 1.0 ) );
nodeApps.Stop( Seconds( 10.0 ) );
//Nos ayuda
//Ipv4GlobalRoutingHelper::PopulateRoutingTables();
//star.BoundingBox( 1, 1, 100, 100 );
//Nos crea un archivo animation.xml con la informacion de la simulacion
AnimationInterface anim("animation.xml");
//Se coloca el intervalo de tiempo de movimiento de la animacion
anim.SetMobilityPollInterval( Seconds( 1 ) );
//Se habilita la animacion de intercambio de datos
anim.EnablePacketMetadata(true);
//Se corre la simulacion
Simulator::Run();
//Se destruyen las referencias usadas
Simulator::Destroy();
return 0;
}
view raw gistfile1.cpp hosted with ❤ by GitHub

Esta es la animación presentada:
Video.

Foto.


GIF:

1 comentarios:

  1. Pues, en realidad esperaba generadores que sepan crear dos o más tipos de topologías y que sepas variar el mecanismo de ruteo. 3 pts.

    ResponderEliminar