Small World - Universidade Federal de Minas Gerais

Download Report

Transcript Small World - Universidade Federal de Minas Gerais

Iniciando o uso do ns
Isabela Guimarães Siqueira
Curso de ns
Ciência da Computação UFMG
Julho/Agosto 2003
Introdução
“Let’s start at the very beginning,
a very nice place to start,
when you sing, you begin with A, B, C,
when you simulate, you begin with the topology.”
Rodgers and Hammerstein
Um primeiro exemplo
cbr
200 pacotes/s
Pacote de 500 bytes
udp
Link duplex
Largura de banda: 1Mbps
Atraso de 10ms
Fila “droptail”
n0
null
cbr
n1
0
0.5 1.0 1.5 2.0
2.5 3.0 3.5 4.0 4.5 5.0
t
Final da simulação
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
set ns [new Simulator]



Gera instância do simulador
O construtor de Simulator:
 Inicializa o formato dos pacotes
 Cria um escalonador
 Seleciona o formato de endereçamento
A classe Simulator contém métodos que:
 Criam objetos compostos (como nodos e links)
 Conectam os componentes criados
 Configuram os parâmetros dos elementos etc
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
set
$ns
set
$ns




nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
Abre o arquivo “out.nam” para escrita e o associa a nf, que
passa a ser o seu tratador
Diz ao simulador para escrever todos os dados trace de NAM
nesse arquivo
Abre o arquivo “out.tr” para escrita e o associa a nf, que passa
a ser o seu tratador
Diz ao simulador para escrever todos os dados trace nesse
arquivo
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
$ns at 5.0 "finish"


Escalona procedimento finish para ser executado aos 5s de
simulação
Genérico: $ns at <time> <event>
Um primeiro exemplo
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}


Fecha o arquivo de trace do NAM e inicializa o NAM
Fecha o arquivo de trace do simulador
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
set n0 [$ns node]
set n1 [$ns node]


A função “node” cria os nodos da rede
Nessa caso associados aos tratadores n0 e n1
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
$ns duplex-link $n0 $n1 1Mb 10ms DropTail



Criação do link que conecta n0 e n1
Canal duplex, 1Mbps de largura de banda, 10ms de atraso, fila
“droptail”
Comando genérico: $ns <simplex|duplex>-link <nodo1>
<nodo2> <banda> <atraso> <tipo da fila> <argumentos
da fila>

<tipo da fila> = <DropTail|RED|CBQ|FQ|SFQ|DRR>
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0



Cria agente UDP
Anexa o agente ao nodo n0
Comando genérico: $ns attach-agent <nodo> <agente>
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0





Cria gerador de tráfego CBR (Constant Bit Rate)
Configura tamanho do pacote e taxa de envio
 Ver manual para parâmetros relevantes a cada tipo de
agente
Anexa a aplicação CBR ao agente UDP
 Comando genérico: <aplicação> attach-agent <agente>
Utilitário: indep-utils/cbrgen.tcl
Outros geradores de tráfego: Exponential, Pareto e Trace
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0


Cria agente Null
 Atua como sink do tráfego
Anexa o agente Null ao nodo n1
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
$ns connect $udp0 $null0


Conecta os dois agentes de transporte
Comando genérico: $ns connect <agente1> <agente2>
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"


Configura momento do início do envio de pacotes CBR
Configura momento do final do envio de pacotes CBR
Um primeiro exemplo
set ns [new Simulator]
set
$ns
set
$ns
nf [open out.nam w]
namtrace-all $nf
f [open out.tr w]
trace-all $f
proc finish {} {
global ns nf f
$ns flush-trace
close $nf
close $f
exec nam out.nam &
exit 0
}
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 5.0 "finish"
$ns run
Um primeiro exemplo
$ns run

Inicia a simulação
Um primeiro exemplo
out.nam
Um primeiro exemplo
+
+
+
r
+
r
+
r
0.5 0 1 cbr 500 ------- 0 0.0 1.0 0 0
0.5 0 1 cbr 500 ------- 0 0.0 1.0 0 0
0.505 0 1 cbr 500 ------- 0 0.0 1.0 1 1
0.505 0 1 cbr 500 ------- 0 0.0 1.0 1 1
0.51 0 1 cbr 500 ------- 0 0.0 1.0 2 2
0.51 0 1 cbr 500 ------- 0 0.0 1.0 2 2
0.514 0 1 cbr 500 ------- 0 0.0 1.0 0 0
0.515 0 1 cbr 500 ------- 0 0.0 1.0 3 3
0.515 0 1 cbr 500 ------- 0 0.0 1.0 3 3
0.519 0 1 cbr 500 ------- 0 0.0 1.0 1 1
0.52 0 1 cbr 500 ------- 0 0.0 1.0 4 4
0.52 0 1 cbr 500 ------- 0 0.0 1.0 4 4
0.524 0 1 cbr 500 ------- 0 0.0 1.0 2 2
(...)
+ 4.49 0 1 cbr 500 ------- 0 0.0 1.0 798 798
- 4.49 0 1 cbr 500 ------- 0 0.0 1.0 798 798
r 4.494 0 1 cbr 500 ------- 0 0.0 1.0 796 796
+ 4.495 0 1 cbr 500 ------- 0 0.0 1.0 799 799
- 4.495 0 1 cbr 500 ------- 0 0.0 1.0 799 799
r 4.499 0 1 cbr 500 ------- 0 0.0 1.0 797 797
+ 4.5 0 1 cbr 500 ------- 0 0.0 1.0 800 800
- 4.5 0 1 cbr 500 ------- 0 0.0 1.0 800 800
r 4.504 0 1 cbr 500 ------- 0 0.0 1.0 798 798
r 4.509 0 1 cbr 500 ------- 0 0.0 1.0 799 799
r 4.514 0 1 cbr 500 ------- 0 0.0 1.0 800 800
(...)
Um primeiro exemplo
+ 0.51 0 1 cbr 500 ------- 0 0.0 1.0 2 2
- 0.51 0 1 cbr 500 ------- 0 0.0 1.0 2 2
r 0.524 0 1 cbr 500 ------- 0 0.0 1.0 2 2

Formato: <evento> <tempo> <id fonte> <id destino>
<tipo> <tamanho> <flag> <ip flow id> <endereço da
fonte> <endereço do destino> <número seqüência>
<identificador único>

<evento>

+ pacote entrou na fila

- pacote saiu da fila

r pacote recebido

d pacote descartado
Um exemplo mais elaborado
n0
n2
n1
n3
Um exemplo mais elaborado
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n0 [$ns node]
set n3 [$ns node]
set n1 [$ns node]
set val(nn) 4
for {set i 0} {$i < $val(nn)} {incr i}
{
set node_($i) [$ns node]
}
Um exemplo mais elaborado
n0
Link duplex
Largura de banda: 2Mbps
Atraso de 10ms
Fila “droptail”
n2
n3
n1
Link duplex
Largura de banda: 2Mbps
Atraso de 10ms
Fila “droptail”
Link duplex
Largura de banda: 1,7Mbps
Atraso de 20ms
Fila “droptail”
Um exemplo mais elaborado
$ns duplex-link $n0 $n1 1Mb 10ms DropTail
$ns duplex-link $n0 $n2 2Mb 10ms DropTail
$ns duplex-link $n1 $n2 2Mb 10ms DropTail
$ns duplex-link $n2 $n3 1.7Mb 20ms DropTail
NAM
$ns queue-limit $n2 $n3 10
$ns duplex-link-op $n0 $n2 orient right-down
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n2 $n3 orient right
$ns duplex-link-op $n2 $n3 queuePos 0.5
Um exemplo mais elaborado
ftp
tcp
n0
1 Mbps
Pacote de 1000
bytes
null
cbr
udp
n1
n2
n3
sink
Um exemplo mais elaborado
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
set udp0 [new Agent/UDP]
$udp0 set class_ 1
$ns attach-agent $n1 $udp0
set null0 [new Agent/Null]
$ns attach-agent $n3 $null0
$ns connect $udp0 $null0
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
$cbr0 set packet_size_ 1000
$cbr0 set rate_ 1mb
set tcp0 [new Agent/TCP]
$tcp0 set class_ 2
$ns attach-agent $n0 $tcp0
set sink0 [new Agent/TCPSink]
$ns attach-agent $n3 $sink0
$ns connect $tcp0 $sink0
set ftp [new Application/FTP]
$ftp0 attach-agent $tcp0
Um exemplo mais elaborado
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
set udp0 [new Agent/UDP]
$udp0 set class_ 1
$ns attach-agent $n1 $udp0
set null0 [new Agent/Null]
$ns attach-agent $n3 $null0
$ns connect $udp0 $null0
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
$cbr0 set packetSize_ 1000
$cbr0 set rate_ 1mb
set tcp0 [new Agent/TCP]
$tcp0 set class_ 2
$ns attach-agent $n0 $tcp0
set sink0 [new Agent/TCPSink]
$ns attach-agent $n3 $sink0
$ns connect $tcp0 $sink0
set ftp [new Application/FTP]
$ftp0 attach-agent $tcp0
Um exemplo mais elaborado
$udp0 set class_ 1
$tcp0 set class_ 2



Identifica a classe do fluxo
Referente ao parâmetro <ip flow id> do trace
Comando genérico: <agente> set class_ <número>
Um exemplo mais elaborado
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
set udp0 [new Agent/UDP]
$udp0 set class_ 1
$ns attach-agent $n1 $udp0
set null0 [new Agent/Null]
$ns attach-agent $n3 $null0
$ns connect $udp0 $null0
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
$cbr0 set packetSize_ 1000
$cbr0 set rate_ 1mb
set tcp0 [new Agent/TCP]
$tcp0 set class_ 2
$ns attach-agent $n0 $tcp0
set sink0 [new Agent/TCPSink]
$ns attach-agent $n3 $sink0
$ns connect $tcp0 $sink0
set ftp [new Application/FTP]
$ftp0 attach-agent $tcp0
Um exemplo mais elaborado
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
set udp0 [new Agent/UDP]
$udp0 set class_ 1
$ns attach-agent $n1 $udp0
set null0 [new Agent/Null]
$ns attach-agent $n3 $null0
$ns connect $udp0 $null0
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
$cbr0 set packetSize_ 1000
$cbr0 set rate_ 1mb
set tcp0 [new Agent/TCP]
$tcp0 set class_ 2
$ns attach-agent $n0 $tcp0
set sink0 [new Agent/TCPSink]
$ns attach-agent $n3 $sink0
$ns connect $tcp0 $sink0
set ftp [new Application/FTP]
$ftp0 attach-agent $tcp0
Um exemplo mais elaborado
set
$ns
set
$ns
$ns



tcp0 [new Agent/TCP]
attach-agent $n0 $tcp0
sink0 [new Agent/TCPSink]
attach-agent $n3 $sink0
connect $tcp0 $sink0
Anexa um agente TCP a n0
Anexa um agente TCPSink a n3
Conecta os dois agentes
Um exemplo mais elaborado
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
set udp0 [new Agent/UDP]
$udp0 set class_ 1
$ns attach-agent $n1 $udp0
set null0 [new Agent/Null]
$ns attach-agent $n3 $null0
$ns connect $udp0 $null0
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
$cbr0 set packetSize_ 1000
$cbr0 set rate_ 1mb
set tcp0 [new Agent/TCP]
$tcp0 set class_ 2
$ns attach-agent $n0 $tcp0
set sink0 [new Agent/TCPSink]
$ns attach-agent $n3 $sink0
$ns connect $tcp0 $sink0
set ftp [new Application/FTP]
$ftp0 attach-agent $tcp0
Um exemplo mais elaborado
set ftp [new Application/FTP]
$ftp0 attach-agent $tcp0
Cria instância de aplicação FTP

Anexa a aplicação FTP à instância do TCP

Application/FTP é uma “aplicação simulada”, assim como
Application/Telnet

Um exemplo mais elaborado
cbr
0
0.5 1.0 1.5 2.0
2.5 3.0 3.5 4.0 4.5 5.0
t
Final da simulação
ftp
$ns at 0.5 "$cbr0 start"
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop“
$ns at 4.5 "$cbr0 stop"
$ns at 1.0 "$ftp0 start"
$ns at 4.0 "$ftp0 stop“
Um exemplo mais elaborado
E por último...
$ns color 1 Blue
$ns color 2 Red

Define as cores de cada classe de tráfego para visualização no
NAM
Um exemplo mais elaborado
Um exemplo mais elaborado
Um exemplo mais elaborado
Um exemplo mais elaborado
Um exemplo mais elaborado
+ 0.5 1 2 cbr 1000 ------- 1 1.0 3.0 0 0
- 0.5 1 2 cbr 1000 ------- 1 1.0 3.0 0 0
+ 0.508 1 2 cbr 1000 ------- 1 1.0 3.0 1 1
- 0.508 1 2 cbr 1000 ------- 1 1.0 3.0 1 1
(...)
r 0.514 1 2 cbr 1000 ------- 1 1.0 3.0 0 0
+ 3.008231 2 3 tcp 1000 ------- 2 0.0 3.1 153 632
+ 0.514 2 3 cbr 1000 ------- 1 1.0 3.0 0 0
r 3.008306 3 2 ack 40 ------- 2 3.1 0.0 141 630
- 0.514 2 3 cbr 1000 ------- 1 1.0 3.0 0 0
+ 3.008306 2 0 ack 40 ------- 2 3.1 0.0 141 630
+ 0.516 1 2 cbr 1000 ------- 1 1.0 3.0 2 2
- 3.008306 2 0 ack 40 ------- 2 3.1 0.0 141 630
-0.516 1 2 cbr 1000 ------- 1 1.0 3.0 2 2
r 3.009054 2 0 ack 40 ------- 2 3.1 0.0 141 626
r 3.01 1 2 cbr 1000 ------- 1 1.0 3.0 312 633
+ 3.01 2 3 cbr 1000 ------- 1 1.0 3.0 312 633
(...)
d 3.01 2 3 cbr 1000 ------- 1 1.0 3.0 312 633
- 3.010471 2 3 tcp 1000 ------- 2 0.0 3.1 148 620
Um gostinho de wireless
ftp
tcp
Wireless
n0
sink
ftp
n1
0
20
40
60
80 100 120 140 160 170
t
Final da simulação
Um gostinho de wireless

set
set
set
set
set
set
set
set
set
set
Define os componentes do nodo móvel
val(chan)
val(prop)
val(ant)
val(ll)
val(ifq)
val(ifqlen)
val(netif)
val(mac)
val(rp)
val(nn)
Channel/WirelessChannel
Propagation/TwoRayGround
Antenna/OmniAntenna
LL
Queue/DropTail/PriQueue
50
Phy/WirelessPhy
Mac/802_11
DSDV
2
;#
;#
;#
;#
;#
;#
;#
;#
;#
;#
tipo do canal
modelo de propagação de rádio
tipo da antena
tipo da camada de enlace
tipo da fila
número máximo de pacotes na fila
tipo da interface de rede
Tipo da camada MAC
protocolo de roteamento ad hoc
número de nodos móveis
Um gostinho de wireless

Inicializa variáveis globais
set ns_
[new Simulator]
set tracefd
[open simple.tr w]
$ns_ trace-all $tracefd

Configura topografia e o canal
set topo
[new Topography]
$topo load_flatgrid 500 500
set chan [new $val(chan)]

Cria objeto GOD (General Operations Director)
create-god $val(nn)
Um gostinho de wireless

Configura o nodo móvel
$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) \
-channelType $val(chan) \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF \
-movementTrace OFF
Um gostinho de wireless

Cria os nodos
for {set i 0} {$i < $val(nn) } {incr i} {
set node_($i) [$ns_ node]
$node_($i) random-motion 0
}

Configura posição inicial
$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
Um gostinho de wireless

Agenda eventos de movimento
 Nodo 1 se move em direção ao nodo 0
$ns_ at 10.0 "$node_(0) setdest 20.0 18.0 1.0“
$ns_ at 50.0 "$node_(1) setdest 25.0 20.0 15.0"

Nodo 1 se distancia do nodo 0
$ns_ at 100.0 "$node_(1) setdest 490.0 480.0 15.0“

Cria conexão TCP do nodo 0 ao nodo 1
set tcp [new Agent/TCP]
$tcp set class_ 2
set sink [new Agent/TCPSink]
$ns_ attach-agent $node_(0) $tcp
$ns_ attach-agent $node_(1) $sink
$ns_ connect $tcp $sink
Um gostinho de wireless

Cria fonte de dados
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ns_ at 20.0 "$ftp start“

Diz aos nodos o tempo final de simulação
for {set i 0} {$i < $val(nn) } {incr i} {
$ns_ at 170.0 "$node_($i) reset";
}
Um gostinho de wireless

Agenda finalização
$ns_ at 170.0 "stop"
$ns_ at 170.01 "puts \"NS EXITING...\" ; $ns_ halt"
proc stop {} {
global ns_ tracefd
$ns_ flush-trace
close $tracefd
}

Inicia simulação
puts "Starting Simulation..."
$ns_ run
Exercícios
1) Simular os três exemplos mostrados.
2) Elaborar um script e simular uma topologia composta por n nodos, estando cada
um conectado diretamente aos outros n-1 (grafo completo) através de um meio
fixo duplex com largura de banda de 0,5Mbps, 5ms de atraso e fila do tipo CBQ.
O valor de n deve ser facilmente configurável. Criar uma fonte de dados do tipo
ftp sobre TCP de cada nodo i até seu vizinho de índice i+1, exceto nodo de
índice i=n que deverá enviar dados ao nodo de índice 0.
3) Elaborar um script e simular uma rede ad hoc com três nodos em linha reta,
criando uma conexão UDP entre os dois nodos da ponta e gerando um tráfego
CBR de um até o outro. Sabendo que o alcance default é de 250m, agendar a
movimentação dos nodos de tal forma que até a metade do tempo de
simulação os nodos da ponta se comuniquem entre si apenas através do nodo
mediano e após eles passem a se comunicar diretamente.