59
Iniciando o uso do ns Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

Embed Size (px)

Citation preview

Page 1: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 2: Iniciando 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

Page 3: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 4: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 5: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 6: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 7: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 8: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 9: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 10: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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>

Page 11: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 12: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 13: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 14: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 15: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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>

Page 16: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 17: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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>

Page 18: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 19: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 20: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 21: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 22: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 23: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

Um primeiro exemploUm primeiro exemplo

$ns connect $udp0 $null0

Conecta os dois agentes de transporte Comando genérico: $ns connect <agente1> <agente2>

Page 24: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 25: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 26: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 27: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

Um primeiro exemploUm primeiro exemplo

$ns run

Inicia a simulação

Page 28: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

Um primeiro exemploUm primeiro exemplo

out.nam

Page 29: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 30: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 31: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

Um exemplo mais elaboradoUm exemplo mais elaborado

n1

n0

n2 n3

Page 32: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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]

}

Page 33: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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”

Page 34: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 35: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

Um exemplo mais elaboradoUm exemplo mais elaborado

1 MbpsPacote de 1000

bytes

n1

n0

n2 n3

ftp

tcp

cbr

udp

null

sink

Page 36: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 37: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 38: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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>

Page 39: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 40: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 41: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 42: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 43: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 44: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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“

Page 45: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 46: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

Um exemplo mais elaboradoUm exemplo mais elaborado

Page 47: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

Um exemplo mais elaboradoUm exemplo mais elaborado

Page 48: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

Um exemplo mais elaboradoUm exemplo mais elaborado

Page 49: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

Um exemplo mais elaboradoUm exemplo mais elaborado

Page 50: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 51: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 52: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 53: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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)

Page 54: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 55: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 56: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 57: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 58: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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

Page 59: Iniciando o uso do ns Isabela Guimarães Siqueira Curso de ns Ciência da Computação UFMG Julho/Agosto 2003

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.