Você está na página 1de 56

Introdução

Tutorial
Resultados

Network Simulator (NS3)

Carlos Giovanni Nunes de Carvalho1

24 de outubro de 2012

1
Prof. DSc. do Curso de Ciência da Computação da UESPI
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introdução
Tutorial
Resultados

Sumário

1 Introdução
Características
Instalação
Como instalar o NS3
2 Tutorial
Visão geral
Primeiro exemplo
Segundo exemplo
Terceiro exemplo
3 Resultados
Arquivo de saída
Filtrar resultados

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Introdução Características
Tutorial Instalação
Resultados Como instalar o NS3

Sobre o Network Simulator (NS3)


O que é o NS3
NS3a é um simulador para sistemas de Internet baseado em
eventos discretos (definido por unidade de tempo)
Desenvolvido para fins de pesquisa e educational
Software livre e de código aberto (C++ e/ou Python)
a
www.nsnam.org

Comunidade
Permite que desenvolvedores da comunidade de redes
contribuam em seu códigoa
Lista de usuários do NS3b
a
www.nsnam.org/developers/overview/
b
groups.google.com/group/ns-3-users
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introdução Características
Tutorial Instalação
Resultados Como instalar o NS3

Sobre o NS3 (Cont.)

NS3a vs NS2b
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 não é uma extensão do NS2
Não 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)


Introdução Características
Tutorial Instalação
Resultados Como instalar o NS3

Pré-requisitos

Aplicativos e bibliotecas
Para que o NS3 funcione juntamente com geração de
documentação, plotagem de gráficos e outras funcionalidades, é
necessário a instalação de alguns pacotes

Pacotes recomendados para os usuários do Ubuntua


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)
Introdução Características
Tutorial Instalação
Resultados 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 léxico e parser: >sudo apt-get install flex bison
libfl-dev
Traces pcap: >sudo apt-get install tcpdump
Database para estatística: >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
Máquinas virtuais: >sudo apt-get install vtun lxc
Utilitários: >sudo apt-get install uncrustify
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introdução Características
Tutorial Instalação
Resultados Como instalar o NS3

Pré-requisitos (Cont.)

Pacotes recomendados (Cont.)


Documentação: >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
Openflow: >sudo apt-get install libboost-signals-dev
libboost-filesystem-dev
Emulador: >sudo apt-get install openmpi*

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Introdução Características
Tutorial Instalação
Resultados Como instalar o NS3

Passo a passo

Recomendação de download
O procedimento recomendado é baixar o NS3 através do Mercurial,
pois a ferramenta copia o código do simulador no repositório

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 conexão da
Internet, mas pode levar alguns minutos ou horas

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Introdução Características
Tutorial Instalação
Resultados Como instalar o NS3

Passo a passo

Compilação
Para gerar o executável do NS3 é necessário que os códigos fontes
baixados sejam compilados

Comandos
>cd ns-3-allinone
>./build.py –enable-examples –enable-tests
>cd ns-3-dev; ls -la

Teste
Para verificar o funcionamento, use os seguintes comandos:
>./test.py -c core
>./waf –run hello-simulator

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Aprendendo com exemplos

Onde encontrar?
Todos os arquivos do tutorial estão localizados no diretório
examples/tutorial

Testando um exemplo
Comandos para testar o cenário a ser simulado:
>cp examples/tutorial/first.cc scratch/myfirst.cc
>./waf
>./waf –run scratch/myfirst

Logs gerados pela simulação


Verifique o tipo de log que é gerado na simulação. Isto pode ser
definido dentro do script de simulação ou através de parâmetros.
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Logs da simulação

O que são logs?


São as mensagens do simulador e estão distribuídas em 7 níveis

Níveis das mensagens


NS_LOG_ERROR: erro
NS_LOG_WARN: alertas
NS_LOG_DEBUG: depuração
NS_LOG_INFO: informativo
NS_LOG_FUNCTION: descreve a função chamada
NS_LOG_LOGIC: fluxo lógico dentro de uma função
NS_LOG_ALL: tudo

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código
// Adicionar bibliotecas básicas contendo o núcleo do simulador,
// os nós 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;

// Definição do log
NS_LOG_COMPONENT_DEFINE (”FirstScriptExample“);

// Função principal do código


int
main (int argc, char *argv[])
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

{
// Tipo de log definido para a aplicação
LogComponentEnable(”UdpEchoClientApplication“,
LOG_LEVEL_INFO);
LogComponentEnable(”UdpEchoServerApplication“,
LOG_LEVEL_INFO);

// Define e cria dois nós


NodeContainer nodes;
nodes.Create (2);

// Cria o enlace ponto a ponto entre dois nós


PointToPointHelper pointToPoint;

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Configura a taxa da conexão do enlace


pointToPoint.SetDeviceAttribute (”DataRate“,
StringValue (”5Mbps“));

// Configura o atraso do enlace


pointToPoint.SetChannelAttribute (”Delay“, StringValue (”2ms“));

// Configura 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)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Configurar a pilha de protocolo IP nos nós


InternetStackHelper stack;
stack.Install (nodes);

// Configura o endereço IP da rede e sua máscara de subrede


Ipv4AddressHelper address;
address.SetBase (”10.1.1.0“, ”255.255.255.0“);

// Atribui os endereços IP as interfaces de rede


Ipv4InterfaceContainer interfaces = address.Assign (devices);

// Cria o servidor da aplicação de Echo na porta 9


UdpEchoServerHelper echoServer (9);

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Configura o segundo nó como servidor da aplicação de Echo


ApplicationContainer serverApps = echoServer.Install
(nodes.Get (1));

// Define o tempo de início e final da aplicação no servidor


serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

// Configura o endereço IP do servidor e a porta


// no cliente da aplicação de Echo
Ipv4Address serverAddress = interfaces.GetAddress (1);
UdpEchoClientHelper echoClient (serverAddress, 9);

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Configura o número máximo de pacotes enviados pelo cliente


echoClient.SetAttribute (”MaxPackets“, UintegerValue (1));

// Intervalo de tempo entre pacotes no cliente


echoClient.SetAttribute (”Interval“, TimeValue (Seconds (1.)));

// Tamanho máximo do pacote no cliente


echoClient.SetAttribute (”PacketSize“, UintegerValue (1024));

// Configura o cliente da aplicação no primeiro nó


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

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Define o tempo de início e final da aplicação no cliente


clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

// Carrega a simulação após todas as definições


Simulator::Run ();

// Encerra a simulação no final


Simulator::Destroy ();

return 0;
}

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código

// Adicionar bibliotecas básicas contendo o núcleo do simulador,


// os nós, 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)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Descrição 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;

// Definição do log
NS_LOG_COMPONENT_DEFINE (”SecondScriptExample“);

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Função principal do código


int
main (int argc, char *argv[])
{
// Variáveis criadas para enviar parâmetros por linha de comando
// Variável para habilitar ou desabilitar o log
bool verbose = true;
// Variável para atribuir a quantidade mínima de nós (multiponto)
uint32_t nCsma = 3;

// Variável para receber os parâmetros da linha de comando


CommandLine cmd;

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Atribui os valores das variáveis 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);

// Verificar 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)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Caso não seja enviado o número de nós, garante o número
// mínimo
nCsma = nCsma == 0 ? 1 : nCsma;

// Define e cria dois nós para o enlace ponto a ponto


NodeContainer p2pNodes;
p2pNodes.Create (2);

// Define e cria a quantidade mínima de nós para o enlace


// multiponto e configura 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)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Cria o enlace ponto a ponto entre dois nós
PointToPointHelper pointToPoint;

// Configura a taxa da conexão do enlace ponto a ponto


pointToPoint.SetDeviceAttribute (”DataRate“,
StringValue (”5Mbps“));

// Configura o atraso do enlace ponto a ponto


pointToPoint.SetChannelAttribute (”Delay“, StringValue (”2ms“));

// Configura 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)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Cria o enlace multiponto
CsmaHelper csma;

// Configura a taxa da conexão do enlace multiponto


csma.SetChannelAttribute (”DataRate“, StringValue (”100Mbps“));

// Configura o atraso do enlace multiponto


csma.SetChannelAttribute (”Delay“, TimeValue (NanoSeconds
(6560)));

// Configura 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)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Configurar a pilha de protocolo IP nos nós


InternetStackHelper stack;
// Somente o primeiro nó ponto a ponto é configurado aqui
// pois o segundo nó já pertence ao enlace multiponto
stack.Install (p2pNodes.Get (0));
stack.Install (csmaNodes);

// Configura o endereço IP da rede e sua máscara 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)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Atribui os endereços IP as interfaces de rede


// no enlace ponto a ponto
Ipv4InterfaceContainer p2pInterfaces =
address.Assign (p2pDevices);

// Configura o endereço IP da rede e sua máscara de subrede


// para os dispositivos do enlace multiponto
address.SetBase (”10.1.2.0“, ”255.255.255.0“);

// Atribui os endereços IP as interfaces de rede


// no enlace multiponto
Ipv4InterfaceContainer csmaInterfaces =
address.Assign (csmaDevices);

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Cria o servidor da aplicação de Echo na porta 9


UdpEchoServerHelper echoServer (9);

// Configura o último nó do enlace multiponto como


// servidor da aplicação de Echo
ApplicationContainer serverApps = echoServer.Install
(csmaNodes.Get (nCsma));

// Define o tempo de início e final da aplicação no servidor


serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Configura a porta no cliente da aplicação de Echo no


// último nó do enlace multiponoto
UdpEchoClientHelper echoClient
(csmaInterfaces.GetAddress (nCsma), 9);

// Configura o número máximo de pacotes enviados pelo cliente


echoClient.SetAttribute (”MaxPackets“, UintegerValue (1));

// Intervalo de tempo entre pacotes no cliente


echoClient.SetAttribute (”Interval“, TimeValue (Seconds (1.)));

// Tamanho máximo do pacote no cliente


echoClient.SetAttribute (”PacketSize“, UintegerValue (1024));

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Configura o cliente da aplicação no primeiro nó
// do enlace ponto a ponto
ApplicationContainer clientApps = echoClient.Install
(p2pNodes.Get (0));

// Define o tempo de início e final da aplicação no cliente


clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

// Configura o roteamento global na rede,


// cada nó funciona como se fosse um roteador OSPF
Ipv4GlobalRoutingHelper::PopulateRoutingTables ();

// Habilita o PCAP/Sniffer no enlace ponto a ponto


pointToPoint.EnablePcapAll (”second“);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Habilita o PCAP/Sniffer no enlace multiponto
// apenas no primeiro nó de uma rede compartilhada.
// True para configurar a interface em modo promíscuo.
// Use > tcpdump -nn -tt -r <nome>-<nó>-<dispositivo>.pcap
// para rastrear os arquivos PCAP
csma.EnablePcap (”second“, csmaDevices.Get (1), true);

// Carrega a simulação após todas as definições


Simulator::Run ();

// Encerra a simulação no final


Simulator::Destroy ();

return 0;
}
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código

// Adicionar bibliotecas básicas contendo o núcleo do simulador,


// os nós, 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/wifi-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)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Descrição da topologia multiponto
// Default Network Topology
//
// Wifi 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)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Definição do log
NS_LOG_COMPONENT_DEFINE (”ThirdScriptExample“);

// Função principal do código


int
main (int argc, char *argv[])
{
// Variáveis criadas para enviar parâmetros por linha de comando
// Variável para habilitar ou desabilitar o log
bool verbose = true;
// Variável para atribuir a quantidade mínima de nós (multiponto)
uint32_t nCsma = 3;
// Variável para atribuir a quantidade mínima de nós (sem fio)
uint32_t nWifi = 3;
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Variável para receber os parâmetros da linha de comando
CommandLine cmd;

// Atribui os valores das variáveis digitadas na linha de comando


cmd.AddValue (”nCsma“, ”Number of \”extra\“
CSMA nodes/devices“, nCsma);
cmd.AddValue (”nWifi“, ”Number of wifi STA devices“, nWifi);
cmd.AddValue (”verbose“, ”Tell echo applications to log if true“,
verbose);
cmd.Parse (argc, argv);

// Verificar se o log será habilitado


if (verbose)
{
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

LogComponentEnable(”UdpEchoClientApplication“,
LOG_LEVEL_INFO);
LogComponentEnable(”UdpEchoServerApplication“,
LOG_LEVEL_INFO);
}

// Caso não seja enviado o número de nós, garante o número


// mínimo
nCsma = nCsma == 0 ? 1 : nCsma;

// Define e cria dois nós para o enlace ponto a ponto


NodeContainer p2pNodes;
p2pNodes.Create (2);

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Define e cria a quantidade mínima de nós para o enlace


// multiponto e configura 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 nós


PointToPointHelper pointToPoint;

// Configura a taxa da conexão do enlace ponto a ponto


pointToPoint.SetDeviceAttribute (”DataRate“,
StringValue (”5Mbps“));

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Configura o atraso do enlace ponto a ponto


pointToPoint.SetChannelAttribute (”Delay“, StringValue (”2ms“));

// Configura 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;

// Configura a taxa da conexão do enlace multiponto


csma.SetChannelAttribute (”DataRate“, StringValue (”100Mbps“));

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Configura o atraso do enlace multiponto
csma.SetChannelAttribute (”Delay“, TimeValue (NanoSeconds
(6560)));

// Configura o dispositivo de rede no enlace multiponto


NetDeviceContainer csmaDevices;
// Cria os dispositivos e associa-os ao enlace multiponto
csmaDevices = csma.Install (csmaNodes);

// Define e cria a quantidade mínima de nós para o enlace


// sem fio e configura o primeiro nó para ser o AP
NodeContainer wifiStaNodes;
wifiStaNodes.Create (nWifi);
NodeContainer wifiApNode = p2pNodes.Get (0);
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Cria o canal e associa-o a camada física


// da rede sem fio
YansWifiChannelHelper channel = YansWifiChannelHelper::
Default ();
YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
phy.SetChannel (channel.Create ());

// Define a camada de enlace da rede sem fio


// básica, sem QoS e usando AARF para controlar
// a taxa do canal de dados
WifiHelper wifi = WifiHelper::Default ();
wifi.SetRemoteStationManager (”ns3::AarfWifiManager“);
NqosWifiMacHelper mac = NqosWifiMacHelper::Default ();

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Configura o SSID da rede sem fio, com o tipo do MAC


// e desabilita a sondagem nas STA (estações)
Ssid ssid = Ssid (”ns-3-ssid“);
mac.SetType (”ns3::StaWifiMac“,
”Ssid“, SsidValue (ssid),
”ActiveProbing“, BooleanValue (false));

// Configura o dispositivo de rede no enlace sem fio


NetDeviceContainer staDevices;
// Cria os dispositivos e associa-os ao enlace sem fio
staDevices = wifi.Install (phy, mac, wifiStaNodes);

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Configura o SSID da rede sem fio, como o tipo do MAC
// no AP (ponto de acesso)
mac.SetType (”ns3::ApWifiMac“,
”Ssid“, SsidValue (ssid)));

// Configura o dispositivo de rede no enlace sem fio


NetDeviceContainer apDevices;
// Cria o dispositivo e associa-o ao enlace sem fio
apDevices = wifi.Install (phy, mac, wifiApNode);

// Configura o modelo de mobilidade para as estações,


// definindo as dimenssões e o layout da grade
MobilityHelper mobility;
mobility.SetPositionAllocator (”ns3::GridPositionAllocator“,
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

”MinX“, DoubleValue (0.0),


”MinY“, DoubleValue (0.0),
”DeltaX“, DoubleValue (5.0),
”DeltaY“, DoubleValue (10.0),
”GridWidth“, UintegerValue (3),
”LayoutType“, StringValue (”RowFirst“));

// Define e instala o modelo de mobilidade aleatória, tanto


// para direção quanto para velocidade nas estações
mobility.SetMobilityModel (”ns3::RandomWalk2dMobilityModel“,
”Bounds“, RectangleValue (Rectangle (-50, 50, -50, 50)));
mobility.Install (wifiStaNodes);

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Define a posição constante (sem mobilidade) para o AP
mobility.SetMobilityModel (”ns3::ConstantPositionMobilityModel“);
mobility.Install (wifiApNode);

// Configurar e instala a pilha de protocolo IP nos nós


InternetStackHelper stack;
stack.Install (csmaNodes);
stack.Install (wifiApNode);
stack.Install (wifiStaNodes);

// Configura o endereço IP da rede e sua máscara de subrede


// para os dispositivos dos enlaces ponto a ponto,
// multiponto e sem fio
Ipv4AddressHelper address;
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (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)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Cria o servidor da aplicação de Echo na porta 9


UdpEchoServerHelper echoServer (9);

// Configura o último nó do enlace multiponto como


// servidor da aplicação de Echo
ApplicationContainer serverApps = echoServer.Install
(csmaNodes.Get (nCsma));

// Define o tempo de início e final da aplicação no servidor


serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Configura a porta no cliente da aplicação de Echo no


// último nó do enlace multiponoto
UdpEchoClientHelper echoClient
(csmaInterfaces.GetAddress (nCsma), 9);

// Configura o número máximo de pacotes enviados pelo cliente


echoClient.SetAttribute (”MaxPackets“, UintegerValue (1));

// Intervalo de tempo entre pacotes no cliente


echoClient.SetAttribute (”Interval“, TimeValue (Seconds (1.)));

// Tamanho máximo do pacote no cliente


echoClient.SetAttribute (”PacketSize“, UintegerValue (1024));

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Configura o cliente da aplicação no penultimo nó


// do enlace sem fio apontando para o servidor no
// enlace multiponto
ApplicationContainer clientApps = echoClient.Install
(wifiStaNodes.Get (nWifi - 1));

// Define o tempo de início e final da aplicação no cliente


clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

// Configura o roteamento global na rede,


// cada nó funciona como se fosse um roteador OSPF
Ipv4GlobalRoutingHelper::PopulateRoutingTables ();

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)


// Evita que o AP crie pacotes sinalizadores
// (beacons) indeterminadamente no simulador
Simulator::Stop (Seconds (10.0));

// Habilita o PCAP/Sniffer no enlace ponto a ponto


pointToPoint.EnablePcapAll (”third“);
// Habilita o PCAP/Sniffer no enlace multiponto
// apenas no primeiro nó de uma rede compartilhada.
// True para configurar a interface em modo promíscuo.
// Use > tcpdump -nn -tt -r <nome>-<nó>-<dispositivo>.pcap
// para rastrear os arquivos PCAP
csma.EnablePcap (”second“, csmaDevices.Get (0), true);
// Habilita o PCAP/Sniffer no enlace sem fio
phy.EnablePcap (”third“, apDevices.Get (0));
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Visão geral
Introdução
Primeiro exemplo
Tutorial
Segundo exemplo
Resultados
Terceiro exemplo

Dissecando o código (Cont.)

// Carrega a simulação após todas as definições


Simulator::Run ();

// Encerra a simulação no final


Simulator::Destroy ();

return 0;
}

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)


Introdução
Arquivo de saída
Tutorial
Filtrar resultados
Resultados

Preparar o arquivo
Como fazer?
Existem várias ferramentas para tratar o arquivo de saída, entre elas
estão as linguagens de script, as quais permitem filtrar, calcular e
armazenar os resultados de acordo com as necessidades do usuário.

Exemplos de ferramentas
Shell Script
Perl
Python
AWK

GnuPlot
O GnuPlot permite executar códigos AWK dentro de seus scripts.
Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)
Introdução
Arquivo de saída
Tutorial
Filtrar resultados
Resultados

Código 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)


Introdução
Arquivo de saída
Tutorial
Filtrar resultados
Resultados

Código 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)


Introdução
Arquivo de saída
Tutorial
Filtrar resultados
Resultados

Código 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)


Introdução
Arquivo de saída
Tutorial
Filtrar resultados
Resultados

Executando o exemplo com AWK

> tcpdump -nn -tt -r second-2-0.pcap | awk -f


”exemplo1_AWK.awk“

Saída (padrão/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)


Introdução
Arquivo de saída
Tutorial
Filtrar resultados
Resultados

Executando o exemplo com AWK

Comando para redirecionar a saída no arquivo de plotagem:

> tcpdump -nn -tt -r second-2-0.pcap | awk -f


"exemplo1_AWK.awk» plotagem.dat
Não vai funcionar no Gnuplot, pois falta eliminar as strings/textos.

Carlos Giovanni Nunes de Carvalho Network Simulator (NS3)

Você também pode gostar