Baixe o app para aproveitar ainda mais
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
Compartilhar