Μελέτη της Απόδοσης του Πρωτοκόλλου TCP

Standard

Δημιουργείστε το παρακάτω δίκτυο με 10 Mbits εύρος για σε όλες τις
συνδέσεις, 10ms καθυστέρηση και DropTail.

4A16CC7BD5DDCF61_295_0

 

Προσθέστε μια πηγή CBR από τον κόμβο Ν2àΝ3 πάνω από UDP.
Προσθέστε δύο FTP πηγές από το Ν1àΝ4 και Ν5àΝ6 πάνω από TCP.
Δικαιολογήστε όλες τις τιμές των παραμέτρων που καθορίσατε μόνοι σας και
τις χρησιμοποιείτε π.χ το μέγεθος των πακέτων, ρυθμό της TCP κίνησης κλπ.
Εξάγετε τις γραφικές παραστάσεις

α) του μέσου ρυθμού απώλειας πακέτων (average packet loss rate) και
β) του μέσου εύρους ζώνης (average bandwidth) και των τριών κινήσεων
δεδομένων σε συνάρτηση με το ρυθμό που χρησιμοποιείται από τη κίνηση
CBR. Δηλαδή στα διάφορα σενάρια που θα «τρέξετε» θα μεταβάλετε το
ρυθμό της CBR κίνησης.

Για τον ορισμό του πρωτοκόλλου TCP (και στις δυο κινήσεις) θα
χρησιμοποιήσετε τις παρακάτω παραμέτρους/εκδόσεις του:
Ν1-Ν4 Ν5-Ν6

Reno Reno
NewReno Reno
Vegas Vegas
Newreno Vegas
SACK Reno
SACK NewReno

 

Μετά διαγράψτε τη μια κίνηση TCP (π.χ τη Ν5àΝ6), εξάγετε ίδιες γραφικές
παραστάσεις με προηγούμενα, και σχολιάστε πώς η Ν1àΝ4 επηρεάζεται σε
σχέση με μια μεταβαλλόμενη κίνηση CBR. Πραγματοποιείστε τα πειράματα
σας με τις εξής εκδόσεις του TCP:
Ν1-Ν4

Reno
NewReno
Vegas
SACK

Οι γραφικές παραστάσεις του μέσου ρυθμού απώλειας πακέτων (average packet loss rate) και των τριών κινήσεων δεδομένων σε συνάρτηση με το ρυθμό που χρησιμοποιείται από τη κίνηση

CBR για τις διάφορες εκδόσεις του πρωτοκόλλου TCP παρουσιάζονται παρακάτω:

Α.) Reno-Reno

4A16CC7BD5DDCF61_295_1

 

Β.) NewRenο– Reno

4A16CC7BD5DDCF61_295_2

 

Γ.) Vegas-Vegas

 

4A16CC7BD5DDCF61_295_3

 

Δ.) Newreno-Vegas

 

4A16CC7BD5DDCF61_295_4

 

Ε.) SACK-Reno

 

4A16CC7BD5DDCF61_295_5

 

Στ.) SACK-NewReno

 

4A16CC7BD5DDCF61_295_6

 

Ζ.) Reno

 

4A16CC7BD5DDCF61_295_7

 

Η.) NewReno

 

4A16CC7BD5DDCF61_295_8

 

Θ.) Vegas

4A16CC7BD5DDCF61_295_9

 

 

 

Ι.) SACK

 

4A16CC7BD5DDCF61_295_10

 

Η συμπεριφορά της έκδοσης Newreno και Reno στο ρυθμό απώλειας πακέτων είναι παρόμοια. Παρατηρούμε ότι η απώλεια πακέτων αυξάνεται εκθετικά. Η έκδοση Vegas συμπεριφέρεται διαφορετικά. Η έκδοση αυτή προσπαθεί να αποφύγει την απώλεια πακέτων και έτσι επιτυγχάνει σχεδόν μηδενική απώλεια πακέτων για μεγαλύτερο ρυθμό της κίνησης CBR. Σε αντίθεση με τις δυο παραπάνω εκδόσεις η έκδοση Vegas χρησιμοποιεί μικρότερο bandwidth χωρίς όμως να αυξάνεται η απώλεια πακέτων. Ακόμα και όταν ο ρυθμός της κίνησης CBR φτάνει τη χωρητικότητα της ζεύξης η έκδοση Vegas πετυχαίνει μικρότερη απώλεια πακέτων καθώς φαίνεται πως η έκδοση αυτή είναι πιο επιλεκτική στο ποτέ θα στείλει τα πακέτα.

 

 

 

Οι γραφικές παραστάσεις του μέσου εύρους ζώνης (average bandwidth) και των τριών κινήσεων δεδομένων σε συνάρτηση με το ρυθμό που χρησιμοποιείται από τη κίνηση

CBR για τις διαφορές εκδόσεις του πρωτοκόλλου TCP παρουσιάζονται παρακάτω:

Α.) Reno-Reno

4A16CC7BD5DDCF61_295_11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Β.) NewReno-Reno

4A16CC7BD5DDCF61_295_12

 

Γ.) Vegas-Vegas

 

4A16CC7BD5DDCF61_295_13

 

 

 

Δ.) Newreno-Vegas

4A16CC7BD5DDCF61_295_14

 

 

 

Ε.) SACK-Reno

 

4A16CC7BD5DDCF61_295_15

 

Στ.) SACK-NewReno

 

4A16CC7BD5DDCF61_295_16

 

Ζ.) Reno

 

4A16CC7BD5DDCF61_295_17

 

Η.) NewReno

4A16CC7BD5DDCF61_295_18

 

 

 

Θ.) Vegas

4A16CC7BD5DDCF61_295_19

 

 

 

Ι.) SACK

4A16CC7BD5DDCF61_295_20

 

 

 

Από τα αποτελέσματα των προσομοιώσεων και τις γραφικές παραστάσεις των αποτελεσμάτων Παρατηρούμε ότι δυο εκδόσεις ιδίου τύπου του πρωτοκόλλου TCP τείνουν να συμπεριφέροντε σχεδόν παρόμοια και αρκετά καλά. Αν συγκρίνουμε δυο εκδόσεις του πρωτοκόλλου TCP διαφορετικού τύπου για παράδειγμα της έκδοσης Reno και Newreno(γραφική παράσταση B) Παρατηρούμε ότι για χαμηλό ρυθμό της κίνησης CBR οι δυο εκδόσεις συμπεριφέροντε αρκετά καλά ενώ καθώς αυξάνουμε το ρυθμό της κίνησης CBR και ο ρυθμός απώλειας πακέτων αυξάνεται η έκδοση Newreno χρησιμοποιεί περισσότερο εύρος ζώνης(bandwidth) από τη έκδοση Reno. Αν συγκρίνουμε τις εκδόσεις Newreno και Vegas (γραφική παράσταση Δ) Παρατηρούμε ότι αρχικά η έκδοση Newreno χρησιμοποιεί περισσότερο bandwidth από την έκδοση Vegas. Στη συνεχεία καθώς αυξάνεται ο ρυθμός της κίνησης CBR και αρχίζουν να χάνονται πακέτα Παρατηρούμε ότι η έκδοση Vegas συμπεριφέρεται καλύτερα από την έκδοση Newreno. Γενικά Παρατηρούμε ότι η έκδοση Vegas προσπαθεί να εξισορροπήσει τη κατάσταση προσπαθώντας να επιτύχει όσο το δυνατόν χαμηλότερη απώλεια των πακέτων.

Η συμπεριφορά της κάθε έκδοσης TCP παρουσιάζεται καλυτέρα αν προσομοιώσουμε τη κάθε έκδοση TCP ξεχωριστά. Από τη γραφική παράσταση Η Παρατηρούμε ότι έκδοση Newreno χρησιμοποιεί υψηλότερο bandwidth από τη έκδοση Reno κάθολη τη διάρκεια της προσομοίωσης. Όταν ο ρυθμός της CBR κίνησης φτάσει τη χωρητικότητα της ζεύξης Παρατηρούμε ότι και η έκδοση Newreno και η Reno πετυχαίνουν σχεδόν μηδενικό bandwidth. Από τη γραφική παράσταση Θ της έκδοσης Vegas Παρατηρούμε ότι όταν αρχίσουν να χάνονται πακέτα η μετάπτωση στο bandwidth γίνεται πιο εξομαλυμένα καθώς η έκδοση Vegas προσπαθεί να επιτύχει χαμηλότερη απώλεια πακέτων. Επίσης όταν ο ρυθμός της CBR κίνησης έχει φτάσει τη χωρητικότητα του καναλιού η έκδοση Vegas προσπαθεί να χρησιμοποιήσει ένα τμήμα αυτού του ρυθμού για να στείλει κάποια πακέτα.

Σε όλες τις παραπάνω γραφικές παραστάσεις Παρατηρούμε ότι αρχικά η κάθε έκδοση του TCP πρωτοκόλλου χρησιμοποιεί το ίδιο bandwidth σταθερά για ένα ορισμένο χρονικό διάστημα. Αυτό οφείλεται στο ότι το πρωτόκολλο TCP χρειάζεται κάποιο χρονικό διάστημα για να φτάσει στη μέγιστη χρησιμοποίηση.

Ο κώδικας της παραπάνω προσομοίωσης παρουσιάζεται παρακάτω:

 

 

======================ΑΡΧΕΙΟ All_Askisi6_1.tcl ====================

 

set i 1

exec echo CBR_Loss CBR_Avg_Bandwidth TCP0_Loss TCP0_Avg_Bandwidth TCP1_Loss TCP1_Avg_Bandwidth > Askisi6_1_RenoReno.data

while {$i<=11} {

exec ns askisi6_1.tcl ${i}Mb Reno Reno
set i [expr {$i + 0.5}]

}

set i 1

exec echo CBR_Loss CBR_Avg_Bandwidth TCP0_Loss TCP0_Avg_Bandwidth TCP1_Loss TCP1_Avg_Bandwidth > Askisi6_1_NewrenoReno.data

while {$i<=11} {

exec ns askisi6_1.tcl ${i}Mb Newreno Reno
set i [expr {$i + 0.5}]

}

set i 1

exec echo CBR_Loss CBR_Avg_Bandwidth TCP0_Loss TCP0_Avg_Bandwidth TCP1_Loss TCP1_Avg_Bandwidth > Askisi6_1_VegasVegas.data

while {$i<=11} {

exec ns askisi6_1.tcl ${i}Mb Vegas Vegas
set i [expr {$i + 0.5}]

}

set i 1

exec echo CBR_Loss CBR_Avg_Bandwidth TCP0_Loss TCP0_Avg_Bandwidth TCP1_Loss TCP1_Avg_Bandwidth > Askisi6_1_NewrenoVegas.data

while {$i<=11} {

exec ns askisi6_1.tcl ${i}Mb Newreno Vegas
set i [expr {$i + 0.5}]

}

set i 1

exec echo CBR_Loss CBR_Avg_Bandwidth TCP0_Loss TCP0_Avg_Bandwidth TCP1_Loss TCP1_Avg_Bandwidth > Askisi6_1_Sack1Reno.data

while {$i<=11} {

exec ns askisi6_1.tcl ${i}Mb Sack1 Reno
set i [expr {$i + 0.5}]

}

set i 1

exec echo CBR_Loss CBR_Avg_Bandwidth TCP0_Loss TCP0_Avg_Bandwidth TCP1_Loss TCP1_Avg_Bandwidth > Askisi6_1_Sack1Newreno.data

while {$i<=11} {

exec ns askisi6_1.tcl ${i}Mb Sack1 Newreno
set i [expr {$i + 0.5}]

}

set i 1

exec echo CBR_Loss CBR_Avg_Bandwidth TCP0_Loss TCP0_Avg_Bandwidth > Askisi6_1_Reno.data

while {$i<=11} {

exec ns askisi6_1.tcl ${i}Mb Reno
set i [expr {$i + 0.5}]

}

set i 1

exec echo CBR_Loss CBR_Avg_Bandwidth TCP0_Loss TCP0_Avg_Bandwidth > Askisi6_1_Newreno.data

while {$i<=11} {

exec ns askisi6_1.tcl ${i}Mb Newreno
set i [expr {$i + 0.5}]

}

set i 1

exec echo CBR_Loss CBR_Avg_Bandwidth TCP0_Loss TCP0_Avg_Bandwidth > Askisi6_1_Vegas.data

while {$i<=11} {

exec ns askisi6_1.tcl ${i}Mb Vegas
set i [expr {$i + 0.5}]

}

set i 1

exec echo CBR_Loss CBR_Avg_Bandwidth TCP0_Loss TCP0_Avg_Bandwidth > Askisi6_1_Sack1.data

while {$i<=11} {

exec ns askisi6_1.tcl ${i}Mb Sack1
set i [expr {$i + 0.5}]

}

 

======================ΑΡΧΕΙΟ Askisi6_1.tcl ====================

 

#Elegxos Grammis Entolon Gia tis Parametrous

if { $argc < 2 || $argc > 3 } {

puts “Usage : ns Askisi6_1.tcl cbr_rate agent0 [agent1]”
exit -1

}

#Anathesi ton Parametron se Metavlites

set cbr_rate [lindex $argv 0]
set agent0 [lindex $argv 1]

if { $argc == 3} {
set agent1 [lindex $argv 2 ]
} else {
set agent1 “”
}

#Configure ns
set ns [ new Simulator ]

#Turn On Tracing
set nf [ open askisi6.out w]
$ns trace-all $nf
set nf1 [open askisi6.nam w]
$ns namtrace-all $nf1

#Create Nodes
set n1 [ $ns node ]
set n2 [ $ns node ]
set n3 [ $ns node ]
set n4 [ $ns node ]
set n5 [ $ns node ]
set n6 [ $ns node ]

#Create Links

$ns duplex-link $n1 $n2 10Mb 10ms DropTail
$ns duplex-link $n5 $n2 10Mb 10ms DropTail
$ns duplex-link $n2 $n3 10Mb 10ms DropTail
$ns duplex-link $n3 $n4 10Mb 10ms DropTail
$ns duplex-link $n3 $n6 10Mb 10ms DropTail

# CBR Source

set cbr_source [new Agent/UDP]
$ns attach-agent $n2 $cbr_source
set cbr_traffic [new Application/Traffic/CBR]
$cbr_traffic set packetSize_ 100
$cbr_traffic set rate_ $cbr_rate
$cbr_traffic attach-agent $cbr_source
set cbr_sink [new Agent/Null]
$ns attach-agent $n3 $cbr_sink

#TCP Source 1
set tcp0_source [new Agent/TCP/$agent0]
$tcp0_source set fid_ 0
$ns attach-agent $n1 $tcp0_source
set tcp0_sink [new Agent/TCPSink]
$ns attach-agent $n4 $tcp0_sink
set tcp0_traffic [new Application/FTP]
$tcp0_traffic attach-agent $tcp0_source

#TCP Source 2 Ean iparxei
if {$argc == 3} {
set tcp1_source [new Agent/TCP/$agent1]
$tcp1_source set fid_ 1
$ns attach-agent $n5 $tcp1_source
set tcp1_sink [new Agent/TCPSink]
$ns attach-agent $n6 $tcp1_sink
set tcp1_traffic [new Application/FTP]
$tcp1_traffic attach-agent $tcp1_source
$ns connect $tcp1_source $tcp1_sink

}

$ns connect $cbr_source $cbr_sink
$ns connect $tcp0_source $tcp0_sink

# Start CBR and TCP #1 Traffic
$ns at 0.0 “$cbr_traffic start”
$ns at 0.0 “$tcp0_traffic start”

#Start TCP #2 Traffic Ean iparxei
if {$argc == 3} {
$ns at 0.0 “$tcp1_traffic start”
}

#Stop CBR and TCP #1 Traffic
$ns at 15.0 “$cbr_traffic stop”
$ns at 15.0 “$tcp0_traffic stop”

#Stop TCP #2 Traffic Ean iparxei
if {$argc == 3} {
$ns at 15.0 “$tcp1_traffic stop ”
}

#Close the file and run the awk scripts
proc finish {} {

global ns nf agent0 agent1 argc nf1
$ns flush-trace
close $nf
close $nf1

if {$argc == 3} {

exec awk -f Askisi6_Stats_2.awk askisi6.out >> Askisi6_1_${agent0}${agent1}.data

} elseif {$argc == 2} {

exec awk -f Askisi6_Stats_1.awk askisi6.out >> Askisi6_1_${agent0}.data

}

#puts “Running nam…”
#exec nam askisi6.nam &
exit 0
}

$ns at 15.0 “finish”

#Print CBR packet size and interval
puts “CBR packet size = [$cbr_traffic set packetSize_]”
puts “CBR interval = [$cbr_traffic set interval_]”

$ns run

======================ΑΡΧΕΙΟ Askisi6_Stats_1.awk ====================

 

/r.*tcp/ { if ( $8 == 0 && $4 == 3) { bytes_received0 += $6 } }
/\+.*tcp/ { if ( $8 == 0 && $3 == 0) { bytes_sent0 += $6 } }
/\-.*cbr/ {cbr_received += $6 }
/\+.*cbr/ {cbr_sent += $6 }

END {

printf(“%f\t%f\t%f\t%f\n” ,( ( cbr_sent – cbr_received ) / cbr_sent ) * 100 ,(cbr_sent * 8.0 / 15.0 ) / 1000000.0 ,( ( bytes_sent0 – bytes_received0 ) / bytes_sent0 ) * 100 ,( bytes_sent0 * 8.0 / 15.0 ) / 1000000.0 ) ;

}

 

 

======================ΑΡΧΕΙΟ Askisi6_Stats_2.awk ====================

 

/r.*tcp/ { if ( $8 == 0 && $4 == 3) { bytes_received0 += $6 } else if ( $8 == 1 && $4 == 5) { bytes_received1 += $6 } }
/\+.*tcp/ { if ( $8 == 0 && $3 == 0) { bytes_sent0 += $6 } else if ($8 == 1 && $3 == 4) { bytes_sent1 += $6 } }
/\-.*cbr/ {cbr_received += $6 }
/\+.*cbr/ {cbr_sent += $6 }

END {

printf(“%f\t%f\t%f\t%f\t%f\t%f\n” ,( ( cbr_sent – cbr_received ) / cbr_sent ) * 100 ,(cbr_sent * 8.0 / 15.0 ) / 1000000.0 ,( ( bytes_sent0 – bytes_received0 ) / bytes_sent0 ) * 100 ,( bytes_sent0 * 8.0 / 15.0 ) / 1000000.0 ,( ( bytes_sent1 – bytes_received1 ) / bytes_sent1) * 100 ,(bytes_sent1 * 8.0 / 15.0) / 1000000.0) ;

}

2. Χρησιμοποιείστε την προηγούμενη τοπολογία και αντικαταστήστε τη μια
FTP/TCP κίνηση με CBR/UDP. Αρχικά θα εκκινήστε την TCP κίνηση. Όταν
σταθεροποιηθεί η TCP κίνηση θα εκκινήστε τη CBR και θα σχολιάστε πώς
αυτές οι κινήσεις επηρεάζονται με τους παρακάτω αλγόριθμούς ουράς:
DropTail και RED. Για την κίνηση TCP θα χρησιμοποιείστε την έκδοση
Reno και SACK. Συγκεκριμένα πραγματοποιείστε τα παρακάτω:

1. Δημιουργείστε ένα σενάριο όπου θα χρησιμοποιήστε τους δυο
αλγόριθμους ουράς (DropTail και RED). Το σενάριο περιέχει μια TCP
κίνηση (Reno και SACK) που στέλνει πακέτα των 1000 bytes και μια UDP
που στέλνει πακέτα των 500 bytes με ρυθμό 1 Mbps. Ο σύνδεσμος
N2-N3 έχει εύρος 1.5 Mbps. Εξάγετε τη γραφική παράσταση

α) του throughput του όλου δικτύου

Σχολιάστε πώς επηρεάζονται τα αποτελέσματα και γιατί.
Σημείωση το σενάριο θα έχει 4 output αρχεία όπως προκύπτουν από το
συνδυασμό των (DropTail και RED)χ(Reno και SACK) = 2χ2. Η εικόνα θα
είναι 1 με 4 γραφικές παραστάσεις.

Οι γραφικές παραστάσεις του throughput όλου του δικτύου όπως προκύπτουν από το
συνδυασμό των (DropTail και RED)χ(Reno και SACK) παρουσιάζονται παρακάτω.

4A16CC7BD5DDCF61_295_21

 

Από τη παραπάνω γραφική παράσταση συμπεραίνουμε ότι με τον αλγόριθμο ουράς RED το ολικό throughput μεταβάλλεται πιο πολύ. Αυτό συμβαίνει γιατί είναι πιθανό με τον αλγόριθμο RED τα πακέτα χάνονται πριν συμβεί συμφόρηση στο δίκτυο. Οπότε συμπεραίνουμε ότι για μια σύνδεση με σταθερή συμφόρηση θα χάνονται πολλά πακέτα νωρίτερα Οπότε το ολικό throughput θα είναι χαμηλότερο. Οπότε συγκριτικά με τους αλγορίθμους ουράς Droptail και RED Παρατηρούμε ότι με τον RED έχουμε μικρότερο ολικό throughput. Μεταξύ των εκδόσεων του TCP πρωτοκόλλου Παρατηρούμε ότι η έκδοση SACK συμπεριφέρεται καλυτέρα στη συμφόρηση του δικτυού επειδή το throughput μεταβάλλεται συνεχώς και δε πέφτει ποτέ κάτω από ένα ορισμένο επίπεδο έχει την ικανότητα να επανέρχεται από την απώλεια πακέτων.

 

Ο κώδικας της παραπάνω προσομοίωσης παρουσιάζεται παρακάτω:

 

 

======================ΑΡΧΕΙΟ All_Askisi6_2.tcl ====================

exec ns askisi6_2.tcl Reno DropTail
exec ns askisi6_2.tcl Reno RED
exec ns askisi6_2.tcl Sack1 DropTail
exec ns askisi6_2.tcl Sack1 RED

======================ΑΡΧΕΙΟ askisi6_2.tcl ====================

 

#Elegxos Grammis Entolon Gia tis Parametrous

if { $argc < 2 || $argc > 2 } {

puts ” Command Line Usage : ns askisi6_2.tcl agent queuing ”
exit -1

}

#Anathesi ton Parametron se Metavlites

set agent [lindex $argv 0]
set queuing [lindex $argv 1]

#Configure ns
set ns [ new Simulator ]

#Turn On Tracing
set nf [ open askisi6_2.out w]
$ns trace-all $nf
set nf1 [open askisi6_2.nam w]
$ns namtrace-all $nf1

#Create Nodes
set n1 [ $ns node ]
set n2 [ $ns node ]
set n3 [ $ns node ]
set n4 [ $ns node ]
set n5 [ $ns node ]
set n6 [ $ns node ]

#Create Links
$ns duplex-link $n1 $n2 10Mb 10ms DropTail
$ns duplex-link $n5 $n2 10Mb 10ms DropTail
$ns duplex-link $n2 $n3 1.5Mb 10ms $queuing
$ns duplex-link $n3 $n4 10Mb 10ms DropTail
$ns duplex-link $n3 $n6 10Mb 10ms DropTail

# CBR source
set cbr_source [ new Agent/UDP]
$ns attach-agent $n5 $cbr_source
set cbr_traffic [ new Application/Traffic/CBR]
$cbr_traffic set packetSize 500
$cbr_traffic set rate 1.0Mbs
$cbr_traffic attach-agent $cbr_source
set cbr_sink [new Agent/Null]
$ns attach-agent $n6 $cbr_sink

# TCP source
set tcp0_source [new Agent/TCP/$agent ]
$tcp0_source set fid_ 0
$ns attach-agent $n1 $tcp0_source

if { $agent == “Sack1″ } {
set tcp0_sink [ new Agent/TCPSink/Sack1 ]

} else {

set tcp0_sink [ new Agent/TCPSink ]

}

$ns attach-agent $n4 $tcp0_sink
set tcp0_traffic [ new Application/FTP]
$tcp0_traffic set packetSize_ 1000
$tcp0_traffic attach-agent $tcp0_source
$ns connect $cbr_source $cbr_sink
$ns connect $tcp0_source $tcp0_sink

# Start CBR and TCP Traffic
$ns at 0.0 ” $tcp0_traffic start ”
$ns at 2.0 ” $cbr_traffic start ”

#Stop CBR and TCP Traffic
$ns at 15.0 ” $cbr_traffic stop ”
$ns at 15.0 ” $tcp0_traffic stop ”

#Close the file and run the awk scripts
proc finish {} {

global ns nf agent queuing nf1
$ns flush-trace
close $nf
close $nf1

exec echo Time CBR_Throughput TCP_Throughput CBR_Loss TCP_Loss Total_Throughput > askisi6_2_${agent}${queuing}.data

exec awk -f askisi6_2_Stats.awk askisi6_2.out >> askisi6_2_${agent}${queuing}.data

#puts “Running nam…”
#exec nam askisi6_2.nam &
exit 0

}

$ns at 15.0 ” finish ”
$ns run

 

======================ΑΡΧΕΙΟ askisi6_2_Stats.awk ====================

 

 

function resetcounters()

{

cbr_sent = 0 ;
cbr_received = 0 ;
bytes_received = 0 ;
bytes_sent = 0 ;

}

function printline()

{

cbr_loss = ( cbr_sent > 0) ? ( ( ( cbrsent – cbr_received ) / cbr_sent ) * 100.0 ) : (0) ;
bytes_loss = ( bytes_sent > 0) ? ( ( ( bytes_sent – bytes_received ) / bytes_sent ) * 100.0 ) : (0) ;
cbr_throughput = ( cbr_received * 8.0 / time_incr) / 1000.0 ;
bytes_throughput = ( bytes_received * 8.0 / time_incr ) / 1000.0 ;
printf (“%f\t%f\t%f\t%f\t%f\t%f\n” ,next_time ,cbr_throughput ,bytes_throughput ,cbr_loss ,bytes_loss,cbr_throughput + bytes_throughput ) ;

resetcounters( ) ;
next_time = time_incr + next_time

}

BEGIN { time_incr = 0.25 ;
max_time = 15.0 ;
resetcounters( ) ;
next_time = time_incr ;

}

/r.*tcp/ {
if($2 >= next_time)
{
printline();
}

if($4 == 3)
{
bytes_received += $6
}

}

/r.*cbr/ {
if ( $2 >= next_time )
{
printline();
}

if ( $4 == 5)
{
cbr_received += $6
}

}

/\+.*tcp/ {
if ( $2 >= next_time )
{
printline();
}

if ( $3 == 0)
{
bytes_sent += $6;
}

}

/\+.*cbr/ {
if ( $2 >= next_time )
{
printline();
}

if ( $3 == 4)

{

cbr_sent += $6 ;

}

}

END {

if ( next_time <= max_time ) {
printline() ;
}

}

 

 

 

 

3. Δημιουργείστε ένα σενάριο όπου θα έχετε τρεις CBR/UDP κινήσεις που
μοιράζονται ένα κανάλι με εύρος 1.5 Mbps. Η πρώτη κίνηση CBR/UDP
στέλνει πακέτα των 500 byte με ρυθμό 0.6 Mbps και ξεκινά στα 0.2 sec, η
δεύτερη στέλνει πακέτα των 500 byte με ρυθμό 1 Mbps και ξεκινά στα 0.1
sec, η τρίτη στέλνει πακέτα των 1000 byte με ρυθμό 1 Mbps και ξεκινά
στα 0 sec. Εξάγετε και σχολιάστε τις γραφικές παραστάσεις

α) του throughput και των τριών κινήσεων.
Μεταβάλετε τους ρυθμούς παραγωγής πακέτων και εξάγετε τη

β) γραφική παράσταση του μέσου χρόνου καθυστέρησης των πακέτων
(end-to-end delay).

Μεταβάλετε τον αλγόριθμο ουράς από Droptail σε RED και δείτε πώς
επηρεάζεται η

γ) γραφική παράσταση του μέσου χρόνου καθυστέρησης των πακέτων.

3. Οι δυο αλγόριθμοι DropTail και RED είναι δίκαιοι προς όλες τις κινήσεις;
Πώς η συμπεριφέρεται η TCP κίνηση στη δημιουργία της CBR κίνησης;
Πώς κρίνεται τον αλγόριθμο RED σε συνδυασμό με το TCP/SACK;

Οι γραφικές παραστάσεις του throughput και των τριών κινήσεων και του μέσου χρόνου καθυστέρησης των πακέτων όπως προκύπτουν από το συνδυασμό των DropTail και RED παρουσιάζονται παρακάτω.

4A16CC7BD5DDCF61_295_22

 

4A16CC7BD5DDCF61_295_23

 

4A16CC7BD5DDCF61_295_24

4A16CC7BD5DDCF61_295_25

Όταν έχουμε πολλές κινήσεις UDP το ολικό Throughput είναι πάντοτε κοντά στο μέγιστο της ζεύξης. Όταν χρησιμοποιούμε τον αλγόριθμο ουράς Droptail Παρατηρούμε πως το σχήμα δεν είναι δίκαιο. Οι ροές αυξομειώνονται σε τυχαίες χρονικές στιγμές, γεγονός που οφείλεται στο ποια ροή θα είναι η ατυχή που θα έχει πακέτα στη ζεύξη τη χρονική στιγμή που θα συμβεί η συμφόρηση και θα αρχίσει η απώλεια πακέτων. Όταν χρησιμοποιούμε τον αλγόριθμο ουράς RED το σχήμα γίνεται πιο δίκαιο. Φαίνεται πως ο μηχανισμός τυχαίας απώλειας πακέτων επιτυγχάνει ένα ίδιο μέσο ορό bandwidth για κάθε ροή.

Όσο αφορά το μέσο χρόνο καθυστέρησης των πακέτων όταν χρησιμοποιούμε τον αλγόριθμο Droptail η καθυστέρηση γρήγορα αυξάνεται στη μέση τιμή και μεταβάλλεται ελάχιστα γύρω από αυτή τη τιμή άθολη τη διάρκεια της προσομοίωσης. Αυτό συμβαίνει γιατί ο αλγόριθμος αυτός έχει ένα κατώφλι για το μήκος της ουράς και τα πακέτα αρχίζουν να χάνονται όταν το κατώφλι αυτό ξεπεραστεί. Με τον αλγόριθμο RED η διαχείριση της ουράς γίνεται με έναν εξυπνότερο τρόπο. Η διαχείριση της ουράς γίνεται συμφωνά με το μέγεθος της. Έτσι με το μικρότερο μέγεθος της ουράς επιτυγχάνεται καλύτερη καθυστέρηση για όλες τις κινήσεις UDP.

Ο κώδικας της παραπάνω προσομοίωσης παρουσιάζεται παρακάτω:

 

 

======================ΑΡΧΕΙΟ All_Askisi6_3.tcl ====================

exec ns askisi6_3.tcl DropTail
exec ns askisi6_3.tcl RED

======================ΑΡΧΕΙΟ askisi6_3.tcl ====================

#Elegxos Grammis Entolon Gia tis Parametrous

if { $argc < 1 || $argc > 2 } {
puts ” Command Line Usage : askisi6_3.tcl queuing ”
exit -1

}

#Anathesi ton Parametron se Metavlites
set queuing [lindex $argv 0]

#Configure ns
set ns [ new Simulator ]

#Turn On Tracing
set nf [ open askisi6_3.out w]
$ns trace-all $nf
set nf1 [open askisi6_3.nam w]
$ns namtrace-all $nf1

#Create Nodes
set n1 [ $ns node ]
set n2 [ $ns node ]

#Create Links

$ns duplex-link $n1 $n2 1.5Mbp 10ms $queuing

#Create an array of Packet Size
set packetsizes(0) 1000
set packetsizes(1) 500
set packetsizes(2) 500

#Create an array of Rates
set rates(0) 1Mpbs
set rates(1) 1Mbps
set rates(2) 0.6Mbps

#Create three CBR traffic and sources
for { set i 0} { $i < 3} { incr i } {

set cbr_source($i) [ new Agent/UDP]
$cbr_source($i) set fid_ $i
$ns attach-agent $n1 $cbr_source($i)
set cbr_traffic($i) [new Application/Traffic/CBR]
$cbr_traffic($i) set packetSize_ $packetsizes($i)
$cbr_traffic($i) set rate_ $rates($i)
$cbr_traffic($i) attach-agent $cbr_source($i)
set cbr_sink($i) [ new Agent/Null ]
$ns attach-agent $n2 $cbr_sink($i)
$ns connect $cbr_source($i) $cbr_sink($i)

}

# Start CBR Traffic
$ns at 0.0 ” $cbr_traffic(0) start ”
$ns at 0.1 ” $cbr_traffic(1) start ”
$ns at 0.2 ” $cbr_traffic(2) start ”

# Stop CBR Traffic
$ns at 5.0 ” $cbr_traffic(0) stop ”
$ns at 5.0 ” $cbr_traffic(1) stop ”
$ns at 5.0 ” $cbr_traffic(2) stop ”

#Close the file and run the awk scripts
proc finish {} {
global ns nf queuing nf1
$ns flush-trace
close $nf
close $nf1

exec echo Time UDP1_Throughput UDP2_Throughput UDP3_Throughput Total_Throughput UDP1_Latency UDP2_Latency UDP3_Latency > askisi6_3_${queuing}.data

exec awk -f askisi6_3_Stats.awk askisi6_3.out >> askisi6_3_${queuing}.data
#puts “Running nam…”
#exec nam askisi6_3.nam &

exit 0

}

$ns at 5.0 “finish ”
$ns run

======================ΑΡΧΕΙΟ askisi6_3_Stats.awk ====================

function resetcounters()
{
bytes_s[0] = 0 ;
bytes_s[1] = 0 ;
bytes_s[2] = 0 ;
bytes_r[0] = 0 ;
bytes_r[1] = 0 ;
bytes_r[2] = 0 ;
times_s[0] = 0 ;
times_s[1] = 0 ;
times_s[2] = 0 ;
times_r[0] = 0 ;
times_r[1] = 0 ;
times_r[2] = 0 ;
pack_r[0] = 0 ;
pack_r[1] = 0 ;
pack_r[2] = 0 ;

}

function printline()

{
for ( i =0; i <3; i++)

{
throughput[i] = ( bytes_r[i] * 8.0 / time_incr) / 1000.0 ;
if ( pack_r[i] != 0) {
latency[i] = 1000 * ( times_r[i] ) / pack_r[i] ;
} else {
latency[i] = 0 ;
}
}

printf (“%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n” ,next_time ,throughput[0] ,throughput[1] ,throughput[2] ,throughput[0] + throughput[1] + throughput[2] ,latency[0] ,latency[1] ,latency[2] ) ;

resetcounters() ;
next_time = time_incr + next_time

}

BEGIN { time_incr = 0.1 ;
max_time = 5.0 ;
resetcounters( ) ;
next_time = time_incr ;

}

/r.*cbr/ {
if ( $2 >= next_time )
{
printline();
}

if ( $4 == 1) {
bytes_r[$8] +=$6 ;
times_r[$8] += $2 – times_s[$12] ;
pack_r[$8]++;
}

}

/\+.*cbr/ { if ( $2 >= next_time ) { printline(); }

if ( $3 == 0) { bytes_s[$8] += $6 ; times_s[$12] = $2 ; pack_s[$8]++ ; }

}

END {

if ( next_time <= max_time ) { printline();}

}

yeezy boost 350 ua yeezytrainer yeezy boost 350 ua yeezytrainer yeezytrainer yeezy boost 350 ua yeezy boost 350 ua yeezy shoes yeezy shoes yeezy boost online

yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes