Você está na página 1de 7

Network Simulator (ns) Network Simulator (ns)

(http://www.isi.edu/nsnam/ns) (http://www.isi.edu/nsnam/ns/index.html)

Versão 2 (ns
ns--2.30 é a mais atual)
Simulador baseado em eventos discretos
direcionado para a pesquisa em redes
Desenvolvimento e distribuição
 ISI (Information Sciences Institute - www.isi.edu)
 Financiamento: DARPA e NSF
A distribuição do ns é gratuita, inclusive o código
fonte, que pode ser alterado para refletir a
pesquisa que está sendo desenvolvida

Usando o ns Tutorial de Marc Greis


http://www.isi.edu/nsnam/ns/tutorial/index.html

Aprendendo o ns
 Aprendizado é difícil no início
 Sem interface gráfica e manual de usuário apropriado
Manual do ns
 Manual de sistema, explicando código e estruturas de dados
Plataformas onde roda:
 FreeBSD (desenvolvimento) , Linux, Solaris e Windows (com
restrições, não é muito recomendá
recomendável!)
vel!
Funcionalidades são oferecidas:
 Diretamente na distribuição básica do ns
 Contribuições (patchs) que devem ser instaladas à parte

NS by Example
http://nile.wpi.edu/NS/ Funcionalidades do ns
Implementa grande parte da funcionalidade
existente na Internet
 IP, TCP, UDP, FTP, HTTP, RealPlayer
Protocolos de roteamento
 Session, DV, LS, multicast
Implementa abordagens para QoS
 IntServ, DiffServ, MPLS, QoS Routing
Vários tipos de filas (roteadores)
 DropTail, CBQ, SFQ, WFQ, DRR, RED
Comunicação sem fio
 LAN sem fio , comunicação por satélite, GPRS, etc.
Outras...

1
Modelo de programação do ns Otcl e C++
Combinação de C++ e Otcl
C++
 Núcleo do simulador, ou back-end
 Maior parte do simulador (mais eficiente) Pure C++ Pure OTcl
 Trata de eventos e pacotes objects objects

Otcl
 Interface para criar cenários através de scripts
 É interpretada (os scripts de simulação não são compilados)
Alguns objetos existem nas duas linguagens
C++/OTcl split objects
As duas linguagens tem interfaces entre si:
C++ OTcl
 Pode-se chamar funções do C++ no Otcl (mais comum)
 Pode-se chamar funções do Otcl no C++ ns

Entrada e saída do ns Resultados de simulação


O simulador pode ser configurado para gerar
arquivos contendo os dados desejados
 Opcionalmente o arquivo de trace pode ser processado para
obter esses resultados
Vazão de uma conexão
Atraso e variação de atraso de pacotes
Perda de pacotes
 Nas filas: monitor de filas
 Nos sistemas finais (fim a fim): agente LossMonitor
Outros

Vantagens do ns Componentes básicos


Simulador padrão para a comunidade científica e Nó (node)
Sistema final ou roteador
acadêmica 

 Máquina com implementação IP


Simulador gratuito de código aberto  Abstrai características da rede subjacente

Boa infra-estrutura para desenvolver programas Enlace (link)


 Interconectam dois nós
Grande quantidades de protocolos e tecnologias  O ns só representa a camada IP
existentes  Enlaces são abstrações da interface física

Oportunidade para estudar interações de Agente (agent)


protocolos em ambiente controlado  Entidade de transporte
 Agentes TCP/UDP
Lista de discussão (bem freqüentada) para Aplicação (application)
dúvidas e discussões  Não precisa simular a aplicação
 Necessário apenas gerar tráfego

2
Componentes básicos O animador de simulação nam
Utilizado para compreender o que ocorreu
em uma simulação passada
Quando ativado, apresenta um console,
que pode abrir várias animações
Durante a simulação, o ns pode gerar um
arquivo de trace para o nam
Observações:
 Arquivo de trace pode ficar muito grande (+100MB)
 Simulação demora mais gerando o trace

O animador de simulação nam Anatomia de um script do ns


Avança rapidamente
Pára a animação (25 * “passo” segundos)
Executa no Executa a
Tempo atual de
Passo do avanço 1. Criar instância do simulador
sentido contrário animação dos quadros de
animação animação

Retrocede 2. Fazer configurações iniciais


rapidamente
Altera o
a) Ajustar opções gerais do ns e do nam
passo
Zoom in
b) Configurar arquivo de trace do nam
Zoom out
Edita posição Área de c) Criar função de finalização
dos nós
animação

Aumenta tamanho
do nó 3. Criar topologia
Diminui tamanho
do nó Retorna desenho a) Criar nós
original
Move animação
para um momento b) Criar e configurar enlaces
específico no tempo
Redesenha

Área de
Informações para redesenho
anotações

Anatomia de um script do ns Básico - topologia


4. Criar agentes e aplicações set ns [new Simulator]
a) Criar agentes de transporte TCP e UDP
b) Criar aplicações geradoras de tráfego set nf [open out.nam w]
c) Anexar agentes a nós e aplicações a agente $ns namtrace-all $nf
d) Conectar agentes nos sistemas finais

5. Escalonar eventos set n0 [$ns node]


a) Iniciar transmissão de dados das aplicações set n1 [$ns node]
b) Finalizar transmissão de dados das aplicações
6. Executar simulação $ns duplex-link $n0 $n1 1Mb 10ms DropTail
7. Visualizar a animação com o nam
$ns at 5.0 "finaliza"
8. Analisar arquivos de trace

3
Básico – topologia Básico – topologia (animação)
proc finaliza {} {
global ns nf
$ns flush-trace
close $nf
exec nam out.nam &
exit 0
}

$ns run

Básico - tráfego Básico - tráfego


set udp0 [new Agent/UDP]
Extensão do exemplo 1 $ns attach-agent $n0 $udp0

Componentes set cbr0 [new Application/Traffic/CBR]


$cbr0 set packet_size_ 500
 Agente UDP $cbr0 set rate_ 800Kb
 Agente NULL $cbr0 attach-agent $udp0

 Aplicação CBR (Constant Bit Rate) set null0 [new Agent/Null]


$ns attach-agent $n1 $null0
Inicia e finaliza as aplicações
$ns connect $udp0 $null0

$ns at 0.5 "$cbr0 start"


$ns at 4.5 "$cbr0 stop"

Básico – tráfego (animação) Exemplo 1 – Fluxos CBR e FTP


1 Exemplo-1 - Adaptado de ns/tcl/ex/simple.tcl (exemplo do ns)
2 set ns [new Simulator]
3
4 # arquivos de trace
5 set f [open out.tr w]
6 set nf [open out.nam w]
7
8 $ns trace-all $f
9 $ns namtrace-all $nf
10
11 # criacao de alguns nós
12 set n0 [$ns node]
13 set n1 [$ns node]
14 set n2 [$ns node]
15 set n3 [$ns node]
16
17 # Criacao de alguns agentes
18 set udp0 [new Agent/UDP]
19 set null0 [new Agent/Null]
20 set tcp [new Agent/TCP]
21 set sink [new Agent/TCPSink]
22

4
Exemplo 1 – Fluxos CBR e FTP Exemplo 1 – Fluxos CBR e FTP
43 # Imprimindo algumas variáveis na saída
23 # Criacao de algumas aplicacoes
44 puts [$cbr0 set packetSize_]
24 set cbr0 [new Application/Traffic/CBR]
45 puts [$cbr0 set interval_]
25 set ftp [new Application/FTP]
46
26
47 # escalonando algumas tarefas
27 # Criacao de enlaces
48 $ns at 0.1 "$cbr0 start"
28 $ns duplex-link $n0 $n2 5Mb 2ms DropTail
49 $ns at 0.5 "$ftp start"
29 $ns duplex-link $n1 $n2 5Mb 2ms DropTail
50 $ns at 1.35 "$ns detach-agent $n1 $tcp ; $ns detach-agent $n3
30 $ns duplex-link $n2 $n3 1.5Mb 10ms DropTail $sink"
31 51 $ns at 3.0 "finaliza"
32 # anexando agentes 52
33 $cbr0 attach-agent $udp0 53 proc finaliza {} {
34 $ns attach-agent $n0 $udp0 54 global ns f nf
35 $ns attach-agent $n3 $null0 55 $ns flush-trace
36 $ns connect $udp0 $null0 56 close $f
37 57 close $nf
38 $ftp attach-agent $tcp 58 puts "Executando o nam..."
39 $ns attach-agent $n1 $tcp 59 exec nam out.nam &
40 $ns attach-agent $n3 $sink 60 exit 0
41 $ns connect $tcp $sink 61 }
42 62 # Finalmente, inicia a simulação
63 $ns run

Exemplo 1 – Objetos e conexões Exemplo 1 – Animação

Fonte FTP Inicia

Fonte CBR Inicia

Exemplo 3 – Controle de
Exemplo 1 – Animação Congestionamento do TCP
1 # Exemplo-3 - Controle de congestionamento no TCP
2 set ns [new Simulator] ;# Cria o objeto "simulador"
3
4 set nf [open out.nam w] ;# Abre o arquivo de trace do nam
5 $ns namtrace-all $nf
Desanexação FTP 6
7 proc finish {} { ;# Define procedimento a ser
executado no final
8 global ns nf
9 $ns flush-trace
10 close $nf
11 exec nam out.nam &
12 exit 0
13 }
Descarte de pacotes 14 set n0 [$ns node] ; set n1 [$ns node] ; #Cria 4 nós
15 set n2 [$ns node] ; set n3 [$ns node]
16
17 $ns duplex-link $n0 $n2 1Mb 10ms DropTail ;# Cria links entre os nós
18 $ns duplex-link $n1 $n2 1Mb 10ms DropTail
19 $ns duplex-link $n2 $n3 1Mb 10ms DropTail
20

5
Exemplo 3 – Controle de Exemplo 3 – Controle de
Congestionamento do TCP Congestionamento do TCP
21 $ns queue-limit $n2 $n3 10 ;# Limita fila enlace 2-3 (10 pacotes) 38 set tcp1 [new Agent/TCP] ;# Cria agente TCP
39 $ns attach-agent $n1 $tcp1 ;# Anexa agente tcp1 ao nó 1
22 $ns duplex-link-op $n2 $n3 queuePos 0.5 ;# monitora a fila do enlace 2-3 40 $tcp1 set packet_size_ 1500 ;# Tamanho máximo de pacote em bytes
23 41 set sink1 [new Agent/TCPSink] ;# Cria agente TCP consumidor
24 # Orientaçoes para o nam 42 $ns attach-agent $n3 $sink1 ;# Anexa agente sink1 ao nó 3
25 $ns duplex-link-op $n1 $n2 orient up 43 $ns connect $tcp1 $sink1 ;# Connect TCP source with TCP sink
26 $ns duplex-link-op $n0 $n2 orient right 44 set ftp1 [$tcp1 attach-source FTP] ;# Cria aplic FTP e anexa ao tcp1
27 $ns duplex-link-op $n2 $n3 orient right 45
46 # Define cores para os fluxos de dados tcp0=azul, tcp1=vermelho
28 Agent/TCP set nam_tracevar_ true ;# Habilita "trace" de var. TCP (nam) 47 $ns color 1 Blue ; $ns color 2 Red
29 48 $tcp0 set fid_ 1 ; $tcp1 set fid_ 2
30 set tcp0 [new Agent/TCP] ;# Cria agente TCP 49
31 $ns attach-agent $n0 $tcp0 ;# Anexa agente tcp0 ao nó 0 50 # Adiciona o rastreamento de variáveis
32 $tcp0 set packet_size_ 1500 ;# Tamanho máximo de pacote em bytes 51 $ns add-agent-trace $tcp0 tcp0 ;# label "tcp0"
33 set sink0 [new Agent/TCPSink] ;# Cria agente TCP consumidor 52 $ns add-agent-trace $tcp1 tcp1 ;# label "tcp1"
34 $ns attach-agent $n3 $sink0 ;# Anexa agente sink0 ao nó 3 53 $ns monitor-agent-trace $tcp0 ;# (nam) monitorar variáveis do tcp0
35 $ns connect $tcp0 $sink0 ;# Connect TCP source with TCP sink 54 $ns monitor-agent-trace $tcp1 ;# (nam) monitorar variáveis do tcp1
36 set ftp0 [$tcp0 attach-source FTP] ;# Cria aplic. FTP e anexa ao tcp0 55 $tcp0 tracevar cwnd_ ;# rastreia a variável cwnd_ do tcp0
37 56 $tcp1 tracevar cwnd_ ;# rastreia a variável cwnd_ do tcp1
57

Exemplo 3 – Controle de Controle de Congestionamento


Congestionamento do TCP do protocolo TCP
58 # Programa os eventos da simulação
59 $ns at 0.1 "$ftp0 start" cwnd
60 $ns at 1.0 "$ftp1 start" 18
61 $ns at 14.0 "$ftp1 stop" 16
62 $ns at 14.5 "$ftp0 stop"
63 $ns at 25.0 "finish"
14
64 12 congestion avoidance
65 # Executa a simulação 10
66 $ns run
8 s sth re sh = 8

6 s sth re s h = 6
slow start
4
2
0
tempo

Exemplo 3 - Animação Exemplo 3 - Animação

TCP0 já iniciou TCP1 iniciou Descarte fluxo TCP0 Redução cwnd TCP0

6
Exemplo 3 - Animação TCP Tahoe - vazão

Redução cwnd TCP1