Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
Bucuresti
Facultatea TRANSPORTURI
Referat
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ă.
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.
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.
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 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
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.
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
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.
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.
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.
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
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
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ă.