www.agora.ro
Nu trebuie să dăm cu banul?

Problema rutajului

Viorica Covali
Pe durata activității unui sistem cu prelucrare distribuită, schimbul de informații dintre noduri se realizează prin intermediul canalelor de comunicație. În cazul în care între două noduri nu există un canal direct, se pune problema găsirii unui drum format din canale și noduri care leagă cele două noduri sursă-destinație. De obicei, între două noduri pot exista mai multe drumuri, deci apare problema alegerii unuia prin care se va livra informația. Cum se alege un drum din mulțimea drumurilor posibile? Care sunt criteriile după care se face alegerea? Răspunsurile le oferă rezolvarea problemei rutajului.

Definiția problemei

Celor nefamiliarizați cu terminologia sistemelor distribuite le recomandăm să citească mai întâi coloana din dreapta.

În cele ce urmează vom considera că mesajele au lungime fixă prestabilită și nu vom face distincție între mesaj și pachet.

Problema rutajului constă în determinarea drumurilor de comunicație între perechi de noduri ale sistemului distribuit. Pentru rezolvarea acestei probleme, fiecare nod trebuie să conțină informații despre topologia rețelei. Aceste informații sunt grupate în tabele de rutaj locale fiecărui nod.

Dacă un nod i recepționează un mesaj m cu destinația j, rutajul, utilizând tabelul de rutaj, precizează spre care vecin k al lui i va fi transmis mesajul.

Momentul de timp în care rutajul stabilește traseul, depinde de tipul rutajului folosit: rutaj cu canale virtuale sau rutaj dinamic.

În cazul rutajului cu canale virtuale, nodurile prin care va trece mesajul pentru a ajunge la destinație sunt stabilite la inițierea sesiunii de comunicație și toate pachetele acestei sesiuni vor urma aceeași cale.

Fig.1 Rutajul în rețea cu canale virtuale

În cazul rutajului dinamic, decizia se ia în timpul parcurgerii drumului spre destinație, în fiecare nod. Prin urmare, pachetele livrate în aceeași sesiune de comunicare pot avea drumuri diferite.

Fig.2 Rutajul dinamic.

Problema rutajului poate fi împărțită în două subprobleme:

1. Determinarea tabelelor de rutaj

Tabelele de rutaj trebuie să fie calculate la inițializarea rețelei și să fie actualizate la fiecare modificare a topologiei rețelei.

2. Direcționarea pachetului

La trimiterea unui pachet în rețea, acesta trebuie să fie direcționat, utilizând tabelele de rutaj.

Pentru soluționarea acestor subprobleme, sunt elaborați diverși algoritmi de rutaj.

Algoritmul de rutaj este un protocol al nivelului rețea (al modelului OSI) care are ca sarcină coordonarea pachetelor în timpul deplasării lor prin rețea, până ajung la destinație.

Obiectivele în proiectarea unui algoritm de rutaj sunt:

  • generarea, pentru fiecare nod a unei proceduri de luare a unei decizii care să efectueze această sarcină;
  • garantarea livrării fiecărui pachet trimis în rețea.

În general, pentru îndeplinirea acestor obiective se folosește o colecție de algoritmi a căror complexitate rezultă din următoarele:

  1. Rutajul necesită coordonarea funcționării tuturor nodurilor din rețea.
  2. Sistemul de rutaj trebuie să finalizeze ieșirile din funcțiune a liniilor de comunicații efectuând redirecționarea fluxului de mesaje și reînnoirea bazelor de date folosite de sistem.
  3. Pentru a atinge performanțe mai bune, algoritmii de rutaj pot modifica rutarea în cazul în care unele regiuni ale rețelei devin supraîncărcate.

În cele ce urmează vom prezenta mai multe metode de rutaj în care vor fi analizate două aspecte ale problemei de rutaj:

1) Alegerea traseului pentru a atinge performanțe mai bune:

a) elaborarea algoritmilor de rutaj ce determină drumuri de cost minim;

b) elaborarea algoritmilor de rutaj având caracteristici apropiate de cele optime.

2) Al doilea aspect al problemei de rutaj constă în răspândirea informației de control între toate nodurile rețelei, necesară pentru alegerea rutajului, incluzând informația de ieșire din funcțiune și restabilirea liniilor de comunicație și a nodurilor.

Există două caracteristici de bază ale rețelei care sunt influențate de algoritmii de rutaj: capacitatea canalului (cantitatea de servicii) și reținerea medie a pachetului (calitatea serviciilor). Rutajul cooperează cu protocolul de coordonare a fluxului în determinarea caracteristicilor prin intermediul mecanismului legături cu reveniri (Fig.3). Există situații, în care cantitatea de informație ce vine din exterior este mai mare decât cea care poate fi deservită, chiar și în cazul unui rutaj optim. Sarcina de a coordona fluxul de informație revine algoritmilor de coordonare a fluxului.

Fig.3 Legătura dintre rutaj și coordonarea fluxului.

Dacă fluxul de informație apărut de la surse din exterior este relativ mic față de capacitatea canalelor, atunci el va fi integral primit de rețea și vom avea:

capacitatea de trecere = fluxul din exterior,

în caz contrar

capacitatea de trecere =

fluxul din exterior - cantitatea de flux respinsă.

Una dintre sarcinile de eficiență ale unui sistem cu prelucrare distribuită este de a efectua un număr mai mare de servicii într-un timp mai redus, atât cererilor din interior cât și celor apărute din exterior. Pe lângă componentele fizice ale sistemului distribuit (canalele de comunicații având capacitate mai mare, noduri cu prelucrare rapidă etc.) o mare importanță o are alegerea tipului de rutaj în rezolvarea acestei sarcini. Prin urmare, dacă algoritmul de rutaj reușește să mențină relativ bine o reținere mică a pachetelor în noduri care se găsesc în drum spre destinație, atunci algoritmul de coordonare a fluxului permite intrarea în rețea a unui flux mai mare de informație.

Algoritmi de rutaj de bază

Scopul algoritmilor de rutaj este de a coordona deplasarea mesajelor prin rețea până ajung la destinație. Pentru atingerea unor performanțe mai bune, algoritmii de rutaj au ca scop determinarea unui traseu bun.

Metodele de rutaj folosite în acest scop se bazează pe un șir de algoritmi de determinare a drumurilor optime în grafe.

Algoritmii de rutaj se deosebesc în funcție de criteriul de optimalitate al traseului:

  • Număr minim de pași: costul drumului se măsoară prin numărul canalelor traversate. Evident, criteriul de optimalitate va fi asigurat de utilizarea drumurilor cu număr minim de canale.
  • Calea cea mai scurtă: fiecărui canal îi este asociată, pe cale statistică, o pondere pozitivă iar costul unui drum se exprimă prin suma ponderilor canalelor din drum. Un algoritm de acest tip utilizează drumul cu ponderea totală minimă.
  • Întârzieri minime: fiecărui canal îi este asociată în mod dinamic o pondere care depinde de traficul pe canalul respectiv. Un algoritm cu întârzieri minime actualizează tabelele de rutaj în mod continuu, astfel încât în orice moment să se aleagă drumul pentru care întârzierile totale sunt minime. Deoarece întârzierile de pe canale se datorează traficului, diferitele pachete transmise pe rețea se influențează reciproc.

Algoritmi de rutaj bazați pe determinarea drumului de cost minim

Elaborarea algoritmilor din această clasă se bazează pe algoritmii de determinare a drumului de cost minim în grafuri, adaptați la context distribuit.

Algoritmii din această clasă trebuie să îndeplinească următoarele criterii:

  1. Costul trimiterii unui pachet pe un drum D este independent de gradul de utilizare a acelui drum, în particular de faptul că muchiile din D sunt utilizate de alte mesaje.
  2. Costul drumului rezultat din concatenarea a două drumuri este egal cu suma costurilor celor două drumuri. Ca o consecință, costul drumului vid este egal cu 0.
  3. Graful asociat rețelei nu conține nici un ciclu de cost negativ.

Algoritmul distribuit și asincron al lui Bellman-Ford

Principiul de bază

Algoritmul propus este o adaptare la context distribuit a algoritmului lui Ford inspirat din principiul programării dinamice a lui Bellman. O caracteristică a acestui algoritm constă în faptul că necesită păstrarea unei cantități mici de informație în nodurile rețelei, deoarece pentru fiecare nod este suficientă informația privitoare la lungimile canalelor ce pleacă de la el și numărul nodurilor din rețea.

Vom considera că lungimea dij a fiecărei muchii (i,j) este pozitivă și că lungimile lor vor rămâne fixe după momentul de timp t0, moment până la care au loc toate modificările în rețea.

Principiul pe care se bazează algoritmul lui Bellman-Ford constă în determinarea distanței minime Di de la nodul i la nodul destinație comun (notat, de exemplu, prin 1) pentru toate nodurile, cu ajutorul următoarelor formule:

unde N(i) este mulțimea nodurilor vecine cu i. (În practică pentru fiecare nod destinație se reexecută algoritmul.)

Pentru condițiile inițiale algoritmul lui Bellman-Ford determină distanțele minime între nodurile rețelei și destinație. Distanțele Di pot fi determinate distribuit în fiecare nod executându-se iterația (1). Dacă se stabilește o sincronizare, astfel încât nodurile execută concomitent iterația (1) de ordinul h, făcând schimb de rezultate între iterații, atunci pornind cu condițiile inițiale (3), algoritmul termină execuția cel mult în N-1 pași (N - numărul nodurilor în rețea).

Stabilirea unei sincronizări în sisteme cu prelucrare distribuită este dificilă, de aceea se folosește o alternativă a acestui algoritm care funcționează în regim asincron și care nu necesită un protocol de inițializare respectiv protocol de reluare a execuției algoritmului. Strategia de execuție constă în modificarea în timp a valorii lui Di folosind noua valoare Dj, primită de la vecinii jÎN(i) și ultimele lungimi, precum și starea canalelor adiacente nodului i după formula:

Reprezentarea formală a algoritmului

În orice moment t în fiecare nod 1 există:

Dji(t) - valoarea distanței minime de la j la nodul 1, jÎN(i), care a fost transmisă nodului i ultima dată;

Di(t) - valoarea distanței minime de la i la nodul 1, care a fost calculată ultima dată în conformitate cu iterația Bellman-Ford.

Distanțele pentru nodul 1 sunt întotdeauna nule.

D1(t)=0 pentru orice t ł t0;

D1i(t)=0 pentru orice t ł t0 și i, pentru care 1ÎN(i).

Fiecare nod i conține lungimile dij pentru toți jÎN(i), care se presupun a fi pozitive și nu se modifică în timp după momentul t0. Presupunem că distanțele dintre noduri nu se modifică decât în momentele t0, t1,...; tm+1 > tm pentru toți m și tmź0 când mź„, în care în fiecare nod ič1 se produce unul din următoarele trei evenimente:

1. Nodul i actualizează Di(t) după formula:

și păstrează Dji(t), jÎN(i) neschimbate;

2. Nodul i primește de la jÎN(i) valorile Dj, calculate în j într-un moment de timp anterior, actualizează valorile Dji(t), celelalte păstrându-le neschimbate;

3. Nodul i este liber și toate valorile aflate în nod rămân neschimbate.

Fie Ti - mulțimea momentelor de timp în care în nodul i se produc modificări de tip 1 și Tji - mulțimea momentelor de timp în care nodul i primește informații de la j de tipul 2.

Presupunem următoarele:

  1. Nodurile nu încetează actualizarea propriilor valori și primirea informațiilor de la vecini, adică Ti și Tji sunt formate dintr-o infinitate de elemente pentru toți ič1 și jÎN(i);
  2. Toate valorile inițiale aflate în noduri Di(t0) și Dji(t0), jÎN(i) sunt nenegative. În plus, toate valorile transmise nodurilor înainte de t0, dar primite după t0 sunt nenegative;
  3. Sistemul va șterge în mod obligatoriu informația veche privind distanțele, adică pentru orice moment t ł t0 există momentul t">t', după care orice nod i nu va primi valoarea Dj dacă ea a fost calculată în nodul vecin jÎN(i) până la momentul t'.

Folosim această formalizare pentru a arăta valabilitatea algoritmului distribuit și asincron.

Valabilitatea algoritmului

Următoarea propoziție confirmă faptul că, într-o perioadă de timp limitat valorile Di(t) devin egale cu distanțele minime corecte.

Propoziție. Există momentul de timp tm, astfel încât Di (t)=Di pentru toți t ł tm, i = 1, ..., N,

unde Di este distanța minimă corectă de la nodul i la nodul destinație (aici notat cu 1).

Demonstrație:

Ideea demonstrației constă în a determina două șiruri (Dik) și () pentru fiecare nod i, care să îndeplinească inegalitățile:

Dik Ł Dik+1 Ł Di Ł Ł (4)

Dik = Di = pentru fiecare k suficient de mare (5)

Aceste șiruri se obțin cu ajutorul algoritmului Bellman-Ford, ce folosește condiții inițiale diferite. Apoi se arată că pentru oricare k și i valorile Di(t) satisfac inegalitățile:

Dik Ł Di(t) Ł pentru toți t suficient de mari. Rolul cheie în demonstrație îl joacă proprietatea de monotonie a iterațiilor Bellman-Ford care constă în faptul că, dacă pentru două mărimi scalare Dj' și Dj'' se îndeplinește inegalitatea Dj' ł Dj'' pentru toți jÎN(i), atunci inegalitatea se păstrează și după iterație, adică

Din această inegalitate rezultă că dacă Dik sunt șirurile formate în urma iterațiilor Bellman-Ford (1) și (2) cu condițiile inițiale Di0, i = 1, ..., N și este adevărată Di1 ł Di0 pentru orice i, atunci Dik+1 ł Dik pentru toți i și k. Analog, dacă Di1 Ł Di0 pentru orice i, atunci Dik+1 Ł Dik pentru toți i și k.

Fie Dik, i = 1, ..., N - iterația de ordinul k a algoritmului Bellman-Ford determinat de iterația (1) și (2) având condițiile inițiale Di0 = „, i=1 și Di0 = 0, iar Dik, i=1, ...,N - iterația de ordinul k cu condițiile inițiale =0, i=1, ...,N.

Lemă*). Șirurile (Dik) și () determinate mai sus, îndeplinesc relațiile (4) și (5).

Algoritmul lui Bellman-Ford determină drumul de lungime minimă între nodurile rețelei și nodul destinație (fixat). Determinarea drumului de lungime minimă între oricare două noduri se poate face executând în paralel algoritmul lui Bellman-Ford pentru fiecare nod ales ca și destinație.

Pentru aceasta toate nodurile i vor avea următoarele declarații de variabile:

var disti:tablou[1..N] cu valori în 0..N

/* inițializat cu 0 pentru indicele i și cu N altfel */

rutaj:tablou[1..N] cu valori în 1..N

constante = { mulțimea vecinilor lui i }

/* dij = distanța de la i la vecinul j */

Comportamentul nodului i este următorul: vom nota prin pch(x) - pachetul ce transportă informația x.

Inițial /* aceasta se execută pentru un număr oarecare

de noduri, dar cel puțin o dată */

Úț înc

ł pentru orice jÎvecini livrează pch(disti) spre j

Àț

În cazul recepționării pch(d) de la j:

Úț Înc

ł Modif Ź false;

ł Úț pentru k=1,N execută

ł ł Úț dacă disti[k]>dij+d[k];

ł ł ł atunci disti[k]Źdij+d[k];

ł ł ł rutaji[k]Źj

ł ł ł modifŹtrue;

ł ł Àț

ł Àț

ł Úț dacă modif

ł ł atunci " r Î vecini: livrează pch(disti) spre r

ł Àț

Àț

Algoritmul prezentat rezolvă prima parte a problemei de rutaj, cea de calculare a tabelelor de rutaj. În cazul rutajului static, tabelele de rutaj se calculează la inițierea sistemului cu prelucrare distribuită și rămân neschimbate pentru întreaga durată de activitate. După calcularea tabelelor de rutaj, funcția algoritmilor de rutaj se reduce la cea de direcționare a pachetelor în rețea, folosind tabelele de rutaj.

Comportamentul nodului i este următorul:

{ Nodul i conține un pachet cu destinație j }

Úț dacă j=i

ł atunci "livrează pachetul local"

ł altfel "trimite pachetul la nodul rutaji[j]"

Àț

Discuții privind algoritmul

La apariția unor modificări de topologie sau privitor la costul parcurgerii unui canal, pentru actualizarea tabelelor de rutaj, se reexecută algoritmul, recalculând întregul tabel de rutaj. Pentru ca algoritmul să fie eficient, intervalul de timp dintre ti și ti+1 trebuie să fie suficient de mare. Prin urmare modificările survenite prea des în sistemele cu prelucrare distribuită ce folosesc astfel de algoritmi duc la ineficiența acestor sisteme. Aceasta este cauzată de unele neajunsuri ale algoritmului, printre care amintim:

În unele situații algoritmul necesită un număr mare de iterații pentru calcularea tabelelor de rutaj. Aceasta se întâmplă nu din cauza asincronității algoritmului, ci din cauza alegerii arbitrare a condițiilor inițiale.

În situații nefavorabile (de exemplu, de topologie) algoritmul poate necesita prea multe livrări de informații.

Bibliografie

  1. Bertsekas D., Gallager P., Data networks, Editura «Mir», Moscova, 1989
  2. Boian F. M., Programarea distribuită în Internet (metode și aplicații), Editura Albastră, Cluj, 1997
  3. Bui A., A bounding problem concerning distribited routing algorithms. Rev. Roumaine Math. Pures Appl. 39 (1994), 1-15
  4. Bui A., Analyse du functionnement d'un type d'algorithmes. Rev. Roumaine Math. Pures Appl., 40 (1995), 7-8, 583-592
  5. Bui A., Performance evalution of fault-tolerant routing algorithms: an optimization problem. Optimization, 29 (1994), 267-280
  6. Raynal M., La communication et le temps dans les reseaux et les systemes repartis. Editions Eyrolles, Paris, 1991
  7. Tel G., Introduction to Distributed Algorithms. Cambridge Press, 1994

Viorica Covali este doctorantă cu frecvență la Universitatea Babeș-Bolyai, Cluj; poate fi contactată prin intermediul redacției.

[cuprins]