Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorial
Resultados
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
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
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
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
Pré-requisitos (Cont.)
Pré-requisitos (Cont.)
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
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
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 da simulação
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“
// Definição do log
NS_LOG_COMPONENT_DEFINE (”FirstScriptExample“);
{
// Tipo de log definido para a aplicação
LogComponentEnable(”UdpEchoClientApplication“,
LOG_LEVEL_INFO);
LogComponentEnable(”UdpEchoServerApplication“,
LOG_LEVEL_INFO);
return 0;
}
Dissecando o código
// Definição do log
NS_LOG_COMPONENT_DEFINE (”SecondScriptExample“);
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
LogComponentEnable(”UdpEchoClientApplication“,
LOG_LEVEL_INFO);
LogComponentEnable(”UdpEchoServerApplication“,
LOG_LEVEL_INFO);
}
return 0;
}
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
BEGIN{
iIP=0;
iARP_Rep=0;
iARP_Req=0;
}
{
if ($2==”IP“) {
tempoIP[iIP]=$1;
pacotesIP[iIP]=pacotesIP[iIP-1]+$8;
iIP++;
};
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;};
}