A maior rede de estudos do Brasil

Grátis
12 pág.
Teleinformática e Redes 2 - Laboratórios de Simulação – Network Simulator

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