Controlul congestiei

      Asa cum spuneam si in articolul anterior, o alocare necorespunzatoare a resurselor retelei duce la congestia acesteia. Pe scurt, am putea defini congestia ca fiind acel proces de pierdere a pachetelor, transmise prin retea, din cauza lipsei de spatiu in buffere-le de stocare a concentratorilor instalati in reteaua respectiva. Sa presupunem ca avem un segment de retea ca in figura de mai jos:

      Putem usor observa ca suma pachetelor care vin de la cele 2 calculatoare este mai mare decit capacitatea de transfer a cablului dintre router si calculatorul destinatie. Unele pachete ce sosesc la router, din cauza ca nu vor putea fi transmise spre destinatie, vor fi stocate in bufferele routerului. Aceste pachete sunt din ce in ce mai multe, pina cind apare fenomenul de congestie.

      Pe parcursul discutiei noastre despre congestie vom folosi termenul de router deoarece vom incerca sa vorbim la cazul cel mai general, adica de reteaua internet. Bineinteles, cele discutate aici pot fi foarte usor transpuse, la o scara mai mica, intr-o retea LAN, caz in care in locul routerului putem avea orice alt tip de concentrator (hub, switch, etc).

      Controlul congestiei este un proces foarte complex care nu si-a gasit o rezolvare cit de cit multumitoare nici in ziua de azi. Chiar dimpotriva, acest subiect este din ce in ce mai des abordat in cercetarile din informatica din cauza aglomerarii din ce in ce mai mari a retelelor de calculatoare. Putem extinde problema congestiei chiar la nivelul general al unei retele de telecomunicatii. Aspectul care complica si mai mult mecanismele de control al congestiei este acela ca nu se poate localiza pe un nivel particular al stivei de protocoale. Algoritmii de control al congestiei pot fi implementati atit la nivelul routerelor de retea cit si la nivelul protocoalelor de transport implementate in softul de retea al dispozitivelor comunicante. O solutie exclusiva, bazata doar pe controlul unui singur nivel nu duce la o rezolvare multumitoare. De aceea se cauta solutii de compromis intre cele doua nivele.

      Mecanismele pentru controlul congestiei sunt foarte diverse, motiv pentru care este foarte dificila realizarea unei clasificari. Totusi vom incerca sa prezentam, mai jos, trei dintre cele mai importante aspecte ale mecanismelor de control al congestiei, ceea ce ne permite si o oarecare clasificare a acestora.

  1. Mecanisme de tip Router-Centric si Host-Centric

          Pentru cazul Router-Centric, routerele sunt responsabile atit de ordinea de servire a pachetelor ce le traverseaza cit si de eliminarea lor (in caz de congestie). In caz de congestie, dispozitivele generatoare de trafic care introduc o cantitate prea mare de informatii in retea, vor fi "informate" de acest aspect, ele trebuind sa ia masuri pentru scaderea ratei de transmisie.

  2. Mecanisme pe baza de rezervare (Reservation-Based) si mecanisme pe baza de feedback (Feedback-Based)

          In mecanismele bazate pe rezervare, la initierea conexiunii, se realizeaza si transmite in retea, o cerere de spatiu in bufferele routerelor care vor fi "strabatute" de pachete pina la destinatie. In cazul in care spatiul solicitat nu este disponibil intr-unul din routere, cererea de conexiune va fi refuzata.

          In mecanismele bazate pe feedback sursa incepe sa emita pachetele cu un trafic initial, care urmeaza sa fie ajustat in urma observarii traficului din toate routerele parcurse. Pentru reglarea traficului functie de aglomerarea routerelor sunt disponibile doua tipuri de algoritmi:

          1. expliciti: cind unul din routere ajunge in stare de congestie va transmite sursei generatoare de trafic un mesaj explicit de micsorare a ratei de transmisie.

          2. impliciti: sursa generatoare de trafic isi modifica rata de transmisie pe baza rezultatelor propriilor monitorizari ale retelei.

          Pentru implementarea unor mecanisme pe baza de rezervare sunt necesare doar adoptarea unor mecanisme de tip Router-Centric pentru a preveni congestia.

          La fel, pentru implementarea mecanismelor pe baza de feedback, cu algoritmi impliciti, este necesara doar existenta adoptarii unui mecanism de tip Host-Centric. In cazul algoritmilor impliciti trebuie sa existe ambele tipuri de mecanisme.

  3. Mecanisme pe baza de fereastra (Window-Based) si mecanisme pe baa de rata (Rate-Based)

          Acest aspect al controlului congestiei este foarte asemanator cu problematica controlului fluxului intr-o retea. Atit controlul congestiei cit si controlul fluxului presupun reglarea vitezei cu care sursa transmite pachete in retea, Diferenta consta in aspectul pe care il rezolva fiecare: controlul congestiei impiedica sursa sa congestioneze reteaua (implicit unul din routerele de pe traseu), in timp ce controlul de flux impiedica sursa sa "innece" cu pachete receptorul.

          In principal exista 2 metode de a comunica sursei cu ce rata poate sa emita pachete:

    1. se indica o fereastra,
    2. seindica o rata

          In articolul urmator vom face o prezentare mai pe larg a mecanismelor cu fereastra si a celor bazate pe o rata de transfer. In continuare ne vom ocupa de alte aspecte ale controlului congestiei.

          Prin combinarea celor 6 mecanisme de control, clasificate doua cite doua in trei categorii, se pot imagina, in total, 8 strategii de implementare a controlului congestiei intr-o retea, In prectica doar doua strategii sunt viabile.

    1. modelul de servici "cel mai bun efort". Aceasta strategie necesita un mecanism de feedback. Deasemeni, nu este permisa realizarea unei rezervari din capacitatea retelei, fapt ce duce la o mai mare responsabilitate (in procesul de control al congestiei) a capetelor comunicatiei (sursa si receptor), bazata totusi pe un "sprijin" din partea routerelor. In practica astfel de mecanisme folosesc un control al traficului pe baza de ferestre. Aceasta este si strategia generala pe care se bazeaza reteaua Internet.
    2. modelul de servici QoS. Aceasta strategie implica folosirea mecanismului de rezervare, ceea ce presupune o pondere ridicata a routerului in controlul congestiei. Aceste rezervari se vor face in debit (se indica o rata de transfer) din cauza ca ferestrele sunt legate indirect de latimea de banda necesara sursei.


Lucrul cu cozile in Routere

      Orice router implementeaza un mecanism de lucru cu cozile. Pachetele ce sosesc la router sunt puse intr-o coada de asteptare pentru ca, mai apoi, sa fie transmise spre destinatie. Congestia apare atunci cind sosesc foarte multe pachete de date, iar routerul nu mai are spatiu de stocare in bufferele de memorie. Vom descrie, in continuare, doi algoritmi utilizati in lucrul cu cozile.

  1. FIFO (First In - First Out)

          Dupa cum ii spune si denumirea (primul venit - primul iesit) acest algoritm transmite pachetele in ordinea sosirii lor in buffer. In momentul in care soseste un pachet, este pus in coada de asteptare .Dupa ce vor fi trimise toate pachetele care au sosit inaintea lui, va fi trimis si acesta. In caz de congestie (pachetul soseste, dar bufferul este plin), routerul elimina respectivul pachet fara "sa-si puna problema" carui flux apartine si cit de important este acesta.

          In Internet, routerele implementeaza cozi FIFO, dar TCP isi asuma responsabilitatea pentru detectarea si eliminarea congestiei. Totusi, unele routere din Internet nu folosesc doar cozi simple FIFO, ci au implementat si un serviciu, bazat pe bitii TOS (Type Of Service - tip de serviciu - ce se afla in headerul pachetului IP) pentru a putea clasifica pachetele dupa prioritati diferite.

  2. FQ (Fair Queuing)

          Principalul dezavantaj al cozilor FIFO consta in aceea ca nu se face diferentierea pachetelor functie de sursa emitenta. Acest neajuns incearca sa il elimine cozile FQ. Ideea de baza a acestui "gestionar de cozi" este de a mentine o coada separata pentru fiecare flux de date care traverseaza routerul la un moment dat. Routerul deserveste aceste cozi dupa un algoritm numit jeton-rotitor. In cazul in care pe un flux vin pachete foarte repede, coada asociata se va umple. Routerul preintimpina aceasta situatie si atunci cind coada atinge o marime particulara, pachetele suplimentare, care apartin fluxului respectiv, vor fi eliminate. Din acest motiv, o sursa nu poate acoperi o parte nelimitata din capacitatea retelei, in defavoarea celorlalte fluxuri.

          Algoritmul FQ nu presupune ca routerul sa trimita surselor de trafic date despre starea retelei, date care ar putea regla debitul. Cu alte cuvinte FQ a fost proiectat pentru a putea fi folosit impreuna cu un mecanism de control al congestiei.

          Dupa cum am mai spus, controlul congestiei reprezinta un subiect foarte complex, iar problemele ridicate sunt foarte variate, motiv pentru care vom continua si in numerele viitoare abordarea acestuia.