Publicado el 10 de Agosto del 2017
716 visualizaciones desde el 10 de Agosto del 2017
441,0 KB
28 paginas
Creado hace 11a (29/01/2014)
SIMULACIÓN DE PROTOCOLOS DE ENRUTAMIENTO
PARA REDES MÓVILES AD-HOC MEDIANTE
HERRRAMIENTA DE SIMULACIÓN NS-3
Extracción de resultados en ns-3
Outline
Tracing genérico
Generación de trazas pcap.
Generación de gráficas con gnuplot.
Flow Monitor
Flow Monitor
Simulación de Redes
Loja - 2014
2
Outline
Tracing genérico
Generación de trazas pcap.
• Ficheros con paquetes capturados por un dispositivo de red
en formato .pcap.
• Se pueden generar mediante el mecanismo de tracing
genérico o con trace helpers específicos.
• Pueden procesarse con software compatible como Wirsehark
o tcpdump.
o tcpdump.
Generación de gráficas con gnuplot.
• Ficheros ascii de salida de simulación con datos interpretables
por gnuplot escritos mediante el mecanismo de tracing
genérico.
• Clases específicas integradas (GnuplotHelper y Gnuplot).
Flow Monitor
• Clase específicas integradas
• Fichero de salida xml que pueden leerse con NetAnim o scripts
Simulación de Redes
Loja - 2014
3
Tracing genérico
Tracing en NS3. Trace Sources.
Señalizan eventos durante la simulación.
Proporcionan datos asociados al evento:
• Un paquete.
• Parámetros del modelo que han cambiado con el evento.
Cada objeto ns3 cuenta con una lista de trace sources
asociadas documentadas en la API.
• Ejemplo: Fragmento de la página de la clase YansWifiPhy en
Doxygen. Observar que las trace sources no son propias sino
Doxygen. Observar que las trace sources no son propias sino
heredadas (están definidas en la clase padre WifiPhy).
Simulación de Redes
Loja - 2014
Tracing en NS3. Trace Sources.
La información proporcionada por la trace source, se indica
en la lista de atributos como TracedCallback o como
TracedValue.
• Ejemplo: Fragmento de la página de la clase WifiPhy en
Doxygen. Se observan atributos tipo TracedCallback. Si se
desea utilizar la trace source PhyRxEnd, esta lista nos dice que
la información proporcionada es tipo <Ptr<const> Packet>
Simulación de Redes
Loja - 2014
5
6
Tracing en NS3. Trace Sources.
• Ejemplo: Fragmento de la página de la clase TcpNewReno en
Doxygen. Se observan atributos tipo TracedValue. Si se desea
utilizar la trace source m_Cwnd (Congestion Window), esta
lista nos dice que la información proporcionada es tipo
<uint32_t>
Simulación de Redes
Loja - 2014
Tracing en NS3. Trace Sinks.
Funciones que se ejecutan cuando se produce el
evento de la trace source a la que están conectadas.
Reciben como parámetro un objeto del tipo indicado por el
TracedCallback o TracedValue de su trace source.
• Si es TracedValue, la función debe incluir dos parámetros uno
para el valor antiguo y otro para el nuevo.
• Si es TracedCallback, sólo es necesario un parámetro.
Pueden incluir otros parámetros.
Pueden incluir otros parámetros.
No devuelven ningún valor (void).
Simulación de Redes
Loja - 2014
7
8
Tracing en NS3. Trace Sinks.
Ejemplo 1: Trace Sink para la Trace Source PhyRxEnd de
YansWifiPhy
Parámetro extra añadido por el usuario
static void
RxEndTraceSink (Ptr<PcapFileWrapper> file, Ptr<const Packet> p)
{
file->Write(Simulator::Now(), p);
}
Parámetro obligatorio para una trace
sink diseñada para conectar con la
trace source PhyRxEnd de la clase
YansWifiPhy. Indicado por el atributo
YansWifiPhy. Indicado por el atributo
TracedCallback correspondiente en
Doxygen.
Ejemplo 2: Trace Sink para la Trace Source
CongestionWindow de TcpNewReno
static void
Cwndchange(uint32_t oldCwnd, uint32_t newCwnd)
{
NS_LOG_UNCOND (Simulator::Now ().GetSeconds () << "\t" << newCwnd);
}
Dos parámetros (valor
antiguo, valor nuevo) puesto
que es TracedValue. Ningún
parámetro extra en este caso.
Simulación de Redes
Loja - 2014
9
Tracing en NS3. Conexión de Trace Sinks a Trace Sources.
Sin contexto:
• Realización de una llamada a la función miembro
TraceConnectWithoutContext sobre el objeto que contiene la
trace source.
• Parámetros:
o Nombre de la trace source.
o Llamada a MakeCallback con la referencia de la función trace sink.
• Ejemplo:
ns3TcpSocket->TraceConnectWithoutContext("CongestionWindow",
MakeCallback (&CwndChange));
o ns3TcpSocket es un puntero a la instancia del objeto que contiene la
trace source.
• Ptr<Socket> ns3TcpSocket = Socket::CreateSocket (nodes.Get (0),
TcpSocketFactory::GetTypeId ());
o CongestionWindow es el nombre de la trace source.
o CwndChange es el nombre de la función trace sink que queremos
conectar a la trace source indicada.
Simulación de Redes
Loja - 2014
10
Tracing en NS3. Conexión de Trace Sinks a Trace Sources.
Con el subsistema Config:
• Todos los objetos en la simulación tienen asignado un
identificador, el Config Path. El esquema para construir el
config path de un objeto está indicado en la página Doxygen
de su clase.
• Para la conexión se utiliza la función Config::Connect. No es
necesario disponer de una variable con el objeto que contiene
la trace source, éste es directamente accesible con el config
path.
• Parámetros:
o Config path de la trace source que queremos conectar.
o Llamada a MakeCallback con la referencia de la función trace sink.
Simulación de Redes
Loja - 2014
11
Tracing en NS3. Conexión de Trace Sinks a Trace Sources.
Con el subsistema Config:
• Ejemplo:
Config::Connect ("/NodeList/0/$ns3::MobilityModel/CourseChange",
MakeCallback (&CourseChange));
o
o
La llamada a Config::Connect se realiza directamente, no como método
sobre una instancia de objeto.
/NodeList/0/$ns3::MobilityModel/CourseChange es el config path de la trace
source con la que se desea conectar.
o CourseChange es el nombre de la trace sink que queremos conectar con la
o CourseChange es el nombre de la trace sink que queremos conectar con la
trace source indicada.
Simulación de Redes
Loja - 2014
12
Tracing en NS3. Ejemplo 1 (I)
TcpNewReno
• Trace Source: CongestionWindow, indica un cambio el
tamaño de la ventana TCP.
• Protected Attributes:
TracedValue< uint32_t > m_Cwnd
• Trace Sink:
static void
Cwndchange(uint32_t oldCwnd, uint32_t newCwnd)
{
{
NS_LOG_UNCOND (Simulator::Now ().GetSeconds () << "\t" << newCwnd);
}
• Conexión a la trace source (en el programa principal):
Ptr<Socket> ns3TcpSocket = Socket::CreateSocket (nodes.Get (0),
TcpSocketFactory::GetTypeId ());
ns3TcpSocket->TraceConnectWithoutContext("CongestionWindow",
MakeCallback (&CwndChange));
Simulación de Redes
Loja - 2014
13
Tracing en NS3. Ejemplo 1 (II)
TcpNewReno
• Resultado: cada vez que se notifica un cambio en la ventana
de congestión TCP, la trace sink escribe en el log el momento
de la simulación en que se ha producido el cambio y el valor
de la nueva ventana. La salida por pantalla de la simulación
contendrá líneas del tipo:
9.23434 8694
9.24266 8727
9.25098 8759
9.25098 8759
9.2593
8791
9.26762 8823
9.27594 8855
9.28426 8887
9.29258 8919
9.3009
8951
9.30922 8983
9.31754 9014
Simulación de Redes
Loja - 2014
14
Tracing en NS3. Ejemplo 2 (I)
MobilityModel
• Trace Source: CourseChange, indica un cambio en el vector
de posición o en el de velocidad de un nodo móvil.
• Private Attributes:
TracedCallback< Ptr< const MobilityModel > > m_courseChangeTrace
• Trace Sink:
void
CourseChange (std::string context, Ptr< const MobilityModel >
model)
model)
{
Vector position = model->GetPosition();
NS_LOG_UNCOND (context << "x= " << position.x << ", y = " <<
position.y);
}
Simulación de Redes
Loja - 2014
15
Tracing en NS3. Ejemplo 2 (II)
MobilityModel
• Conexión a la trace source (en el programa principal):
std::ostringstream oss;
oss <<
"/NodeList/" << wifiNodes.Get (0)->GetId () <<
"/$ns3::MobilityModel/CourseChange";
Config::Connect (oss.str (), MakeCallback (&CourseChange));
• Resultado: cada vez que se notifica un cambio de curso, la
trace sink escribe en el log el path de la trace source y la
trace sink escribe en el log el path de la trace source y la
nueva posición. La salida por pantalla de la simulación
contendrá líneas del tipo:
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10, y = 0
/NodeList/7/$ns3::MobilityModel/CourseChange x = 9.06541, y = -0.355733
/NodeList/7/$ns3::MobilityModel/CourseChange x = 9.19429, y = 0.635927
/NodeList/7/$ns3::MobilityModel/CourseChange x = 8.9534, y = 1.60648
Simulación de Redes
Loja - 2014
16
Generación de ficheros pcap
Generación de trazas pcap
1. Trace Sources y Trace Sinks.
Consiste en utilizar el mecanismo de tracing para generar
archivos pcap.
Las trace sources que corresponden con eventos
relacionados con paquetes proporcionan el paquete
completo como información.
• Ejemplo: la trace source PhyRxEnd de WifiPhy notifica que un
paquete ha sido recibido correctamente. Este paquete es el
parámetro que se pasa a la trace sink conectada.
parámetro que se pasa a la trace sink conectada.
La clase PcapHelper proporciona una manera cómoda de
generar un archivo .pcap para Wireshark con el contenido
de estos paquetes.
Simulación de Redes
Loja - 2014
18
Generación de trazas pcap
1. Trace Sources y Trace Sinks.
Ejemplo: PointToPointNetDevice
• Trace Source: PhyRxEnd, indica que la recepción de un
paquete se ha completado.
• Private Attributes:
TracedCallback< Ptr< const Packet > > m_phyRxEndTrace
• Trace Sink:
static void
RxEnd (Ptr<PcapFileWrapper> file, Ptr<const Packet> p)
{
{
file->Write(Simulator::Now(), p);
}
• Conexión a la trace source (en el programa principal):
PcapHelper pcapHelper;
Ptr<PcapFileWrapper> file = pcapHelper.CreateFile (“capture.pcap”,
std::ios::out, PcapHelper::DLT_PPP);
devices.Get (1)->TraceConnectWithoutContext(“PhyRxEnd”,
MakeBoundCallback (&RxEnd, file));
• Resultado: archivo “capture.pcap” (para Wireshark) con todos
los paquetes recibidos correctam
Comentarios de: Extracción de resultados en ns-3 (0)
No hay comentarios