Você está na página 1de 56

Introduo

Tutorial
Resultados
Network Simulator (NS3)
Carlos Giovanni Nunes de Carvalho
1
24 de outubro de 2012
1
Prof. DSc. do Curso de Cincia da Computao da UESPI
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Sumrio
1 Introduo
Caractersticas
Instalao
Como instalar o NS3
2 Tutorial
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
3 Resultados
Arquivo de sada
Filtrar resultados
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Caractersticas
Instalao
Como instalar o NS3
Sobre o Network Simulator (NS3)
O que o NS3
NS3
a
um simulador para sistemas de Internet baseado em
eventos discretos (denido por unidade de tempo)
Desenvolvido para ns de pesquisa e educational
Software livre e de cdigo aberto (C++ e/ou Python)
a
www.nsnam.org
Comunidade
Permite que desenvolvedores da comunidade de redes
contribuam em seu cdigo
a
Lista de usurios do NS3
b
a
www.nsnam.org/developers/overview/
b
groups.google.com/group/ns-3-users
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Caractersticas
Instalao
Como instalar o NS3
Sobre o NS3 (Cont.)
NS3
a
vs NS2
b
a
www.nsnam.org/docs/release/3.15/tutorial-pt-br/ns-3-tutorial.pdf
b
nsnam.isi.edu/nsnam/index.php/Main_Page
O NS3 no uma extenso do NS2
No suporta as APIs do NS2
Algumas funcionalidades do NS2 foram portadas para o NS3
um simulador novo
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Caractersticas
Instalao
Como instalar o NS3
Pr-requisitos
Aplicativos e bibliotecas
Para que o NS3 funcione juntamente com gerao de
documentao, plotagem de grcos e outras funcionalidades,
necessrio a instalao de alguns pacotes
Pacotes recomendados para os usurios do Ubuntu
a
a
www.nsnam.org/wiki/index.php/Installation
C++ e Python: >sudo apt-get install gcc g++ python
python-dev
Mercurial: >sudo apt-get install mercurial
rvore de desenvolvedores ns-3: >sudo apt-get install bzr
Debugging: >sudo apt-get install gdb valgrind
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Caractersticas
Instalao
Como instalar o NS3
Pr-requisitos (Cont.)
Pacotes recomendados (Cont.)
Modelos de erro para WiFi: >sudo apt-get install gsl-bin
libgsl0-dev libgsl0ldbl
Analisador lxico e parser: >sudo apt-get install ex bison
lib-dev
Traces pcap: >sudo apt-get install tcpdump
Database para estatstica: >sudo apt-get install sqlite sqlite3
libsqlite3-dev
Xml: >sudo apt-get install libxml2 libxml2-dev
GTK: >sudo apt-get install libgtk2.0-0 libgtk2.0-dev
Mquinas virtuais: >sudo apt-get install vtun lxc
Utilitrios: >sudo apt-get install uncrustify
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Caractersticas
Instalao
Como instalar o NS3
Pr-requisitos (Cont.)
Pacotes recomendados (Cont.)
Documentao: >sudo apt-get install doxygen graphviz
imagemagick texlive texlive-extra-utils texlive-latex-extra
python-sphinx dia
Visualizador: >sudo apt-get install python-pygraphviz
python-kiwi python-pygoocanvas libgoocanvas-dev
Openow: >sudo apt-get install libboost-signals-dev
libboost-lesystem-dev
Emulador: >sudo apt-get install openmpi*
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Caractersticas
Instalao
Como instalar o NS3
Passo a passo
Recomendao de download
O procedimento recomendado baixar o NS3 atravs do Mercurial,
pois a ferramenta copia o cdigo do simulador no repositrio
Comandos
>cd; mkdir repos; cd repos
>hg clone http://code.nsnam.org/ns-3-allinone
>./download.py -n ns-3-dev
>ls -la
Tempo de espera
O tempo de download vai variar de acordo com a conexo da
Internet, mas pode levar alguns minutos ou horas
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Caractersticas
Instalao
Como instalar o NS3
Passo a passo
Compilao
Para gerar o executvel do NS3 necessrio que os cdigos fontes
baixados sejam compilados
Comandos
>cd ns-3-allinone
>./build.py enable-examples enable-tests
>cd ns-3-dev; ls -la
Teste
Para vericar o funcionamento, use os seguintes comandos:
>./test.py -c core
>./waf run hello-simulator
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Aprendendo com exemplos
Onde encontrar?
Todos os arquivos do tutorial esto localizados no diretrio
examples/tutorial
Testando um exemplo
Comandos para testar o cenrio a ser simulado:
>cp examples/tutorial/rst.cc scratch/myrst.cc
>./waf
>./waf run scratch/myrst
Logs gerados pela simulao
Verique o tipo de log que gerado na simulao. Isto pode ser
denido dentro do script de simulao ou atravs de parmetros.
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Logs da simulao
O que so logs?
So as mensagens do simulador e esto distribudas em 7 nveis
Nveis das mensagens
NS_LOG_ERROR: erro
NS_LOG_WARN: alertas
NS_LOG_DEBUG: depurao
NS_LOG_INFO: informativo
NS_LOG_FUNCTION: descreve a funo chamada
NS_LOG_LOGIC: uxo lgico dentro de uma funo
NS_LOG_ALL: tudo
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo
// Adicionar bibliotecas bsicas contendo o ncleo do simulador,
// os ns e enlaces.
#include ns3/core-module.h
#include ns3/simulator-module.h
#include ns3/node-module.h
#include ns3/helper-module.h
using namespace ns3;
// Denio do log
NS_LOG_COMPONENT_DEFINE (FirstScriptExample);
// Funo principal do cdigo
int
main (int argc, char *argv[])
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
{
// Tipo de log denido para a aplicao
LogComponentEnable(UdpEchoClientApplication,
LOG_LEVEL_INFO);
LogComponentEnable(UdpEchoServerApplication,
LOG_LEVEL_INFO);
// Dene e cria dois ns
NodeContainer nodes;
nodes.Create (2);
// Cria o enlace ponto a ponto entre dois ns
PointToPointHelper pointToPoint;
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congura a taxa da conexo do enlace
pointToPoint.SetDeviceAttribute (DataRate,
StringValue (5Mbps));
// Congura o atraso do enlace
pointToPoint.SetChannelAttribute (Delay, StringValue (2ms));
// Congura o dispositivo de rede
NetDeviceContainer devices;
// Cria os dispositivos e associa-os ao enlace
devices = pointToPoint.Install (nodes);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congurar a pilha de protocolo IP nos ns
InternetStackHelper stack;
stack.Install (nodes);
// Congura o endereo IP da rede e sua mscara de subrede
Ipv4AddressHelper address;
address.SetBase (10.1.1.0, 255.255.255.0);
// Atribui os endereos IP as interfaces de rede
Ipv4InterfaceContainer interfaces = address.Assign (devices);
// Cria o servidor da aplicao de Echo na porta 9
UdpEchoServerHelper echoServer (9);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congura o segundo n como servidor da aplicao de Echo
ApplicationContainer serverApps = echoServer.Install
(nodes.Get (1));
// Dene o tempo de incio e nal da aplicao no servidor
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
// Congura o endereo IP do servidor e a porta
// no cliente da aplicao de Echo
Ipv4Address serverAddress = interfaces.GetAddress (1);
UdpEchoClientHelper echoClient (serverAddress, 9);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congura o nmero mximo de pacotes enviados pelo cliente
echoClient.SetAttribute (MaxPackets, UintegerValue (1));
// Intervalo de tempo entre pacotes no cliente
echoClient.SetAttribute (Interval, TimeValue (Seconds (1.)));
// Tamanho mximo do pacote no cliente
echoClient.SetAttribute (PacketSize, UintegerValue (1024));
// Congura o cliente da aplicao no primeiro n
ApplicationContainer clientApps = echoClient.Install
(nodes.Get (0));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Dene o tempo de incio e nal da aplicao no cliente
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));
// Carrega a simulao aps todas as denies
Simulator::Run ();
// Encerra a simulao no nal
Simulator::Destroy ();
return 0;
}
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo
// Adicionar bibliotecas bsicas contendo o ncleo do simulador,
// os ns, enlaces multiponto (csma/ethernet) e roteamento.
#include ns3/core-module.h
#include ns3/network-module.h
#include ns3/csma-module.h
#include ns3/internet-module.h
#include ns3/point-to-point-module.h
#include ns3/applications-module.h
#include ns3/ipv4-global-routing-helper.h
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Descrio da topologia multiponto
// Default Network Topology
//
// 10.1.1.0
// n0 n1 n2 n3 n4
// point-to-point | | | |
//
// LAN 10.1.2.0
using namespace ns3;
// Denio do log
NS_LOG_COMPONENT_DEFINE (SecondScriptExample);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Funo principal do cdigo
int
main (int argc, char *argv[])
{
// Variveis criadas para enviar parmetros por linha de comando
// Varivel para habilitar ou desabilitar o log
bool verbose = true;
// Varivel para atribuir a quantidade mnima de ns (multiponto)
uint32_t nCsma = 3;
// Varivel para receber os parmetros da linha de comando
CommandLine cmd;
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Atribui os valores das variveis digitadas na linha de comando
cmd.AddValue (nCsma, Number of \extra\
CSMA nodes/devices, nCsma);
cmd.AddValue (verbose, Tell echo applications to log if true,
verbose);
cmd.Parse (argc, argv);
// Vericar se o log ser habilitado
if (verbose)
{
LogComponentEnable(UdpEchoClientApplication,
LOG_LEVEL_INFO);
LogComponentEnable(UdpEchoServerApplication,
LOG_LEVEL_INFO);
}
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Caso no seja enviado o nmero de ns, garante o nmero
// mnimo
nCsma = nCsma == 0 ? 1 : nCsma;
// Dene e cria dois ns para o enlace ponto a ponto
NodeContainer p2pNodes;
p2pNodes.Create (2);
// Dene e cria a quantidade mnima de ns para o enlace
// multiponto e congura o primeiro n para conectar na
// rede ponto a ponto
NodeContainer csmaNodes;
csmaNodes.Add (p2pNodes.Get (1));
csmaNodes.Create (nCsma);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Cria o enlace ponto a ponto entre dois ns
PointToPointHelper pointToPoint;
// Congura a taxa da conexo do enlace ponto a ponto
pointToPoint.SetDeviceAttribute (DataRate,
StringValue (5Mbps));
// Congura o atraso do enlace ponto a ponto
pointToPoint.SetChannelAttribute (Delay, StringValue (2ms));
// Congura o dispositivo de rede no enlace ponto a ponto
NetDeviceContainer p2pDevices;
// Cria os dispositivos e associa-os ao enlace ponto a ponto
p2pDevices = pointToPoint.Install (p2pNodes);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Cria o enlace multiponto
CsmaHelper csma;
// Congura a taxa da conexo do enlace multiponto
csma.SetChannelAttribute (DataRate, StringValue (100Mbps));
// Congura o atraso do enlace multiponto
csma.SetChannelAttribute (Delay, TimeValue (NanoSeconds
(6560)));
// Congura o dispositivo de rede no enlace multiponto
NetDeviceContainer csmaDevices;
// Cria os dispositivos e associa-os ao enlace multiponto
csmaDevices = csma.Install (csmaNodes);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congurar a pilha de protocolo IP nos ns
InternetStackHelper stack;
// Somente o primeiro n ponto a ponto congurado aqui
// pois o segundo n j pertence ao enlace multiponto
stack.Install (p2pNodes.Get (0));
stack.Install (csmaNodes);
// Congura o endereo IP da rede e sua mscara de subrede
// para os dispositivos do enlace ponto a ponto
Ipv4AddressHelper address;
address.SetBase (10.1.1.0, 255.255.255.0);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Atribui os endereos IP as interfaces de rede
// no enlace ponto a ponto
Ipv4InterfaceContainer p2pInterfaces =
address.Assign (p2pDevices);
// Congura o endereo IP da rede e sua mscara de subrede
// para os dispositivos do enlace multiponto
address.SetBase (10.1.2.0, 255.255.255.0);
// Atribui os endereos IP as interfaces de rede
// no enlace multiponto
Ipv4InterfaceContainer csmaInterfaces =
address.Assign (csmaDevices);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Cria o servidor da aplicao de Echo na porta 9
UdpEchoServerHelper echoServer (9);
// Congura o ltimo n do enlace multiponto como
// servidor da aplicao de Echo
ApplicationContainer serverApps = echoServer.Install
(csmaNodes.Get (nCsma));
// Dene o tempo de incio e nal da aplicao no servidor
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congura a porta no cliente da aplicao de Echo no
// ltimo n do enlace multiponoto
UdpEchoClientHelper echoClient
(csmaInterfaces.GetAddress (nCsma), 9);
// Congura o nmero mximo de pacotes enviados pelo cliente
echoClient.SetAttribute (MaxPackets, UintegerValue (1));
// Intervalo de tempo entre pacotes no cliente
echoClient.SetAttribute (Interval, TimeValue (Seconds (1.)));
// Tamanho mximo do pacote no cliente
echoClient.SetAttribute (PacketSize, UintegerValue (1024));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congura o cliente da aplicao no primeiro n
// do enlace ponto a ponto
ApplicationContainer clientApps = echoClient.Install
(p2pNodes.Get (0));
// Dene o tempo de incio e nal da aplicao no cliente
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));
// Congura o roteamento global na rede,
// cada n funciona como se fosse um roteador OSPF
Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
// Habilita o PCAP/Snier no enlace ponto a ponto
pointToPoint.EnablePcapAll (second);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Habilita o PCAP/Snier no enlace multiponto
// apenas no primeiro n de uma rede compartilhada.
// True para congurar a interface em modo promscuo.
// Use > tcpdump -nn -tt -r <nome>-<n>-<dispositivo>.pcap
// para rastrear os arquivos PCAP
csma.EnablePcap (second, csmaDevices.Get (1), true);
// Carrega a simulao aps todas as denies
Simulator::Run ();
// Encerra a simulao no nal
Simulator::Destroy ();
return 0;
}
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo
// Adicionar bibliotecas bsicas contendo o ncleo do simulador,
// os ns, enlaces multiponto (csma/ethernet) e roteamento.
#include ns3/core-module.h
#include ns3/point-to-point-module.h
#include ns3/network-module.h
#include ns3/applications-module.h
#include ns3/wi-module.h
#include ns3/mobility-module.h
#include ns3/csma-module.h
#include ns3/internet-module.h
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Descrio da topologia multiponto
// Default Network Topology
//
// Wi 10.1.3.0
// AP
// * * * *
// | | | |
// 10.1.1.0
// n5 n6 n7 n0 n1 n2 n3 n4
// point-to-point | | | |
//
// LAN 10.1.2.0
using namespace ns3;
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Denio do log
NS_LOG_COMPONENT_DEFINE (ThirdScriptExample);
// Funo principal do cdigo
int
main (int argc, char *argv[])
{
// Variveis criadas para enviar parmetros por linha de comando
// Varivel para habilitar ou desabilitar o log
bool verbose = true;
// Varivel para atribuir a quantidade mnima de ns (multiponto)
uint32_t nCsma = 3;
// Varivel para atribuir a quantidade mnima de ns (sem o)
uint32_t nWi = 3;
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Varivel para receber os parmetros da linha de comando
CommandLine cmd;
// Atribui os valores das variveis digitadas na linha de comando
cmd.AddValue (nCsma, Number of \extra\
CSMA nodes/devices, nCsma);
cmd.AddValue (nWi, Number of wi STA devices, nWi);
cmd.AddValue (verbose, Tell echo applications to log if true,
verbose);
cmd.Parse (argc, argv);
// Vericar se o log ser habilitado
if (verbose)
{
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
LogComponentEnable(UdpEchoClientApplication,
LOG_LEVEL_INFO);
LogComponentEnable(UdpEchoServerApplication,
LOG_LEVEL_INFO);
}
// Caso no seja enviado o nmero de ns, garante o nmero
// mnimo
nCsma = nCsma == 0 ? 1 : nCsma;
// Dene e cria dois ns para o enlace ponto a ponto
NodeContainer p2pNodes;
p2pNodes.Create (2);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Dene e cria a quantidade mnima de ns para o enlace
// multiponto e congura o primeiro n para conectar na
// rede ponto a ponto
NodeContainer csmaNodes;
csmaNodes.Add (p2pNodes.Get (1));
csmaNodes.Create (nCsma);
// Cria o enlace ponto a ponto entre dois ns
PointToPointHelper pointToPoint;
// Congura a taxa da conexo do enlace ponto a ponto
pointToPoint.SetDeviceAttribute (DataRate,
StringValue (5Mbps));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congura o atraso do enlace ponto a ponto
pointToPoint.SetChannelAttribute (Delay, StringValue (2ms));
// Congura o dispositivo de rede no enlace ponto a ponto
NetDeviceContainer p2pDevices;
// Cria os dispositivos e associa-os ao enlace ponto a ponto
p2pDevices = pointToPoint.Install (p2pNodes);
// Cria o enlace multiponto
CsmaHelper csma;
// Congura a taxa da conexo do enlace multiponto
csma.SetChannelAttribute (DataRate, StringValue (100Mbps));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congura o atraso do enlace multiponto
csma.SetChannelAttribute (Delay, TimeValue (NanoSeconds
(6560)));
// Congura o dispositivo de rede no enlace multiponto
NetDeviceContainer csmaDevices;
// Cria os dispositivos e associa-os ao enlace multiponto
csmaDevices = csma.Install (csmaNodes);
// Dene e cria a quantidade mnima de ns para o enlace
// sem o e congura o primeiro n para ser o AP
NodeContainer wiStaNodes;
wiStaNodes.Create (nWi);
NodeContainer wiApNode = p2pNodes.Get (0);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Cria o canal e associa-o a camada fsica
// da rede sem o
YansWiChannelHelper channel = YansWiChannelHelper::
Default ();
YansWiPhyHelper phy = YansWiPhyHelper::Default ();
phy.SetChannel (channel.Create ());
// Dene a camada de enlace da rede sem o
// bsica, sem QoS e usando AARF para controlar
// a taxa do canal de dados
WiHelper wi = WiHelper::Default ();
wi.SetRemoteStationManager (ns3::AarfWiManager);
NqosWiMacHelper mac = NqosWiMacHelper::Default ();
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congura o SSID da rede sem o, com o tipo do MAC
// e desabilita a sondagem nas STA (estaes)
Ssid ssid = Ssid (ns-3-ssid);
mac.SetType (ns3::StaWiMac,
Ssid, SsidValue (ssid),
ActiveProbing, BooleanValue (false));
// Congura o dispositivo de rede no enlace sem o
NetDeviceContainer staDevices;
// Cria os dispositivos e associa-os ao enlace sem o
staDevices = wi.Install (phy, mac, wiStaNodes);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congura o SSID da rede sem o, como o tipo do MAC
// no AP (ponto de acesso)
mac.SetType (ns3::ApWiMac,
Ssid, SsidValue (ssid)));
// Congura o dispositivo de rede no enlace sem o
NetDeviceContainer apDevices;
// Cria o dispositivo e associa-o ao enlace sem o
apDevices = wi.Install (phy, mac, wiApNode);
// Congura o modelo de mobilidade para as estaes,
// denindo as dimensses e o layout da grade
MobilityHelper mobility;
mobility.SetPositionAllocator (ns3::GridPositionAllocator,
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
MinX, DoubleValue (0.0),
MinY, DoubleValue (0.0),
DeltaX, DoubleValue (5.0),
DeltaY, DoubleValue (10.0),
GridWidth, UintegerValue (3),
LayoutType, StringValue (RowFirst));
// Dene e instala o modelo de mobilidade aleatria, tanto
// para direo quanto para velocidade nas estaes
mobility.SetMobilityModel (ns3::RandomWalk2dMobilityModel,
Bounds, RectangleValue (Rectangle (-50, 50, -50, 50)));
mobility.Install (wiStaNodes);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Dene a posio constante (sem mobilidade) para o AP
mobility.SetMobilityModel (ns3::ConstantPositionMobilityModel);
mobility.Install (wiApNode);
// Congurar e instala a pilha de protocolo IP nos ns
InternetStackHelper stack;
stack.Install (csmaNodes);
stack.Install (wiApNode);
stack.Install (wiStaNodes);
// Congura o endereo IP da rede e sua mscara de subrede
// para os dispositivos dos enlaces ponto a ponto,
// multiponto e sem o
Ipv4AddressHelper address;
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
address.SetBase (10.1.1.0, 255.255.255.0);
Ipv4InterfaceContainer p2pInterfaces =
address.Assign (p2pDevices);
address.SetBase (10.1.2.0, 255.255.255.0);
Ipv4InterfaceContainer csmaInterfaces =
address.Assign (csmaDevices);
address.SetBase (10.1.3.0, 255.255.255.0);
address.Assign (staDevices);
address.Assign (apDevices);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Cria o servidor da aplicao de Echo na porta 9
UdpEchoServerHelper echoServer (9);
// Congura o ltimo n do enlace multiponto como
// servidor da aplicao de Echo
ApplicationContainer serverApps = echoServer.Install
(csmaNodes.Get (nCsma));
// Dene o tempo de incio e nal da aplicao no servidor
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congura a porta no cliente da aplicao de Echo no
// ltimo n do enlace multiponoto
UdpEchoClientHelper echoClient
(csmaInterfaces.GetAddress (nCsma), 9);
// Congura o nmero mximo de pacotes enviados pelo cliente
echoClient.SetAttribute (MaxPackets, UintegerValue (1));
// Intervalo de tempo entre pacotes no cliente
echoClient.SetAttribute (Interval, TimeValue (Seconds (1.)));
// Tamanho mximo do pacote no cliente
echoClient.SetAttribute (PacketSize, UintegerValue (1024));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Congura o cliente da aplicao no penultimo n
// do enlace sem o apontando para o servidor no
// enlace multiponto
ApplicationContainer clientApps = echoClient.Install
(wiStaNodes.Get (nWi - 1));
// Dene o tempo de incio e nal da aplicao no cliente
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));
// Congura o roteamento global na rede,
// cada n funciona como se fosse um roteador OSPF
Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Evita que o AP crie pacotes sinalizadores
// (beacons) indeterminadamente no simulador
Simulator::Stop (Seconds (10.0));
// Habilita o PCAP/Snier no enlace ponto a ponto
pointToPoint.EnablePcapAll (third);
// Habilita o PCAP/Snier no enlace multiponto
// apenas no primeiro n de uma rede compartilhada.
// True para congurar a interface em modo promscuo.
// Use > tcpdump -nn -tt -r <nome>-<n>-<dispositivo>.pcap
// para rastrear os arquivos PCAP
csma.EnablePcap (second, csmaDevices.Get (0), true);
// Habilita o PCAP/Snier no enlace sem o
phy.EnablePcap (third, apDevices.Get (0));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Viso geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
Dissecando o cdigo (Cont.)
// Carrega a simulao aps todas as denies
Simulator::Run ();
// Encerra a simulao no nal
Simulator::Destroy ();
return 0;
}
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Arquivo de sada
Filtrar resultados
Preparar o arquivo
Como fazer?
Existem vrias ferramentas para tratar o arquivo de sada, entre elas
esto as linguagens de script, as quais permitem ltrar, calcular e
armazenar os resultados de acordo com as necessidades do usurio.
Exemplos de ferramentas
Shell Script
Perl
Python
AWK
GnuPlot
O GnuPlot permite executar cdigos AWK dentro de seus scripts.
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Arquivo de sada
Filtrar resultados
Cdigo exemplo com AWK
BEGIN{
iIP=0;
iARP_Rep=0;
iARP_Req=0;
}
{
if ($2==IP) {
tempoIP[iIP]=$1;
pacotesIP[iIP]=pacotesIP[iIP-1]+$8;
iIP++;
};
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Arquivo de sada
Filtrar resultados
Cdigo exemplo com AWK
if ($2==ARP, && $3==Request) {
tempoARP_Req[iARP_Req]=$1;
pacotesARP_Req[iARP_Req]=
pacotesARP_Req[iARP_Req-1]+$10;
iARP_Req++;
};
if ($2==ARP, && $3==Reply) {
tempoARP_Rep[iARP_Rep]=$1;
pacotesARP_Rep[iARP_Rep]=
pacotesARP_Rep[iARP_Rep-1]+$8;
iARP_Rep++;
};
}
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Arquivo de sada
Filtrar resultados
Cdigo exemplo com AWK
END{
ip=0;
arp_rep=0;
arp_req=0;
while (ip<iIP) {print Bytes IP enviados pacotesIP[ip] em
tempoIP[ip] segundos ; ip+=1;};
while (arp_rep<iARP_Rep) {print Bytes ARP_REP enviados
pacotesARP_Rep[arp_rep] em tempoARP_Rep[arp_rep]
segundos ; arp_rep+=1;};
while (arp_req<iARP_Req) {print Bytes ARP_REQ enviados
pacotesARP_Req[arp_req] em tempoARP_Req[arp_req]
segundos ; arp_req+=1;};
}
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Arquivo de sada
Filtrar resultados
Executando o exemplo com AWK
> tcpdump -nn -tt -r second-2-0.pcap | awk -f
exemplo1_AWK.awk
Sada (padro/tela) do comando acima:
Bytes IP enviados 1024 em 2.003803 segundos
Bytes IP enviados 2048 em 2.003921 segundos
Bytes ARP_REP enviados 50 em 2.003710 segundos
Bytes ARP_REP enviados 100 em 2.003828 segundos
Bytes ARP_REQ enviados 50 em 2.003698 segundos
Bytes ARP_REQ enviados 100 em 2.003815 segundos
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introduo
Tutorial
Resultados
Arquivo de sada
Filtrar resultados
Executando o exemplo com AWK
Comando para redirecionar a sada no arquivo de plotagem:
> tcpdump -nn -tt -r second-2-0.pcap | awk -f
"exemplo1_AWK.awk plotagem.dat
No vai funcionar no Gnuplot, pois falta eliminar as strings/textos.
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Você também pode gostar