Network Simulator (NS3)



Documentos relacionados
DEPARTAMENTO DE ENGENHARIA INFORMÁTICA Introdução às Redes de Comunicação

Sistema Operacional Unidade 12 Comandos de Rede e Acesso Remoto

1. Introdução. 2. Conteúdo da embalagem

Interconexão de redes locais. Repetidores. Pontes (Bridges) Hubs. Pontes (Bridges) Pontes (Bridges) Existência de diferentes padrões de rede

Entendendo como funciona o NAT

Arquitetura de Rede de Computadores

Na Figura a seguir apresento um exemplo de uma "mini-tabela" de roteamento:

cio Roteamento Linux

Faculdade Anhanguera de São Caetano do Sul

Curso de extensão em Administração de sistemas GNU/Linux: redes e serviços

Aula Prática Roteador

ns-3 Rastreamento Versão ns-3-dev ns-3 project

ARP. Tabela ARP construída automaticamente. Contém endereço IP, endereço MAC e TTL

Mecanismos de QoS em Linux Hierarchical Token Bucket (HTB)

3 Ferramenta de Simulação

Laboratório. Assunto: endereçamento IP e roteamento.

Sumário. 4. Clique no botão Salvar & Aplicar para confirmar as alterações realizadas no. Reiniciar o SIMET- BOX

Introdução Introduç ão Rede Rede TCP/IP Roteame Rotea nto nto CIDR

Aula Prática Wi-fi Professor Sérgio Teixeira

Lista de Erros Discador Dial-Up

Sniffers de Rede e Kismet

Uc-Redes Técnico em Informática André Luiz Silva de Moraes

Você pode testar se está tudo OK, abrindo um navegador no Debian Linux e acessando qualquer site.

Roteiro de Práticas de Roteamento IGP usando Quagga

Configurando o DDNS Management System

ADDRESS RESOLUTION PROTOCOL. Thiago de Almeida Correia

Introdução à Computação Móvel IP Móvel. Movimentação de Host. Movimentação de Host. Francisco José da Silva e Silva

Objetivos: i) Verificar o impacto de loops em redes locais ii) Configurar o protocolo STP para remover loops da rede

Considerações a serem feitas antes da implantação.

Tópicos Especiais em Informática

DISPOSITIVOS DE REDES SEM FIO

CONFIGURAÇÃO DE ROTEADORES CISCO. Prof. Dr. Kelvin Lopes Dias Msc. Eng. Diego dos Passos Silva

Teleprocessamento e Redes (MAB-510) Gabarito da Segunda Lista de Exercícios 01/2010

Software de segurança em redes para monitoração de pacotes em uma conexão TCP/IP

4º Semestre. Aula 15 Serviços Internet (FTP)

Centro Tecnológico de Eletroeletrônica César Rodrigues. Atividade Avaliativa

Apple ipad ( ipad Primeira Geração, ipad 2, ou ipad terceira geração)

Passo a Passo da instalação da VPN

1. Capturando pacotes a partir da execução do traceroute

Intelbras GKM 2210T. 1. Instalação

Controle de congestionamento em TCP

Redes de Computadores II INF-3A

ETI/Domo. Português. ETI-Domo Config PT

SIMULADOR DE ROTEAMENTO DE PACOTES (V. 3 20/05/2010)

Application Note FBEE Comunicação Serial Wireless REV Rev01

Com o DPR-1260 podem ser utilizadas até 4 impressoras USB. Segue um exemplo de topologia a que o equipamento atende:

Roteiro 3: Sistemas Linux arquivos e diretórios

Aula pratica 4 Testar Conexões TCP/IP em Redes Industrias Usando os comandos Ping e Net View (1.a Parte)

Faculdade de Tecnologia SENAC Goiás. Disciplina: Gerenciamento de Rede de Computadores. Goiânia, 16 de novembro de 2014.

Tutorial Camera IP Camera IP MJPEG VGA Modelos Nc610, Nc611, Nc612, Nc613 e Nc614

Mecanismos de QoS em Linux DiffServ (Marcação e Policiamento)

Consulte a exposição. Qual declaração descreve corretamente como R1 irá determinar o melhor caminho para R2?

Laboratório - Visualização das tabelas de roteamento do host

Administração de Redes Redes e Sub-redes

Fundamentos de Redes de Computadores. Elementos de Redes Locais

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

Estudo comparativo entre dois tradicionais algoritmos de roteamento: vetor distância e estado de enlace.

Capítulo 5: Roteamento Inter-VLANS

O Servidor de impressão DP-300U atende a seguinte topologia: Podem ser conectadas 2 impressoras Paralelas e 1 USB.

Manual do usuário. Mobile Auto Download

EA080- Laboratório de Redes de Computadores Laboratório 2 Virtualização (Relatório Individual) Prof. Responsável: Mauricio Ferreira Magalhães

Servidor de Gerenciamento de Chaves de Encriptação Aérea OTAR

Redes de Computadores. Trabalho de Laboratório Nº2

ICORLI. INSTALAÇÃO, CONFIGURAÇÃO e OPERAÇÃO EM REDES LOCAIS e INTERNET

ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS SERVIÇOS DE ACESSO REMOTO (TELNET E TERMINAL SERVICES) Professor Carlos Muniz

Aula 4. Pilha de Protocolos TCP/IP:

Comandos Linux Comando tcpdump, guia de referência e introdução. Sobre este documento

Ilustração 1: Componentes do controle de acesso IEEE 802.1x

Centro de Inteligência em Tecnologia da Informação e Segurança Tutorial Ammyy admin

Mobilidade em Redes

Universidade de Brasília

Roteamento e Comutação

i) configurar uma rede local sem fio (WLAN) ii) investigar o funcionamento e desempenho da WLAN iii) criar um enlace sem fio ponto a ponto

Projeto de Redes de Computadores. Servidor Radius

ROTEADOR WIRELESS N 300 ADSL2+ DSL-2740E GUIA DE INSTALAÇÃO RÁPIDA

Programação WEB. Prof. André Gustavo Duarte de Almeida docente.ifrn.edu.br/andrealmeida. Aula III Introdução PHP

Ilustração 1: Componentes do controle de acesso IEEE 802.1x

Edital 012/PROAD/SGP/2012

Projeto Integrador Projeto de Redes de Computadores

Voltar. Placas de rede

Redes TCP/IP. Prof. M.Sc. Alexandre Fraga de Araújo. INSTITUTO FEDERAL DO ESPÍRITO SANTO Campus Cachoeiro de Itapemirim

Um pouco do Java. Prof. Eduardo

Guia de instalação para ambiente de Desenvolvimento LINUX

Roteador Load-Balance / Mikrotik RB750

FTIN Formação Técnica em Informática Módulo Sistema Proprietário Windows AULA 04. Prof. André Lucio

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Prof. Roberto Franciscatto 4º Semestre - TSI - CAFW. Free Powerpoint Templates Page 1

1. Explicando Roteamento um exemplo prático. Através da análise de uns exemplos simples será possível compreender como o roteamento funciona.

Faculdade SENAC Pelotas Curso Superior de Tecnologia em Redes de Computadores Sistemas de Informação Professor Eduardo Maroñas Monks MEDIA CORE

Manual da Aplicação Water Monitor

5 Mecanismo de seleção de componentes

Para começarmos as configurações, primeiramente vamos habilitar o DVR Veicular para o acesso. Clique em Menu e depois entre em Geral.

CONFIGURANDO O SERVIÇO DE VPN NO WINDOWS SERVER 2008 R2

LABORATÓRIO III. ROTEAMENTO ESTÁTICO Documento versão 0.1. Aluno: Paulo Henrique Moreira Gurgel #

Como é o Funcionamento do LTSP

RCO2. LANs, MANs e WANs Visão geral

1 INTRODUÇÃO À GERÊNCIA DE REDES...15

Rotina de Discovery e Inventário

Aula prática. Objetivo IPCONFIG. Prof. Leandro Pykosz Informa a configuração atual de rede da máquina;

Transcrição:

1 24 de outubro de 2012 1 Prof. DSc. do Curso de Ciência da Computação da UESPI

Sumário Introdução 1 Introdução Características Instalação Como instalar o NS3 2 3 Arquivo de saída Filtrar resultados

Características Instalação Como instalar o NS3 Sobre o O que é o NS3 NS3 a é 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ódigo a Lista de usuários do NS3 b a www.nsnam.org/developers/overview/ b groups.google.com/group/ns-3-users

Sobre o NS3 (Cont.) Introdução Características Instalação Como instalar o NS3 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 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 Introdução Características Instalação Como instalar o NS3 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 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

Pré-requisitos (Cont.) Introdução Características Instalação Como instalar o NS3 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

Pré-requisitos (Cont.) Introdução Características Instalação Como instalar o NS3 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*

Características Instalação 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

Características Instalação 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

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.

Logs da simulação Introduçã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

Dissecando o código Introdução // 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[])

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

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

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

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

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

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

Dissecando o código Introdução // 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

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

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

// 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); }

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

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

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

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

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

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

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

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

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

Dissecando o código Introdução // 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

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

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

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

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);

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

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

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

// 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 ();

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

// 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,

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);

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

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);

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

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

// 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 ();

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

// Carrega a simulação após todas as definições Simulator::Run (); // Encerra a simulação no final Simulator::Destroy (); return 0; }

Arquivo de saída Filtrar 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.

Código exemplo com AWK Arquivo de saída Filtrar resultados BEGIN{ iip=0; iarp_rep=0; iarp_req=0; } { if ($2== IP ) { tempoip[iip]=$1; pacotesip[iip]=pacotesip[iip-1]+$8; iip++; };

Código exemplo com AWK Arquivo de saída Filtrar resultados 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++; }; }

Código exemplo com AWK Arquivo de saída Filtrar resultados 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;}; }

Executando o exemplo com AWK Arquivo de saída Filtrar resultados > 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

Executando o exemplo com AWK Arquivo de saída Filtrar resultados 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.