Laboratório de Sistemas Distribuídos Simulador de Redes NS (Network Simulator) Prof. Ana Cristina Barreiras Kochem cristina@dainf.cefetpr dainf.cefetpr.br http://www.lasd.cefetpr.br Programa de Pós-graduação em Engenharia Elétrica e Informática Industrial. Centro Federal de Educação Tecnológica do Paraná. Av. Sete de Setembro, 3165. Curitiba PR. Brasil. Agentes em NS Representam endpoints onde pacotes da camada de rede são construídos ou consumidos; Funções: Roteamento, transmissão e recepção de pacotes TCP ou UDP. Alguns exemplos de agentes: TCP (transmissor) X TCPSink (receptor) UDP (transmissor) X Null (receptor) LossMonitor: implementado em um nó receptor para obter estatísticas sobre dados recebidos. 2
Agentes em NS Criação de um agente TCP em OTcl: set tcp [new Agent/TCP] $tcp set fid_ 1 $tcp set prio_ 1 $tcp set window_ 1024 $tcp set packetsize_ 500 # Cria agente transmissor # ID do fluxo dos pacotes IP # Prioridade do fluxo # Tamanho da janela # Tamanho do pacote $ns_ attach-agent $n0 $tcp # Anexa transmissor ao nó 0 set sink [new Agent/TCPSink] # Cria agente receptor $ns_ attach-agent $n1 $sink # Anexa receptor ao nó 1 $ns_ connect $tcp $sink # Estabelece a conexão TCP 3 Links e Filas Link unidirecional/bidirecional entre os nós <n0> e <n1>: $ns_ <simplex-link/duplex-link> <n0> <n1> <largura_de_banda> <retardo> <disciplina_escalonamento_fila> Exemplos de disciplinas de escalonamento de filas: Drop-tail ou FIFO (First-In-First-Out); FQ (Fair Queueing); SFQ (Stochastic Fair Queueing); DRR (Deficit Round Robin); RED (Random Early-Detection Gateways) CBQ (Class-Based Queueing). 4
Geradores de Tráfego Application/Traffic/Exponential Exponential On/Off Application/Traffic/Pareto Pareto On/Off packetsize_ Tamanho constante dos pacotes gerados burst_time_ Tempo médio on para o gerador idle_time_ Tempo médio off para o gerador rate_ Taxa constante de envio de pacotes durante períodos on Application/Traffic/CBR Constant Bit Rate packetsize_ Tamanho constante dos pacotes gerados rate_ Taxa constante de envio de pacotes interval_ Intervalo entre pacotes (opcional) Application/Traffic/Trace Gera tráfego de acordo com um arquivo trace. Cada registro contém dois campos de 32 bits contendo: Tempo de interchegada de pacotes (microssegundos); Tamanho do próximo pacote gerado (bytes) set tfile [new Tracefile] $tfile filename example-trace set t1 [new Application/Traffic/Trace] $t1 attach-tracefile $tfile 5 Aplicações Simuladas em NS Application/FTP Aplicação para transferência de arquivos Application/Telnet Aplicação para acesso remoto Variável interval_ Se interval_ = 0, os tempos de interchegada entre os pacotes são escolhidos de acordo com uma distribuição exponencial. Se interval_ 0, os tempos de interchegada entre os pacotes são escolhidos randomicamente de acordo com uma distribuição tcplib. Transmissão dos pacotes é controlada pelo algoritmo de controle de fluxo e congestionamento do protocolo TCP. 6
ftp cbr tcp udp n0 n1 Nó Fonte de Tráfego Link Agente 2 Mbps, 10 ms n2 2 Mbps, 10 ms Tamanho pacote = 1000 bytes Taxa de transmissão = 1 Mbps uma Rede Fixa 1,7 Mbps, 20 ms n3 CBR FTP sink null 1 2 5 7 ns-simple.tcl t (s) 7 uma Rede Fixa CBR FTP 8
uma Rede Fixa Link 0-2 1-2 2-3 9 Arquivo trace e AWK para análise de simulações Evento Tempo do nó para nó Tipo Tamanho flags (s) pacote Pacote (bytes) fid Endereço fonte Endereço Número destino seqüência r 1.3556 0 2 tcp 30 -------- 1 0.0 3.0 29 19 ID do pacote Tipos de eventos: r: recebe +: enqueue -: dequeue d: descarta Arquivo trace Arquivo AWK Resultado AWK awk -f EstatTrace.awk out1.tr > res.awk 10
Agente Loss_Monitor Variáveis: nlost_ Número de pacotes perdidos; npkts_ Número de pacotes recebidos; bytes_ Número de bytes recebidos; lastpkttime_ Tempo no qual o último pacote foi recebido. Agente Loss Monitor Resultados_CBR Resultados_Exponencial 11 Agente Loss_Monitor Exercício: Utilizar o cenário do arquivo ns-simple.tcl Anexar um agente Loss_Monitor ao destino do fluxo CBR Número máximo de pacotes na fila: 10 Obter o número de pacotes perdidos pelo fluxo CBR Comparar resultado com o arquivo res.awk Exercício Loss Monitor 12
Objeto Monitor_Queue Monitoramento de Filas set qmon [$ns monitor-queue $n2 $n3 [open qm.tr w] 1] [$ns link $n2 $n3] queue-sample-timeout Argumentos: 1. Link onde a fila está localizada; 2. Arquivo de saída onde os dados serão armazenados; 3. Freqüência na qual a fila será monitorada (segundos). Monitora_Fila 13 Monitoramento de Filas Objeto Monitor_Queue Saída_Monitor_Queue 1. Tempo; 2. Nós de entrada e saída que definem a fila; 3. Tamanho da fila em bytes (size_); 4. Tamanho da fila em pacotes (pkts_); 5. Total de pacotes de entrada na fila (parrivals_); 6. Total de pacotes que partiram da fila (não descartados) (pdepartures_); 7. Total de pacotes descartados na fila (pdrops_); 8. Total de bytes contido nos pacotes de entrada (barrivals_); 9. Total de bytes que partiram da fila (bdepartures_); 10. Total de bytes descartados na fila (bdrops_). 14
Monitoramento de Fluxos Flow_Monitor Similar ao Queue_Monitor, porém obtém dados por fluxo: arrivals_ (pacotes/bytes); Flow_Monitor departures_ (pacotes/bytes); drops_ (pacotes/bytes). Result_FTP Result_CBR 15 simple-wireless.tcl # Definição dos componentes da rede set val(chan) Channel/WirelessChannel ; # Tipo do canal set val(prop) Propagation/TwoRayGround ; # Tipo do modelo de propagação set val(ant) Antenna/OmniAntenna ; # Tipo da antena set val(ll) LL ; # Tipo da camada de link set val(ifq) Queue/DropTail/PriQueue ; # Tipo da disciplina de escalonamento set val(ifqlen) 50 ; # Número máximo de pacotes na fila set val(netif) Phy/WirelessPhy ; # Tipo de interface de rede set val(mac) Mac/802_11 ; # Tipo da Camada MAC set val(rp) DSDV ; # Protocolo de roteamento ad-hoc usado pelos nós móveis set val(nn) 2 ; # Número de nós móveis 16
simple-wireless.tcl # Criação da instância do simulador set ns_ [new Simulator] # Abre arquivo trace para gravar dados da simulação e chama o procedimento trace-all set tracefd [open simple.tr w] $ns_ trace-all $tracefd # Cria área de movimentação dos nós móveis (x=500, y=500) $topo load_flatgrid 500 500 # Cria o objeto GOD (General Operations Director) armazena informações globais sobre o estado do ambiente, rede ou nós create-god $val(nn) 17 simple-wireless.tcl # Configuração dos nós da rede antes da criação $ns_ node-config - adhocrouting $val(rp) - lltype $val(ll) - mactype $val(mac) - ifqtype $val(ifq) - ifqlen $val(ifqlen) - anttype $val(ant) - proptype $val(prop) - phytype $val(netif) - topoinstance $topo - channeltype $val(chan) - agenttrace ON - routertrace - mactrace ON OFF - movementtrace OFF 18
simple-wireless.tcl # Criação dos dois nós móveis for { set i 0 } { $i < $val(nn) } { incr i } { set node_($i) [ $ns_ node ] $node_($i) random-motion 0 ; # desabilita movimento randômico } # Posição inicial dos nós lados opostos $node_(0) set X_ 5.0 $node_(0) set Y_ 2.0 $node_(0) set Z_ 0.0 $node_(1) set X_ 390.0 $node_(1) set Y_ 385.0 $node_(1) set Z_ 0.0 19 simple-wireless.tcl # Movimento dos nós # No tempo 50s, nó 1 começa a se mover em direção ao nó 0 # destino (x=25, y=20) a uma velocidade de 15m/s. $ns_ at 50.0 $node_(1) setdest 25.0 20.0 15.0 $ns_ at 10.0 $node_(0) setdest 20.0 18.0 1.0 # Nó 1 começa a se afastar do nó 0 $ns_ at 100.0 $node_(1) setdest 490.0 480.0 15.0 20
simple-wireless.tcl # Configuração do fluxo de tráfego entre os dois nós: # Conexão UDP entre os nós 0 e 1 set udp [ new Agent/UDP ] $ns_ attach-agent $node_(0) $udp set null [ new Agent/Null ] $ns_ attach-agent $node_(1) $null $ns_ connect $udp $null # Cria uma fonte de tráfego CBR set cbr [ new Application/Traffic/CBR ] $cbr attach-agent $udp $cbr set packetsize_ 500 $cbr set interval_ 0.005 $cbr attach-agent $udp $ns_ at 10 $cbr start $ns_ at 149 $cbr stop 0 udp cbr null 1 21 simple-wireless.tcl # Término simulação for { set i 0 } { $i < $val(nn) } { incr i } $ns_ at 5.0 $node_($i) reset ; } $ns_ at 150.01 stop $ns_ at 150.02 puts \ NS EXITING... \ ; $ns_halt proc stop {} { global ns_tracefd close $tracefd } puts Starting Simulation... # Executa Simulação $ns_ run Simple_wireless.tcl Trace 22
wireless_wired.tcl Redes Wired_Wireless Wireless F(0) F(1) Domínio Fixo Estação Base BS(0) Atua como um gateway entre os 2 domínios M(0) M(1) Domínio Sem Fio M(2) wireless_wired.tcl Trace 23 Referências Bibliográficas The VINT Project. The Network Simulator ns-2: Documentation. UC Berkeley. Disponível em: <http://www.isi.edu/nsnam/ns/nsdocumentation.html>. Acesso em: 10 setembro 2001. Chung, Jae; Claypool, Mark. NS by Example. Disponível em: <http://nile.wpi.edu/ns/>. Acesso em: 20 novembro 2001. 24