You are on page 1of 32

UNIVERZITET U SARAJEVU ELEKTROTEHNIKI FAKULTET ODSJEK ZA TELEKOMUNIKACIJE

XCP I IZBJEGAVANJE ZAGUENJA

Praktini dio seminarskog rada iz predmeta Kvaliteta usluge u TK mreama

Elbisa olak, Meliha Duli & Erma Perenda

Sarajevo, 2012.

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

SAETAK
Praktini dio rada realizovan je pomou ns-2 mrenog simulatora, koji predstavlja de facto standard za ispitivanje ponaanja protokola TCP/IP steka, AQM tehnika, viestrukog usmjeravanja (engl. multicast), beinih mrea, web keiranja itd. Ns-2 poseduje vie implementiranih protokola od bilo kog drugog simulatora. Jedan od tih implementiranih protokola je i XCP, kao jedna od idelanih kontrola zaguenja za mree s visokom vrijednou produkta bandwith-delay. XCP protokol je zasnovan na explicit-feedback mehanizmu. Izvorni ns kod za XCP je napisala Dina Katabi. Ovisno o verziji ns-2 taj kod je manje-vie modificiran. Dinin izvorni kod se moe pogledati na web stranici http://www.ana.lcs.mit.edu/dina/XCP . U prvom dijelu rada detaljnije je objanjena sama implementacija XCP unutar ns-2 tj. dati su kratki osvrti na pojedine klase u skladu s ve objanjenim principom rada XCP protokola u teoretskom dijelu seminarskog rada. U drugom dijelu rada izvrena je analiza performansi XCP protokola u odnosu na TCP/Reno protokol. Takoer, ispitan je utjecaj poveanja vrijednosti produkta bandwithdelay na performanse XCP i TCP protokola.

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

SADRAJ
SAETAK .............................................................................................................................................2 1. Implementacija XCP protokola u ns-2 .........................................................................................4 1.1. 1.2. 1.3. 2. Krajnje take kod XCP protokola ..........................................................................................4 XCP ruteri ............................................................................................................................4 XCP red................................................................................................................................5

Simulacija ...................................................................................................................................6 2.1. 2.2. 2.3. Opis modela ........................................................................................................................6 Opis scenarija ......................................................................................................................6 Obrada rezultata simulacije .................................................................................................9 Indeks pravinosti ........................................................................................................9 Procenat izgubljenih paketa ....................................................................................... 11 Iskoritenje uskog grla................................................................................................ 11 Kanjenje paketa........................................................................................................ 12

2.3.1. 2.3.2. 2.3.3. 2.3.4. 3.

ZAKLJUAK ...............................................................................................................................15

AKRONIMI ........................................................................................................................................16 LITERATURA .....................................................................................................................................17 Prilog_1: Tcl skripta TCP ................................................................................................................18 Prilog_2: Tcl skripta XCP ................................................................................................................21 Prilog_3: Awk skripte ......................................................................................................................29

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

1. Implementacija XCP protokola u ns-2


U ns-2 mrenom simulatoru implementacija XCP protokola se moe nai u ~ns/xcp direktoriju. Za ispravan rad protokola neophodno je implementirati krajnje take (poiljaoc i primaoc) i intermedijalne ureaje, koji su najee ruteri a mogu biti ponekad i mreni ureaji drugog sloja (switch-evi). Dio XCP koda koji implementira rad krajnih taaka nalazi se unutar klase xcp-endsys.cc,h a kod koji opisuje rad rutera nalazi se unutar klasa xcp.cc,h i xcpq.cc,h.

1.1.

Krajnje take kod XCP protokola

Krajnje take u ns-2 predstavljaju TCP agente za predaju i prijem paketa koristei XCP kao kontrolni mehanizam izbjegavanja zaguenja. Na osnovu ovoga, moe se zakljuiti da je u ns-2 XCP implementrian kao TCP solucija, a ne kao zaseban protokol izmeu IP i TCP sloja. Meutim, TCP agenti za slanje i prijem vre sve funkcije XCP poiljaoca i XCP primaoca koje su opisane u teoretskom dijelu seminarskog rada. XCP zaglavlje zaguenja je implementirano kao struktura pod nazivom hdr_xcp u ns-2, a definira se na sljedei nain:
double x_; // idealized inter-packet time double rtt_; enum { XCP_DISABLED = 0, XCP_ENABLED, XCP_ACK, } xcp_enabled_; // to indicate that the flow is XCP enabled int xcpId_; // Sender's ID (debugging only) double cwnd_; // The current window (debugging only) double reverse_feedback_; // --- Initialized by source and Updated by Router double delta_throughput_; unsigned int controlling_hop_;// router ID (debugging only)

U sluaju gubitka paketa u mrei, TCP Van Jacobson-ova kontrola zaguenja bi najvjerojatnije nadjaala XCP. Meutim, u ns-2 to se ne deava. Primanje duplih ACK-ova ukazuje gubitak paketa, te se veliina prozora zaguenja cwnd smanjuje na polovinu svoje vrijednosti i Fast Retransmit i Fast Recovery algoritmi dolaze u igru. Meutim XCP ruteri i dalje alju povratne informacije izvoru na temelju kojih izvor pokuava uskladiti veliinu prozora zaguenja cwnd. Dakle, ini se da je to mjeavina VJCC i XCP kontrole zaguenja. No, vrlo rijetko se deava ova situacija kod XCP. Razumijevanje ispravanog ponaanja XCP protokola u sluaju gubitka paketa se trenutno istrauje, te e se u skoroj budunosti i implementirati.

1.2.

XCP ruteri

XCP ruteri se sastoje od wrapper klase koja sadri virtuelne redove za XCP, TCP i druge saobraajne tokove. U trenutnoj implementaciji XCP koristi DropTail mehanizam, dok TCP i drugi saobraajni tokovi koriste RED mehanizam. Ovi redovi ekanja se nalaze unutar wrapper klase

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

XCPWrapQ koja osigurava potrebne interfejse za XCP ruter. XCP/TCP/Drugi redovi se posluuju na WRR (Weighted Round-Robin) nain. XCP i TCP saobraajni tokovi imaju teinu od 0.5, dok ostali saobraajni tokovi imaju teinu 0.0 jer jo uvijek se ne koriste pri simulacijama. OTCL klasa Queue/XCP ima zastavicu pod nazivom tcp_xcp_on_ koja je postavljena na podrazumijevanu vrijednost 0. Moe biti postavljena na 1, ako se u simulacijama koriste i TCP i XCP tokovi. Wrapper klase je implementirana u xcp.cc, h.

1.3.

XCP red

XCP red je odgovoran za slanje povratnih informacija koje koristi XCP poiljaoc za kontrolu svoje brzine slanja paketa. XCP koristi dva kontrolna algoritma, kontroler efikasnosti i kontroler pravednosti, koji izvravaju odreene kalkulacije po isteku kontrolnog intervala. U ns-2 kontrolni interval se bazira na prosjenom RTT svih XCP tokova koji prolaze kroz ruter. Vrijednost RTT intervala se moe postaviti na neku proizvoljnu vrijednost pomou tcl naredbe: $queue queue-sample-everyrtt $rtt_value Na ovaj nain podeavamo RTT vrijednost koja je kljuna za raunanje gubitka paketa i veliine reda kod XCP reda. Implementacija XCP reda se nalazi unutar klase xcpq.{cc,h}.

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

2. Simulacija
Cilj simulacije jeste ispitivanje performansi XCP kontrole zaguenja u odnosu na end-to-end TCP kontrolu zaguenja. Skladno s time simulirana su dva tipa scenarija. U jednom je prisutan samo TCP kontrola zaguenja i to TCP/Reno, dok je u drugom scenariju dodana i XCP kontrola zaguenja. Poreenje XCP i TCP protokola je izvreno na osnovu mrenih parametara poput indeksa pravinosti, procenta izgubljenih paketa, iskoritenja uskog grla i kanjenje paketa. Takoer, ispitan je utjecaj kapaciteta uskog grla i kanjenja na uskom grlu na navedene parametre.

2.1.

Opis modela

Osnova svakog ispitivanja je izbor topologije. Na sl. 2.1 je prikazana topologija koritena za simulaciju. Mrea se sastoji od jednog uskog grla, iji su parametri kapacitet 1.5Mbps i kanjenje od 40 ms konstantni (ove vrijednosti e se jedino mjenjati u ovisnosti od testnog scenarija), te tri vora na rubu mree. Linkovi koji povezuje rubne vorove s ruterima imaju konstantne parametre: kapacitet 100 Mbps i kanjenje 15 ms. Razlozi za izbor ovih vrijednosti su viestruki. Promjena propusnog opsega sa 100Mb/s na 1.5Mb/s omoguava jasno posmatranje svih efekata kontrole zaguenja. Ovaj izbor takoer omoguuje da relativno mali broj tokova stvori zaguenje, to je veoma bitno za obradu rezultata testova. Konano, savremene tehnike WAN prenosa imaju slian propusni opseg. Kanjenje od 40ms je izabrano kao rezultat kompromisa. Kanjenje dananjih konekcija moe biti neto krae, ali i viestruko due, npr. satelitski linkovi. Na tri periferna vora postavljeni su FTP izvori saobraaja. Pvi FTP izvor poinje sa slanjem u 0.316 s, drugi u 6.19 s a trei u 12.012 s. Svi prestaju sa slanjem u 30 s.

Slika 2.1 Mrena topologija

2.2.

Opis scenarija

Simulirat e se dva tipa testnog scenarija i to scenarij kada su prisutni TCP/Reno saobraajni tokovi i scenarij s TCP/Reno/XCP saobraajnim tokovima. Za svaki od ova dva tipa scenarija izvest e se tri simulacije u ovisnosti o parametrima uskog grla. Za scenarij kada su prisutni samo TCP-ovi

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

saobraajni tokovi izmeu rutera 0 i 1 uspostavljen je RED mehanizam za izbjegavanja zaguenja. Teinski koeficijent usrednjavanja RED bafera je postavljen na wq=0.001. Granice RED regiona su postavljene na nain da je max_threshold = 0.8*queue_size, a min_threshold = 0.6*queue_size. Veliina paketa je postavljena na 1000 Byte. Veliina reda je postavljena na vrijednost queue_size=4* Bandwith*LinkDelay, a veliina TCP prozora na window_size=10* Bandwith*LinkDelay. Tcl skripta koja opisuje navedeno data je u prilogu. Za drugi scenarij, na TCP/Reno je dodana XCP kontrola zaguenja. Izvrena je modifikacija izvorne Dinine Tcl skripte u skladu s zahtjevima testiranog scenarija. U skladu s opisanom implementacijom XCP-a u ns-2, radi razumijevanja Tcl skripte za ovaj scenarij dat emo kratki osvrt na neke od naredbi u ovoj Tcl skripti koja je data u prilogu. Da bi se postiglo da usko grlo ima XCP rutere na oba kraja, neophodno je postaviti XCP red u oba smjera. Ovo je postignuto naredbom: $ns duplex-link $R0 $R1 [set BW]Mb [set delay]ms XCP XCP izvor i prijemnik se kreiraju slino kao i TCP agenti: set xcp [new Agent/TCP/Reno/XCP] $ns attach-agent $src_node $xcp set xcp_sink [new Agent/TCPSink/XCPSink] $ns attach-agent $rcvr_node $xcp_sink $ns connect $xcp $xcp_sink Tcl klasa GeneralSender povezuje XCP agente na izvorne vorove i onda ih povezuje sa XCP agentima na prijemnim vorovima. Kada je kreirana mrena topologija informacije o veliini bandwith-a se trebaju prenijeti preko XCP rutera do prijemnih XCP agenata, koji alju potrebne informacije poiljaocu . Da bi se uspostavio ovaj mehanizam koristi se slijedea tcl naredba, koja se primjenjuje na svaki XCP red: $xcp_queue set-link-capacity <bandwidth_in_bits_per_sec> Da bi se omoguilo raunanje na XCP ruterima i XCP poiljaocu neophodno je sauvati neke varijable. Ovo izvrava klasa GeneralSender preko tracing varijabla u ns-2 tj. odreene varijable se uvaju u pojedinim trace file-ovima. GeneralSender instproc trace-xcp parameters { $self instvar tcp_ id_ tcpTrace_ global ftracetcp$id_ set ftracetcp$id_ [open xcp$id_.tr w] set tcpTrace_ [set ftracetcp$id_] $tcp_ attach-trace [set ftracetcp$id_] if { -1 < [lsearch $parameters cwnd] } { $tcp_ tracevar cwnd_ } if { -1 < [lsearch $parameters seqno] } { $tcp_ tracevar t_seqno_ } } Nakon pozicioniranja u odgovarajui direktoij pomou naredbe ns xcp_test.tcl izvreno je pokretanje simulacije. Kao rezultat simulacije dobije nekoliko trace file-ova i jedan nam file.

Kvaliteta usluge u TK mreama Izgled nam file u Network Animator-u dat je na slijedeoj slici.

XCP i izbjegavanje zaguenja

Slika 2.2 Mrena topologija i protok saobraaja u NAM-u

Izgled trace file na XCP izvoru je: 0.00000 2 0 1 0 cwnd_ 1.000 0.00000 2 0 1 0 t_seqno_ 0 0.316 x x x x throughput 0 0.31600 2 0 1 0 t_seqno_ 1 0.426433 x x x x reverse_feedback_ 0 0.426433 x x x x controlling_hop_ 0 Prvo polje oznaava vremenski ig, slijedee etiri vrijednosti predstavljaju id izvora (vor/port) i id odredita (vor/port) odgovarajueg XCP toka. Slijedea dva polja se odnose na ime varijable koja se upisuje u trace file i njene odgovarajue vrijednosti. Izgled trace file na XCP ruteru je: Tq_ 0.0472859 0.025 queue_bytes_ 0.0472859 0 routerId_ 0.0472859 0 residue_pos_fbk_not_allocated 0.0638023 0 residue_neg_fbk_not_allocated 0.0638023 0 input_traffic_bytes_ 0.0638023 0 avg_rtt_ 0.0638023 0.05 residue_pos_fbk_ 0.0638023 0 residue_neg_fbk_ 0.0638023 0 Qsize 0.0638023 0 min_queue_ci_ 0.0638023 0 max_queue_ci_ 0.0638023 0 routerId 0.0638023 0 Tq_ 0.0722859 0.025 queue_bytes_ 0.0722859 0 Prvo polje oznaava ime varijable, drugo vremeski ig a tree polje vrijednost te varijable.

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

2.3.

Obrada rezultata simulacije

S obzirom da ns-2 kao rezlutat simulacije daje odgovarajue trace file-ove i koji kao takvi ne daju nikakve znaajnije informacije o simuliranoj mrei. Zbog toga je neophodno izvriti obradu tih trace file-ova. U tu svrhu koriten je Awk i Gnuplot alati. Awk omoguava da se izvre jednostavne operacije na podatkovnim datotekama, kao to je usrednjavanje vrijednosti za neku kolonu, sumiranje ili mnoenje izmeu razliitih kolona, reformatiranje podataka, itd. Format awk skripte je: BEGIN {} { } END { } . Za izvrenje ove skripte nad datotekom out.tr koriste se sljedee komande: awk -f filename.awk out.tr Gnuplot je iroko rasprostranjen besplatan softver za Unix/Linux, kao i Windows operativne sisteme. Gnuplot omoguava generisanje i prikaz 2D i 3D grafova. Gnuplot se pokree unosom istoimene komande u konzolu. Dvije osnovne naredbe u gnuplot-u su plot i splot. Naredba plot se koristi za 2D vizualizaciju podataka, dok se naredba splot koristi za 3D vizualizaciju podataka. XCP i TCP smo uporedili s razliitih stanovita koji su dati u nastavku. Za svaki od ispitivanih parametra napisana je odgovarajua awk skripta1. Simulacija je izvrena za tri sluaja: I) II) III) Bottleneck_Bandwith=1.5 Mbps; Bottleneck_Delay=40 ms, Bottleneck_Bandwith=1.5 Mbps; Bottleneck_Delay=100 ms, Bottleneck_Bandwith=100 Mbps; Bottleneck_Delay=40 ms. 2.3.1. Indeks pravinosti Ovaj parametar odreuje metriku pravinosti u smislu razliitosti brzine razmjene podataka za posmatrani broj tokova u viekorisnikom sistemu. Iako je mogue definisati i mnoge druge metrike, indeks pravinosti je jedan od najrasprostranjenijih i definisan je jednakou: (2.1) gdje je n broj tokova u mrei, a ukupni primljeni saobraaj i-tog toka. to je indeks pravinosti blii 1, to je raspoloiva propusna mo ravnopravnije raspodijeljena izmeu razliitih saobraajnih tokova. Navedena jednakost je napisana awk jezikom i pokretanjem indeks_prav.awk skripte za sluaj 1 na izlazu se dobije slijedee:

Sve awk skripte su date u prilogu

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

Modifikacijom indeks_prav.awk skripte dobijene su vrijednosti i za ostala dva sluaja koja su data u tabeli 2.1. XCP 1.Bottleneck_Bandwith=1.5 Mbps; Bottleneck_Delay=40 ms 0.856 TCP/Reno 0.761

2.Bottleneck_Bandwith=1.5 Mbps; Bottleneck_Delay=100 ms

0.826

0.782

3.Bottleneck_Bandwith=100 Mbps; Bottleneck_Delay=40 ms

0.856

0.824

Tabela 2.1 Indeks pravinosti

Na osnovu tabele vidimo da u sva tri sluaja XCP osigurava vei indeks pravinosti nego TCP. Kod TCP poveanje i kanjenja uskog grla i propusnosti uskog grla rezultuje veim indeksom pravinosti, dok kod XCP poveanjem kanjenja smanjuje se indeks pravinosti dok poveanje propusnosti ne utjee na indeks pravinosti. S obzirom na ve opisan XCP protokol, sigurno se pitamo zato indeks pravinosti nije jednak 1. Razlog za to jeste da saobraajni izvori ne poinju da alju pakete u istom trenutku. Ako bi se izvrila modifikacija awk skripte tako da raunanje poinje tek o trenutka kada poinje sa slanjem zadnji izvor dobio bi se indeks pravinosti jednak 1. Ovo pokazuje i slika 2.3 za sluaj 1.

Slika 2.3 Veliina prozora zaguenja

10

Kvaliteta usluge u TK mreama 2.3.2. Procenat izgubljenih paketa

XCP i izbjegavanje zaguenja

Vana metrika za analizu mrenih performansi je i procenat izgubljenih paketa. Procenat izgubljenih paketa se rauna kao: (2.2) Gdje je I- broj izgubljenih paketa, a P je broj poslatih paketa. Navedena jednakost je napisana awk jezikom i pokretanjem gubici.awk skripte za sluaj 1 na izlazu se dobije slijedee:

Modifikacijom gubici.awk skripte dobijene su vrijednosti i za ostala dva sluaja koja su data u tabeli 2.2. XCP (%) 1.Bottleneck_Bandwith=1.5 Mbps; Bottleneck_Delay=40 ms 0.0 TCP/Reno (%) 0.27

2.Bottleneck_Bandwith=1.5 Mbps; Bottleneck_Delay=100 ms

0.0

0.65

3.Bottleneck_Bandwith=100 Mbps; Bottleneck_Delay=40 ms

0.0

0.04

Tabela 2.2 Procenat izgubljenih paketa

XCP u sva tri sluaja osigurava prenos bez gubitaka paketa. TCP/Reno karakteriu manji gubici ako se povea propusnost uskog grla, dok s poveanjem kanjenja dolazi do poveanih gubitaka paketa. 2.3.3. Iskoritenje uskog grla Jedna od osnovnih metrika ispitivanja mrenih sistema je iskoritenost propusnog opsega (engl. throughput). Koefcijent iskoritenja svakog linka se rauna prema sljedeoj formuli: (2.3)

11

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

gdje je Ck kapacitet k-tog linka, T ukupno trajanje simulacije, Pj;k puna veliina j-tog paketa na k-tom linku. Pokretanjem iskoristenje_linkova.awk skripte za sva tri sluaja dobiju se vrijednosti date tabelom 2.3. XCP (%) 1.Bottleneck_Bandwith=1.5 Mbps; Bottleneck_Delay=40 ms 93.637 TCP/Reno (%) 94.684

2.Bottleneck_Bandwith=1.5 Mbps; Bottleneck_Delay=100 ms

90.925

85.663

3.Bottleneck_Bandwith=100 Mbps; Bottleneck_Delay=40 ms

91.240

23.208

Tabela 2.3 Iskoritenje uskog grla

XCP u sva tri sluaja osigurava dobru iskoritenost uskog grla, veu od 90%. Poveanjem propusnosti uskog grla TCP/Reno doivljava drastino smanjenje iskoritenja uskog grla to je posljedica faze sporog starta. Takoer, i poveanjem kanjenja uskog grla smanjuje se iskoritenost ali ne u tolikoj mjeri kao kod poveanja propusnosti. 2.3.4. Kanjenje paketa Kanjenje paketa je, takoer, jedan od vanih mrenih parametara. Tcl skripta kasnjenje.awk je napisana prema ITU-T preporuci raunanja kanjenja paketa. Kao rezultat pokretanja ove skripte dobije se tekstualna datoteka koju je mogue predstaviti grafiki preko Gnuplot alata. Nain pokretanja odgovarajue plt skripte pomou Gnuplot alata je slijedei:

Dobijeni su sljedei grafici za tri ispitivana sluaja.

12

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

Slika 2.4 Kanjenje paketa za sluaj 1

Slika 2.5 Kanjenje paketa za sluaj 2

13

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

Slika 2.6 Kanjenje paketa za sluaj 3

Na osnovu slika 2.4 2.5 moe se uoiti da XCP unosi sasvim malo kanjenje za razliku od TCP/Reno koji ima kanjenje reda 0.3 sekunde. Performanse XCP se mogu uoiti tek u uslovima zaguenja (sluaj 1 i sluaj 2). Za sluaj 3 (slika 2.6) XCP ima skoro polovinu vremena simulacije vee kanjenje nego TCP/Reno. Porastom kapaciteta uskog grla kanjenje kod TCP/Reno se smanjuje, dok poveanjem kanjenja na uskom grlu kanjenje paketa se poveava.

14

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

3. ZAKLJUAK
Analizom rezultata simulacije moe se zakljuiti da poveanja vrijednosti produkta bandwithdelay ne utie znaajnije na performanse XCP protokola. Za razliku od XCP, performanse TCP-a u znaajnoj mjeri ovise o ovom produktu. U svim razmatranim sluajevima pokazana je prednost XCP-a u odnosu na TCP. Kako je za TCP izostanak ACK potvrde ili pak prijem dupliciranih ACK-ova indikacija gubitka paketa, to ovisno o verziji TCP-a zavisi kako e izvor postupiti s svojom veliinom prozora zaguenja. Kako je u ns-2 vrlo rijetko da se desi gubitak paketa kod XCP protokola, i za detekciju ovog dogaaja nije jo uvijek jasan nain ponaanja XCP protokola. Rjeenje ovog problema se oekuje u skoroj budunosti. XCP protokol je jo uvijek u fazi eksperimentisanja i nije jo poznato kada bi se mogao implementirati u realnu mreu.

15

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

AKRONIMI
ACK AH AMID API AQM CBR CWND DCCP EC ECN FC FTP FQ HTTP IP IPSec ISP MIMD MIT MSS QoS RED REM RTO RTT SACK SCTP SMTP TCP UDP XCP Acknowledgement Authentication Header Additive Increase and Multiplicative Decrease Application Programming Interface Active Queue Management Constant Bit Rate Congestion Window Datagram Congestion Control Protocol Efficiency Controller Explicit Congestion Notification Fairness Controller File Transfer Protocol Fair Queuing HyperText Transfer Protocol Internet Protocol Internet Protocol Security Internet Service Provider Multiplicative Increase and Multiplicative Decrease Massachusetts Institute of Technology Maximum Segment Size Quality of Service Random Early Detection Random Exponential Marking Retransmission TimeOut Round-Trip Time Selective Acknowledgement Stream Control Transmission Protocol Simple Mail Transfer Protocol Transmission Control Protocol User Datagram Protocol eXplicit congestion Control Protocol

16

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

LITERATURA
[1] [2] http://www.isi.edu/isi-xcp/docs/draft-falk-xcp-spec-00.html http://59.67.33.37/faculties/ytshu/NET_I_09/Net_I_09_PPT/Ch6%20congest%20ctl/KHR02_x cp.pdf http://repository.tamu.edu/bitstream/handle/1969.1/ETD-TAMU-1291/JAINTHESIS.pdf?sequence=1 http://www.isi.edu/nsnam/ns/doc/node240.html http://www.ietf.org/proceedings/61/slides/tsvwg-5.pdf

[3]

[4] [5]

17

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

Prilog_1: Tcl skripta TCP


#Create a simulator object set ns [new Simulator] # link izmeu rutera set velicina_paketa 1000;#Byte set rrQtype RED set rrLbw 1.5; #Mbps set rrLdelay 100; #ms #Set the queue size and window_size to the pipe's size assuming #the packet size is 1000 Byte set rrQsize [expr round([expr ($rrLbw / 8.0) * 4.0 *$rrLdelay])] set window_size [expr round([expr ($rrLbw / 8.0) * 10.0 * $rrLdelay])] # RED parametri set redMinth [expr 0.6*$rrQsize];# minth donji prag set redMaxth [expr 0.8 *$rrQsize] ;# maxth gronji prag set redLinterm 10;# inv. vrijednost max. verovatnoe odbacivanja max_p set redBytes false; # da li RED radi u bajt reimu set redQinBytes false;# da li se red za ekanje meri u bajtima set old_ecn_ true set setbit_ true #Define different colors for data flows (for NAM) $ns color 1 Blue $ns color 2 Red $ns color 3 Chocolate #Open the NAM trace file set nf [open out.nam w] $ns namtrace-all $nf #Open the Trace file set tf [open tcp.tr w] $ns trace-all $tf #Define a 'finish' procedure proc finish {} { global ns nf tf $ns flush-trace #Close the NAM trace file close $nf #Close the Trace file close $tf #Execute NAM on the trace file exec nam out.nam & exit 0 } #Create 5 nodes set n0 [$ns node] $n0 color red

18

Kvaliteta usluge u TK mreama set $n1 set $n2 set $n3 set $n4 n1 [$ns node] color red n2 [$ns node] color green n3 [$ns node] color blue n4 [$ns node] color purple

XCP i izbjegavanje zaguenja

#Create links between the nodes $ns duplex-link $n0 $n1 [set rrLbw]Mb [set rrLdelay]ms $rrQtype $ns duplex-link $n2 $n0 100Mb 15ms DropTail $ns duplex-link $n3 $n0 100Mb 15ms DropTail $ns duplex-link $n4 $n0 100Mb 15ms DropTail #Create link-labels between the nodes $ns duplex-link-op $n0 $n1 label "1.5Mb $ns duplex-link-op $n2 $n0 label "100Mb $ns duplex-link-op $n3 $n0 label "100Mb $ns duplex-link-op $n4 $n0 label "100Mb #Set Queue Size of link 0-1 to rrQsize $ns queue-limit $n0 $n1 $rrQsize set redq [[$ns link $n0 $n1] queue] $redq set bytes_ false $redq set queue_in_bytes_ false $redq set thresh_ $redMinth $redq set maxthresh_ redMaxth $redq set q_weight_ 0.001 $redq set linterm_ $redLinterm $redq set old_ecn_ true $redq set bits_ true #Give node position (for NAM) $ns duplex-link-op $n0 $n1 orient $ns duplex-link-op $n0 $n2 orient $ns duplex-link-op $n0 $n3 orient $ns duplex-link-op $n0 $n4 orient right left-up left left-down 40ms 15ms 15ms 15ms DropTail" DropTail" DropTail" DropTail"

#Setup a TCP connection set tcp0 [new Agent/TCP/Reno] $tcp0 set class_ 2 $tcp0 set packet_size_ $velicina_paketa $tcp0 set window_ $window_size $ns attach-agent $n2 $tcp0 $tcp0 set fid_ 1 set tcp1 [new Agent/TCP/Reno] $tcp1 set class_ 2 $tcp1 set packet_size_ $velicina_paketa $tcp1 set window_ $window_size $ns attach-agent $n3 $tcp1 $tcp1 set fid_ 2 set tcp2 [new Agent/TCP/Reno]

19

Kvaliteta usluge u TK mreama $tcp2 set class_ 2 $tcp2 set packet_size_ $velicina_paketa $tcp2 set window_ $window_size $ns attach-agent $n4 $tcp2 $tcp2 set fid_ 3 set sink0 [new Agent/TCPSink] $ns attach-agent $n1 $sink0 $ns connect $tcp0 $sink0 set sink1 [new Agent/TCPSink] $ns attach-agent $n1 $sink1 $ns connect $tcp1 $sink1 set sink2 [new Agent/TCPSink] $ns attach-agent $n1 $sink2 $ns connect $tcp2 $sink2 #Setup a FTP over TCP connection set ftp0 [new Application/FTP] $ftp0 attach-agent $tcp0 $ftp0 set type_ FTP set ftp1 [new Application/FTP] $ftp1 attach-agent $tcp1 $ftp1 set type_ FTP set ftp2 [new Application/FTP] $ftp2 attach-agent $tcp2 $ftp2 set type_ FTP #Schedule events for the FTP agents $ns at 0.00005 "$ftp0 start" $ns at 6.000015 "$ftp1 start" $ns at 12.0005 "$ftp2 start" $ns at 30.0 "$ftp0 stop" $ns at 30.0 "$ftp1 stop" $ns at 30.0 "$ftp2 stop"

XCP i izbjegavanje zaguenja

#Call the finish procedure after 32 seconds of simulation time $ns at 32.0 "finish" #Run the simulation $ns run

20

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

Prilog_2: Tcl skripta XCP


# ----------------------- Test XCP Performance -----------------------------# # # Author: Dina Katabi, dina@ai.mit.edu # Last Update : 7/16/2002 # #------------------------------------------------------------------------------# #-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- Utility Functions -*-*-*-*-*-*-**--*-*-*-*-*-*-*-*-# #--------- Creating the TOPOLOGY --------------------# # n0 # : \ Bottleneck # : R0-----------------------R1 # / # ni # Agent/TCP set minrto_ 1 proc set-red-params { qsize } { Queue/RED Queue/RED Queue/RED Queue/RED Queue/RED Queue/RED Agent/TCP Queue/RED } set set set set set set set set thresh_ [expr 0.6 * $qsize] maxthresh_ [expr 0.8 * $qsize] q_weight_ 0.001 linterm_ 10 bytes_ false ; queue_in_bytes_ false ; old_ecn_ true setbit_ true

proc create-topology2 { BW delay BWl delayl qtype qsize numSideLinks deltaDelay } { global ns #Set the queue size to the pipe's size assuming the packet size is 1000 KByte if { $qsize == 0 } { set qsize [expr round([expr ($BW / 8) * 4 * $delay])] } set i 0 while { $i < 2 } { global R$i set R$i [$ns node] incr i }

21

Kvaliteta usluge u TK mreama $ns $R0 $R1 $ns $ns $ns

XCP i izbjegavanje zaguenja

duplex-link $R0 $R1 [set BW]Mb [set delay]ms $qtype color red color red queue-limit $R0 $R1 $qsize queue-limit $R1 $R0 $qsize duplex-link-op $R0 $R1 orient right

# Give a global handle to the Bottleneck Queue to allow # setting the RED paramters global Bottleneck rBottleneck set Bottleneck [[$ns link $R0 $R1] queue] set rBottleneck [[$ns link $R1 $R0] queue] global l rl set l [$ns link $R0 $R1] set rl [$ns link $R1 $R0] global all_links set all_links "$l $rl " # The side links have the same BW as the Bottleneck set i 0 while { $i < $numSideLinks } { global n$i q$i rq$i l$i rl$i set n$i [$ns node] $ns duplex-link [set n$i] $R0 [set BWl]Mb [set delayl]ms $qtype if ($i==0) { [set n$i] color green $ns duplex-link-op [set n$i] $R0 orient right-down } if ($i==1) { [set n$i] color blue $ns duplex-link-op [set n$i] } if ($i==2) { [set n$i] color purple $ns duplex-link-op [set n$i] } $ns queue-limit [set n$i] $R0 $qsize $ns queue-limit $R0 [set n$i] $qsize set q$i [[$ns link [set n$i] $R0] queue] set rq$i [[$ns link $R0 [set n$i]] queue] set l$i [$ns link [set n$i] $R0] set rl$i [$ns link $R0 [set n$i]] set all_links "$all_links [set l$i] [set rl$i] " incr i } } #------- Sender Class : # This is essentially an ftp sender Class GeneralSender -superclass Agent # otherparams are "startTime TCPclass .." GeneralSender instproc init { id node rcvrTCP otherparams } {

$R0 orient right

$R0 orient right-up

22

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

global ns $self next $self instvar tcp_ id_ ftp_ node_ tcp_rcvr_ tcp_type_ set id_ $id set node_ $node if { [llength $otherparams] > 1 } { set TCP [lindex $otherparams 1] } else { set TCP "TCP/Reno" } set tcp_type_ $TCP set tcp_ [new Agent/$TCP] $tcp_ set packetSize_ 1000 $tcp_ set class_ $id set ftp_ [new Source/FTP] $ftp_ set agent_ $tcp_ $ns attach-agent $node $tcp_ $ns connect $tcp_ $rcvrTCP set tcp_rcvr_ $rcvrTCP set startTime [lindex $otherparams 0] $ns at $startTime "$ftp_ start" puts "initialized Sender $id_ at $startTime" } GeneralSender instproc trace-xcp parameters { $self instvar tcp_ id_ tcpTrace_ global ftracetcp$id_ set ftracetcp$id_ [open xcp$id_.tr w] set tcpTrace_ [set ftracetcp$id_] $tcp_ attach-trace [set ftracetcp$id_] if { -1 < [lsearch $parameters cwnd] } { $tcp_ tracevar cwnd_ } if { -1 < [lsearch $parameters seqno] } { $tcp_ tracevar t_seqno_ } } #--- Command line arguments proc set-cmd-line-args { list_args } { global argv set i 0 foreach a $list_args { global $a set $a [lindex $argv $i] puts "$a = [set $a]" incr i } } #-------------- Plotting functions -----------# # plot a xcp traced var proc plot-xcp { TraceName nXCPs PlotTime what } { if {[string compare $what "cwnd_"] == 0} { exec rm -f xgraph_cwnd.tcp set f [open xgraph_cwnd.tcp w] set a cwnd

23

Kvaliteta usluge u TK mreama } else { exec rm -f xgraph_seqno.tcp set f [open xgraph_seqno.tcp w] set a seqno } puts $f "TitleText: $TraceName" puts $f "Device: Postscript"

XCP i izbjegavanje zaguenja

foreach i $nXCPs { #the TCP traces are flushed when the sources are stopped exec rm -f temp.tcp exec touch temp.tcp global ftracetcp$i if [info exists ftracetcp$i] { flush [set ftracetcp$i] } set packetsize [expr 100 * ($i +10)] set result [exec awk -v PlotTime=$PlotTime -v what=$what -v s=$packetsize { { if (( $6 == what ) && ($1 > PlotTime)) { tmp=$7*s print $1, tmp >> "temp.tcp"; } } } xcp$i.tr] puts "$i : $result" puts $f \"$what$i exec cat temp.tcp >@ $f puts $f "\n" flush $f } close $f exec xgraph return } # Takes as input the the label on the Y axis, the time it starts plotting, and the trace file tcl var proc plot-red-queue { TraceName PlotTime traceFile } { exec rm -f xgraph.red_queue exec rm -f temp.q temp.a temp.p temp.avg_enqueued temp.avg_dequeued temp.x temp.y exec touch temp.q temp.a temp.p temp.avg_enqueued temp.avg_dequeued temp.x temp.y exec awk -v PT=$PlotTime { { if (($1 == "q" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.q" } else if (($1 == "a" && NF>2) && ($2 > PT)){ print $2, $3 >> "temp.a" } else if (($1 == "p" && NF>2) && ($2 > PT)){ -nl -m -x time -y $what xgraph_$a.tcp &

24

Kvaliteta usluge u TK mreama print $2, $3 >> "temp.p" } } } $traceFile set ff [open xgraph.red_queue w] puts $ff "TitleText: $TraceName" puts $ff "Device: Postscript \n" puts $ff \"queue exec cat temp.q >@ $ff puts $ff \n\"ave_queue exec cat temp.a >@ $ff puts $ff \n\"prob_drop exec cat temp.p >@ $ff close $ff exec xgraph } proc plot-red {varname filename PlotTime} { exec rm -f temp.$filename exec touch temp.$filename

XCP i izbjegavanje zaguenja

-P -x time -y queue xgraph.red_queue &

set result [exec awk -v PlotTime=$PlotTime -v what=$varname -v file=temp.$filename { { if (( $1 == what ) && ($2 > PlotTime)) { print $2, $3 >> file ; } } } ft_red_Bottleneck.tr] exec xgraph -P -x time -y $filename temp.$filename } #-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- Initializing Simulator -*-*-*-**-*-*-*--*-*-*-*-*-*-*-*-# # BW is in Mbs and delay is in ms #set-cmd-line-args "seed qType BW nXCPs delay " set set set set set set set seed 472904 qType XCP BW 1.5; # in Mb/s nXCPs 3; # Number of flows delay 40; # in ms BWl 100; #in Mb/s delayl 15; # in ms [new Simulator] use-scheduler Heap [new RNG] $seed

set ns $ns set rtg $rtg seed

25

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

#Define different colors for data flows (for NAM) $ns color 1 Blue $ns color 2 Red $ns color 3 Chocolate set f_all [open xcp.tr w] $ns trace-all $f_all #Open the NAM trace file set nf [open out.nam w] $ns namtrace-all $nf set qSize [expr round([expr ($BW / 8.0) * 4 * $delay * 1.0])];#set buffer to the pipe size set window_size [expr round([expr ($BW / 8.0) * 10 * $delay])] set tracedXCPs "0 1 2" set SimStopTime 30 set PlotTime 0

#---------- Create the simulation --------------------# # Create topology create-topology2 $BW $delay $BWl $delayl $qType $qSize $nXCPs 0.0 foreach link $all_links { set queue [$link queue] switch $qType { "XCP" { $queue set-link-capacity [[$link set link_] set bandwidth_]; } "DropTail/XCP" { $queue set-link-capacity-Kbytes [expr [[$link set link_] set bandwidth_] / 8000]; } default { puts "Incorrect qType $qType" exit 0 } } } # Create sources: set i 0 while { $i < $nXCPs } { set StartTime [expr [$rtg integer 1000] * 0.001 * (0.01 * $delay) + $i * 6.0] set rcvr_XCP [new Agent/TCPSink/XCPSink] $ns attach-agent $R1 $rcvr_XCP set src$i [new GeneralSender $i [set n$i] $rcvr_XCP "$StartTime TCP/Reno/XCP"] [[set src$i] set tcp_] set packetSize_ [expr 100 * ($i +10)] [[set src$i] set tcp_] set window_ $window_size

26

Kvaliteta usluge u TK mreama if ($i==0) { [[set src$i] set tcp_] } if ($i==1) { [[set src$i] set tcp_] } if ($i==2) { [[set src$i] set tcp_] } incr i } #---------- Trace --------------------# # Trace sources foreach i $tracedXCPs { [set src$i] trace-xcp "cwnd seqno" } set fid_ 3 set fid_ 2

XCP i izbjegavanje zaguenja

set fid_ 1

# Trace Queues foreach queue_name "Bottleneck rBottleneck" { set queue [set "$queue_name"] switch $qType { "XCP" { global "ft_red_$queue_name" set "ft_red_$queue_name" [open ft_red_[set queue_name].tr w] set xcpq $queue ;#[$queue set vq_(0)] $xcpq attach [set ft_red_$queue_name] } "DropTail/XCP" {} } } #---------------- Run the simulation ------------------------# proc flush-files {} { set files "f_all ft_red_Bottleneck ft_red_rBottleneck" global tracedXCPs foreach file $files { global $file if {[info exists $file]} { flush [set $file] close [set $file] } } foreach i $tracedXCPs { global src$i set file [set src$i tcpTrace_] if {[info exists $file]} { flush [set $file] close [set $file]

27

Kvaliteta usluge u TK mreama } } } proc finish {} { global ns nf if {[info exists f]} { $ns flush-trace close $f #Close the NAM trace file close $nf #Execute NAM on the trace file exec nam out.nam & } $ns halt } $ns at $SimStopTime "finish" $ns run flush-files

XCP i izbjegavanje zaguenja

#------------ Post Processing ---------------# set PostProcess 1 if { $PostProcess } { #--- Traced TCPs set TraceName "Flows --$qType-QS$qSize" plot-xcp $TraceName $tracedXCPs 0.0 "cwnd_" # plot-xcp $TraceName $tracedXCPs 0.0 "t_seqno_" # } plot-red-queue $TraceName plot-red "u" util 0.0 $PlotTime ft_red_Bottleneck.tr

28

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

Prilog_3: Awk skripte


a) kasnjenje.awk BEGIN { najveci_id_paketa = 0; } { akcija = $1; vrijeme = $2; od = $3; prema = $4; tip = $5; velicina_paketa = $6; id_toka = $8; izvor = $9; odrediste = $10; br_sekvence = $11; id_paketa = $12; if (id_paketa > najveci_id_paketa) najveci_id_paketa = id_paketa; if (pocetno_vrijeme[id_paketa] == 0) pocetno_vrijeme[id_paketa] = vrijeme; if (id_toka == 1 && akcija != "d") { if (akcija == "r") { krajnje_vrijeme[id_paketa] = vrijeme; } } else { krajnje_vrijeme[id_paketa] = -1; } } END { for (id_paketa = 0; id_paketa <= najveci_id_paketa; id_paketa++) { pocetak = pocetno_vrijeme[id_paketa]; kraj = krajnje_vrijeme[id_paketa]; trajanje_paketa = kraj - pocetak; if (pocetak < kraj) printf("%f %f\n", pocetak,trajanje_paketa) > "kasnjenjexcp.txt"; } } b) indeks_prav.awk BEGIN { ukupan_saobracaj = 0; #ukupni primljeni saobracaj za sve tokove tj. sumarni iznos kv_ukupnog_saobracaja= 0; #suma kvadrata ukupnih primljenih saobracaja tokova }

29

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

{ akcija = $1; vrijeme = $2; od = $3; prema = $4; tip = $5; velicina_paketa = $6; id_toka = $8; izvor = $9; odrediste = $10; br_sekvence = $11; id_paketa = $12; #racunanje ukupnog saobracaja za pojedine tokove for(i=1;i<=3;i++){ if (akcija=="r" && id_toka==i && prema== 1) { k[i]+=velicina_paketa;} } } END { for (i=1;i<=3;i++) { ukupan_saobracaj+=k[i]; printf("Ukupan primljeni saobracaj za tok %d je %d [kB]\n",i,k[i]/1000); kv_ukupnog_saobracaja+=k[i]^2;} #Indeks pravinosti predstavlja prosjenu vrijednost ravnopravne raspodjele propusnog opsega izmedju razlicitih saobracajnih tokova J= (ukupan_saobracaj^2)/((i-1)*kv_ukupnog_saobracaja); printf("Indeks pravicnosti je: %.3f \n", J); } c) gubici.awk BEGIN { br_odbacenih = 0; br_poslanih = 0; } { akcija = $1; vrijeme = $2; od = $3; prema = $4; tip = $5; velicina_paketa = $6; id_toka = $8; izvor = $9; odrediste = $10; br_sekvence = $11; id_paketa = $12; if (id_toka == 1 && akcija == "d") { br_odbacenih++; print vrijeme " " br_odbacenih > "gubici_xcp.txt"

30

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

} if (id_toka == 1 && akcija == "r") { br_primljenih++; } br_poslanih=br_odbacenih+br_primljenih; } END { printf("Broj poslanih paketa: %d\nBroj izgubljenih paketa:%d\nGubici: %.2f %%\n", br_poslanih, br_odbacenih,100*br_odbacenih/br_poslanih); d) iskoristenje_linkova.awk BEGIN { ukupan_saobracaj_na_linku = 0; T=32; # [s] trajanje simulacije #kapaciteti linkova [bps] C_01=1500000; } { akcija = $1; vrijeme = $2; od = $3; prema = $4; tip = $5; velicina_paketa = $6; id_toka = $8; izvor = $9; odrediste = $10; br_sekvence = $11; id_paketa = $12; # racunanje ukupnog saobracaja na duplex-linkovima if (akcija=="r" ) { if(od==0 && prema==1) ukupan_saobracaj_01+=(velicina_paketa*8); } #racunanje iskoristenja linkova iskoristenje_01=ukupan_saobracaj_01/(C_01*T); } END { printf("Iskoristenje linka 0-1 (C=1.5 Mbps, kasnjenje 40 ms, TCP/RENO/RED) je: %.3f ", iskoristenje_01*100); print "%"; }

31

Kvaliteta usluge u TK mreama

XCP i izbjegavanje zaguenja

e) Primjer plt skripte set title " Kasnjenje paketa s kraja na kraj C=1.5 Mbps LinkDelay=100 ms"; set xlabel "t [s]"; set ylabel "Trajanje paketa [s]"; set xrange [0:30]; set yrange [0.05:0.12] set multiplot plot "kasnjenjetcp.txt" with line lt 4; plot "kasnjenjexcp.txt" with line lt 1; unset multiplot

32

You might also like