Está en la página 1de 14

SIMULACIN DE PROTOCOLOS DE ENRUTAMIENTO

PARA REDES MVILES AD-HOC MEDIANTE


HERRRAMIENTA DE SIMULACIN NS-3

Primeros pasos con ns-3.


Ejemplos sencillos

Outline
Introduccin
Primer ejemplo de ns3. Enlace punto a punto.
Segundo ejemplo de ns3. Dos nodos inalmbricos en
configuracin ad hoc

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

Qu podemos simular en ns3?


Redes inalmbricas como WIFI, WIMAX, LTE, redes de sensores,
redes ad hoc
Redes fijas basadas en TCP/IP
Distintas aplicaciones y protocolos

Para definir los escenarios de simulacin y las redes a


simular se usan scripts.
Se pueden desarrollar principalmente en dos lenguajes: CPP
y PYTHON

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

Simulacin de redes ad hoc


Respecto a redes de ad hoc se debe profundizar en los
siguiente modelos:
o

Antenna Module

Optimized Link State Routing (OLSR)

Ad Hoc On-Demand Distance Vector (AODV)

DSDV Routing

DSR Routing

Mobility

Propagation models

Wifi

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

Estructura de un programa en ns3


Ejemplo. scratch-simulator.cc
Cabecera tpica de C

#include "ns3/core-module.h"
NS_LOG_COMPONENT_DEFINE
("ScratchSimulator");

Se utiliza para habilitar/deshabilitar mensajes por


consola

using namespace ns3;


int main (int argc, char *argv[])
{
NS_LOG_UNCOND ("Scratch Simulator");

Programa principal
Se muestra el mensaje
Se ejecuta hasta que no haya un
STOP o no haya eventos

Simulator::Run ();
Simulator::Destroy ();

Se libera memoria.

Cmo se ejecuta?
./waf --run scratch/scratch-simulator
Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

Mensajes de logs
LOG functionality: macros which allow developers to send
information to the std::clog output stream.

All logging messages are disabled by default.


To enable selected logging messages, use the
ns3::LogComponentEnable funtion or use the NS_LOG
environment variable
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);
o

This will result in the application printing out messages as packets


are sent and received during the simulation.

$ export NS_LOG=UdpEchoClientApplication=level_all

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

Mensajes de logs
Existen 7 niveles de mensajes de log:
LOG_ERROR Log error messages

(associated
macro:
NS_LOG_ERROR);
LOG_WARN

Log
warning
messages
(associated
macro:
NS_LOG_WARN);
LOG_DEBUG Log relatively rare, ad-hoc debugging messages
(associated macro: NS_LOG_DEBUG);
LOG_INFO Log informational messages about program progress
(associated macro: NS_LOG_INFO);
LOG_FUNCTION Log a message describing each function called (two
associated macros: NS_LOG_FUNCTION, used for member functions,
and NS_LOG_FUNCTION_NOARGS, used for static functions);
LOG_LOGIC Log messages describing logical flow within a function
(associated macro: NS_LOG_LOGIC);
LOG_ALL Log everything mentioned above (no associated macro).
NS_LOG_UNCOND Log the associated message unconditionally (no
associated log level).

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

Modelo de ns3
Con ns3 se crean un dispositivos o nodos que puede tener
distintas interfaces, aplicaciones, direcciones IP, etc

El proceso es muy parecido al que haramos en una instalacin


de una red en un laboratorio

Nivel

Clases de ns3 (ejemplos)

Aplicacin

UdpEchoClientHelper

Transporte
Red

Ipv4AddressHelper

Enlace

PointToPointHelper

Fsico

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

Empezamos con un enlace punto a punto (first.cc) I

Interfaz punto a punto


Servidor
10.0.0.2

Cliente

Node

10.0.0.1

Enlace

Enlace

Application

Application

Protocol stack

Protocol Stack

NetDevice

Interfaz
Punto a punto
Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Channel

PtP Protocol

NetDevice

Interfaz
Punto a punto

Loja - 2014

Empezamos con un enlace punto a punto (first.cc) II


Objetivo: dos nodos que se comunican a travs de una
aplicacin Cliente-Servidor.

El programa comienza incluyendo los mdulos que se van a


utilizar:
#include
#include
#include
#include
#include

"ns3/core-module.h"
"ns3/network-module.h"
"ns3/internet-module.h"
"ns3/point-to-point-module.h"
"ns3/applications-module.h"

using namespace ns3;


NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");
LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);

Finaliza de la manera usual:


Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Simulator::Run ();
Simulator::Destroy ();
Return 0;

Loja - 2014

10

Empezamos con un enlace punto a punto (first.cc) III


Definicin de los nodos:
NodeContainer nodes;
nodes.Create (2);

Definicin del canal punto a punto:


pointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
o

Las clases Helper ayudan a crear elementos con valores por


defecto, slo hay que cambiar estos valores con SetAttribute

Una vez definido el enlace, se crean los interfaces y se unen a


los nodos
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

11

Empezamos con un enlace punto a punto (first.cc) V


Nivel de aplicacin.
o

Llamada a la funcin UdpEchoServerApplication y


UdpEchoClientApplication
Utilizacin de los Helper para configurar estas funciones.

El servidor. El servidor se encuentra en el nodo 1, estar


activo desde el primer segundo hasta el dcimo de la
simulacin y se usa el puerto nmero 9.

Puerto del servidor


UdpEchoServerHelper echoServer (9);
ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
La aplicacin del servidor se instala en el nodo 1

serverApps.Start (Seconds (1.0));


serverApps.Stop (Seconds (10.0));

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

12

Empezamos con un enlace punto a punto (first.cc) VI


Nivel de aplicacin. El cliente.
o

El cliente har peticiones al puerto 9 de la IP del nodo 1, slo har


una peticin con un paquete de 1024 bytes. El cliente se instalar
en el nodo 0.

UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);


El Helper para la configuracin del cliente requiere dos parmetros:
La interfaz destino y el puerto destino
echoClient.SetAttribute ("MaxPackets", UintegerValue (nPackets));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
Se dan valores a ciertos parmetros

ApplicationContainer clientApps = echoClient.Install(nodes.Get(0));


Se instala sobre el nodo 0
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));
Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

13

Cmo se ejecuta y que resultados obtenemos?


Se ejecuta con la siguiente instruccin:
./waf --run scratch/first

Resultados: Mensajes de log a nivel de aplicacin.


'build' finished successfully (55.759s)
At time 2s client sent 1024 bytes to 10.1.1.2 port 9
At time 2.25732s server received 1024 bytes from 10.1.1.1 port 49153
At time 2.25732s server sent 1024 bytes to 10.1.1.1 port 49153
At time 2.51465s client received 1024 bytes from 10.1.1.2 port 9

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

14

Ficheros de resultados I
Hay que aadir ms cdigo para obtener resultados que se
puedan procesar.
Para conseguir un fichero de traza similar a los de ns2 se
aade el siguiente cdigo:
AsciiTraceHelper ascii;
pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("first.tr"));

Con el helper AsciitraceHelper se pueden registrar en un


fichero de datos las trazas de los paquetes.
+ 2 /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue
ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0
DSCP Default ECN Not-ECT ttl 64 id 0 protocol 17 offset (bytes) 0 flags [none]
length: 1052 10.1.1.1 > 10.1.1.2) ns3::UdpHeader (length: 1032 49153 > 9) Payload
(size=1024)
r 2.25732 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/MacRx
ns3::Ipv4Header (tos 0x0 DSCP Default ECN Not-ECT ttl 64 id 0 protocol 17 offset
(bytes) 0 flags [none] length: 1052 10.1.1.1 > 10.1.1.2) ns3::UdpHeader (length:
1032 49153 > 9) Payload (size=1024)

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

15

Ficheros de resultados II
Cada lnea se corresponde con un evento.
En este caso se estn monitorizando los eventos que
ocurren en las colas de transmisin de todos los
dispositivos punto a punto.
+

2
/NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue
ns3::PppHeader (
Point-to-Point Protocol: IP (0x0021))
ns3::Ipv4Header (
tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
length: 1052 10.1.1.1 > 10.1.1.2)
ns3::UdpHeader ( length: 1032 49153 > 9)
Payload (size=1024)

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

16

Ficheros de resultados III. Ficheros pcap


Existen helper que pueden crear ficheros de traza en el
formato .pcap
Se crea un fichero para cada interfaz que se nombran de la
forma myfirst-0-0.pcap y myfirst-1-0.pcap
pointToPoint.EnablePcapAll (myfirst");

Se pueden leer con:

Wireshark
Desde consola con:
$ tcpdump -nn -tt -r myfirst-0-0.pcap
reading from file myfirst-0-0.pcap, link-type PPP (PPP)
2.000000 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.514648 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024
$ tcpdump -nn -tt -r myfirst-1-0.pcap
reading from file myfirst-1-0.pcap, link-type PPP (PPP)
2.257324 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.257324 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024
Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

17

Simulando redes ad hoc


Respecto al ejemplo anterior, las redes ad hoc mviles
tienen varias peculiaridades:

Los nodos se unen a un medio compartido.


Los protocolos de encaminamiento son especficos: OLSR,
AODV,..etc.
Los nodos son mviles y se mueven dentro de un espacio

La configuracin se puede dividir en cuatro pasos.

Creacin de los nodos inalmbricos ad hoc y configuracin del


canal
Movilidad
Instalacin de la pila de protocolos, asignacin de direcciones
y establecimiento del protocolo de enrutamiento.
Configuracin de las aplicaciones que generan el flujo de datos

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

18

Dos nodos fijos inalmbricos ad hoc (wifi-quiet-adhoc.cc) I


Objetivo: dos nodos ad hoc que se comunican a travs de
una aplicacin Cliente-Servidor.

Respecto al ejemplo anterior cambiamos los nodos conectados


mediante un enlace punto a punto a nodos inalmbricos
comunicndose mediante IEEE802.11

Se aaden nuevas libreras:


#include "ns3/mobility-module.h
#include "ns3/wifi-module.h"

Activar las trazas de los dispositivos WiFi


WifiHelper wifi;
if (verbose)
{
wifi.EnableLogComponents (); // Turn on all Wifi logging
}
wifi.SetStandard (WIFI_PHY_STANDARD_80211b);

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

19

Dos nodos fijos inalmbricos ad hoc (wifi-quiet-adhoc.cc) II


Creacin de los nodos y eleccin de su capa fsica y MAC
NodeContainer nodes;
nodes.Create (2);
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
"DataMode",StringValue (phyMode),
"ControlMode",StringValue (phyMode));
wifiMac.SetType ("ns3::AdhocWifiMac"); // Set it to adhoc mode
YansWifiChannelHelper wifiChannel;
wifiChannel.SetPropagationDelay
("ns3::ConstantSpeedPropagationDelayModel");
wifiChannel.AddPropagationLoss
("ns3::FixedRssLossModel","Rss",DoubleValue (rss));
wifiPhy.SetChannel (wifiChannel.Create ());
NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, nodes);
Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

20

Dos nodos fijos inalmbricos ad hoc (wifi-quiet-adhoc.cc) III


Movilidad. En este caso los nodos son fijos.
MobilityHelper mobility;
//Posicin inicial
Ptr<ListPositionAllocator> positionAlloc =
CreateObject<ListPositionAllocator> ();
positionAlloc->Add (Vector (0.0, 0.0, 0.0));
positionAlloc->Add (Vector (5.0, 0.0, 0.0));
mobility.SetPositionAllocator (positionAlloc);
//Eleccin del modelo de movilidad
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
mobility.Install (c);

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

21

Dos nodos fijos inalmbricos ad hoc (wifi-quiet-adhoc.cc) IV


Trazas.
AsciiTraceHelper ascii;
wifiPhy.EnableAsciiAll (ascii.CreateFileStream ("wifi-quiet-adhoc.tr"));
wifiPhy.EnablePcap ("wifi-quiet-adhoc", devices);

Ejecutar
./waf --run scratch/wifi-quiet-adhoc
Resultados. Mensajes de log

'build' finished successfully (14.872s)


At time 2s client sent 1024 bytes to 10.1.1.2 port 9
At time 2.0201s server received 1024 bytes from 10.1.1.1 port 49153
At time 2.0201s server sent 1024 bytes to 10.1.1.1 port 49153
At time 2.03696s client received 1024 bytes from 10.1.1.2 port 9

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

22

Ficheros de resultados I
Fichero .tr
t 2.009 /NodeList/0/DeviceList/0/$ns3::WifiNetDevice/Phy/State/Tx
ns3::WifiMacHeader (DATA ToDS=0, FromDS=0, MoreFrag=0, Retry=0,
MoreData=0 Duration/ID=0usDA=ff:ff:ff:ff:ff:ff, SA=00:00:00:00:00:01,
BSSID=00:00:00:00:00:01, FragNumber=0, SeqNumber=0) ns3::LlcSnapHeader
(type 0x806) ns3::ArpHeader (request source mac: 00-06-00:00:00:00:00:01
source ipv4: 10.1.1.1 dest ipv4: 10.1.1.2) ns3::WifiMacTrailer ()
r 2.0097 /NodeList/1/DeviceList/0/$ns3::WifiNetDevice/Phy/State/RxOk
ns3::WifiMacHeader (DATA ToDS=0, FromDS=0, MoreFrag=0, Retry=0,
MoreData=0 Duration/ID=0usDA=ff:ff:ff:ff:ff:ff, SA=00:00:00:00:00:01,
BSSID=00:00:00:00:00:01, FragNumber=0, SeqNumber=0) ns3::LlcSnapHeader
(type 0x806) ns3::ArpHeader (request source mac: 00-06-00:00:00:00:00:01
source ipv4: 10.1.1.1 dest ipv4: 10.1.1.2) ns3::WifiMacTrailer ()

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

23

Ficheros de resultados II
$ tcpdump -nn -tt -r wifi-quiet-adhoc-0-0.pcap
reading from file wifi-quiet-adhoc-0-0.pcap, link-type IEEE802_11_RADIO (802.11 plus
radiotap header)
2.009000 2009000us tsft 1.0 Mb/s 2412 MHz 11b ARP, Request who-has 10.1.1.2
(ff:ff:ff:ff:ff:ff) tell 10.1.1.1, length 28
2.010458 2010458us tsft 1.0 Mb/s 2412 MHz 11b -79dB signal -101dB noise ARP, Reply
10.1.1.2 is-at 00:00:00:00:00:02, length 28
2.010468 2010468us tsft 1.0 Mb/s 2412 MHz 11b Acknowledgment
RA:00:00:00:00:00:02
2.011202 2011202us tsft 1.0 Mb/s 2412 MHz 11b IP 10.1.1.1.49153 > 10.1.1.2.9: UDP,
length 1024
2.020412 2020412us tsft 1.0 Mb/s 2412 MHz 11b -79dB signal -101dB noise
Acknowledgment RA:00:00:00:00:00:01
2.026802 2026802us tsft 1.0 Mb/s 2412 MHz 11b -79dB signal -101dB noise ARP,
Request who-has 10.1.1.1 (ff:ff:ff:ff:ff:ff) tell 10.1.1.2, length 28
2.026852 2026852us tsft 1.0 Mb/s 2412 MHz 11b ARP, Reply 10.1.1.1 is-at
00:00:00:00:00:01, length 28
2.027870 2027870us tsft 1.0 Mb/s 2412 MHz 11b -79dB signal -101dB noise
Acknowledgment RA:00:00:00:00:00:01
2.036956 2036956us tsft 1.0 Mb/s 2412 MHz 11b -79dB signal -101dB noise IP
10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024
2.036966 2036966us tsft 1.0 Mb/s 2412 MHz 11b Acknowledgment
RA:00:00:00:00:00:02
Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

24

Ficheros de resultados III


$ tcpdump -nn -tt -r wifi-quiet-adhoc-1-0.pcap
reading from file wifi-quiet-adhoc-1-0.pcap, link-type IEEE802_11_RADIO (802.11 plus
radiotap header)
2.009704 2009704us tsft 1.0 Mb/s 2412 MHz 11b -79dB signal -101dB noise ARP,
Request who-has 10.1.1.2 (ff:ff:ff:ff:ff:ff) tell 10.1.1.1, length 28
2.009754 2009754us tsft 1.0 Mb/s 2412 MHz 11b ARP, Reply 10.1.1.2 is-at
00:00:00:00:00:02, length 28
2.010772 2010772us tsft 1.0 Mb/s 2412 MHz 11b -79dB signal -101dB noise
Acknowledgment RA:00:00:00:00:00:02
2.020098 2020098us tsft 1.0 Mb/s 2412 MHz 11b -79dB signal -101dB noise IP
10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.020108 2020108us tsft 1.0 Mb/s 2412 MHz 11b Acknowledgment
RA:00:00:00:00:00:01
2.026098 2026098us tsft 1.0 Mb/s 2412 MHz 11b ARP, Request who-has 10.1.1.1
(ff:ff:ff:ff:ff:ff) tell 10.1.1.2, length 28
2.027556 2027556us tsft 1.0 Mb/s 2412 MHz 11b -79dB signal -101dB noise ARP, Reply
10.1.1.1 is-at 00:00:00:00:00:01, length 28
2.027566 2027566us tsft 1.0 Mb/s 2412 MHz 11b Acknowledgment
RA:00:00:00:00:00:01
2.028060 2028060us tsft 1.0 Mb/s 2412 MHz 11b IP 10.1.1.2.9 > 10.1.1.1.49153: UDP,
length 1024
2.037270 2037270us tsft 1.0 Mb/s 2412 MHz 11b -79dB signal -101dB noise
Acknowledgment RA:00:00:00:00:00:02
Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

25

Mensajes de log
./waf --run scratch/wifi-quiet-adhoc verbose=1
WifiPhy:GetPayloadDurationMicroSeconds(1088, DsssRate1Mbps)
size=1088 mode=DsssRate1Mbps rate=1000000
DcfManager:NotifyTxStartNow(0x8710dc8, +8896000.0ns)
+2028060080.0ns 0x8710dc8 tx start for +8896000.0ns
DcfManager:UpdateBackoff(0x8710dc8)
DcfManager:GetBackoffStartFor(0x8710dc8, 0x872be40)
DcfManager:GetAccessGrantStart(0x8710dc8)
DcfManager:MostRecent(0x8710dc8, +2027566080.0ns, +10000.0ns, +2027880080.0ns,
+2009714016.0ns, +2037306080.0ns, +10000.0ns, +10000.0ns)
access grant start=+2037306080.0ns, rx access start=+2027566080.0ns, busy access
start=+10000.0ns, tx access start=+2027880080.0ns, nav access start=+2009714016.0ns
DcfManager:MostRecent(0x8710dc8, +2028060080.0ns, +2037346080.0ns)
DcfManager:GetBackoffStartFor(0x8710dc8, 0x86f0908)
DcfManager:GetAccessGrantStart(0x8710dc8)
DcfManager:MostRecent(0x8710dc8, +2027566080.0ns, +10000.0ns, +2027880080.0ns,
+2009714016.0ns, +2037306080.0ns, +10000.0ns, +10000.0ns)
access grant start=+2037306080.0ns, rx access start=+2027566080.0ns, busy access
start=+10000.0ns, tx access start=+2027880080.0ns, nav access start=+2009714016.0ns
DcfManager:MostRecent(0x8710dc8, +2027920080.0ns, +2037346080.0ns)
Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

26

References
http://www.nsnam.org/docs/release/3.19/doxygen/
Ns-3 tutorial.
http://www.nsnam.org/docs/release/3.19/tutorial/singleht
ml/index.html

Simulacin de Protocolos de
Enrutamiento para MANET con
ns-3

Loja - 2014

27