Sunteți pe pagina 1din 20

Universitatea POLITEHNICA din

Bucuresti

Facultatea TRANSPORTURI

DEPARTAMENTUL TRANSPORTURI, TRAFIC SI


LOGISTICA

Referat

Cu tema : Algoritmi de rutare

Elaborat:st.gr LT: Mastac Alexandru


Conducator: Sl.Ing. S. Burciu
Bucuresti 2018
Definire de algoritmi de rutare.
Funcţia principală a nivelului reţea este aceea de a îndruma pachetele de la sursă până la
destinaţie. De-a lungul acestui traseu, pachetele trec prin mai multe noduri de comutaţie. Algoritmii
de rutare aparţin acelei componente a nivelului reţea care are rolul de a decide, pentru un pachet care
a intrat într-un anumit nod, care este linia de ieşire. Dacă reţeaua foloseşte un serviciu de tip
datagrame, această decizie este luată pentru fiecare pachet de date în parte. Dacă reţeaua lucrează cu
circuite virtuale, decizia de rutare este luată doar în faza de iniţializare a circuitului, toate pachetele
urmând ruta prestabilită.
Algoritmii de rutare trebuie să îndeplinească o serie de cerinţe:
1. Exactitate;
2. Simplitate;
3. Flexibilitate, adică să fie capabile să se adapteze la schimbările care survin în reţea;
4. Stabilitate, adică să conveargă cât mai repede către un optim,
5. să fie echitabile faţă de toţi clienţii, adică să nu favorizeze anumiţi utilizatori,
6. să fie optime relative la numite criterii precum:
 numărul de salturi în reţea (numărul de noduri parcurse până la destinaţie);
 distanţa între sursă şi destinaţie;
 timpul mediu de aşteptare în tampoanele transmiţătoarelor aferente traseului precum şi
duratele de propagare pe arcele (link-urile) implicate;
 costul comunicaţiei (fiecare link are un cost asociat);
 durata propagării (se determină cu ajutorul unor "pachete ecou" ce sunt returnate cât de
repede se poate de nodul receptor către sursă).

Algoritmii de rutare pot fi grupaţi în două clase principale:


I. algoritmi adaptivi - care au capacitatea de a lua decizii bazate pe măsurători şi estimări de trafic în
timp real. Rularea adaptivă poate fi:
a) centralizată, atunci când există un singur nod care ia deciziile de rutare pentru toată reţeaua;
b) locală (izolată), atunci când nodurile iau decizii de rutare în mod individual, fără a avea informaţii
despre situaţia din restul reţelei;
c) distribuită, atunci când deciziile luate de către fiecare nod sunt bazate pe un schimb de informaţii
realizat de către nod cu vecinii săi.
II. Algoritmi neadaptivi care nu au posibilitatea să ţină seama de starea prezentă a reţelei. În cazul
rutării neadaptive, tabelele de rutare sunt stabilite la punerea în funcţiune a reţelei, pe baza unor date
estimative referitoare la reţea, şi sunt fixe pe toată durata de aplicare. În principiu un algoritm fix se
modifică doar la sesizarea unor schimbări majore în caracteristicile traficului deservit de reţea sau în
structura reţelei. Este evident că în anumite perioade, datele estimative luate în considerare la
proiectarea algoritmilor ficşi de îndrumare să difere mult de datele reale culese din reţea, ceea ce
conduce în funcţionare la situaţii de blocare mai mult sau mai puţin grave.
Există posibilitatea de a îmbunătăţi performanţele unei reţele ce funcţionează după o
îndrumare fixă, prin aplicarea procedurii de îndrumare multiperiodică; se construiesc mai mulţi
algoritmi de îndrumare pentru aceeaşi reţea, fiecare fiind valabil pe o anumită perioadă de timp de
funcţionare a reţelei, caracterizată de o anumită încărcare de trafic şi de distribuţie a acestuia. Fiecare
algoritm este fix şi se aplică în mod exclusiv pe perioada pentru care a fost construit, trecerea pe un
alt algoritm, făcându-se în mod automat la expirarea perioadei de valabilitate.

Teoria grafurilor
Modelarea reţelelor de comunicaţii, în vederea stabilirii planurilor de îndrumare şi realizării
analizelor de performanţe se execută într-o manieră simplă şi deosebit de avantajoasă cu ajutorul
grafurilor. Ideea este de a construi graful unei reţele, în care fiecare nod al grafului reprezintă un
centru de comutaţie (un nod) al reţelei, iar fiecare arc al grafului reprezintă o linie de comunicaţie
(denumită adesea link). Pentru a găsi un drum (o rută) de-a lungul reţelei între o pereche dată de
centre de comutaţie, este suficient a determina, cu un algoritm adecvat, drumul cel mai scurt prin graf
între nodurile corespunzătoare. Drumul cel mai scurt prin graf are o mulţime de înţelesuri, în funcţie
de elementul considerat ca măsură a acestui drum: număr de salturi (tranzite), distanţă fizică între
noduri, lungimea şirului de aşteptare anexat link-ului, încărcarea link-ului, lăţime de bandă afectată,
costul de comunicaţie, întârzierea de transmisie etc.
Înainte de a prezenta principiile diferiţilor algoritmi folosiţi în stabilirea rutelor optime prin
reţele (prin grafurile asociate lor), se impune a fi precizate noţiunile fundamentale specifice teoriei
grafurilor [MINOU 85].
Un graf G = [X, U] este determinat prin două mulţimi:
- mulţimea X a nodurilor (vârfurilor), numerotate cu i = 1,2,...,N. Dacă N este numărul
total al nodurilor, N = card X, atunci se spune că graful G este de ordinul N;
- mulţimea U a arcelor u. Un arc u ∈ U este o pereche de noduri ale grafului G, u = (i, j).
Se notează prin cârd U = M dimensiunea mulţimii arcelor.
În reprezentare grafică vârfurile se desenează printr-un punct sau chiar un cerc, iar arcele prin
linii (drepte sau curbe) cu sau fără săgeţi, după cum graful este orientat sau neorientat (figura 2).
Graful neorientat este graful în care perechile de noduri care definesc un arc sunt neordonate.
De exemplu perechile (i, j) şi (j, i) definesc acelaşi arc într-un graf neorientat.
Graful orientat este graful în care perechile de noduri care definesc un arc sunt orientate. De
exemplu pentru arcul (i, j): i este nodul sursă (extremitatea iniţială) a arcului, iar j este nodul destinaţie
(extremitatea terminală) a acestuia. Un arc ale cărui extremităţi coincid este o buclă.

Figura 2. Graf orientat cu 5 noduri şi 9 arce (exemplu)


Graful complet este graful în care pentru orice pereche de noduri i şi j există cel puţin un arc
de forma (i, j) sau (j, i). Cu alte cuvinte graful complet conţine numărul maxim posibil de arce între
cele N noduri ale sale. Pentru un graf neorientat, numărul maxim de arce este N(N-1)/2, iar pentru un
graf orientat numărul maxim de arce este N(N - 1) .
Densitatea grafului este raportul între numărul arcelor sale şi numărul arcelor din graful
complet având acelaşi număr de noduri cu el. Astfel în cazul grafului orientat densitatea este:

M
N (N − 1) , iar pentru graful neorientat densitatea
este de 2 ori mai mare. Trebuie precizat că în general, în aplicaţiile practice grafurile au un număr
important de noduri, dar totuşi o densitate scăzută. Aceasta face ca algoritmii folosiţi în diferite
scopuri să poată fi uşor folosiţi, numărul necesar de iteraţii pentru obţinerea soluţiilor fiind mic.
Se spune că j este succesorul lui i dacă există un arc pentru care extremitatea iniţială este i

iar cea terminală este j, adică u = (i, j). Ansamblul succesorilor unui nod i ∈ X se notează prin Гi şi

reprezintă aplicaţia multivocă a nodului respectiv. Nodul i este extremitatea iniţială a drumului, iar
nodul j este extremitatea sa finală. Aceasta înseamnă că, în căzui grafurilor simple (care conţin cel
mult un singur arc între oricare pereche de noduri), un drum poate fi descris prin succesiunea

nodurilor pe care el le parcurge în ordine: {i,i1 ,...iq−1 , j}. Dacă ne referim la acelaşi exemplu din
figura 11.3, atunci între nodurile 1 şi 4 se pot urma drumurile P1 = {1,2,4}, P2 = {1,2,3,4} sau P3 =

{1,3,4} . Toate aceste drumuri sunt drumuri elementare, pentru că în parcurgerea lor nu se întâlneşte
de două ori acelaşi nod. Lungimea drumului se exprimă prin numărul arcelor componente sau prin
sumarea unor parametrilor aferenţi acestor arce (lungime fizică, timp de propagare a semnalelor, cost
etc.).
Circuitul este un drum ia care extremităţile coincid.
Graful conex asigură un drum pentru fiecare pereche de noduri, există de acces între ele.
Arborele este un graf orientat care nu conţine bucle (cicluri) şi pentru care sunt valabile
următoarele proprietăţi:
- există un singur nod, numit rădăcină, spre care nu este dirijat nici un arc,
- pentru orice nod diferit de rădăcină există un singur arc dirijat spre el,
- orice nod este accesibil dinspre rădăcină pe un singur drum.
În descrierea, modelarea şi analiza reţelelor, algoritmii de bază utilizaţi urmăresc descoperirea
arborilor caracteristici lor. Dintre motivele pentru care arborii sunt utilizaţi ca bază în numeroşi
algoritmi şi tehnici de modelare şi analiză, se pot enumera următoarele:
- arborii sunt reţele minimale, asigurând conectivitate fără a folosi link-uri suplimentare;
- furnizează o cale unică între fiecare pereche de noduri, eliminând problemele de rutare.

Algoritmul Kruskal pentru arborele minim


În procesul de optimizare a îndrumărilor este util să se cunoască drumul cel mai scurt prin
reţea care interconectează toate nodurile unei reţele. Acest drum este denumit arbore minim şi
constituie totdeauna un element de comparaţie pentru orice drum real dintre două noduri oarecare ale
reţelei, în general, un arbore este un graf conex fără cicluri.
În stabilirea arborelui minim se pleacă de la cunoaşterea grafului reţelei şi a lungimii fiecărui
arc. Algoritmul se compune din executarea etapelor următoare:
- se ordonează arcele după lungimea lor în sens crescător.
- cel sau cele mai scurte arce fac parte din arborele minimal. Se formează astfel subarborele
iniţial şi se elimină din listă arcul sau arcele astfel considerate.
- dintre arcele rămase în listă se aleg în continuare cel sau cele mai scurte (de aceeaşi lungime)
care nu formează un ciclu cu subarborele precedent. Se obţine astfel un al doilea subarbore.
- se continuă în acelaşi mod până ce au fost reţinute cele N-1 arce arborelui minimal.

Aplicaţia 1
Se consideră o reţeaua cu 7 noduri de comutaţie, ce sunt interconectate conform grafului din
figura 1.3(a). Determinaţi arborele minim al acestei reţele.
Figura 1.3 (a) graful reţelei; (b) arborele minim

Rezolvare: ordonarea arcelor după lungimea lor, exprimată în unităţi convenţionale este
următoarea:
Lungime: 3 4 5 6 7 8 9 10 11 13 infinit
AC
B
BC AB DE F Toate arcele care nu
Arc: AF BG CD CG DG AG DF AD AE EF există (de exemplu BD,
CE CF etc.)
EG

Începând cu cel mai scurt arc (AF = 3) sunt considerate toate arcele grafului, în ordinea
crescătoare a lungimii lor, eliminându-se cele care închid contururi împreună cu cele anterior reţinute
(în tabel sunt subliniate arcele reţinute). Arborele care rezultă în urma aplicării algoritmului este
reprezentat în figura 11.4(b); acest arbore are lungimea: L = 3 + 2×4 + 5 + 8 = 31
***
Trebuie precizat ca o observaţie importantă că arborele minim nu reprezintă drumul cel mai
scurt prin reţea pentru orice pereche de noduri. El poate fi doar un ghid în aprecierea eficienţei
drumurilor prin reţea: nici un drum real între două noduri oarecare ale reţelei nu trebuie să fie mai
lung decât arborele minim.
Algoritmi pentru drumul cel mai scurt

În definirea unui algoritm de rutare optimă se urmăreşte minimizarea unei funcţii de cost al
reţelei, plecând de la cunoaşterea costului individual pe arc.
Fiind dat graful G = [X, U], unde X este mulţimea nodurilor şi U este mulţimea arcelor din
graf, pentru fiecare arc u ∈ U, care uneşte două noduri i,j∈X se asociază mărimea l(u) = lij (ce poate
reprezenta o distanţă, un cost, un timp etc.) având valori reale. Pe baza acestor mărimi, se poate
calcula lungimea drumului µ cel mai scurt dintre o sursă şi o destinaţie:
adică prin considerarea lungimilor tuturor arcelor înlănţuite în acest drum. Drumul minim este cu
siguranţă ales dintre mai multe drumuri elementare posibile între perechea de noduri (sursă -
destinaţie) considerate.

Algoritmul Bellman-Ford-Moore
Ecuaţia Bellman-Ford-Moore care exprimă principiul de optimizare a drumului de la o sursă
k la un nod oarecare i, este:

D min(Dkj + l ji ) pentru i ≠ k
ki
= (j) 0 pentru i = k

În ecuaţia Dki este lungimea drumului minim de la sursa k la destinaţia i, iar j este un alt nod

al reţelei, care este adiacent destinaţiei, aflându-se la distanţa cunoscută lji faţă de aceasta, şi pentru

care se ştie cu certitudine că Dkj este minim (figura 11.5). (adiacenta a două noduri este materializată

prin existenţa un arc între ele.) Dacă Dkj nu ar fi drum minim, atunci cu siguranţă că alt nod
intermediar j ar fi fost considerat. Sursa este totdeauna la distanţa 0 faţă de ea însăşi.

Figura 1.4 Trasee de acces între o pereche de noduri k - i

Ecuaţia face parte dintr-un sistem de ecuaţii de optimizare care consideră ca sursă şi respectiv
ca destinaţie toate cele N noduri ale reţelei (i, j, k = 1.....N).
Algoritmul Bellman-Ford-Moore (1957) impune ca fiecărui nod să i se
asocieze o etichetă ( pk (i), Dki ) , conţinând două câmpuri:

- câmpul pk (i) - precizează identitatea nodului precedent (predecesor), aflat pe drumul de

la nodul sursă k la nodul curent i,

- câmpul Dki - distanţa de la nodul sursă până la nodul curent, de-a lungul celui mai bun

drum cunoscut.
Figura 1.5 Exemplu de aplicare a algoritmului Bellman-Ford-Moore
Iniţial, nici o cale nu este cunoscută, deci în mod convenţional, etichetele provizorii ale tuturor
nodurilor sunt (-1.-1), mai puţin eticheta nodului sursă k, aceasta fiind evident (k,0). Eticheta sursei
este considerată validă şi nu se va modifica ulterior (figura 1.5).
Etichetele provizorii ale nodurilor se modifică iterativ pe măsură ce se derulează procedura
de minimizare a drumului, ajungând evident la o formă finală, după un număr de paşi de rulare a
algoritmului.
Un pas de rulare se efectuează pentru un nod anumit al grafului. El presupune considerarea
tuturor succesorilor lui şi reactualizarea etichetelor.
Reactualizarea etichetelor se "judecă" pe baza comparaţiei dintre vechile distanţe Dki ale
nodurilor şi noile distanţe Dki* , ce sunt calculate pe trasee care includ nodurile predecesoare şi care
deţin valori valide în etichetele lor. O valoare este considerată validă dacă ea s-a păstrat în iteraţia
anterioară. Distanţa şi

identitatea predecesorului vor fi modificate numai dacă Dki = −1sau daca


D* 〈D unde D* =D +l cu j≠ -1. Altfel, se păstrează eticheta de la pasul anterior.
ki ki ki ki ji

Numărul maxim de iteraţii care trebuie a fi executate în cadrul algoritmului pentru


identificarea drumul minim de la o anumită sursă este N-1.

Algoritmul "cartofului fierbinte"


Atunci când un pachet nou apare într-un nod, care este provenit din reţea sau de la surse proprii
şi care nu îi este adresat, aplicarea algoritmului "cartofului fierbinte" (hot potato - la pomme de
terre bruillante) face ca nodul să se debaraseze cât mai repede de el. Pachetul va fi plasat într-un şir
de aşteptare al unei linii de ieşire oarecare, pentru a fi îndrumat în reţea, fără ca nodul respectiv să se
preocupe de direcţia în care pachetul va fi îndrumat sau dacă acea direcţie are vreo legătură cu
destinaţia pachetului. Înseamnă că această rutare nu ţine cont de adresele de destinaţie ale pachetelor
şi nici de situaţia de ocupare din restul reţelei.
O îmbunătăţire a utilizării algoritmului se obţine prin considerarea unor anumite criterii de alegere a
liniei de ieşire, cum ar fi de exemplu lungimea şirului de aşteptare sau gradul de prioritate al liniei.
În consecinţă, se poate folosi una din variantele următoare:
- pachetul nou sosit este poziţionat în şirul de ieşire a cărui lungime este cea mai mică,
- se alege aleator una din ieşirile a cărei coadă de aşteptare nu depăşeşte un anumit prag de
umplere,
- se alege linia de ieşire cu gradul maxim de prioritate (priorităţile între linii se stabilesc în
raport cu experienţa anterioară a nodului),
- ordonând liniile de ieşire în două tabele, după lungimea cozii şi după gradul lor de prioritate,
se alege ieşirea ce corespunde sumei minime a celor doi parametri; valorile considerate se
reactualizează permanent.

Algoritmul de autoînvăţare "backward learning"

Ideea care stă la baza acestui algoritm de autoînvăţare "din auzite" (backward learning - savoir
différé) este aceea că se pot afla date despre nodurile vecine prin interpretarea informaţiilor conţinute
în pachetele care sosesc dinspre acele noduri. În acest scop, fiecare pachet trebuie să conţină pe lângă
identificatorul nodului sursă şi un contor care se incrementează la fiecare salt prin reţea (trecere printr-
un nod intermediar).
Astfel, dacă un nod primeşte pe linia sa de intrare nr.k un pachet provenind de la nodul X, pachet
având contorul de salturi cu valoarea q, atunci înseamnă că nodul X se află la distanţa q pe drumul liniei k.
Dacă în memoria sa de rute, nu există un alt drum mai scurt spre X, atunci nodul învaţă această rută spre X
prin linia k, reactualizând corespunzător tabela de rutare.
După un anumit timp de funcţionare a reţelei, toate nodurile reuşesc să descopere în acest fel
care le sunt rutele optime către celelalte noduri. Dar, în acest proces de stabilire pe ansamblul reţelei
a rutelor optime, nu s-a putut avea în vedere încărcarea diferitelor trasee sau chiar starea lor de
nefuncţionare. Înseamnă că definirea anumitor trasee ca fiind cele mai scurte nu este sprijinită de
cunoaşterea unor informaţii complete asupra reţelei, deci "optimul" este doar aparent sau parţial
corect.
Pentru a elimina pe cât posibil deciziile eronate, toate nodurile trebuie să reiau periodic
activitatea de căutare a rutelor optime "uitând" vechile trasee. În timpul acestor căutări, rutarea este
suboptimală. Dacă perioada este prea mare, reţeaua nu se poate adapta rapid modificărilor apărute.
Dacă reluările sunt prea dese, timpul de convergenţă al algoritmului riscă să nu mai fie atins, rutarea
fiind continuu suboptimală.

Algoritmul "inundării"
Forma extremă a rutării locale este inundarea în care orice pachet de intrare este emis pe toate
liniile de ieşire din nod, cu excepţia liniei pe care a sosit. Inundarea generează astfel un număr excesiv
de mare de pachete duplicate, care, dacă nu sunt luate măsuri de prevedere speciale, pot conduce la
apariţia unor situaţii nedorite de blocare a întregii reţele.
Prin aplicarea algoritmului de inundare a ieşirilor probabilitatea ca orice pachet să ajungă în
final la destinaţia sa este suficient de mare, deşi pachetele nu sunt orientate direct de sursă pe ruta
optimă. Totuşi nu trebuie eliminat riscul congestionării reţelei în ansamblu, prin migrarea haotică a
copiilor de pachete în speranţa atingerii destinaţiilor adecvate, şi chiar a nodurilor particulare, care
primesc în mod repetat aceleaşi pachete.
Au fost create diferite mecanisme care limitează multiplicarea pachetelor prin procesul de
inundare a ieşirilor:

Varianta 1: limitarea drumului prin reţea. Sursa introduce în eticheta pachetului o informaţie
de contorizare, care reprezintă numărul maxim de salturi (de noduri traversate) ce pot fi efectuate în
reţea. Acest contor va fi decrementat la fiecare tranzit suferit de pachet într-un nod pe ruta sa spre
destinaţie. Când valoarea contorului devine nul, pachetul este distrus.
În mod ideal, contorul se iniţializează cu lungimea drumului dintre sursă şi destinaţie
(exprimată în număr de salturi şi cunoscută eventual cu ajutorul algoritmului de autoînvăţare). Dacă
sursa nu cunoaşte cât de mare este această lungime, atunci contorul poate fi iniţializat pentru cazul cel
mai defavorabil: distanţa cea mai mare din reţea.
Pentru a preîntâmpina situaţiile critice, când o parte a reţelei este în deranjament şi este scoasă
din funcţiune, valorile respective ale contorului, se pot majora cu un coeficient de siguranţă. În plus,
la destinaţie este necesară ţinerea unei evidenţe a pachetelor recepţionate, pentru a putea elimina
copiile.
Varianta 2: verificarea identităţii pachetelor primite. Fiecare sursă numerotează secvenţial
pachetele pe care le introduce în reţea. De asemenea, fiecare nod îşi construieşte liste pentru fiecare
sursă, conţinând numerele pachetelor deja primite. Dacă un pachet se află pe o asemenea listă, atunci
el va fi distrus.
Pentru ca listele să nu crească nelimitat, trebuie ca fiecare din ele să fie asociată cu un contor
k. Contorul precizează că toate pachetele cu număr secvenţial sub k au fost deja primite, deci lista
completă a acestora nu mai este necesară.
Varianta 3: inundare selectivă. Nodul de tranzit nu trimite un pachet pe orice linie de ieşire, ci
doar pe acelea care "conduc" pachetul în direcţia aproximativ bună. Metoda poate fi aplicată doar în
cazul reţelelor cu structură regulată; un pachet sosit dinspre vest este orientat în direcţia estică a reţelei.
Varianta 4: rularea aleatoare. Pe direcţia aproximativ bună, nodul de tranzit alege la
întâmplare o singură ieşire (se utilizează superior diferitele trasee; algoritmul este foarte robust).
Inundarea nu este o metodă practică pentru orice aplicaţie. Pentru reţelele militare ea asigură o
garanţie sporită a menţinerii comunicaţiilor, dacă ne gândim că în situaţii conflictuale în orice moment
rutele optime pot fi "distruse" şi exact atunci menţinerea legăturilor este deosebit de importantă. De
asemenea, inundarea este recomandată aplicaţiilor de baze de date distribuite, în care este necesară
uneori reactualizarea tuturor datelor concurente. Poate cea mai importantă utilizare a algoritmului de
inundare este aceea de a furniza o măsură de comparare cu alţi algoritmi: inundarea alege totdeauna
calea cea mai scurtă dintre mai multe căi paralele.
Algoritmul de rulare "delta"
Acest algoritm este o combinaţie între rutarea centralizată şi rutarea locală. În mod individual,
nodurile îşi măsoară "costul" fiecărei linii şi trimit periodic către nodul central un pachet cu datele
stabilite. Costul unei linii poate reprezenta timpul de întârziere, lungimea cozii de aşteptare, debitul
etc. Pe baza acestor informaţii, nodul central stabileşte cele mai bune n drumuri de urmat pentru fiecare
pereche de noduri i şi j ale reţelei, precum şi costurile aferente lor C1 (i, j),C2 (i, j),...,Cn (i, j) . Toate
aceste drumuri sunt echivalente pentru o relaţie de comunicaţie (i, j) pentru că au costuri comparabile,

anume respectând o abatere maximă δ , aceeaşi pe întreaga reţea, adică Ck (i, j) − C1 (i, j)〈δ , pentru

orice k = 1,n .
Nodul central, după ce a stabilit aceste echivalenţe, trimite către fiecare nod lista drumurilor sale
echivalente către toate destinaţiile din reţea, drumuri recomandate pentru rutare. De precizat că drumul
nu este descris în totalitate, ci doar prin identitatea ieşirii de ales pentru flecare destinaţie. Rămâne ca
orice nod să decidă singur asupra drumului efectiv ales. Alegerea se face fie întâmplător, fie prin
aplicarea unui criteriu suplimentar (eventual angajare prioritară în raport cu valoarea exactă a costului).
Când δ = 0, atunci nu se poate accepta decât drumul de cost minim, toate celelalte drumurile
posibile fiind inferioare lui; deci doar nodul central va decide asupra rulării, adică ne aflăm în cazul
rutării centralizate. Dacă δ → ∞ , atunci toate drumurile posibile sunt judecate ca fiind echivalente şi
deciziile de rutare se iau la nivelul fiecărui nod, pe baza informaţiilor locale; este cazul celei mai
întâmplătoare rutări locale. Între aceste două situaţii extreme, se negociază soluţia cea mai convenabilă,
prin alegerea valorii parametrului δ, şi se împarte responsabilitatea luării deciziei de rutare între nodul
central şi toate celelalte noduri subordonate lui.
Algoritmul de "rutare optimală"
Înainte de a prezenta algoritmii specifici de rutare distribuită, este util a face câteva precizări
generale referitoare la rutele optime, fără a ţine seama de topologia reţelei sau de traficul scurs de ea.
Aceste precizări se încadrează în aşa numitul "principiu de optimizarea”, care prevede că:
dacă se constată că nodul J este pe calea optimă care vine de la nodul I la nodul K, atunci calea optimă
de la J către K urmează aceeaşi rută.
Consecinţa directă a principiului de optimizare este aceea că setul căilor optime care pleacă de
la toate sursele din reţea şi care sunt relative la o destinaţie dată, formează un arbore cu rădăcina în
nodul destinaţie. Acesta este numit arbore colector şi nu este cu necesitate unic. De exemplu, pentru
reţeaua din figura 1.6, s-a construit arborele colector pentru destinaţia B în raport cu numărul minim
de salturi până la ea, plecându-se de la toate sursele din reţea. Într-un arbore colector se folosesc
noţiunile de "amonte" şi "aval" pentru a se preciza poziţia diferitelor noduri; de exemplu, pentru traficul
plecând de la M spre B, nodul N este în amonte faţă de J, iar C este în aval faţă de J.

Figura 1.6 Subreţea (a) şi arbore colector (b)


Scopul oricărui algoritm de rutare este de a descoperi şi a folosi arborii colectori pentru toate
nodurile. Arborele colector, ca orice arbore, nu conţine bucle, astfel că fiecare pachet poate fi livrat,
în mod teoretic, după un număr finit şi limitat de salturi.
Însă, în practică, nu se întâmplă totdeauna aşa, deoarece anumite link-uri sau chiar unele
noduri fiind în deranjament, celelalte noduri pot avea o imagine falsă asupra topologiei reţelei şi deci
pot construi rute neconforme cu realitatea şi imposibil de urmat. De aceea este imperios necesar ca
nodurile să culeagă şi să folosească informaţii reale asupra reţelei, în scopul stabilirii unor rute optime
pentru îndrumarea pachetelor proprii sau ale celor tranzitate.
În raport cu informaţiile primite, nodul are posibilitatea să creeze rute de îndrumare adaptate
condiţiilor reale, adică să realizeze o îndrumare adaptivă. Pe toată perioada de menţinere a valabilităţii
informaţiilor se păstrează acelaşi set de rute, care conduc la efectuarea unei îndrumări fixe (permanent
sau numai pe un timp limitat). Dacă nodurile nu pot cunoaşte sau nu pot ţine seama de condiţiile de
trafic şi de ocupare a reţelei, ele vor folosi aşa numiţii algoritmi statici, bazaţi pe elementele
constructive fixe ale reţelei (topologie şi distanţe fizice între noduri).
Fiecare nod deţine o tabelă de costuri, în care coloanele corespund nodurilor vecine, iar liniile
se completează pentru nodurile de destinaţie. Conţinutul fiecărei locaţii din tablou reprezintă costul
drumului către destinaţie de-a lungul arborelui colector care conţine nodul vecin corespunzător.

Figura 1.7 Arbori colectori (de cost minim)

Fie de exemplu reţeaua din figura 1.7, în care sunt precizate şi schemele tuturor arborilor
colectori de cost minim ce corespund reţelei. Tabelul 11.2 conţine costurile de rutare pe care nodurile
4, 1 şi 2 trebuie să le considere în alegerea rutelor sale minime.
Tabelul 1 Costurile pe arborii colectori din figura 1.7

Nod vecinii nodului 4 vecinii nodului 1 vecinii nodului 2


destinaţie 1 2 5 2 3 4 1 3 4
1 [1] 4 -1 - - - [2] 3 6
2 3 [2] -1 [2] -1 3 - - -
3 -1 5 [2] 5 5 [3] 5 4 [3]
4 - - - 4 -1 1 3 [2] 5
5 -1 -1 [1] 5 -1 [2] 4 [2] 4
6 -1 -1 [3] 7 -1 [4] 6 [5] 6

S-a notat prin "-1" faptul că nodul vecin se află în amonte pe arborele colector al destinaţiei
dorite. Tabela de rutare se completează alegând (exceptând valorile negative) ieşirea spre vecinul
care produce ruta de cost minim (încadrată în paranteze drepte).
Dacă un link al reţelei se întrerupe din cauza unui deranjament, atunci rutele spre anumite
destinaţii sunt blocate. În asemenea situaţii un server nu poate să "întoarcă" traficul său, ci trebuie să
găsească un vecin care are acces la alte ramuri disponibile ale arborelui colector. Fie că, pentru
exemplul ales, link-ul 4-5 este în deranjament. Nodul 4 începe prin a marca toate locaţiile din tabelul
de rutare care foloseau nodul 5 ca vecin "optim" (cazul destinaţiilor 3, 5 şi 6). Se caută apoi o
alternativă pentru drumurile minime ce au fost eliminate întreruperea prin 4-5. Pentru destinaţia 3
există o variantă suboptimă prin nodul 2 (de cost 5) şi aceasta va fi folosită. Pentru celelalte însă,
situaţia este dificilă, deoarece ambii vecini sunt în amonte faţă de 4. În consecinţă nodul 4 trimite
vecinilor 1 şi 2 un pachet de control, al cărui conţinut este "ajutor, nu pot ajunge la 5”. La recepţia
acestuia, fiecare vecin controlează dacă are o rută înlocuitoare (anterior suboptimală) şi comunică
imediat răspunsul. Pe baza răspunsurilor primite de la vecinii accesibili, nodul 4 reface tabela sa de
rutare, alegând noile rute minime. Tabelul 11.3 prezintă noile costuri evaluate de vecinii "văzuţi" de
către nodul 4; pentru nodul 5, care este "invizibil" din cauza întreruperii link-ului 4-5, costurile sunt
simbolic marcate prin "-2".
Tabelul 2 Noile costuri (răspuns la pachetul de control emis de nodul 4)
nod vecinii nodului 4
destinaţie 1 2 5
1 [1] 4 -2
2 3 [2] -2
3 -1 [5] -2
4 - - -
5 6 [41 -2
6 7 [6] -2
Se observă că deşi un link al reţelei este în deranjament, nodurile reuşesc să refacă traseele de
acces spre diferitele destinaţii din reţea, prin informaţiile reciproce pe care şi le transmit. Dacă iniţial,
nodul 4 folosea pentru destinaţiile sale rute ce începeau în ordine cu nodurile vecine 1, 2, 5, 5 şi 5,
după reconfigurare aceleaşi destinaţii sunt accesate prin vecinii 1, 2, 2, 2 şi 2.

Algoritmul vectorilor de distanţe

Algoritmii de rutare prin vectori de distanţe operează prin intermediul unor tabele (adică
vectori) conţinute în fiecare nod şi care precizează cea mi bună distanţă cunoscută faţă de fiecare
destinaţie, precum şi linia de ieşire ce trebuie folosită pentru a ajunge la ea. Fiecare nod îşi
construieşte două categorii de tabele:
- tabelul destinaţiilor - conţine distanţele cunoscute până la fiecare destinaţie din reţea şi
care sunt măsurate pe drumuri ce folosesc fiecare linie de ieşire în parte. Acest tabel este reactualizat
periodic pe baza informaţiilor primite de la vecini şi prin reţinerea valorilor minime.
- tabelul vecinilor - precizează distanţa până la fiecare nod vecin, stabilită periodic prin
culegerea locală a informaţiei necesare.
De exemplu, dacă pentru o reţea se consideră timpul ca element de măsură al "distanţei",
atunci fiecare nod trebuie să trimită, la fiecare T msec, fiecărui vecin al său o listă cu întârzierile
estimate de el până la toate destinaţiile şi să primească informaţii similare de la toţi vecinii săi. În
plus, el cunoaşte întârzierea până la fiecare vecin.

Fie că un nod primeşte un tabel de destinaţii de la un vecin X ce conţine distanţa Xi msec

estimată de acesta pentru o destinaţie i oarecare. Ştiind că m este timpul pentru a ajunge până la nodul

vecin X, atunci înseamnă că nodul în cauză atinge destinaţia i în m + Xi msec via nodul vecin X.

Efectuând asemenea calcule cu informaţiile primite de la toţi vecinii, referitoare la aceeaşi destinaţie,
nodul alege ruta cu distanţa minimă. Ruta aleasă este optimă pentru acest moment al estimării şi este
menţionată în linia corespunzătoare destinaţiei respective în noua tabelă de destinaţii (de îndrumare).
Conţinutul noii tabele rămâne neschimbat până la estimarea viitoare şi este folosit la îndrumarea
pachetelor pe parcursul întregii perioade T. Trebuie precizat că vechea tabelă de îndrumare nu a fost
luată în considerare la calculul noilor distanţe.
Rutarea ierarhică
Pe măsură ce reţeaua devine tot mai întinsă, tabelele de rutare din noduri devin tot mai mari.
Memoria ocupată de către tabele creşte, iar timpii necesari pentru luarea unei decizii de rutare ajung
să fie prohibitivi. La un moment dat reţeaua poate creşte în aşa măsură, încât un nod de comutaţie să
nu aibă ieşiri suficiente către toate destinaţiile. Soluţia pentru asemenea cazuri este ierarhizarea
marilor reţele, adică împărţirea nodurilor pe mai multe regiuni, în care există o subreţea cu structură
proprie. Astfel, fiecare nod va cunoaşte detalii doar asupra rutării pachetelor spre destinaţiile din
regiunea sa, fără a avea vreo informaţie asupra structurii interne a altor regiuni. Această soluţie este
şi mai evidentă dacă luăm în considerare cazul interconectării subreţelelor.

Figura 1.8 Rutare ierarhică pe 2 niveluri

Pentru reţelele deosebit de mari ierarhizarea se extinde pe mai multe niveluri: se grupează
regiunile în structuri radiale (clustet), acestea în zone, zonele în grupuri etc.
Figura 1.8 prezintă un exemplu de rutare pe 2 niveluri ierarhice într-o reţea cu 5 regiuni,
înglobând un număr de 17 noduri de comutaţie. Înseamnă că o tabelă completă de rutare (neierarhică)
ar trebui să conţină 17 intrări pentru oricare din nodurile reţelei. Dacă însă se aplica rutarea
ierarhizată, tabela de rutare se simplifică substanţial; de exemplu, pentru nodul A sunt necesare doar
7 linii în tabelă: 3 intrări pentru regiunea locală (ca şi în tabela anterioară), o intrare pentru regiunea
2 (ruta prin 1B - 2A) şi încă una pentru toate celelalte regiuni 3, 4 şi 5 (ruta prin 1C - 3B - 4A - 5A).
Rutarea pachetelor prin reţea se face prin decizii luate secţiune după secţiune, ceea ce provoacă uneori
realizarea unor căi mai lungi decât cele optime.
De exemplu, nodul 1A dorind să atingă destinaţia 5E, comunică cu 1C care, ştiind unde se
află 5E, trimite pachetele spre 3B, din aceleaşi considerente acesta le retransmite lui 4A şi în sfârşit
ele ajung în regiunea de destinaţie, prin intermediul lui 5A (figura 11.9). Calea urmată deci pentru
comunicaţia 1A - 5E urmează un traseu cu 5 tranzite. Schema aleasă de rutare nu este însă optimă
pentru toate relaţiile din reţea; de exemplu cea mai bună rută pentru 1A - 5C este prin regiunea
2. S-a ales totuşi pentru traficul total provenind de la regiunea 1 şi destinat regiunii 5 rutarea
prin regiunea 3, pentru că se obţin astfel rute minime pentru majoritatea destinaţiilor din 5.
Pentru optimizarea reţelelor ierarhizate este important a se cunoaşte pentru un anumit număr
total de noduri care este cel mai potrivit număr de niveluri de rutare. Fie de exemplu o reţea cu 720
de noduri. Dacă s-ar alege o structură de tip plasă, cu interconectare totală, atunci tabela de rutare ar
avea 720 linii de intrare. Dacă se recurge la o ierarhizare cu 24 regiuni cu câte 30 de noduri fiecare,
atunci fiecare ruter ar folosi 53 de intrări (30 locale şi 23 distante), ceea ce reprezintă o reducere
evidentă a tabelelor de rutare.
Kamoun şi Kleinrock (1979) au descoperit că numărul optim de niveluri ierarhice pentru o
reţea cu N noduri este lnN, ceea ce necesită e⋅lnN intrări în fiecare ruter. De asemenea, ei au observat
ca rutarea ierarhică provoacă o anumită creştere a lungimii medii a drumurilor, dar această creştere
este suficient de mică, putând fi acceptată fără rezerve.
Rutarea prin difuziune
Există situaţii când este necesar ca un terminal să trimită aceleaşi informaţii către mai multe sau către
toate terminalele reţelei. Este cazul unui serviciu care trimite rapoarte despre vreme, sau reactualizări
ale unei baze de date distribuite, sau programe radio. Pentru un asemenea serviciu este mai convenabil
să lucreze în regim de difuziune ("broadcast”) a datelor către toate terminalele; datele vor fi citite de
toate terminalele sau numai de către terminalele interesate. În acelaşi regim de rutare prin difuziune
poate funcţiona un ruter care doreşte să afle care îi sunt vecinii şi să restabilească tabelele de rutare.
Metodele de implementare a rutării prin difuziune sunt numeroase:
Metoda 1: emiţătorul trimite câte un singur pachet către fiecare destinaţie. Aplicarea metodei
nu necesită caracteristici speciale pentru reţea; în plus ea are şi avantajul că nu se încarcă reţeaua cu
multe pachete. Există însă dezavantajul că fiecare terminal trebuie să cunoască lista completă a tuturor
destinatarilor. În practică poate fi singura metodă posibilă, dar nu prezintă prea mare interes.
Metoda 2: sursa de pachete procedează la algoritmul de inundare a ieşirilor. Deşi inundarea
este o soluţie proastă pentru un algoritm de comunicaţie punct la punct, în cazul difuziunii ea merită
a fi considerată, mai ales atunci când nici unul din algoritmii prezentaţi deja nu este aplicabil.
Dezavantajul metodei constă în faptul că este generat pe ansamblul reţelei un număr mare de pachete,
ceea ce consumă considerabil capacitatea de transport a reţelei.
Metoda 3 - rularea multidestinaţie. În acest caz fiecare pachet generat de sursă conţine o
listă cu mai multe destinaţii dorite. Atunci când pachetul ajunge într-un ruter, acesta testează
destinaţiile pentru a stabili setul de ieşiri ce îi sunt necesare. O linie de ieşire este considerată necesară,
dacă ea reprezintă cea mai bună rută cel puţin pentru o destinaţie. Ruterul generează o nouă copie a
pachetului pentru fiecare linie de ieşire folosită şi include în fiecare pachet numai lista acelor
destinaţii care folosesc acea ieşire. De fapt setul destinaţiilor este împărţit între liniile de ieşire
folosite. După un număr suficient de salturi prin reţea, fiecare pachet va purta doar o singură destinaţie
şi va fi tratat ca un pachet normal. Această metoda reduce numărul pachetelor generate şi îndrumate
prin reţea, dar este posibil ca mai multe rutere diferite să trimită pachete către aceeaşi destinaţie.

Metoda 4: folosirea explicită a arborelui colector al ruterului care iniţiază difuziunea, sau a
oricărui alt arbore de acoperire adecvat situaţiei. Un arbore de acoperire este un subansamblu al
reţelei care conţine toate ruterele, dar care nu comportă bucle. Dacă fiecare ruter cunoaşte liniile
arborelui de acoperire, el poate copia un pachet intrat prin difuziune şi îl va trimite pe toate liniile
arborelui, mai puţin linia de sosire. Această metodă optimizează utilizarea liniilor producând numărul
minim necesar de pachete de difuziune. Singura problemă care trebuie rezolvată este cunoaşterea
obligatorie de către fiecare ruter a arborilor colectori sau de acoperire, ceea ce nu este totdeauna
posibil.
Metoda 5 - transmiterea pe drumul invers (reverse path forward). Această metodă încearcă
să aproximeze comportamentul anterior, chiar atunci când ruterele ignoră sau nu cunosc arborii de
acoperire. Ideea este deosebit de simplă odată ce a fost enunţată. Atunci când un pachet de difuziune
soseşte într-un nod, nodul verifică dacă pachetul a ajuns la el pe linia pe care el o foloseşte în mod
normal pentru a trimite pachete către sursa de difuziune. Dacă este aşa, atunci înseamnă că pachetul
de difuziune a avut o mare şansă de a fi urmat chiar ruta cea mai bună venind de la sursă şi este în
consecinţă pachetul original şi nu o copie a lui. În acest caz, ruterul copiază pachetul şi expediază
copiile pe toate liniile, mai puţin linia de sosire. Dacă însă pachetul a sosit pe altă linie decât cea
preferată în a atinge sursa, atunci el este distrus, fiind cu siguranţă o copie.

Figura 1.9 Algoritmul de transmitere pe drumul invers: (a) structura reţelei, (b) arborele M de

acoperire, (c) arborele construit prin trimitere pe drumul invers


Algoritmul de transmitere pe drumul invers este aplicat pentru reţeaua din figura 11.10,
referitor la nodul M. În primul moment M trimite pachete către N, J, F şi O, aşa cum se prezintă în
nivelul 2 al arborelui. Fiecare din aceste pachete sunt primite pe drumul preferat dinspre M şi marcăm
acest fapt prin cercul din jurul literei de identificare a ruterului; s-a considerat că drumul preferat
dinspre M este de-a lungul arborelui desenat. La nivelul 2 sunt în consecinţă generate 8 pachete, câte
două în fiecare nod. Cele 8 pachete ajung în rutere care sunt nevizitate până în acest moment, dar
doar 5 dintre ele sosesc pe drumurile preferate sursei, deci ruterele respective continuă algoritmul.
Din cele 6 pachete generate la nivelul 3, numai 3 sosesc pe drumuri preferate, anume în nodurile K,
C şi I; celelalte sunt dubluri şi sunt distruse în nodurile E, D şi O. Rutarea prin difuziune se termină
după 5 salturi prin reţea în decursul cărora s-au generat 23 pachete.
Avantajul acestui algoritm este acela că se implementează uşor, deoarece rutere nu trebuie să
cunoască arborii de acoperire, iar pachetele nu trebuie să conţină lista multi-destinaţiilor. În plus nu
îi sunt necesare nici mecanisme suplimentare pentru stoparea procesului de desfăşurare.
Rutarea muiticast
În unele aplicaţii este nevoie de a trimite pachete doar la un număr restrâns de rutere ale reţelei,
acestea aparţinând unui grup distinct de comunicaţii. Se foloseşte în asemenea situaţii un algoritm de
rulare muiticast [DEE 90 şi 93].
Dacă grupul este mic, atunci se poate adopta o procedură punct-la-punct de trimitere a
mesajelor. Dacă însă grupul este mare, această strategie este deosebit de costisitoare. Pentru grupurile
mari difuziunea ar putea fi o soluţie, dar nu pentru orice situaţie. Dacă de exemplu grupul ar avea
1000 de terminale, iar reţeaua întreagă ar comporta de 100 de ori mai multe noduri, este evident că
un număr ridicat de noduri nu ar fi interesate de mesajele grupului, pentru care un număr deosebit de
mare de pachete ar migra prin ansamblul reţelei. Este neapărat necesar trimite mesajele doar către un
grup bine definit de noduri, care este suficient de larg, dar mic în comparaţie cu dimensiunile întregii
reţele.
Pentru a realiza o rutare multicast se recurge la definirea unui administrator al grupului. În
plus, fiecare ruter trebuie să ştie cărui grupul îi aparţine şi care este componenţa lui. De asemenea el
va fi informat permanent asupra schimbărilor din grupul său. Toate aceste informaţii, referitoare
formarea sau distrugerea unui grup, la venirea într-un grup sau la părăsirea lui, se referă la alte procese
care nu privesc algoritmul de rutare.

Conform rulării multicast fiecare ruter calculează arborele de acoperire pentru toate celelalte
rutere din grupul său. De exemplu, în figura 1.10(a) este prezentată o reţea cu 2 grupuri, fiecare ruter
fiind ataşat la cel puţin un grup.
Figura 1.10 (a) Reţea, (b) Arbore de acoperire pentru nodurile din partea stângă, (c) Arbore

multicast pentru grupul 1, (d) Arbore multicast pentru grupul 2.

Când un proces trimite un pachet unui grup, primul ruter examinează arborele său şi elimină
toate liniile care nu conduc la membrii grupului său. În exemplul ales, figurile 11.11 (c) şi (d) indică
arborele "curăţat" pentru grupul 1 şi respectiv pentru grupul 2. Pachetele multicast vor fi trimise doar
de-a lungul arborelui corespunzător grupului. Pentru curăţirea arborilor sunt folosite diverse
proceduri, printre care de bază este algoritmul trimiterii pe drumul invers. Oricând un ruter primeşte
un pachet care nu este interesant pentru grupul său, el răspunde prin trimiterea unui mesaj PRUNE,
care informează sursa să nu mai trimită alte mesaje multicast acelui grup. În acest fel reţeaua este în
mod recursiv curăţată (pruned).
Un dezavantaj posibil al rutării multicast este acela că ar trebui scanate reţele uneori suficient
de largi. Presupunând că există o reţea cu n grupuri, fiecare având în medie m membri, ar însemna că
pentru fiecare grup trebuie memoraţi m arbori de acoperire curaţi, dintr-un total de mn arbori ai reţelei;
în unele situaţii sunt astfel necesare memorii deosebit de largi. O rezolvare ar fi prin folosirea
arborilor bazaţi pe rădăcină [BALL 93]: un singur arbore de acoperire este calculat pentru fiecare
grup. Când are de trimis un mesaj, orice terminal îl va trimite rădăcinii, care apoi efectuează rutarea
multicast pentru întreg grupul său.
Deşi există inconvenientul că acest arbore bazat pe rădăcină nu este optim pentru toate sursele,
reducerea de memorie obţinută prin folosirea unui singur arbore în locul celor m este esenţială.

S-ar putea să vă placă și