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.