Mecanisme de control al fluxului de date

      Asa cum am ramas dator de data trecuta, in acest articol vom aborda problema mecanismelor de control al fluxului, in special al celor pe baza de fereastra si a celor pe baza de rata.

      Dupa cum bine se stie, datele ce urmeaza sa fie transmise intre doua calculatoare, nu se transmit toate deodata, ci se impart in cadre (sau pachete), ce urmeaza sa fie transmise rind pe rind. Din cauza unor factori perturbatori care pot sa altereze datele continute in pachete, atit timp cit ele strabat mediul de transmisie, apare necesitatea unor mecanisme de detectie a erorilor (sau mai bine zis a pachetelor alterate). Astfel, receptorul poate determina pachetele eronate si le ignora. Problema este ca pachetele pierdute trebuie retransmise, deci trebuie implementata o modalitate de “instiintare” a emitatorului care sa-i specifice acestuia ce pachete au fost receptionate eronat. In mod practic, acest lucru se realizeaza prin combinare a doua mecanisme:

  1. confirmarile (acknowledgements) - ACK
  2. temporizarile (timeouts)
O confirmare este un mic pachet de control pe care anumite protocoale le trimit de la receptor catre emitator, pentru ai comunica, acestuia din urma, primirea pachetului in bune conditii (adica pachetul nu a fost alterat; suma de control receptionata odata cu pachetul este egala cu suma de control calculata de receptor pe baza datelor primite). Daca emitatorul nu primeste confirmarea dupa un anumit interval de timp, atunci retransmite pachetul initial. Aceasta actiune, de a astepta o anumita perioada de timp se numeste temporizare. Exista, in principal, trei algoritmi de livrare sigura a pachetelor de date, algoritmi ce se bazeaza pe combinarea celor 2 mecanisme: confirmari si temporizari.
  1. Algoritmul Stop-and-Wait

          Este, practic, cel mai simplu algoritm de transmisie. Emitatorul, dupa ce trimite un pachet, va intra intr-o stare de asteptare si va trimite pachetul urmator numai dupa ce a primit confirmarea din partea receptorului. In acest caz sunt 4 scenarii posibile:

    1. Pachetul initial se poate pierde pe traseu (se pot altera datele, iar receptorul, determinind eroarea, nu va trimite confirmarea de primire). Pachetul initial va fi retransmis.
    2. Cadrul de control se pierde pe traseu. Receptorul primeste pachetul si trimite ACK, dar din diferite motive, emitatorul “nu-si da seama” ca a primit confirmarea.
    3. Datorita intirzierilor din retea, pachetele ACK sosesc dupa un interval de timp mai mare decit perioada de temporizare.
    4. Pachetele ACK sosesc corect si emitatorul va transmite pachetul urmator.
    Principalul dezavantaj al acestui algoritm este acela ca o conexiune de acest tip poate avea un singur pachet transmis la un moment dat. Din acest motiv, legatura (mediul de transmisie) nu este utilizata la intreaga sa capacitate.

  2. Algoritmul cu fereastra glisanta

          Pentru a mari debitul de date transmise (respectiv numar pachetelor) algoritmul nu asteapta confirmarea fiecarui pachet inainte de a-l trimite pe urmatorul. Se utilizeaza un concept numit ferestra glisanta (sliding window). Dupa cum putem observa din figura de mai jos:

          Algoritmul “aseaza” fereastra peste secventa de date si apoi transmite toate pachetele din cadrul ferestrei. Pe masura ce se primesc confirmari, fereastra este glisata de-a lungul secventei de date si se transmit pachetele nou intrate in cadrul ferestrei.

          Pentru a diferentia pachetele ACK si a sti, tot timpul, carui pachet din secventa ii apartine mesajul ACK, emitatorul atribuie, fiecarui pachet trimis, un numar de secventa numit SeqNum. Acest numar este stocat in antetul pechetului, intr-un cimp de lungime fixa.

          Principalul rol al acestui algoritm este acela de control al fluxului. Cu alte cuvinte algoritmul furnizeaza un mecanism de reactie prin care receptorul poate determina emitatorul sa trimita un flux de date mai mare (daca reteaua este libera, iar capacitatea maxima de prelucrare a datelor, la receptor, nu este atinsa) sau mai mica (daca receptorul nu poate sa prelucreze fluxul initial).

          Un al doilea rol al algoritmului cu ferestra glisanta este livrarea sigura a tuturor pachetelor unei transmisii de date de-a lungul unui mediu de transmisie nesigur.

          Al treilea rol urmarit de acest algoritm este conservarea ordinii de emisie a cadrelor. Aceasta caracteristica a protocolului care implementeaza algoritmul cu fereastra glisanta se refera, pe partea de receptie, la transmiterea pachetelor spre protocolul de nivel superior. Astfel, receptorul memoreaza intr-un buffer pachetele care au sosit dezordonat si le transmite in sus, pe stive de protocoale, numai dupa ce au fost receptionate si pachetele restante. Intrebarea care se pune este daca functia de ordonare a pachetelor receptionate este necesara sa fie implementata in protocolul care utilizeaza algoritmul cu ferestra sau intr-alt protocol de pe un nivel superior.

  3. Canale logice concurente

          Cea mai cunoscuta implementare a acestui algoritm este protocolul IMP-IMP folosit in cadrul ARPANET. Ideea de la care s-a pornit este de a cea si multilplexa mai multe canale logice pe o singura legatura punct-la-punct si de a implementa algoritmul SAW (Stop-and-Wait) pe fiecare canal logic.

          In practica, ARPANET suporta, pentru legaturile terestre, 8 canale logice, iar pentru legaturile prin satelit cite 16 canale. Acest algoritm nu permite controlul fluxului.

      Algoritmul cu fereastra glisanta este cel mai performant, fiind si cel mai complex, permitind realizarea mai multor functii. Din acest motiv el este implementat si in stiva TCP/IP.