Buscar

Teleinformática e Redes 2 - Laboratórios de Simulação – Network Simulator

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Laboratórios de Simulação – Network Simulator 
 
Lab 1 – DropTail vs RED 
 
1. Por que as filas RED evitam a sincronização de fontes TCP? 
 
As filas RED detectam antecipadamente as fontes que estão enviando pacotes com grande frequência, 
consequentemente, dominando o fluxo de dados. Monitorando o tamanho da fila e o volume de 
descartes essas filas conseguem, estatisticamente, saber o quanto cada host está transmitindo e quantos 
pacotes de uma máquina estão na filas. Assim, se um transmissor envia muitos pacotes a probabilidade 
de ter seus dados descartados é maior. Com isso as filas se mantém num tamanho controlável e 
permitindo que todos os hosts transmitam dados. 
 
2. Comente o script TCL da simulação explicando todos os comandos. 
 
# INICIO - Variáveis 
 
# Fontes de Tráfego 
set tam_pacote 48 #tamanho do pacote de 48 bytes 
set taxa 800Kb #taxa de tráfego da fonte 
 
set start1 0.2 #começo da transmissão da fonte 1 aos 0.2s 
set start2 0.3 #começo da transmissão da fonte 2 aos 0.3s 
set tam_burst 2 #tamanho da rajada: 2 pacotes 
 
# Roteador 
set tam_fila 15 #fila com no máximo 15 pacotes 
 
# FINAL - Variáveis 
 
# Inicio do script 
set ns [new Simulator] 
 
set nf [open out.nam w] #abrindo arquivo de trace do nam 
$ns namtrace-all $nf 
 
set num 2 
 
#definindo nomes para os tipos de fila 
set aqm(1) "DropTail" 
set aqm(2) "RED" 
set aqm(3) "DRR" 
set aqm(4) "DRR" 
 
set queue_size(1) $tam_fila #definindo os tamanhos da fila dos roteadores 
set queue_size(2) $tam_fila 
set queue_size(3) $tam_fila 
 
for {set i 1} {$i <= $num} {incr i} { 
 # s1, s2 e s3 atuam como fontes. Laço para a criação dos nos que participarão da rede 
 set s1($i) [$ns node] 
 set s2($i) [$ns node] 
 set s3($i) [$ns node] 
 set s4($i) [$ns node] 
 set s5($i) [$ns node] 
 # G atua como gateway implementando o mecanismo RED para evitar congestionamento. 
 set G($i) [$ns node] 
 $G($i) shape hexagon 
 # r atua como um receptor. 
 set r($i) [$ns node] 
 
 #$s1($i) label "Sender1" 
 #$s2($i) label "Sender2" 
 #$s3($i) label "Sender3" 
 #$G($i) label "Gateway" 
 #$r($i) label "Receiver" 
 
 #Abaixo, criam-se enlaces duplex entre os links, com capacidade de transmissão de 1Mb e retardo de 
propagação de 15ms 
 $ns duplex-link $s1($i) $G($i) 1Mb 15ms DropTail 
 $ns duplex-link $s2($i) $G($i) 1Mb 15ms DropTail 
 $ns duplex-link $s3($i) $G($i) 1Mb 15ms DropTail 
 $ns duplex-link $s4($i) $G($i) 1Mb 15ms DropTail 
 $ns duplex-link $s5($i) $G($i) 1Mb 15ms DropTail 
 $ns duplex-link $G($i) $r($i) 1Mb 20ms $aqm($i) 
 
#Os comandos abaixo são para posicionamento e animação dos nos no nam 
 $ns duplex-link-op $G($i) $r($i) label $aqm($i) 
 
 $ns queue-limit $G($i) $r($i) $queue_size($i) 
 
 $ns duplex-link-op $s1($i) $G($i) orient right 
 $ns duplex-link-op $s2($i) $G($i) orient right-down 
 $ns duplex-link-op $s3($i) $G($i) orient down 
 $ns duplex-link-op $s4($i) $G($i) orient left-down 
 $ns duplex-link-op $s5($i) $G($i) orient left 
 $ns duplex-link-op $G($i) $r($i) orient down 
 
 $ns duplex-link-op $G($i) $r($i) queuePos 0.25 
} 
 
# num >= 2 
 
#criação de um link duplex no receptor com transmissão de 2Mb e retardo de 60ms 
$ns duplex-link $r(1) $r(2) 2Mb 60ms DropTail 
$ns duplex-link-op $r(1) $r(2) orient right 
$ns duplex-link-op $r(1) $r(2) color background 
# num >= 3 
#$ns duplex-link $r(2) $r(3) 2Mb 60ms DropTail 
#$ns duplex-link-op $r(2) $r(3) orient right 
#$ns duplex-link-op $r(2) $r(3) color background 
# num = 4 
#$ns duplex-link $r(3) $r(4) 2Mb 60ms DropTail 
#$ns duplex-link-op $r(3) $r(4) orient right 
#$ns duplex-link-op $r(3) $r(4) color background 
 
$ns color 1 red; # the color of packets from s1 
$ns color 2 SeaGreen; # the color of packets from s2 
$ns color 3 blue; # the color of packets from s3 
$ns color 4 yellow; # the color of packets from s4 
$ns color 5 black; # the color of packets from s5 
 
#Abaixo, são associados aos nos s1, s2, s3, s4, s5 uma conexão TCP 
for {set i 1} {$i <= $num} {incr i} { 
set tcp1($i) [new Agent/TCP] 
$ns attach-agent $s1($i) $tcp1($i) 
#$tcp1($i) set window_ 2 
$tcp1($i) set fid_ 1 
 
set tcp2($i) [new Agent/TCP] 
$ns attach-agent $s2($i) $tcp2($i) 
#$tcp2($i) set window_ 2 
$tcp2($i) set fid_ 2 
 
set tcp3($i) [new Agent/TCP] 
$ns attach-agent $s3($i) $tcp3($i) 
#$tcp3($i) set window_ 2 
$tcp3($i) set windowInit_ $tam_burst 
$tcp3($i) set fid_ 3 
 
set tcp4($i) [new Agent/TCP] 
$ns attach-agent $s4($i) $tcp4($i) 
#$tcp4($i) set window_ 2 
$tcp4($i) set windowInit_ $tam_burst 
$tcp4($i) set fid_ 4 
 
set tcp5($i) [new Agent/TCP] 
$ns attach-agent $s5($i) $tcp5($i) 
#$tcp5($i) set window_ 20 
$tcp5($i) set windowInit_ $tam_burst 
$tcp5($i) set fid_ 5 
 
 
#Criação do operador tcpsink para envio de dados na conexão TCP 
set sink1($i) [new Agent/TCPSink] 
set sink2($i) [new Agent/TCPSink] 
set sink3($i) [new Agent/TCPSink] 
set sink4($i) [new Agent/TCPSink] 
set sink5($i) [new Agent/TCPSink] 
 
#Associando ao receptor todos os agentes tcpsink criados 
$ns attach-agent $r($i) $sink1($i) 
$ns attach-agent $r($i) $sink2($i) 
$ns attach-agent $r($i) $sink3($i) 
$ns attach-agent $r($i) $sink4($i) 
$ns attach-agent $r($i) $sink5($i) 
 
#Associando o socket TCP ao agente TCPSink 
$ns connect $tcp1($i) $sink1($i) 
$ns connect $tcp2($i) $sink2($i) 
$ns connect $tcp3($i) $sink3($i) 
$ns connect $tcp4($i) $sink4($i) 
$ns connect $tcp5($i) $sink5($i) 
 
#Abaixo, são associados os tráfegos CBR as 5 variáveis cbr criadas 
set cbr1($i) [new Application/Traffic/CBR] 
$cbr1($i) attach-agent $tcp1($i) 
$cbr1($i) set packetsize_ $tam_pacote 
$cbr1($i) set rate_ $taxa 
$cbr1($i) set random_ 1 
 
set cbr2($i) [new Application/Traffic/CBR] 
$cbr2($i) attach-agent $tcp2($i) 
$cbr2($i) set packetSize_ $tam_pacote 
$cbr2($i) set rate_ $taxa 
$cbr2($i) set random_ 1 
 
set cbr3($i) [new Application/Traffic/CBR] 
$cbr3($i) attach-agent $tcp3($i) 
$cbr3($i) set packetSize_ $tam_pacote 
$cbr3($i) set rate_ $taxa 
$cbr3($i) set random_ 1 
 
set cbr4($i) [new Application/Traffic/CBR] 
$cbr4($i) attach-agent $tcp4($i) 
$cbr4($i) set packetSize_ $tam_pacote 
$cbr4($i) set rate_ $taxa 
$cbr4($i) set random_ 1 
 
set cbr5($i) [new Application/Traffic/CBR] 
$cbr5($i) attach-agent $tcp5($i) 
$cbr5($i) set packetSize_ $tam_pacote 
$cbr5($i) set rate_ $taxa 
$cbr5($i) set random_ 1 
} 
 
#procedimento para finalizar a simulação 
proc finish {} { 
 
 global ns 
 $ns flush-trace 
 
 puts "running nam..." 
 exec nam out.nam & #executando o arquivo de saída out.nam 
 exit 0 
 
} 
 
for {set i 1} {$i <= $num} {incr i} { 
 # INICIO 
 $ns at 0.10 "$cbr1($i) start" #iniciando a fonte de tráfego CBR1 aos 0.1s 
 $ns at 0.15 "$cbr2($i) start" #iniciando a fonte de tráfego CBR2 aos 0.15s 
 # INICIANDO RAJADAS 
 $ns at $start1 "$cbr3($i) start" #iniciando a fonte de tráfego CBR3 aos 0.2s 
 $ns at $start2 "$cbr4($i) start" #iniciando a fonte de tráfego CBR4 aos 0.3s 
 $ns at $start2 "$cbr5($i) start" #iniciando a fonte de tráfego CBR5 aos 0.3s 
 # PARAR 
 $ns at 8.00 "$cbr1($i) stop" #parando as fontes de tráfego aos 8s 
 $ns at 8.00 "$cbr2($i) stop" 
 $ns at 8.00 "$cbr3($i) stop" 
 $ns at 8.00 "$cbr4($i) stop" 
 $ns at 8.00 "$cbr5($i) stop" 
 #FINALIZAR 
 $ns at8.10 "finish" #finalizar a simulação aos 8.1s 
} 
 
$ns run 
 
Lab 2 – LRD vs SRD 
 
1. Quais são as principais características do tráfego SRD e LRD? 
 
No tráfego SRD os pacotes são transmitidos numa frequência que não chega a ser constante; há períodos 
em que não se transmite dados, porém há momentos em que um pacote ou rajadas de tamanho variado 
são enviadas na rede em intervalos de tempo variados. Com isso, o buffer, com o tamanho que foi 
definido, consegue enfileirar os pacotes que não puderam ser transmitidos no enlace e reduzir muito o 
descarte deles. 
No tráfego LRD o que se observa é que a partir de um certo ponto há uma transmissão de pacotes 
constante, como se uma rajada única fosse enviada pelo enlace, sem interrupções. Outra coisa que se 
nota é que todo o enlace é consumido pelo tráfego LRD, e por essa razão muitos pacotes são 
enfileirados e descartados, o que leva a mais retransmissões que eventualmente irão para o buffer e 
serão descartados novamente, e assim em diante. 
 
2. Considerando as características do tráfego LRD observadas na simulação, quais seriam as principais 
medidas que deveriam ser tomadas ao se dimensionar uma rede para o transporte de tráfego LRD? 
 
As principais medidas seriam a redução no tamanho do pacote no tráfego LRD, ou a taxa total de 
transmissão ou aumentar o retardo de propagação para garantir um intervalo maior entre uma rajada de 
dados e a seguinte. 
 
3. Comente o script TCL dessa simulação explicando todos seus comandos. 
 
# INICIO - Variáveis 
 
set num_fontes 30 
 
# Fontes de Tráfego SRD 
set srd_tam_pacote 210 #tamanho do pacote SRD de 210 bytes 
set srd_taxa 50k #taxa de tráfego da fonte 
 
# Fonte de Trafego LRD 
set lrd_tam_pacote 210 #tamanho do pacote LRD de 210 bytes 
set lrd_taxa 50k #taxa de tráfego da fonte 
 
# Roteador 
set tam_fila 15 #fila com no máximo 15 pacotes 
 
# FINAL - Variaveis 
 
# Inicio do script 
set ns [new Simulator] 
 
#set f [open aqm-out.tr w] 
#$ns trace-all $f 
 
set nf [open out.nam w] #abrindo arquivo de trace do nam 
$ns namtrace-all $nf 
 
set num 2 
 
#definindo nomes para os tipos de fila 
set aqm(1) "DropTail" 
set aqm(2) "DropTail" 
 
set queue_size(1) $tam_fila #definindo os tamanhos da fila dos roteadores 
set queue_size(2) $tam_fila 
 
for {set i 1} {$i <= $num} {incr i} { 
 #s1 s2 atuam como fontes. Laço para a criação dos nos que participarão da rede 
 set s($i) [$ns node] 
 set d($i) [$ns node] 
 
#Criação de um link duplex com capacidade de transmissão de aprox. 2,9Mb e 50ms no retardo de propagação 
 $ns duplex-link $s($i) $d($i) 3000k 50ms $aqm($i) 
 
#Definindo o limite da fila 
 $ns queue-limit $s($i) $d($i) $queue_size($i) 
 
#Comandos para posicionamento 
 $ns duplex-link-op $s($i) $d($i) orient down 
 
 $ns duplex-link-op $s($i) $d($i) queuePos 0.5 
} 
 
# Ajustes 
$s(1) label "SRD" 
$s(2) label "LRD" 
 
#Criando um link duplex com fila DropTail de capacidade 2Mb e 40ms no retardo de propagação 
$ns duplex-link $d(1) $d(2) 2Mb 40ms DropTail 
$ns duplex-link-op $d(1) $d(2) orient right 
$ns duplex-link-op $d(1) $d(2) color background 
 
$ns color 1 red ;# the color of packets from s1 
$ns color 2 blue ;# the color of packets from s3 
 
#Laço para criação dos sockets TCP 
for {set i 1} {$i <= $num} {incr i} { 
 for {set j 1} {$j <= $num_fontes} {incr j} { 
 set tcp($i,$j) [new Agent/TCP] 
 $ns attach-agent $s($i) $tcp($i,$j) 
 $tcp($i,$j) set window_ 2 
 $tcp($i,$j) set fid_ $i 
 
 set sink($i,$j) [new Agent/TCPSink] 
 $ns attach-agent $d($i) $sink($i,$j) 
 
 $ns connect $tcp($i,$j) $sink($i,$j) 
 } 
} 
 
#Laço para criação de fontes com tráfego exponencial, sendo associadas ao socket TCP, com o tamanho de 
pacote definido como 210, 50Kb de taxa, tempo de rajada de 0.8s e tempo ocioso de 1.2s 
for {set i 1} {$i <= $num_fontes} {incr i} { 
 
 set exp($i) [new Application/Traffic/Exponential] 
 $exp($i) attach-agent $tcp(1,$i) 
 $exp($i) set packetsize_ $srd_tam_pacote 
 $exp($i) set rate_ $srd_taxa 
 $exp($i) set burst_time_ 800ms 
 $exp($i) set idle_time_ 1200ms 
} 
 
#Laço para criação de fontes Pareto, sendo associadas ao socket TCP, com o tamanho de pacote definido como 
210, 50Kb de taxa, tempo de rajada de 0.25s e tempo ocioso de 0.25s 
for {set i 1} {$i <= $num_fontes} {incr i} { 
 
 set pareto($i) [new Application/Traffic/Pareto] 
 $pareto($i) attach-agent $tcp(2,$i) 
 $pareto($i) set packetsize_ $lrd_tam_pacote 
 $pareto($i) set rate_ $lrd_taxa 
 $pareto($i) set burst_time_ 250ms 
 $pareto($i) set idle_time_ 250ms 
 $pareto($i) set shape_ 1.5 
} 
 
#procedimento para finalizar a simulação 
proc finish {} { 
 
 global ns 
 $ns flush-trace 
 
 puts "running nam..." 
 exec nam out.nam & #executando o arquivo de saída out.nam 
 exit 0 
 
} 
 
# Eventos 
for {set i 1} {$i <= $num_fontes} {incr i} { 
 $ns at 0.1 "$exp($i) start" #iniciando as fontes de tráfego exponencial aos 0.1s 
 $ns at 5.0 "$exp($i) stop" #parando as fontes de tráfego aos 5s 
} 
for {set i 1} {$i <= $num_fontes} {incr i} { 
 $ns at 0.1 "$pareto($i) start" #iniciando a fonte de tráfego Pareto aos 0.1s 
 $ns at 5.0 "$pareto($i) stop" #parando as fontes de tráfego aos 5s 
} 
$ns at 5.1 "finish" #finalizar a simulação aos 5.1s 
 
$ns run 
 
 
Lab 3 – Multicast 
 
1. Quais são as vantagens da utilização de uma conexão multicast ao invés de múltiplas conexões unicast? 
 
Com uma conexão multicast o tráfego num enlace, as redundâncias de pacotes e os enfileiramentos nos 
roteadores são reduzidos, pois a fonte enviará apenas um pacote pelo enlace e ao passar pelo roteador 
este tratará de duplicar e enviar o dado aos seus destinatários. Além disso, há nós e caminhos que são 
evitados ao se utilizar, por exemplo, árvores baseadas em fontes ou em menores caminhos e a fonte não 
precisa gerenciar múltiplas conexões unicast mas a conexão ao qual pertencem os participantes do grupo 
multicast. 
 
2. Comente o script TCL dessa simulação explicando todos seus comandos. 
 
set ns [new Simulator -multicast on] 
 
#set nsTrace [open stTrace.tr w]; #Definindo o trace do ns 
#$ns trace-all $nsTrace 
 
set namTrace [open out_pim.nam w]; #Abrindo arquivo de trace do nam 
$ns namtrace-all $namTrace 
 
$ns color 0 blue 
 
set iSTNodes 11 #Definindo número de nós 
 
for {set i 0} {$i < $iSTNodes} {incr i} { 
 set stNode($i) [$ns node] 
 lappend stNodeList $stNode($i) 
} 
 
$stNode(1) shape square; #RP e o nó 1, o ponto de encontro dos participantes do multicast 
$stNode(1) color yellow; 
 
$stNode(10) shape hexagon; #Atributos cor e forma da fonte 10 
$stNode(10) color red; 
 
set stAddr [Node allocaddr]; #Alocar endereço multicast para o grupo 
 
#Criando enlaces duplex com capacidade de 1.5Mb, retardo de 10ms e fila DropTail 
$ns duplex-link $stNode(10) $stNode(0) 1.5Mb 10ms DropTail 
$ns duplex-link $stNode(10) $stNode(1) 1.5Mb 10ms DropTail 
 
$ns duplex-link $stNode(0) $stNode(1) 1.5Mb 10ms DropTail 
$ns duplex-link $stNode(0) $stNode(2) 1.5Mb 10ms DropTail 
$ns duplex-link $stNode(1) $stNode(3) 1.5Mb 10ms DropTail 
$ns duplex-link $stNode(1) $stNode(4) 1.5Mb 10ms DropTail 
$ns duplex-link $stNode(3) $stNode(7) 1.5Mb 10ms DropTail 
$ns duplex-link $stNode(4) $stNode(8) 1.5Mb 10ms DropTail$ns duplex-link $stNode(2) $stNode(5) 1.5Mb 10ms DropTail 
$ns duplex-link $stNode(2) $stNode(6) 1.5Mb 10ms DropTail 
$ns duplex-link $stNode(5) $stNode(9) 1.5Mb 10ms DropTail 
$ns duplex-link $stNode(6) $stNode(9) 1.5Mb 10ms DropTail 
 
#Comandos para posicionamento dos nós no nam 
$ns duplex-link-op $stNode(0) $stNode(1) orient left-down 
$ns duplex-link-op $stNode(0) $stNode(2) orient right-down 
$ns duplex-link-op $stNode(1) $stNode(3) orient left-down 
$ns duplex-link-op $stNode(1) $stNode(4) orient down 
$ns duplex-link-op $stNode(3) $stNode(7) orient down 
$ns duplex-link-op $stNode(4) $stNode(8) orient down 
$ns duplex-link-op $stNode(2) $stNode(5) orient down 
$ns duplex-link-op $stNode(2) $stNode(6) orient right-down 
$ns duplex-link-op $stNode(5) $stNode(9) orient right-down 
$ns duplex-link-op $stNode(6) $stNode(9) orient down 
 
$ns duplex-link-op $stNode(1) $stNode(10) orient left-up 
$ns duplex-link-op $stNode(0) $stNode(10) orient left 
 
 
BST set RP_($stAddr) $stNode(1); 
$ns mrtproto BST $stNodeList; 
 
#Criando socket UDP para o nó 10 
set stUDP [new Agent/UDP] 
$ns attach-agent $stNode(10) $stUDP 
 
#Definindo o tráfego da aplicação como CBR 
set stTraffic [new Application/Traffic/CBR] 
 
#$stTraffic set packetSize_ 800 ; #find appropriate rate for good animation 
$stTraffic set rate_ 256Kb ; #Definindo taxa de 256Kb 
 
$stTraffic attach-agent $stUDP #Associando o tráfego ao socket UDP 
$stUDP set dst_addr_ $stAddr 
$stUDP set dst_port_ 0 
 
set stRcvr3 [new Agent/Null] 
$ns attach-agent $stNode(3) $stRcvr3 
set stRcvr5 [new Agent/Null] 
$ns attach-agent $stNode(5) $stRcvr5 
set stRcvr9 [new Agent/Null] 
$ns attach-agent $stNode(9) $stRcvr9 
set stRcvr6 [new Agent/Null] 
$ns attach-agent $stNode(6) $stRcvr6 
 
$ns at 0.0 "$ns set-animation-rate 10ms" ; # Definir taxa inicial da animação 
$ns at 0.0 "$ns trace-annotate \"Node 1 is selected as the Rendezvous point\"" #Nó 1 é quem vai encaminhar as 
mensagens enviadas pelo nó 10 
 
# Anotações e controle de animação na simulação 
 
$ns at 0.1 "$ns set-animation-rate 2ms" 
$ns at 0.1 "$stNode(3) join-group $stRcvr3 $stAddr" 
$ns at 0.1 "$stNode(3) color purple" 
$ns at 0.1 "$ns trace-annotate \"Node 3 sends graft to the RP (1)\"" #Nó 3 envia mensagem para se juntar ao 
grupo multicast 
 
$ns at 0.2 "$stTraffic start" 
$ns at 0.2 "$ns trace-annotate \"Sender starts sending \"" #Nó 10 começa a enviar dados 
$ns at 0.2 "$ns trace-annotate \"Sender forwards the data to the RP (1) \"" #Nó 10 envia os dados para o nó 1 
encaminhar 
 
$ns at 0.4 "$ns set-animation-rate 0.4ms" 
$ns at 0.4 "$stNode(6) join-group $stRcvr6 $stAddr" 
$ns at 0.4 "$stNode(6) color purple" #Nó 6 se junta ao grupo multicast pelo nó 1, o ponto de encontro 
$ns at 0.4 "$ns trace-annotate \"6 Joins: but not through the shortest path but through RP (1)\"" 
$ns at 0.48 "$ns set-animation-rate 2ms" 
 
$ns at 0.5 "$ns set-animation-rate 0.4ms" 
$ns at 0.5 "$stNode(5) join-group $stRcvr5 $stAddr" 
$ns at 0.5 "$stNode(5) color purple" #Nó 5 se junta ao grupo e o nó 2, como não faz parte do grupo mas está 
no caminho do RP ele não envia o pedido de junção ao RP, recebe dados multicast e os encaminha 
$ns at 0.5 "$ns trace-annotate \"5 joins: As node 2 (already receiving multicast data) is on the path to RP (1) 
from 5, graft is not forwarded by 2\"" 
$ns at 0.53 "$ns set-animation-rate 2ms" 
 
$ns at 0.6 "$ns set-animation-rate 0.4ms" 
$ns at 0.6 "$stNode(9) join-group $stRcvr9 $stAddr" 
$ns at 0.6 "$stNode(9) color purple" #Nó 9 se junta e o nó 5, como não faz parte do grupo mas está no 
caminho do RP ele não envia o pedido de junção ao RP, recebe os dados multicast e os encaminha 
$ns at 0.6 "$ns trace-annotate \"9 joins: As node 5 (already receiving multicast data) is on the path to RP (1) 
from 9, graft is not forwarded by 5\"" 
$ns at 0.63 "$ns set-animation-rate 2ms" 
 
 
#$ns at 0.7 "$ns trace-annotate \"Note that there are timeout messages as in Reverse shortest path\"" 
# Annotations and animation control for leave section ! 
 
$ns at 0.8 "$ns set-animation-rate 0.4ms" 
$ns at 0.8 "$stNode(5) leave-group $stRcvr5 $stAddr" 
$ns at 0.8 "$stNode(5) color black" #Nó 5 deixa o grupo, não envia pedido de poda ao RP e continua 
encaminhando dados para nó 9 
$ns at 0.8 "$ns trace-annotate \"5 leaves, but doesn't send prune to RP as node 9 is still receiving data through 
5\"" 
$ns at 0.83 "$ns set-animation-rate 2ms" 
 
$ns at 0.9 "$ns set-animation-rate 0.4ms" 
$ns at 0.9 "$stNode(6) leave-group $stRcvr6 $stAddr" 
$ns at 0.9 "$stNode(6) color black" #Nó 6 sai do grupo multicast e é podado 
$ns at 0.9 "$ns trace-annotate \"Node 6 is pruned from the multicast tree\"" 
$ns at 0.96 "$ns set-animation-rate 2ms" 
 
$ns at 1.0 "$ns set-animation-rate 0.4ms" 
$ns at 1.0 "$stNode(3) leave-group $stRcvr3 $stAddr" 
$ns at 1.0 "$stNode(3) color black" #Nó 3 sai do grupo multicast e é podado 
$ns at 1.0 "$ns trace-annotate \"Node 3 is pruned from the multicast tree\"" 
$ns at 1.03 "$ns set-animation-rate 2ms" 
 
$ns at 1.1 "$ns set-animation-rate 0.4ms" 
$ns at 1.1 "$stNode(9) leave-group $stRcvr9 $stAddr" 
$ns at 1.1 "$stNode(9) color black" #Nó 9 sai do grupo multicast e todos os nós intermediários enviam 
mensagens de poda para sair da árvore multicast 
$ns at 1.1 "$ns trace-annotate \"9 leaves and all the intermediate nodes to RP sends prune as no one is 
interested in the multicast data\"" 
$ns at 1.15 "$ns set-animation-rate 2ms" 
 
$ns at 1.2 "$ns trace-annotate \"Note that sender is still sending data to RP unlike Reverse Shortest path\"" 
 
$ns at 1.25 "finish" 
$ns at 1.22 "$ns trace-annotate \"Sender stops sending !!!\"" 
$ns at 1.22 "$stTraffic stop" #parando as fontes de tráfego aos 1.22s 
 
proc finish {} { #procedimento para finalizar a simulação 
 global ns nsTrace namTrace 
 
 $ns flush-trace 
 
 #close $nsTrace 
 close $namTrace 
 
 exec nam out_pim.nam & #executando o arquivo de saída out.nam 
 
 exit 0 
 
} 
 
$ns run

Outros materiais