12 pág.

Pré-visualização | Página 1 de 3
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 at