Upload
internet
View
105
Download
0
Embed Size (px)
Citation preview
Iniciando o uso do nsIniciando o uso do ns
Isabela Guimarães Siqueira
Curso de ns Ciência da Computação UFMG Julho/Agosto 2003
IntroduçãoIntroduçã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 exemploUm primeiro exemplo
cbr
udp
n1
n0
Link duplex Largura de banda: 1MbpsAtraso de 10msFila “droptail”
null
200 pacotes/sPacote de 500 bytes
0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 t
cbr
Final da simulação
Um primeiro exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm 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 exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm primeiro exemplo
set nf [open out.nam w]
$ns namtrace-all $nf
set f [open out.tr w]
$ns 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 exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm 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 exemploUm 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 exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm 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 exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm 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 exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm 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 exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm 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 exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm 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 exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm primeiro exemplo
$ns connect $udp0 $null0
Conecta os dois agentes de transporte Comando genérico: $ns connect <agente1> <agente2>
Um primeiro exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm 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 exemploUm primeiro exemploset ns [new Simulator]
set nf [open out.nam w]$ns namtrace-all $nfset f [open out.tr w]$ns trace-all $f
proc finish {} {global ns nf f$ns flush-traceclose $nfclose $fexec 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 exemploUm primeiro exemplo
$ns run
Inicia a simulação
Um primeiro exemploUm primeiro exemplo
out.nam
Um primeiro exemploUm primeiro exemplo
+ 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
r 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
r 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
r 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 exemploUm 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 elaboradoUm exemplo mais elaborado
n1
n0
n2 n3
Um exemplo mais elaboradoUm exemplo mais elaborado
set n0 [$ns node]
set n1 [$ns node]
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set val(nn) 4
for {set i 0} {$i < $val(nn)} {incr i} {
set node_($i) [$ns node]
}
Um exemplo mais elaboradoUm exemplo mais elaborado
n1
n0
n2 n3
Link duplex Largura de banda: 2MbpsAtraso de 10msFila “droptail”
Link duplex Largura de banda: 2MbpsAtraso de 10msFila “droptail”
Link duplex Largura de banda: 1,7MbpsAtraso de 20msFila “droptail”
Um exemplo mais elaboradoUm 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
$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
NAM
Um exemplo mais elaboradoUm exemplo mais elaborado
1 MbpsPacote de 1000
bytes
n1
n0
n2 n3
ftp
tcp
cbr
udp
null
sink
Um exemplo mais elaboradoUm 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 elaboradoUm 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 elaboradoUm 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 elaboradoUm 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 elaboradoUm 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 elaboradoUm exemplo mais elaborado
set tcp0 [new Agent/TCP]
$ns attach-agent $n0 $tcp0
set sink0 [new Agent/TCPSink]
$ns attach-agent $n3 $sink0
$ns connect $tcp0 $sink0
Anexa um agente TCP a n0 Anexa um agente TCPSink a n3 Conecta os dois agentes
Um exemplo mais elaboradoUm 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 elaboradoUm 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 elaboradoUm exemplo mais elaborado
0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 t
cbr
Final da simulaçãoftp
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"
$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop“
$ns at 1.0 "$ftp0 start"
$ns at 4.0 "$ftp0 stop“
Um exemplo mais elaboradoUm 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 elaboradoUm exemplo mais elaborado
Um exemplo mais elaboradoUm exemplo mais elaborado
Um exemplo mais elaboradoUm exemplo mais elaborado
Um exemplo mais elaboradoUm exemplo mais elaborado
Um exemplo mais elaboradoUm 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
+ 0.514 2 3 cbr 1000 ------- 1 1.0 3.0 0 0
- 0.514 2 3 cbr 1000 ------- 1 1.0 3.0 0 0
+ 0.516 1 2 cbr 1000 ------- 1 1.0 3.0 2 2
-0.516 1 2 cbr 1000 ------- 1 1.0 3.0 2 2
(...)
(...)
+ 3.008231 2 3 tcp 1000 ------- 2 0.0 3.1 153 632
r 3.008306 3 2 ack 40 ------- 2 3.1 0.0 141 630
+ 3.008306 2 0 ack 40 ------- 2 3.1 0.0 141 630
- 3.008306 2 0 ack 40 ------- 2 3.1 0.0 141 630
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 wirelessUm gostinho de wireless
ftp
tcp
n1
n0
Wireless
sinkftp
Final da simulação
0 20 40 60 80 100 120 140 160 170 t
Um gostinho de wirelessUm gostinho de wireless
Define os componentes do nodo móvel
set val(chan) Channel/WirelessChannel ;# tipo do canalset val(prop) Propagation/TwoRayGround ;# modelo de propagação de rádio set val(ant) Antenna/OmniAntenna ;# tipo da antenaset val(ll) LL ;# tipo da camada de enlaceset val(ifq) Queue/DropTail/PriQueue ;# tipo da fila set val(ifqlen) 50 ;# número máximo de pacotes na fila set val(netif) Phy/WirelessPhy ;# tipo da interface de rede set val(mac) Mac/802_11 ;# Tipo da camada MAC set val(rp) DSDV ;# protocolo de roteamento ad hocset val(nn) 2 ;# número de nodos móveis
Um gostinho de wirelessUm gostinho de wireless
Inicializa variáveis globaisset ns_ [new Simulator]
set tracefd [open simple.tr w]
$ns_ trace-all $tracefd
Configura topografia e o canalset 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 wirelessUm 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 wirelessUm 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 wirelessUm 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 1set tcp [new Agent/TCP]$tcp set class_ 2set sink [new Agent/TCPSink]$ns_ attach-agent $node_(0) $tcp$ns_ attach-agent $node_(1) $sink$ns_ connect $tcp $sink
Um gostinho de wirelessUm 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çãofor {set i 0} {$i < $val(nn) } {incr i} { $ns_ at 170.0 "$node_($i) reset";}
Um gostinho de wirelessUm 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çãoputs "Starting Simulation..."$ns_ run
ExercíciosExercí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.