|
Streaming UDP inteligent
1 Descrierea aplicatiei
Aplicatia consta in dezvoltarea unui algoritm de evitare a congestiei si minimixarea timpului de revenire la debitul initial sau de reocupare a benzii disponibile. Pentru evitarea congestie am folosit un mecanism similar cu Congestion Avoidance folosit de TCP, si anume scaderea la jumatate a benzii cand detectez pierderi semnificative. Partea de recuperare am implementat-o cu ajutorul algoritmului binar de cautare.
+ diagrama de stare
+ algoritm in pseudocod
2 Descrierea algoritmului de cautare binara
Un algoritm de cautare binara este o tehnica aplicata in stiinta calculatoarelor, ca fiind o metoda care gaseste o valoare oarecare intr-un tablou sortat in prealabil, si care consta in injumatatirea periodica a tabloului pana cand se afla valoarea cautata. In jumatatirea tabloului presupune aflarea unei valori care va reprezenta mijlocul tabloului; iar valoarea de cautat se va compara cu valoarea din mijlocul tabloului. Daca in urma compararii a rezultat ca valoarea cautata este mai mica decat valoarea de mijloc a tabloului, atunci cautarea se va aplica in jumatatea tabloului situata inaintea valorii de centru (mijloc) a tabloului. Astfel se va proceda pana cand valoarea cautata devine mijlocul tabloului, aceasta indicand ca valoarea care s-a cautat este in tablou. Daca valoarea cautata este mai mare decat valoarea de mijloc a tabloului, atunci cautarea se va aplica in jumatatea tabloului situata dupa valoarea de mijloc. Si algoritmul realizeaza injumatatiri repetate pana cand valoarea de cautat devine mijlocul tabloului, si care demonstreaza ca valoarea se gaseste in tablou. Astfel dar,cautarea binara se aplica pentru tablouri ordonate, principiul ei constind in injumatatirea repetata a intervalului in care se cauta elementul dorit.Necesitatea ca tabloul sa fie ordonat implica faptul ca elementele sale au o componenta (cheie) ce apartine unui tip scalar, iar cautarea se face dupa aceasta componenta. Uneori se foloseste un alt mod de calcul al lui d, astfel incit se simplifica conditia de ciclare.Aceasta tehnica are avantajul rapiditatii: numarul de comparatii necesare este cel mult log2(N), fiind un algoritm logaritmic si se executa intr-un interval de timp O(log n),fiind necesare 1 + log2N iteratii pentru a returna un raspuns.In cele mai multe cazuri este considerat mai rapid decat tehnica de cautare liniara, fiind posibila implementarea cu recursii si iteratii.
3 Descrierea implementarii
Tehnologii folosite:
Iperf este un instrument de masurare a latimii benzii si calitatii unui link de retea. Link-ul este delimitat de doua gazde ce ruleaza iperf. Calitatea consta in:
-Latenta (timpul de raspuns sau RTT): poate fi masurat cu comanda ping
-Jitter-ul: poate fi masurat cu test Iperf peste UDP
-Pierderea de pachete
-Latimea benzii este masurata cu un test TCP.
Iperf utilizeaza diferitele capacitati ale TCP si UDP-ului pentru a furniza statistici asupra retelei.
Obtiunile iperf:
no arg.
-b
-r
-d
-w
-Default settings
-Data format
-Bi-directional bandwidth
-Simultaneous bi-directional bandwidth
-TCP Window size
-p, -t, -i
-u, -b
-m
-M
-P
-h
-Port, timing and interval
UDP tests, bandwidth settings
-Maximum Segment Size display
-Maximum Segment Size settings
-Parallel tests
-help
Python este un limbaj de programare puternic si usor de invatat. Are structuri de date de nivel inalt, eficiente si o simpla dar eficienta abordare a programarii orientate pe obiect. Este simplu de folosit, dar este un limbaj de programare adevarat, oferind posibilitatea unei mai bune structurari, si un suport mai bun pentru programe mari decat ofera un shell. Pe de alta parte dispune de o mult mai buna verificare a erorilor decat C-ul, si fiind un limbaj de nivel foarte inalt, dispune de tipuri de date de nivel inalt cum ar fi tablouri sau dictionare foarte flexibile, a caror implementare in C ar lua programatorului zile. Datorita caracterului general al tipurilor de date Python poate fi aplicat intr-o arie mult mai larga de probleme decat AWK sau PERL. Cu toate astea, multe lucruri se realizeaza la fel de usor in Python ca si in aceste limbaje.
Python permite divizarea programelor in module care pot fi folosite apoi in alte programe Python. Dispune de o colectie vasta de module standard de la care puteti porni in construirea programului, sau pentru a invata programarea in Python.
Exista de asemenea module incorporate care ofera facilitati pentru sistemul de intrari - iesiri (I/O), apeluri de sistem, sockets, si chiar interfete pentru sisteme de interfatare grafica utilizator (GUI) precum TK.
Python este un limbaj interpretat, care poate accelera munca in timpul procesului de dezvoltare, ne mai fiind nevoit sa compilati codul de fiecare data. Interpretorul poate fi folosit interactiv, ceea ce permite sa testati foarte usor anumite facilitati ale limbajului, sa scrieti imediat programe dispensabile, sau sa testati anumite functii inainte de a le
folosi in programul dumneavoastra. Este foarte folositor si drept, calculator de birou.
Python permite scrierea unor programe foarte compacte si usor de citit.
Programele scrise in Python sunt mult mai mici decat echivalentele in C sau C++ pentru ca:
. tipurile de date de nivel inalt permit sa realizati operatii complexe intr-o singura instructiune;
. gruparea instructiunilor este data de paragrafare in loc de blocuri begin/end sau de acolade;
. nu este necesara declararea variabilelor.
Python este extensibil: se poate adauga foarte usor o noua functie sau un modul, fie pentru a efectua operatii la viteza maxima, fie pentru a lega programe Python la biblioteci disponibile numai in forma binara (biblioteci grafice).