Upload
florin-oprea
View
222
Download
0
Embed Size (px)
DESCRIPTION
Protocoale de comunicatie
Citation preview
P.C.
1. Nivelurile OSI (Open Systems Interconnection)
Nivelul fizic se ocup de transmiterea biilor printr-un canal de comunicaie. Proiectarea trebuie s garanteze c atunci cnd unul din capete trimite un bit 1, acesta e receptat n cealalt parte ca un bit 1, nu ca un bit 0. Problemele tipice se refer la ci voli trebuie utilizai pentru a reprezenta un 1 i ci pentru un 0, dac transmisia poate avea loc simultan n ambele sensuri, cum este stabilit conexiunea iniial i cum este ntrerupt cnd au terminat de comunicat ambele pri, ci pini are conectorul de reea i la ce folosete fiecare pin. Aceste aspecte de proiectare au o legtur strns cu interfeele mecanice, electrice, funcionale i procedurale, ca i cu mediul de transmisie situat sub nivelul fizic.
Nivelul legaturii de date trateaza erorile de transmisie produse la nivelul fizic, realizand o comunicare corecta intre doua noduri adiacente. Mecanismul utilizat in acest scop este impartirea sirului de biti in cadre, carora le sunt adaugate informatii de control (coduri de verificare, numere de secventa etc). Cadrele sunt transmise individual putand fi verificate si confirmate de catre receptor. Alte functii ale nivelului se refera la: controlul fluxului datelor (astfel incat transmitatorul sa nu furnizeze date mai rapid decat le poate accepta receptorul) si gestiunea legaturii (stabilirea legaturii, controlul schimbului de date si desfiintarea legaturii).
Nivelul retea asigura dirijarea unitatilor de date intre nodurile sursa si destinatar, trecand eventual prin noduri intermediare. Decizia este luata astfel incat sa nu existe in acelasi timp legaturi supraincarcate si legaturi neutilizate, evitandu-se deci congestionarea retelei. O alta functie importanta a nivelului retea este cea de interconectare a retelelor cu arhitecturi diferite.
Nivelul transport realizeaza o comunicare sigura intre doua calculatoare gazda, detectand si corectand erorile pe care nivelul retea nu le trateaza. El este important nu numai prin pozitia pe care o ocupa, la mijlocul ierarhiei de nivele, dar si prin functia sa, de a furniza nivelelor superioare o interfata independenta
de tipul retelei utilizate. Functiile sunt realizate de entitati situate in sistemele gazda, fara concursul altor entitati similare intermediare, motiv pentru care se numesc functii "capat la capat" (capetele fiind cele doua entitati de transport corespondente).
Nivelul sesiune ofera toate serviciile pentru gestiunea jetoanelor, lasand la latitudinea utilizatorilor semnificatiile asociate acestora. Ele au la baza utilizarea unui mesaj special, numit jeton (token), care poate fi trecut de la un utilizator la altul si a carui posesie ofera detinatorului anumite privilegii: de a transmite date, de a stabili puncte de sincronizare, de a stabili inceputul unei activitati etc.
Nivelul prezentare realizeaza transformari ale reprezentarii datelor, astfel incat sa se pastreze semnificatia lor, rezolvandu-se totodata diferentele de sintaxa. Functiile principale se refera la codificarea standard a datelor transmise intre calculatoare cu conventii de reprezentare diferite, la comprimarea textelor, precum si la criptarea/decriptarea acestora in vederea protectiei si securitatii lor.
Nivelul aplicatie, cel mai inalt nivel al arhitecturii, are rolul de fereastra de comunicare prin care se fac toate schimburile de date intre utilizatori. Fiind nivelul care furnizeaza servicii direct aplicatiilor, el cuprinde toate functiile pe care acestea le pot solicita: - identificarea utilizatorilor cooperanti, autentificarea lor si determinarea disponibilitatii acestora, - stabilirea calitatii serviciului, - sincronizarea aplicatiilor cooperante si selectarea modului de dialog, - stabilirea responsabilitatilor pentru tratarea erorilor, - identificarea constrangerilor asupra sintaxei datelor, - transferul informatiei.
2. Serviciile oferite de nivelul legatura de date nivelului retea. Nivelul legtur de date poate fi proiectat s ofere diferite servicii. Serviciile efective oferite pot varia de la sistem la sistem. Trei posibiliti de baz, oferite n mod curent, sunt: 1. Serviciu neconfirmat fr conexiune. 2. Serviciu confirmat fr conexiune. 3. Serviciu confirmat orientat-conexiune.
Serviciul neconfirmat fr conexiune const din aceea c maina surs trimite cadre independente ctre maina destinaie, fr ca maina destinaie s trebuiasc s confirme primirea lor. n acest caz, nu sunt necesare stabilirea i desfiinarea unei conexiuni logice. Dac un cadru este pierdut datorit zgomotului de pe linie, la nivelul legtur de date nu se face nici o ncercare pentru recuperarea lui. Aceast clas de servicii este adecvat atunci cnd rata de erori este foarte sczut, nct recuperarea este lsat n sarcina nivelurilor superioare. De asemenea, este adecvat pentru traficul de timp real, cum ar fi cel de voce, unde a primi date cu ntrziere este mai ru dect a primi date eronate. Majoritatea LAN-urilor utilizeaz la nivelul legturii de date servicii neconfirmate fr conexiune.
Urmtorul pas n ceea ce privete sigurana este serviciul confirmat fr
conexiune. Atunci cnd este oferit acest serviciu, nc nu se utilizeaz conexiuni, dar fiecare cadru trimis este confirmat individual. n acest mod, emitorul tie dac un cadru a ajuns sau nu cu bine. Dac nu a ajuns ntr-un interval de timp specificat, poate fi trimis din nou. Acest serviciu este folositor pentru canale nesigure, cum ar fi sistemele fr fir.
Asigurarea confirmrii la nivelul legturii de date este doar o optimizare,
niciodat o cerin. Nivelul reea poate ntotdeauna s trimit un mesaj i s atepte s fie confirmat. Dac confirmarea nu apare n timp util, atunci emitorul poate retrimite ntregul mesaj. Problema cu aceast strategie este aceea c, de obicei, cadrele au o lungime maxim impus de hardware, iar pachetele nivelului reea nu au aceasta limitare. Dac pachetul mediu este spart n, s zicem, 10 cadre i 20% din totalul cadrelor sunt pierdute, transmiterea acestuia poate lua
foarte mult timp. n cazul n care cadrele individuale sunt confirmate i retransmise, pachetele ntregi vor fi transmise mult mai rapid. Pe canale sigure, precum fibra optic, costul suplimentar implicat de un astfel de protocol al legturii de date poate fi nejustificat, dar pe canale fr fir, costul este pe deplin justificat datorit nesiguranei acestora.
Cel mai sofisticat serviciu pe care nivelul legtur de date l pune la
dispoziia nivelului reea este serviciul orientat-conexiune. n cazul acestui serviciu, mainile surs i destinaie stabilesc o conexiune nainte de a transfera date. Fiecare cadru trimis pe conexiune este numerotat i nivelul legtur de date garanteaz c fiecare cadru trimis este ntr-adevr recepionat. Mai mult, garanteaz c fiecare cadru este recepionat exact o dat i toate cadrele sunt recepionate n ordinea corect. n schimb, n cazul serviciului fr conexiune, este posibil ca, datorit unei confirmri pierdute, un cadru s fie transmis de mai multe ori i, prin urmare, recepionat de mai multe ori. Spre deosebire de acesta, serviciul orientat conexiune furnizeaz proceselor de la nivelul reea echivalentul unui flux de bii sigur.
Atunci cnd este utilizat serviciul orientat conexiune, transferurile au trei
faze distincte. n prima faz este stabilit conexiunea, ambele pri iniializnd variabile i contoare, utilizate pentru a ine evidena cadrelor care au fost recepionate i a celor care nu au fost. n a doua faz, sunt transmise unul sau mai multe cadre. n a treia i ultima faz, conexiunea este desfiinat, elibernd variabilele, tampoanele i alte resurse utilizate la meninerea conexiunii.
3. Incadrarea la nivelul legatura de date
Deoarece este prea periculos s ne bizuim pe timp pentru a marca
nceputul i sfritul fiecrui cadru, au fost elaborate alte metode. Vom analiza 3
metode:
1. Numrarea caracterelor.
2. Indicatori cu inserare de octei.
3. Indicatori de nceput i de sfrit, cu inserare de bii.
Prima metod de ncadrare utilizeaz un cmp din antet pentru a specifica
numrul de caractere din cadru. Atunci cnd nivelul legtur de date de la
destinaie primete contorul de caractere, tie cte caractere urmeaz i unde
este sfritul cadrului. Problema cu acest algoritm este c valoarea contorului
poate fi alterat de erori de transmisie. Chiar dac suma de control este incorect
i destinaia tie c a primit cadru eronat, nu exist nici o posibilitate de a
determina unde ncepe urmtorul cadru. Nu ajut nici trimiterea unui cadru
napoi la surs, cernd o retransmisie, deoarece destinaia nu tie peste cte
caractere s sar pentru a ncepe retransmisia. Din acest motiv, metoda
contorizrii caracterelor este rar utilizat.
A doua metod de ncadrare nltur problema resincronizrii dup o
eroare, prin aceea c fiecare cadru ncepe i se termin cu o secvena special de
octei. Iniial, octeii ce indicau nceputul, respectiv sfritul erau diferii, dar n
ultimii ani s-a trecut la utilizarea unui singur octet, numit octet indicator, att ca
indicator de nceput, ct i de sfrit. n acest fel, dac receptorul pierde
sincronizarea, acesta poate cuta octetul indicator pentru a gsi sfritul cadrului.
Doi octei indicatori consecutivi indic sfritul unui cadru i nceputul celui care
urmeaz.
O problem serioas cu aceast metod apare atunci cnd se transmit date
binare, cum ar fi un obiect sau numere n virgul mobil. Se poate ntmpla ca n
date s apar octetul folosit ca indicator.
Aceast situaie interfereaz cu procesul de ncadrare. O cale de rezolvare a
acestei probleme este ca nivelul legtur de date al emitorului s insereze un
octet special (ESC) naintea fiecrei apariii accidentale a indicatorului n date.
Nivelul legtur de date al receptorului va elimina acest octet special nainte de a
pasa datele nivelului reea. Aceast tehnic poart numele de inserare de octei
(eng.: byte stuffing) sau inserare de caractere (eng.: character stuffing) . Deci, un
octet indicator utilizat pentru ncadrare poate fi difereniat de unul prezent n
date prin faptul c este sau nu precedat de un octet special.
Bineneles, urmtoarea ntrebare este: Ce se ntmpl dac un octet
special apare n mijlocul datelor? Rspunsul este c pe lng el se insereaz nc
un octet special. Deci, un singur octet special face parte dintr-o secven special,
iar un octet special dublu indica faptul ca un singur octet de acest tip a aprut in
cadrul datelor. n toate cazurile, secvena de octei obinut dup eliminarea
octeilor inserai este exact secvena original.
Un dezavantaj major al utilizrii acestei metode de ncadrare este acela c
este limitat la utilizarea caracterelor de 8 bii. Nu toate codurile utilizeaz
caractere de 8 bii.
A treia metoda de incadrare permite cadrelor de date s conin un numr
arbitrar de bii i permite coduri de caractere cu un numr arbitrar de bii per
caracter. Funcioneaz astfel: fiecare cadru ncepe i se termin cu un ablon
special pe bii, 01111110, numit octet indicator (flag). De fiecare dat cnd nivelul
legtur de date al emitorului identific cinci de unu consecutivi n date,
insereaz automat un bit 0 n irul de bii de rezultai. Aceast inserare de bii (bit
stuffing) este similar inserrii de caractere, n care un octet escape este inserat n
irul de caractere de ieire, nainte de fiecare octet indicator din date.
Atunci cnd receptorul primete o succesiune de cinci bii 1, urmai de un bit 0,
extrage automat (adic terge) bitul 0. La fel ca i inserarea de caractere, care este
complet transparent pentru nivelul reea din ambele calculatoare, aa este i
inserarea de bii. Dac datele utilizator conin ablonul indicator, 01111110, acest
indicator este transmis ca 011111010, dar n memoria receptorului este pstrat ca
01111110.
4. Coduri corectoare de erori
Proiectanii de reele au dezvoltat dou strategii de baz pentru tratarea
erorilor. O modalitate este ca pe lng fiecare bloc de date trimis s se includ
suficient informaie redundant pentru ca receptorul s poat deduce care a fost
caracterul transmis. O alt soluie este s se includ suficient redundan pentru
a permite receptorului s constate c a aprut o eroare, dar nu care este eroarea,
i s cear o retransmisie. Prima strategie utilizeaz coduri corectoare de erori, iar
cea de-a doua utilizeaz coduri detectoare de erori. Folosirea codurilor corectoare
de erori este deseori referit sub numele de corectare de erori n avans (eng.:
forward error correction).
Fiecare dintre aceste tehnici se utilizeaz in situaii diferite. Pe canale cu
siguran mare, cum ar fi fibra optic, este mai eficient s utilizm un cod
detector de erori i s retransmitem blocul n care s-au detectat erori. In cazul
canalelor de comunicaie fr fir, este indicat sa adugm destul informaie
redundant fiecrui bloc, n loc s ne bazm pe retransmisie, care poate s fie la
rndul su afectat de erori.
Pentru a nelege cum pot fi tratate erorile, este necesar s privim cu
atenie la ceea ce este de fapt o eroare. n mod normal, un cadru conine m bii
de date (adic mesaj) i r bii redundani sau de control. S considerm lungimea
total n (adic, n = m + r ). O unitate format din n bii, care conine date i bii de
control, este numit frecvent cuvnt de cod de n bii (eng.: n-bit codeword).
Date fiind dou cuvinte de cod, s zicem, 10001001 i 10110001, este
posibil s determinm ci bii corespunztori difer. n acest caz difer 3 bii.
Pentru a determina ci bii difer, aplicm operatorul SAU EXCLUSIV ntre cele
dou cuvinte de cod i numrm biii 1 din rezultat.
Numrul de poziii binare n care dou cuvinte de cod difer se numete
distana Hamming (Hamming, 1950). Semnificaia sa este c dac dou cuvinte de
cod sunt desprite de o distan Hamming d, sunt necesare d erori de un singur
bit pentru a-l converti pe unul n cellalt.
n multe aplicaii de transmisie de date, toate cele 2m mesaje de date
posibile sunt corecte, dar, datorit modului n care sunt calculai biii de control,
nu sunt utilizate toate cele 2n cuvinte de cod posibile. Dat fiind algoritmul pentru
calculul biilor de control, este posibil s construim o list completa de cuvinte de
cod permise i din aceast list s gsim cele dou cuvinte de cod a cror distan
Hamming este minim. Aceast distan este distana Hamming a codului
complet.
Proprietile detectoare i corectoare de erori ale unui cod depind de
distana sa Hamming. Pentru a detecta d erori, este nevoie de un cod cu distan
d + 1, deoarece cu un asemenea cod nu exist nici o modalitate ca d erori de un
singur bit s poat modifica un cuvnt de cod corect ntr-un alt cuvnt de cod
corect. Atunci cnd receptorul vede un cuvnt de cod incorect, poate spune c s-a
produs o eroare de transmisie. Similar, pentru a corecta d erori, este nevoie de un
cod cu distan 2d + 1, deoarece n acest mod cuvintele de cod corecte sunt att
de distanate, nct, chiar cu d modificri, cuvntul de cod originar este totui mai
apropiat dect alte cuvinte de cod i va fi unic determinat.
S ne imaginm c dorim s proiectm un cod cu m bii de mesaj i r bii de
control care ne va permite s corectm toate erorile singulare. Pentru fiecare din
cele 2m mesaje corecte exist n cuvinte de cod eronate, aflate la distan 1 de el.
Acestea sunt formate prin inversarea sistematic a fiecruia dintre cei n bii din
cuvntul de cod de n bii format din el. Astfel, fiecare din cele 2m mesaje corecte
necesit n+1 abloane asociate. Cum numrul total de abloane este 2n, trebuie
s avem (n+1) 2m
consecutiv, ncepnd cu bitul 1 de la marginea din stnga, bitul 2 imediat la
dreapta sa, etc. Biii care sunt puteri ale lui 2 (1, 2, 4, 8, 16 etc.) sunt bii de
control. Restul (3, 5, 6, 7, 9 etc.) sunt completai cu cei m bii de date. Fiecare bit
de control foreaz ca paritatea unui grup de bii, inclusiv el nsui, s fie par (sau
impar).
Un bit poate fi inclus n mai multe calcule de paritate. Pentru a vedea la
care bii de control contribuie bitul de date din poziia k, rescriem k ca o sum de
puteri ale lui 2. De exemplu, 11= 1+2+8 i 29=1+4+8+16. Un bit este verificat de
acei bii de control care apar n dezvoltarea sa (de exemplu, bitul 11 este verificat
de biii 1, 2 i 8).
Cnd sosete un cuvnt de cod, receptorul iniializeaz un contor la 0.
Acesta examineaz apoi fiecare bit de control, k (k = 1, 2, 4, 8...) pentru a vedea
dac are paritatea corect. Dac nu, adaug k la contor. Dac, dup ce au fost
examinai toi biii de control, contorul este 0 (adic, dac toi biii au fost
coreci), cuvntul de cod este acceptat ca valid. Dac valoarea contorului este
nenul, ea reprezint numrul bitului incorect. De exemplu, dac biii de control
1, 2 i 8 sunt eronai, atunci bitul inversat este 11, deoarece este singurul verificat
de biii 1, 2 i 8.
Codurile Hamming pot corecta numai erori singulare. Totui, exist un
artificiu care poate fi utilizat pentru a permite codurilor Hamming s corecteze
erorile n rafal. O secven de k cuvinte de cod consecutive este aranjat ca o
matrice, avnd cte un cuvnt de cod pe fiecare linie. n mod normal, datele ar fi
transmise linie cu linie, de la stnga la dreapta. Pentru a corecta erorile n rafal,
datele vor trebui transmise pe coloane, ncepnd cu coloana cea mai din stnga.
Cnd au fost trimii toi cei k bii, este transmis a doua coloan i aa mai
departe, aa cum se arat in fig. 3-7. Atunci cnd un cadru ajunge la receptor,
matricea este reconstruit, coloan cu coloan. Dac a aprut o eroare n rafal,
de lungime k, va fi afectat cel mult un bit din fiecare dintre cele k cuvinte de cod,
dar codul Hamming poate corecta o eroare pe cuvnt de cod, aa nct ntregul
bloc poate fi refcut. Aceast metod utilizeaz kr bii de control pentru a face
blocuri de km bii de date imune la erorile n rafal de lungime k sau mai mic.
5. Coduri detectoare de erori
Codurile corectoare de erori sunt adesea utilizate pe canale fr fir, care
sunt cunoscute ca fiind predispuse la erori, n comparaie cu firele de cupru sau
fibra optic. Fr coduri detectoare de erori, comunicaia ar fi greu de realizat. In
cazul firelor de cupru sau a fibrei optice rata erorilor este mult mai mic, aa c
detectarea erorilor i retransmisia este de obicei mai eficient aici ca metod de
tratare a erorilor care apar ocazional.
Dac unui bloc i se adaug un singur bit de paritate i blocul este puternic
deformat de o eroare n rafal lung, probabilitatea ca eroarea s fie detectat
este de numai 0.5, ceea ce este greu de acceptat. ansele pot fi mbuntite
considerabil dac fiecare bloc transmis este privit ca o matrice dreptunghiular de
n bii lime i k bii nlime, dup cum am artat mai sus. Pentru fiecare coloan
este calculat un bit de paritate, care este adugat ntr-o nou linie de la sfritul
matricei. Matricea este apoi transmis linie cu linie. La sosirea blocului, receptorul
verific toi biii de paritate. Dac oricare din ei este greit, va cere o retransmisie
a blocului. Retransmisii succesive sunt cerute daca este nevoie, pn cnd ntregul
bloc este recepionat fr erori de paritate.
Aceast metod poate detecta o singur rafal de lungime n, cu numai un
bit pe coloan modificat. O rafal de lungime n+1 va trece totui nedetectat dac
primul i ultimul bit sunt inversai, iar toi ceilali bii sunt coreci (o eroare n
rafal nu nseamn c toi biii sunt greii, ci c cel puin primul i ultimul sunt
greii). Dac blocul este puternic deformat de o rafal lung sau de rafale scurte
multiple, probabilitatea ca oricare din cele n coloane s aib, accidental, paritatea
corect este 0.5, deci probabilitatea ca un bloc eronat s fie acceptat atunci cnd
nu ar trebui este 2 la -n.
Cu toate c schema de mai sus poate fi uneori adecvat, n practic este
larg utilizat o alt metod: codul polinomial (cunoscut i sub numele de cod cu
redundan ciclic, eng.: cyclic redundancy code). Codurile polinomiale sunt
bazate pe tratarea irurilor de bii ca reprezentri de polinoame cu coeficieni 0 i
1. Un cadru de k bii este vzut ca o list de coeficieni pentru un polinom cu k
termeni, de la xk-1 la x0. Se spune c un astfel de polinom este de gradul k-1. Bitul
cel mai semnificativ (cel mai din stnga) este coeficientul lui xk-1; urmtorul bit
este coeficientul lui xk-2 .a.m.d. De exemplu, 110001 are ase bii i ei reprezint
un polinom cu ase termeni cu coeficienii 1, 1, 0, 0, 0 i 1: x5+x4+x0. Aritmetica
polinomial este de tip modulo 2, n conformitate cu regulile teoriei algebrice. Nu
exist transport la adunare i nici mprumut la scdere. Att adunrile ct i
scderile sunt identice cu SAU EXCLUSIV. mprirea lung este fcut ca n binar
cu excepia faptului c scderea este realizat modulo 2, ca mai sus. Despre un
mpritor se spune c intr ntr-un demprit dac dempritul are tot atia
bii ca mpritorul.
Atunci cnd este utilizat metoda codului polinomial, emitorul i
receptorul se pun de acord n avans asupra unui polinom generator G(x). Att
bitul cel mai semnificativ ct i cel mai puin semnificativ trebuie s fie 1. Pentru a
calcula suma de control pentru un cadru cu m bii, corespunztor polinomului
M(x), cadrul trebuie s fie mai lung dect polinomul generator. Ideea este de a
aduga o sum de control la sfritul cadrului, astfel nct polinomul reprezentat
de cadrul cu sum de control s fie divizibil prin G(x). Cnd receptorul preia cadrul
cu suma de control, ncearc s-l mpart la G(x). Dac se obine un rest,
nseamn c a avut loc o eroare de transmisie.
Algoritmul pentru calculul sumei de control este urmtorul:
1. Fie r gradul lui G(x). Se adaug r bii 0 la captul mai puin semnificativ al
cadrului, aa nct acesta va conine acum n+r bii i va corespunde polinomului
xrM(x).
2. Se mparte irul de bii ce corespund lui G(x) ntr-un ir de bii corespunznd lui
xrM(x), utiliznd mprirea modulo 2.
3. Se scade restul (care are ntotdeauna r sau mai puini bii) din irul de bii
corespunznd lui xrM(x), utiliznd scderea modulo 2. Rezultatul este cadrul cu
sum de control ce va fi transmis. Numim polinomul su T(x).
S analizm puterea acestei metode. Ce tipuri de erori vor fi detectate? S
ne imaginm c apare o eroare de transmisie, aa nct n loc s soseasc irul de
bii pentru T(x), ajunge T(x) + E(X). Fiecare bit din E(x) corespunde unui bit care a
fost inversat. Dac n E(x) exist k bii 1, aceasta nseamn c au aprut k erori de
un singur bit.
La recepia cadrului cu sum de control, receptorul l mparte prin G(x);
aceasta nseamn c va calcula [T(x) + E(x)]/G(x). T(x)/G(x) este 0, aa nct
rezultatul calculului este pur i simplu E(x)/G(x). Acele erori care se ntmpl s
corespund unor polinoame care l au ca factor pe G(x) vor scpa; toate celelalte
vor fi detectate.
6. Protocoalele elementare ale legaturii de date
*Protocolul Start-Stop -transmitorul trimite un nou cadru numai dup recepia confirmrii pozitive a cadrulului precedent.
*Protocol simplex far restrictii. Cea mai simpl variant de protocol are n vedere urmtoarele consideraii: utilizatorul A vrea s transmit date lui B folosind o legtur sigur, simplex; A reprezint o surs inepuizabil de date, astfel nct transmitorul nu trebuie s atepte niciodat la preluarea datelor pentru transmisie; B reprezint un consumator ideal, care preia imediat datele de la receptor ori de cte ori acesta i le d; canalul fizic de comunicaie este fr erori.
*Protocol simplex start-stop. n a doua variant, considerm n continuare canalul fr erori, dar utilizatorul B nu poate accepta date n orice ritm. Este necesar controlul fluxului, care n acest caz se realizeaz printr-o reacie a receptorului ctre transmitor, permindu-i
acestuia din urm s transmit urmtorul cadru. Reacia are forma unui cadru fictiv.
*Protocol simplex pentru un canal cu erori. S-ar prea c n cazul unui canal cu erori o uoar modificare a protocolului anterior este suficient. Receptorul transmite un cadru de confirmare doar pentru cadre corecte. n caz de eroare, transmitorul nu primete confirmarea ntr-un timp prestabilit i ca urmare retransmite cadrul. Funcia de armare a ceasului i de permisiune a evenimentului TimeOut este: void StartCeas(NrSecv); iar funcia de dezarmare a ceasului este: void StopCeas (NrSecv);
Parametrul lor permite asocierea unui eveniment TimeOut cu cadrul avnd un numr de secven specificat. Aceast variant prezint pericolul duplicrii cadrelor, n cazul n care se pierde confirmarea mesajului i nu mesajul (transmitorul retransmite cadrul precedent, pe care receptorul l ia drept cadru nou). Evitarea acestei erori se face prin includerea unui numr de secven n antetul cadrului. Deoarece n acest caz, numrul de secven trebuie s diferenieze doar dou cadre succesive, este suficient un contor de un bit, numerele de secvena 0 i 1 ale cadrelor succesive alternnd.
Pentru justificare, fie cadrele succesive m, m+1, m+2 cu numerele de secven respectiv 0, 1 i 0. Dup transmisia cadrului m (0), poate urma m (0), sau m+1 (1), dup cum s-a primit sau nu confirmarea. n nici un caz nu urmeaz m+2 (0), care presupune confirmarea corect a lui m (0). Deci dac receptorul a primit corect m (0) i primete un nou cadru cu numr de secven 0, el nu poate fi dect m (0) i n consecin l ignor.
*Protocol cu fereastra glisanta
-nu ateapt confirmarea cadrelor precedente pentru a transmite cadre noi.
Protocoalele anterioare snt simplex. Pentru o transmisie duplex ar fi necesare dou legturi distincte, una pentru fiecare sens. Ca alternativ, putem utiliza cadrele de confirmare pentru transmiterea datelor n sens opus. Dac nu snt date, se transmite doar confirmarea. Apar deci mai multe feluri de cadre, difereniabile printr-un cmp din antet (fel).
Aceste elemente snt cuprinse n protocoalele cu fereastr glisant. Esena lor este prezentat n continuare. Transmitorul menine o list cu numerele de secven ale cadrelor transmise dar neconfirmate, alctuind fereastra transmitorului. Cnd trebuie transmis un cadru, i se ataeaz numrul de secven urmtor (fereastra se mrete). Cnd se recepioneaz o confirmare, marginea inferioar a ferestrei se deplaseaz cu o unitate. Cadrele se pstreaz de transmitor pn la confirmarea lor.
Receptorul pstreaz o list cu numerele de secven ale cadrelor pe care le poate accepta (fereastra receptorului). Cadrele din fereastr snt acceptate, celelalte snt ignorate. Cnd sosete un cadru cu numr de secven egal cu marginea inferioar, fereastra este deplasat cu o poziie (prin modificarea ambelor margini), pstrndu-se dimensiunea constant.
*Protocol cu fereastr de dimensiune unu. Ambele ferestre fiind unitare, transmitorul trebuie s atepte
confirmarea nainte de a transmite un nou cadru (la fel ca n cazul precedent). Deoarece algoritmii transmitorului i receptorului snt aproape identici, dm o singur descriere pentru ambele staii. Fiecare staie realizeaz ciclic urmtoarele operaii: recepia unui cadru, prelucrarea irului de cadre recepionate, prelucrarea irului de cadre transmise, transmiterea sau retransmiterea unui cadru impreun cu confirmarea cadrului recepionat corect.
O situaie necorespunztoare apare dac ambele staii transmit un cadru iniial. Pentru a corecta acest neajuns, o staie trebuie s o precead pe cealalt prin aciunile sale. Pentru aceasta, doar una trebuie s execute transmisia unui cadru n afara buclei principale.
Cmpul conf conine numrul ultimului cadru recepionat corect. Dac el
corespunde cadrului aflat n transfer, transmitorul preia alt pachet pentru transmisie. Altfel, se transmite acelai pachet.
Cmpul secv conine numrul de secven al cadrului. Dac el coincide cu cel ateptat, se transmite un pachet nivelului reea. Staiile nu se blocheaz i nu accept duplicate. S presupunem de exemplu c A ncearc s trimit cadrul 0 lui B, iar B ncearc s trimit cadrul 0 lui A. Presupunem c timpul de ateptare (timeout) al lui A este prea scurt, deci A trimite repetat cadre (0, 1, A0 ). Cnd primul cadru valid ajunge la B, va fi acceptat, punndu-se CadruAsteptat pe 1. Celelalte cadre snt ignorate, avnd secv=0. Mai mult, duplicatele au conf = 1, n timp ce B ateapt conf = 0 pentru a scoate un nou pachet de la reea. Ca urmare, B va continua s transmit repetat un cadru cu (0, 0,...). Unul din cadre ajunge la A, care ncepe s transmit un nou pachet.
*Protocoale cu fereastr supraunitar de transmisie.
n cazul unor canale cu ntrzieri mari de transmisie, ateptarea confirmrii fiecrui cadru nainte de transmiterea urmtorului poate conduce la o eficien sczut. Astfel, la un canal cu o ntrziere de propagare dus-ntors de 500 msec i o viteza de 50 Kbps, transmiterea unui cadru de 1000 de bii dureaz efectiv doar 20 de milisecunde din cele 520 necesare ciclului complet de transmitere i recepie a confirmrii.
Performana se poate ameliora permind transmiterea unui cadru nainte
de a se primi confirmarea cadrelor anterioare. n exemplul precedent, dac transmitorul trimite cadrele unul dup altul, el va recepiona confirmarea primului cadru dup transmiterea celui de al 26-lea. Erorile nu pot fi sesizate i corectate imediat de transmitor. De obicei, el afl despre producerea unei erori dup ce a transmis i alte cadre. Receptorul, care trebuie s pstreze secvenialitatea cadrelor pe care le livreaz utilizatorului, are dou posibiliti de tratare a cadrelor primite dup eroare.
O cale este de ignorare a acestora, fr transmitere de confirmri. Ea
corespunde unei ferestre de recepie unitare. n acest caz, transmitorul va fi obligat s retransmit toate cadrele ncepnd cu cel eronat. A doua cale este memorarea cadrelor recepionate corect, urmnd a fi retransmise selectiv doar cadrele eronate. Ea corespunde unei ferestre a receptorului mai mare ca unu.
*Protocol cu retransmitere neselectiv.
Fereastra maxim a transmitorului poate fi de MaxSecv cadre, dei exist MaxSecv+1 numere de secven distincte. Justificm aceast restricie prin urmtorul scenariu, n care presupunem c MaxSecv=7: 1. Transmitorul trimite cadrele 0..7; 2. Toate cadrele snt recepionate i confirmate; 3. Toate confirmrile snt pierdute; 4. Transmitorul retrimite la time-out toate cadrele; 5. Receptorul accept duplicatele.
n acest protocol renunm la presupunerea c utilizatorul este o surs ideala de pachete i includem mecanismul de reglare a fluxului de date: cnd utilizatorul are un pachet de transmis el provoac un eveniment "ReteaPregatita"; cnd o staie are MaxSecv cadre neconfirmate, ea interzice reelei s-i transmit alte pachete prin procedura "DezactivRetea"; cnd numrul de pachete scade, ea anuleaz restricia prin funcia "ActivRetea".
Transmitorul pstreaz cadrele neconfirmate pentru o eventual retransmisie. Confirmarea cadrului n provoac automat confirmarea cadrelor n-1, n-2,... anterioare, ceeace compenseaz eventualele pierderi ale confirmrilor acestor cadre. Deoarece mai multe cadre i asteapt confirmarea, se utilizeaz ceasuri separate pentru diferite mesaje. Fiecare ceas este pornit la transmiterea unui cadru i este oprit la recepia confirmrii sale. La producerea unui eveniment TimeOut, toate cadrele aflate n memoria tampon a transmitorului snt retrimise.
*Protocol cu retransmitere selectiva.
n acest caz, fereastra receptorului este mai mare ca unu. Cnd se primete un cadru avnd numr de secven n fereastr, el este acceptat i memorat de nivelul legtur de date, nefiind comunicat utilizatorului dect dup livrarea cadrelor dinaintea sa.
Fereastra receptorului nu poate fi egal cu cea a transmitorului aa cum
rezult din urmtorul scenariu, pentru MaxSecv = 7 : 1. Transmitorul trimite cadrele 0..6 2. Cadrele snt recepionate i fereastra receptorului devine 7,0, 1, 2, 3, 4, 5 3. Toate confirmrile snt pierdute 4. Transmitorul retrimite cadrul 0 la time-out 5. Receptorul accept cadrul 0 aflat n fereastra i cere cadrul 7
6. Transmitorul afl c toate cadrele sale au fost transmise corect i trimite cadrele 7, 0, 1, 2, 3, 4, 5 7. Receptorul accept cadrele, cu excepia lui 0, pentru care are deja un cadru recepionat. Ca urmare, ignor acest cadru, lund n locul lui dulpicatul cadrului 0 anterior.
Eroarea se produce deoarece ferestrele succesive ale receptorului au numere de secven comune, neputndu-se face diferena ntre cadrele noi i duplicatele celor vechi. Pentru a elimina aceste suprapuneri, fereastra receptorului trebuie s fie cel mult jumtate din gama numerelor de secven.
Fereastra receptorului determin i numrul de tampoane de recepie, ca de altfel i numrul de ceasuri necesare. Cnd canalul este puternic ncrcat, confirmrile cadrelor transmise de la staia A la staia B pot fi comunicate odat cu datele vehiculate de la B la A. Dac traficul de la B la A este sczut, se recurge la transmiterea unor cadre speciale de confirmare. Transmiterea confirmrilor nu se face imediat dup recepia unui cadru corect, ci dup un interval de timp convenabil stabilit i numai dac n acest interval nu a aprut posibilitatea transmiterii confirmrii ntr-un cadru de date de la B la A. Terminarea intervalului de timp are drept corespondent evenimentul "ReteaLibera". Pentru a mbunti eficiena transmisiei, dac receptorul detecteaz un cadru eronat, el poate transmite o confirmare negativ "nak", care reprezint o cerere explicit de retransmitere a cadrului specificat n "nak". Receptorul trebuie s evite transmiterea mai multor cadre "nak" pentru acelai cadru ateptat. 7. HDLC - Controlul de nivel nalt al legturii de date
n aceast seciune vom examina un grup de protocoale strns legate, puin
mai vechi, dar care sunt nc foarte utilizate. Ele sunt toate derivate din protocolul pentru legtura de date utilizat n lumea mainframe-urilor IBM, numit SDLC (Synchronous Data Link Control, rom.: protocolul de control sincron al legturii de date). Dup ce a dezvoltat SDLC, IBM l-a supus examinrii ANSI i ISO pentru acceptare ca standard SUA i, respectiv, internaional. ANSI a modificat protocolul, astfel nct acesta a devenit ADCCP (Advanced Data Communication Control Procedure, rom.: procedur de control avansat al comunicaiilor de date), iar ISO l-a modificat i a produs HDLC (High-level Data Link Control, rom.: control de nivel nalt al legturii de date). CCITT a adoptat i modificat HDLC pentru al su
LAP (Link Access Procedure, rom.: procedur de acces la legtur) care este parte a standardului pentru interfaa de reea X.25, dar, mai trziu l-a modificat din nou, rezultnd LAPB, n scopul de a-l face mai compatibil cu o versiune ulterioar de HDLC. Un lucru frumos n ceea ce privete standardele este c sunt multe, dintre care poi alege. n plus, dac nu i place nici unul dintre ele, poi atepta modelul care va aprea anul viitor.
Aceste protocoale se bazeaz pe aceleai principii. Toate sunt orientate pe
bii i folosesc inserarea de bii pentru transparena datelor. Ele difer doar n puncte minore, i totui suprtoare. Discuia care urmeaz, despre protocoalele orientate pe bii, intenioneaz a fi o introducere general. Pentru detaliile specifice fiecrui protocol, consultai definiia corespunztoare.
Toate protocoalele orientate pe bii folosesc structura de cadru prezentat
n fig. 3-24. Cmpul Adres este primul ca importan pentru liniile cu terminale multiple, unde el este folosit pentru a identifica unul dintre terminale. Pentru liniile punct-la-punct, el este folosit uneori pentru a deosebi comenzile de rspunsuri.
Cmpul Control este folosit pentru numere de secven, confirmri i alte scopuri, dup cum se va arta n continuare.
Cmpul Date poate conine informaii arbitrare. Poate avea lungime arbitrar, cu toate c eficiena sumei de control scade odat cu creterea lungimii cadrului, datorit creterii probabilitii de apariie a erorilor n rafal.
Cmpul Suma de Control este o variant CRC (Cyclic Redundancy Code - cod ciclic redundant).
Cadrul este delimitat cu o alt secven indicator (01111110). Pe liniile punct-la-punct inactive secvenele indicator sunt transmise continuu. Un cadru minim conine trei cmpuri i are n total 32 de bii, excluznd indicatorii de la capete.
Exist trei tipuri de cadre: Informaie, Supervizor i Nenumerotat. Coninutul cmpului Control pentru fiecare dintre aceste trei tipuri este prezentat n fig. 3-25. Acest protocol folosete o fereastr glisant, cu un numr de secven reprezentat pe 3 bii. n fereastr pot fi pstrate, la un moment dat, pn la apte cadre neconfirmate.
Cmpul Secven din fig. 3-25(a) este numrul de secven al cadrului.
Cmpul Urmtor este o confirmare ataat. Oricum, toate protocoalele ader la convenia c, n loc s ataeze numrul ultimului cadru recepionat corect, s foloseasc numrul primului cadru nerecepionat (adic urmtorul cadru ateptat). Opiunea pentru ultimul cadru primit sau urmtorul cadru recepionat este arbitrar; nu are importan ce convenie este utilizat, dac este folosit cu consecven.
Bitul P/F nseamn Test/Final (eng.: Poll/Final). El este folosit atunci cnd un
calculator (sau un concentrator) interogheaz un grup de terminale. Cnd este
folosit ca P, calculatorul invit terminalul s trimit date. Toate cadrele trimise de
terminal, cu excepia celui final, au bitul P/F setat pe P. Pentru cadrul final bitul
este setat la F.
n cteva dintre protocoale, bitul P/F este folosit pentru a fora cealalt
main s trimit imediat un cadru Supervizor, n loc s atepte fluxul invers la
care s se ataeze informaia despre fereastr. Bitul are de asemenea cteva
utilizri minore referitoare la cadrele nenumerotate.
Numeroasele tipuri de cadre Supervizor sunt difereniate prin cmpul Tip.
Tipul 0 este un cadru de confirmare (numit oficial RECEIVE READY) folosit pentru a
indica urmtorul cadru ateptat. Cadrul este folosit atunci cnd nu exist flux
invers care s poat fi folosit pentru ataare.
Tipul 1 este un cadru de confirmare negativ (oficial numit REJECT). Este
folosit pentru a indica detecia unei erori de transmisie. Cmpul Urmtor indic
primul cadru din secven ce nu a fost recepionat corect (deci cadrul ce trebuie
retransmis). Transmitorului i se cere s retransmit toate cadrele neconfirmate,
ncepnd cu Urmtor-ul.
Tipul 2 este RECEIVE NOT READY. El confirm toate cadrele, cu excepia lui
Urmtor, exact ca RECEIVE READY, dar spune transmitorului s opreasc
transmisia. RECEIVE NOT READY este destinat s semnaleze anumite probleme
temporare aprute la receptor, cum ar fi lipsa zonelor tampon, i nu ca o
alternativ la controlul fluxului cu fereastr glisant. Cnd problema a fost
rezolvat, receptorul trimite un RECEIVE READY, REJECT sau anumite cadre de
control.
Tipul 3 este SELECTIVE REJECT. El cere retransmiterea, ns doar pentru
cadrul specificat. Din acest punct de vedere este folositor atunci cnd
dimensiunea ferestrei transmitorului este jumtate sau mai puin din
dimensiunea spaiului secvenei. Astfel, dac receptorul dorete s pstreze cadre
care erau n afara secvenei pentru posibila folosire ulterioar, el poate s foreze
retransmiterea oricrui cadru, folosind SELECTIVE REJECT. HDLC i ADCCP permit
acest tip de cadru, dar SDLC i LAPB nu l permit (adic nu exist Selective Reject)
i cadrele de tipul 3 nu sunt definite.
Cea de-a treia clas o reprezint cadrul Nenumerotat. El este folosit uneori
n scopuri de control, dar poate fi folosit i pentru transportul datelor atunci cnd
se recurge la un serviciu nesigur, neorientat pe conexiune. Diversele tipuri de
protocoale orientate pe bii difer considerabil aici, spre deosebire de celelalte
dou tipuri, unde erau aproape identice. Pentru a indica tipul cadrului sunt
disponibili cinci bii, dar nu sunt folosite toate cele 32 de posibiliti.
Toate protocoalele furnizeaz o comand, DISC (DISConnect), care permite
ca o main s anune c se va opri. De asemenea exist o comand ce permite ca
o main, care tocmai s-a reconectat, s-i anune prezena i s foreze resetarea
tuturor numerelor de secven la zero. Aceast comand poart numele de SNRM
(Set Normal Response Mode - stabilete modul normal de rspuns). Din
nefericire, modul normal de rspuns numai normal nu este. Este un mod
neechilibrat (adic asimetric) n care unul din capetele liniei este master iar
cellalt este slave. SNRM dateaz din timpurile cnd comunicaia datelor
presupunea un terminal neinteligent comunicnd cu un calculator gazd puternic,
ceea ce este, evident, asimetric. Pentru a face protocolul mai potrivit cazurilor n
care cei doi parteneri sunt egali, HDLC i LAPB au o comand suplimentar, SABM
(Set Asynchronous Balanced Mode - stabilete modul asincron echilibrat), care
reseteaz linia i declar ambii parteneri ca fiind egali. De asemenea, aceste
protocoale au comenzile SABME i SNRME, care sunt identice cu SABM i,
respectiv, SNRM, cu excepia faptului c ele permit folosirea unui format extins
pentru cadru, care utilizeaz numere de secven pe 7 bii n locul unora pe 3 bii.
A treia comand prevzut de toate protocoalele este FRMR (FRaMe
Reject), folosit pentru a indica sosirea unui cadru cu suma de control corect, dar
cu semantic imposibil. Exemple de semantic imposibil sunt cadru de tipul 3
Supervizor n LAPB, un cadru mai scurt de 32 de bii, un cadru de control
nepermis, confirmarea unui cadru care a fost n afara ferestrei etc. Cadrele FRMR
conin un cmp de date de 24 de bii care arat ceea ce a fost eronat la cadrul
respectiv. Datele includ cmpul de control al cadrului eronat, parametrii ferestrei
i o colecie de bii folosii pentru a semnala erori specifice.
Cadrele de control pot fi pierdute sau deteriorate ca i cadrele de date, de
aceea i ele trebuie confirmate. n acest scop este furnizat un cadru special de
control, numit UA (Unnumbered Acknowledgement). Deoarece poate exista un
singur cadru de control neconfirmat, nu exist niciodat ambiguiti asupra
cadrului care este confirmat. Cadrele de control rmase sunt folosite pentru
iniializare, interogare i raportarea strii. Exist, de asemenea, un cadru de
control care poate conine informaii arbitrare, UI (Unnumbered Information).
Aceste date nu sunt livrate nivelului reea, ci sunt destinate a fi primite chiar de
nivelul legtur de date.
8. Servicii furnizate de nivelul retea nivelului transport
Nivelul reea furnizeaz servicii nivelului transport la interfaa dintre cele
dou niveluri. O ntrebare important este ce fel de servicii furnizeaz nivelul
reea nivelului transport. Serviciile nivelului reea au fost proiectate avnd n
vedere urmtoarele scopuri:
1. Serviciile trebuie s fie independente de tehnologia ruterului.
2. Nivelul transport trebuie s fie independent de numrul, tipul i topologia
ruterelor existente.
3. Adresele de reea disponibile la nivelul transport trebuie s foloseasc o
schem de numerotare uniform, chiar n cadrul reelelor LAN i WAN.
Obiectivele fiind stabilite, proiectantul nivelului reea are o mare libertate
n a scrie specificaiile detaliate ale serviciilor oferite nivelului transport. Aceast
libertate degenereaz adesea ntr-o aprig btlie ntre dou tabere opuse.
Problema central a discuiei este dac nivelul reea trebuie s furnizeze servicii
orientate pe conexiune sau servicii neorientate pe conexiune.
O tabr (reprezentat de comunitatea Internet) afirm c scopul ruterului
este de a transfera pachete i nimic mai mult. n viziunea lor (bazat pe
experiena a aproape 30 de ani de exploatare a unei reele de calculatoare n
funciune), subreeaua este inerent nesigur, indiferent cum ar fi proiectat. De
aceea calculatoarele gazd trebuie s accepte faptul c reeaua este nesigur i s
fac controlul erorilor (i.e., detecia i corecia erorii) i controlul fluxului ele
nsele.
Acest punct de vedere duce rapid la concluzia c serviciul reea trebuie s
fie neorientat pe conexiune, cu dou primitive SEND PACKET i RECEIVE PACKET
i cu foarte puin n plus. n particular, nu trebuie fcut nici o operaie pentru
controlul ordinii sau fluxului pachetelor pentru c oricum calculatorul gazd va
face acest lucru, i, de obicei, dublarea acestor operaii aduce un ctig
nesemnificativ. n continuare, fiecare pachet va trebui s poarte ntreaga adres
de destinaie, pentru c fiecare pachet este independent de pachetele
predecesoare, dac acestea exist.
Cealalt tabr (reprezentat de companiile de telefoane) afirm c
subreeaua trebuie s asigure un serviciu orientat pe conexiune sigur. Ei susin c
100 de ani de experien cu sistemul telephonic mondial reprezint un ghid
excelent. n aceast perspectiv, calitatea serviciului este elementul dominant, i
ntr-o subreea fr conexiuni, calitatea serviciului este dificil de obinut, n special
pentru trafic in timp real cum ar fi voce i imagine.
9. Subretea datagrama si subretea cu circuite virtuale
Dac este oferit un serviciu neorientat pe conexiune, atunci pachetele sunt
trimise in subreea individual i dirijate independent de celelalte. Nu este
necesar nici o iniializare prealabil. n acest context, pachetele sunt numite
frecvent datagrame (datagrams) (prin analogie cu telegramele), iar subreeaua
este numit subreea datagram (datagram subnet). Dac este folosit serviciul
orientat conexiune, atunci, nainte de a trimite pachete de date, trebuie stabilit o
cale de la ruterul surs la ruterul destinaie. Aceast conexiune este numit VC
(virtual circuit, circuit virtual), prin analogie cu circuitele fizice care se stabilesc n
sistemul telefonic, iar subreeaua este numit subreea cu circuite virtuale
(virtual-circuit subnet).
S vedem cum funcioneaz o subreea datagram. S presupunem c
procesul P1 din fig. 5-2 are un mesaj lung pentru procesul P2. El transmite mesajul
nivelului transport, cu instruciunile de livrare ctre procesul P2 aflat pe
calculatorul gazd H2. Codul nivelului transport ruleaz pe calculatorul gazd H1,
de obicei n cadrul sistemului de operare. Acesta insereaz la nceputul mesajului
un antet corespunztor nivelului transport i transfer rezultatul nivelului reea,
probabil o alt procedur din cadrul sistemului de operare.
S presupunem c mesajul este de patru ori mai lung dect dimensiunea
maxim a unui pachet, aa c nivelul reea trebuie s l sparg n patru pachete, 1,
2, 3, i 4 i s le trimit pe fiecare n parte ruterului A, folosind un protocol punct-
la-punct, de exemplu, PPP. Din acest punct controlul este preluat de compania de
telecomunicaii. Fiecare ruter are o tabel intern care i spune unde s trimit
pachete pentru fiecare destinaie posibil. Fiecare intrare n tabel este o pereche
compus din destinaie i linia de ieire folosit pentru acea destinaie. Pot fi
folosite doar linii conectate direct. De exemplu, n fig. 5-2, A are doar dou linii de
ieire ctre B i C astfel c fiecare pachet ce vine trebuie trimis ctre unul
dintre aceste rutere, chiar dac ultima destinaie este alt ruter. Tabela de rutare
iniial a lui A este prezentat n figur sub eticheta iniial.
Cum au ajuns la A, pachetele 1, 2 i 3 au fost memorate pentru scurt timp
(pentru verificarea sumei de control). Apoi fiecare a fost trimis mai departe ctre
C conform tabelei lui A. Pachetul 1 a fost apoi trimis mai departe ctre E i apoi
ctre F. Cnd a ajuns la F, a fost ncapsulat ntr-un cadru al nivelului legtur de
date i trimis ctre calculatorul gazd H2 prin reeaua LAN.
Totui, ceva diferit s-a ntmplat cu pachetul 4. Cnd a ajuns la A a fost
trimis ctre ruterul B, chiar dac i el este destinat tot lui F. Dintr-un motiv
oarecare, A a decis s trimit pachetul 4 pe o rut diferit de cea urmat de
primele trei. Poate c a aflat despre o congestie undeva pe calea ACE i i-a
actualizat tabela de rutare, aa cum apare sub eticheta mai trziu. Algoritmul ce
administreaz tabelele i ia deciziile de rutare se numete algoritm de rutare
(routing algorithm).
Pentru serviciile orientate conexiune, avem nevoie de o subreea cu
circuite virtuale. S vedem cum funcioneaz aceasta. Ideea care se st la baza
circuitelor virtuale este evitarea alegerii unei noi ci (rute) pentru fiecare pachet
trimis, ca n fig. 5-2. n schimb, atunci cnd se stabilete o conexiune, se alege o
cale ntre maina surs i maina destinaie, ca parte component a iniializrii
conexiunii i aceasta este memorat n tabelele ruterelor. Acea cale este folosit
pentru tot traficul de pe conexiune, exact n acelai mod n care funcioneaz
sistemul telefonic. Atunci cnd conexiunea este eliberat, este nchis i circuitul
virtual. n cazul serviciilor orientate conexiune, fiecare pachet poart un
identificator care spune crui circuit virtual i aparine.
De exemplu, s considerm situaia din fig. 5-3. Aici calculatorul gazd H1 a
stabilit conexiunea 1 cu calculatorul gazd H2. Aceasta este memorat ca prima
intrare n fiecare tabel de rutare. Prima linie a tabelei lui A spune c dac un
pachet purtnd identificatorul de conexiune 1 vine de la H1, atunci trebuie trimis
ctre ruterul C, dndu-i-se identificatorul de conexiune 1. Similar, prima intrare a
lui C dirijeaz pachetul ctre E, tot cu identificatorul de conexiune 1.
Acum s vedem ce se ntmpl dac H3 vrea, de asemenea, s stabileasc o
conexiune cu H2. Alege identificatorul de conexiune 1 (deoarece iniializeaz
conexiunea i aceasta este singura conexiune) i indic subreelei s stabileasc
circuitul virtual. Aceasta conduce la a doua linie din tabele. Observai c apare un
conflict deoarece dei A poate distinge uor pachetele conexiunii 1 de la H1 de
pachetele conexiunii 1 de la H3, C nu poate face asta. Din acest motiv, A asociaz
un identificator de conexiune diferit pentru traficul de ieire al celei de a doua
conexiuni. Pentru evitarea conflictelor de acest gen ruterele trebuie s poat
nlocui identificatorii de conexiune n pachetele care pleac. n unele contexte,
aceasta se numete comutarea etichetelor (label switching).
Comparaie ntre subreele cu circuite virtuale i subreele datagram
10. Algoritmi de dirijare
Algoritmul de dirijare (routing algorithm) este acea parte a software-ului
nivelului reea care rspunde de alegerea liniei de ieire pe care trebuie trimis un
pachet recepionat. Dac subreeaua folosete intern datagrame, aceast decizie
trebuie luat din nou pentru fiecare pachet recepionat, deoarece este posibil ca
cea mai bun rut s se fi modificat ntre timp. Dac subreeaua folosete circuite
virtuale, deciziile de dirijare sunt luate doar la iniializarea unui nou circuit virtual.
Dup aceea pachetele de date vor urma doar calea stabilit anterior. Acest ultim
caz este numit uneori dirijare de sesiune (session routing), deoarece calea rmne
n funciune pentru o ntreag sesiune utilizator (de exemplu o sesiune de
conectare de la un terminal -login- sau un transfer de fiiere).
Uneori este util s se fac distincia ntre dirijare, care nseamn alegerea
cii care va fi folosit, i retransmitere, care se refer la ceea ce se ntmpl atunci
cnd sosete un pachet. Se poate spune despre un ruter c ruleaz intern dou
procese. Unul dintre ele preia fiecare pachet care sosete, cutnd n tabela de
dirijare linia de ieire folosit pentru el. Acesta este procesul de retransmitere
(forwarding). Cellalt proces se ocup de completarea i actualizarea tabelei de
rutare. Aici intervine algoritmul de dirijare.
Indiferent dac ruta se alege independent pentru fiecare pachet sau doar la
stabilirea unei noi conexiuni, un algoritm de dirijare trebuie s aib anumite
proprieti: corectitudine, simplitate, robustee, stabilitate, echitate, optimalitate.
Algoritmii de dirijare pot fi grupai n dou mari clase: neadaptivi i
adaptivi. Algoritmii neadaptivi (nonadaptive algorithms) nu i bazeaz deciziile
de dirijare pe msurtori sau estimri ale traficului i topologiei curente. Astfel,
alegerea cii folosite pentru a ajunge de la nodul I la nodul J (oricare ar fi I i J) se
calculeaz n avans, off-line i parvine ruterului la iniializarea reelei. Aceast
procedur se mai numete i dirijare static (static routing).
Algoritmii adaptivi (adaptive algorithms), prin contrast, i modific
deciziile de dirijare pentru a reflecta modificrile de topologie i de multe ori i pe
cele de trafic. Algoritmii adaptivi difer prin locul de unde i iau informaia (de
exemplu local, de la un ruter vecin sau de la toate ruterele), prin momentul la
care schimb rutele (de exemplu la fiecare T secunde, cnd se schimb
ncrcarea sau cnd se schimb topologia) i prin metrica folosit pentru
optimizare (de exemplu distana, numrul de salturi sau timpul estimat pentru
tranzit).
Algoritmi statici:
- Algoritmul lui Dijkstra: Fiecare nod este etichetat (n paranteze) cu distana
de la nodul surs pn la el, de-a lungul celei mai bune ci cunoscute. Iniial
nu se cunoate nici o cale, aa c toate nodurile vor fi etichetate cu infinit.
Pe msur ce se execut algoritmul i se gsesc noi ci, etichetele se pot
schimba, reflectnd ci mai bune. O etichet poate fi fie temporar, fie
permanent. Iniial toate etichetele sunt temporare. Atunci cnd se
descoper c o etichet reprezint cea mai scurt cale posibil de la surs
ctre acel nod, ea devine permanent i nu se mai schimb ulterior.
- Inundarea: fiecare pachet recepionat este trimis mai departe pe fiecare
linie de ieire, cu excepia celei pe care a sosit. Este evident c inundarea
genereaz un mare numr de pachete duplicate, de fapt un numr infinit
dac nu se iau unele msuri pentru a limita acest proces.
o O astfel de msur este pstrarea unui contor de salturi n antetul
fiecrui pachet, contor care este decrementat la fiecare salt i care
face ca pachetul s fie distrus cnd contorul atinge valoarea zero.
Ideal ar fi ca acest contor s fie iniializat cu lungimea cii de la surs
la destinaie. Dac emitorul nu cunoate lungimea cii, poate
iniializa contorul la valoarea cea mai defavorabil, adic diametrul
subreelei.
o O metod alternativ pentru limitarea inundrii este identificarea
pachetelor care au fost deja inundate, pentru a prentmpina
trimiterea lor a doua oar. O cale pentru a realiza acest scop este ca
ruterul surs s plaseze un numr de secven n fiecare pachet pe
care l primete de la calculatorul gazd asociat. Fiecare ruter
necesit meninerea unei liste pentru fiecare ruter surs, cu
numerele de secven provenite de la acel ruter surs i care au fost
deja trimise mai departe. Dac sosete un pachet care se afl n list,
el nu mai este trimis mai departe. Pentru a limita creterea lungimii
listei, fiecare list trebuie nsoit de un contor, k, care semnific
faptul c toate numerele de secven pn la k au fost deja tratate.
La recepia unui pachet este uor s se verifice dac este un duplicat,
caz n care este distrus. Evident, lista cu numere mai mici dect k nu
este necesar, deoarece k o rezum.
- Inundarea selectiva: ruterele nu trimit fiecare pachet recepionat pe
fiecare legtur de ieire, ci doar pe acele linii care duc aproximativ n
direcia potrivit. De obicei sunt puine motive pentru a trimite un pachet
spre partea de vest a reelei folosind o legtur spre est, dect dac
topologia reelei este cu totul deosebit i ruterul este sigur de acest lucru.
Algoritmi dinamici:
- Algoritmul de dirijare cu vectori distan (distance vector routing)
o Presupune c fiecare ruter menine o tabel (de exemplu un vector)
care pstreaz cea mai bun distan cunoscut spre fiecare
destinaie i linia care trebuie urmat pentru a ajunge acolo. Aceste
tabele sunt actualizate prin schimbul de informaii ntre nodurile
vecine.
o Algoritmul de dirijare cu vectori distan este cunoscut i sub alte
nume, cel mai des algoritmul distribuit de dirijare Bellman-Ford i
algoritmul Ford-Fulkerson, dup numele cercettorilor care l-au
propus.
o n dirijarea pe baza vectorilor distan, fiecare ruter pstreaz o
tabel de dirijare coninnd cte o intrare pentru fiecare ruter din
subreea. Aceast intrare are dou pri: linia de ieire preferat care
se folosete pentru destinaia respectiv i o estimare a timpului sau
distanei pn la acea destinaie. Metrica folosit poate fi numrul de
salturi, ntrzierea n milisecunde, numrul total de pachete care
ateapt n cozi de-a lungul cii, sau ceva asemntor.
o Se presupune c ruterul cunoate distana spre fiecare dintre
vecinii si. Dac se folosete metrica salturilor, distana este doar de
un salt. Dac metrica folosit este cea a lungimii cozilor de ateptare,
ruterul examineaz pur i simplu lungimile acestor cozi. Dac metrica
este cea a ntrzierilor, ruterul o poate msura direct prin pachete
speciale ECHO, n care receptorul va marca doar timpul curent
(tampila de timp) i le va trimite napoi ct mai repede posibil.
o Ca exemplu, s presupunem c se folosete metrica ntrzierilor i c
ruterul cunoate ntrzierea spre fiecare dintre vecinii si. O dat la
fiecare T msec fiecare ruter trimite spre fiecare vecin o list a
estimrilor proprii spre fiecare destinaie. De asemenea el
recepioneaz o list similar de la fiecare vecin. S presupunem c
una dintre aceste tabele tocmai a sosit de la vecinul X, cu Xi fiind
estimarea lui X despre ct timp este necesar pentru a ajunge la
ruterul i. Dac ruterul tie c ntrzierea spre X este m msec, el tie
de asemenea c poate atinge ruterul i trecnd prin X n Xi + m msec.
Fcnd aceste calcule pentru fiecare vecin, un ruter poate stabili care
estimare pare a fi cea mai bun, pentru a folosi aceast estimare,
mpreun cu linia corespunztoare n noua tabel de dirijare. Este de
remarcat faptul c vechea tabel de dirijare nu intervine n calcule.
o Problema numararii la infinit
Dirijarea folosind vectori distan funcioneaz n teorie, ns n
practic are o limitare important: dei ea converge spre
rezultatul corect, o face foarte lent. n particular, ea
reacioneaz rapid la vetile bune, dar foarte lent la cele rele.
S considerm un ruter care are un cel mai bun drum spre
destinaia X foarte lung. Dac la urmtorul schimb de
informaii, vecinul su A raporteaz brusc o ntrziere mic
spre X, ruterul va comuta i va folosi linia spre A pentru a dirija
traficul spre X. Astfel, ntr-o singur schimbare a vectorului,
vestea bun a fost luat n considerare. ntr-o subreea avnd
calea cea mai lung de lungime N salturi, dup N schimburi
fiecare ruter va afla despre liniile i ruterele nou aprute.
S considerm acum situaia n care toate liniile i ruterele sunt
iniial n funciune. Ruterele B, C, D i E au distanele spre A
respectiv de 1, 2, 3, 4. Brusc, A se oprete sau, alternativ, linia
dintre A i B este ntrerupt, ceea ce reprezint efectiv acelai
lucru din punctul de vedere al lui B.
La primul schimb de pachete, B nu primete nimic de la A. Din
fericire, C spune: Nici o problem. Eu tiu o cale spre A de
lungime 2. ns B nu tie c aceast cale a lui C trece prin B
nsui. Dup cunotinele lui B, C ar putea avea zece linii, toate
cu ci separate de lungime 2 spre A. Prin urmare B va crede c
poate ajunge la A prin C pe o cale de lungime 3. D i E nu i
actualizeaz intrrile proprii pentru A la primul schimb.
La al doilea schimb, C remarc faptul c fiecare dintre vecinii
si pretinde a avea o cale de lungime 3 spre A. El va alege la
ntmplare unul dintre aceti vecini i va nregistra noua
distan spre A ca fiind 4.
Din aceast figur se poate deduce de ce vetile rele circul
mai lent: orice ruter va avea ntotdeauna o valoare cu cel mult
unu mai mare dect valoarea minim a vecinilor si. Treptat,
toate ruterele vor ajunge la infinit, ns numrul de schimburi
necesar depinde de valoarea numeric folosit pentru a
reprezenta valoarea infinit. Din aceast cauz este recomandat
s se aleag infinitul, ca fiind lungimea celei mai mari ci, plus
1. Dac metrica este ntrzierea n timp, atunci nu este definite
nici o limit superioar, astfel nct este necesar o valoare
mare pentru a preveni considerarea unui drum cu ntrziere
mare ca fiind un drum defect. Nu este deloc surprinztor c
aceast problem este numit problema numrrii la infinit (the
count to infinity problem).
Miezul problemei este c atunci cnd X i spune lui Y c are o
cale spre o destinaie, Y nu are de unde s tie dac se afl el
nsui pe acea cale.
- Dirijarea folosind starea legaturilor
o Ideea algoritmului bazat pe starea legturilor este simpl i poate fi
formulat n 5 puncte. Fiecare ruter trebuie s fac urmtoarele:
S descopere care sunt vecinii si i afle adresele de reea ale
acestora.
S msoare ntrzierea sau costul pn la fiecare din vecinii si.
S pregteasc un pachet prin care anun pe toat lumea c
tocmai a terminat de cules datele despre vecini.
S trimit acest pachet ctre toate celelalte rutere.
S calculeze cea mai scurt cale spre fiecare ruter.
o Ca urmare, ntreaga topologie i toate ntrzierile sunt msurate
experimental i distribuite spre fiecare ruter. Apoi se poate rula
algoritmul lui Dijkstra pentru a afla cea mai scurt cale ctre fiecare
ruter.
o Determinarea vecinilor: Cnd un ruter este pus n funciune, prima sa
sarcin este s afle care sunt vecinii si. El realizeaz aceasta prin
trimiterea unui pachet special HELLO pe fiecare linie prin care este
legat la alt ruter. Ruterul de la cellalt capt trebuie s rspund
anunnd ntr-un pachet identitatea sa. Aceste nume trebuie s fie
unice global, pentru c dac mai trziu un ruter afl c trei rutere
sunt conectate toate la F, este esenial ca acesta s poat determina
dac cele trei se refer la acelai F.
o Msurarea costului liniei:
Algoritmul de dirijare bazat pe starea legturilor cere ca fiecare
ruter s tie, sau cel puin s aib o estimare rezonabil, a
ntrzierii ctre fiecare dintre vecinii si. Cel mai direct mod de
a afla acest lucru este de a trimite un pachet special ECHO pe
linie, cernd ca ruterul partener s-l trimit napoi imediat.
Msurnd timpul n care pachetul se ntoarce (round-trip time)
i mprindu-l la doi, ruterul iniiator poate avea o estimare
rezonabil a ntrzierii. Pentru rezultate i mai bune, testul
poate fi repetat de mai multe ori, folosindu-se apoi valoarea
medie obinut. Bineneles, aceast metod presupune
implicit c ntrzierile sunt simetrice, dar nu mereu este aa.
O problem interesant este dac s se considere sau nu
ncrcarea reelei la msurarea ntrzierii. Pentru a ine cont de
ncrcare, timpul de revenire trebuie msurat din momentul n
care pachetul ECHO este pus n coad. Pentru a ignora
ncrcarea, ceasul se poate porni n momentul n care pachetul
ECHO ajunge pe prima poziie din coad.
o Construirea pachetelor cu starea legturilor:
De ndat ce a fost colectat informaia necesar pentru
realizarea schimbului, se poate trece la pasul urmtor, fiecare
ruter construind un pachet care conine toate datele. Pachetul
ncepe cu identitatea expeditorului, urmat de un numr de
secven, vrst i o list a vecinilor. Pentru fiecare vecin se
specific ntrzierea asociat.
Construirea pachetelor cu starea legturilor se face uor.
Partea mai dificil este s se determine cnd s fie construite
ele. O posibilitate este ca ele s fie construite periodic, adic la
intervale regulate. O alt posibilitate este atunci cnd se
produce un eveniment semnificativ, cum ar fi scoaterea din
funciune a unui vecin sau a unei linii, sau repunerea lor n
funciune, sau modificarea semnificativ a proprietilor lor.
o Distribuirea pachetelor cu starea legturilor:
Cea mai complicat parte a algoritmului este distribuirea sigur
a pachetelor cu starea legturilor. De ndat ce pachetele sunt
distribuite i instalate, ruterele care primesc primele pachete
i vor schimba rutele. n consecin, rutere diferite ar putea
folosi versiuni diferite ale topologiei, ceea ce poate duce la
apariia unor inconsistene, bucle, maini inaccesibile sau a
altor probleme.
Ideea fundamental este folosirea inundrii pentru a distribui
pachetele cu starea legturilor. Pentru a avea controlul
inundrii, fiecare pachet conine un numr de secven care
este incrementat la fiecare nou pachet trimis. Ruterele
pstreaz evidena tuturor perechilor (ruter surs, numr
secven) pe care le vd. La sosirea unui nou pachet cu starea
legturilor, el este cutat n lista pachetelor deja vzute. Dac
pachetul este nou, el este retrimis pe toate liniile, cu excepia
celei pe care a sosit. Dac este un duplicat, pachetul este
distrus. Dac pachetul sosit are un numr de secven mai mic
dect cel mai mare numr de secven detectat, atunci el este
rejectat ca fiind nvechit.
Acest algoritm are cteva probleme, dar ele sunt tratabile. n
primul rnd, dac numerele de secven ating valoarea
maxim posibil i rencep de la valori mici, se pot produce
confuzii. Soluia este folosirea numerelor de secven pe 32
bii. Considernd un pachet de starea legturilor pe secund,
ar trebui 137 ani pentru a se rencepe de la valori mici, astfel
nct aceast posibilitate poate fi ignorat.
n al doilea rnd, dac un ruter se defecteaz, el va pierde
evidena numerelor de secven. Dac va rencepe de la 0,
urmtorul pachet va fi rejectat ca duplicat.
n al treilea rnd, dac numrul de secven este alterat i se
recepioneaz 65540 n loc de 4 (eroare de modificare a unui
bit), pachetele de la 5 la 65540 vor fi rejectate ca fiind
nvechite, deoarece se consider c numrul de secven
curent este 65540.
Soluia tuturor acestor probleme este includerea vrstei
pachetului dup numrul de secven i decrementarea sa la
fiecare secund. Cnd vrsta ajunge la zero, informaia de la
ruterul respective este distrus. n mod normal un nou pachet
apare, s zicem, la fiecare 10 sec., astfel nct informaia de la
ruter expir doar dac ruterul este oprit (sau dac ase
pachete consecutive s-au pierdut, un lucru extrem de
improbabil). Cmpul Age este decrementat de asemenea de
fiecare ruter la nceputul procesului de inundare, pentru a se
asigura c nici un pachet nu se poate pierde sau nu poate
supravieui o perioad nelimitat (un pachet avnd vrsta zero
este distrus).
o Calcularea noilor rute:
De ndat ce un ruter a acumulat un set complet de pachete cu
starea legturilor, el poate construi graful ntregii subreele,
deoarece fiecare legtur este reprezentat. De fapt, fiecare
legtur este reprezentat de dou ori, o dat pentru fiecare
direcie. Cele dou valori pot fi mediate sau folosite separat.
Acum poate fi folosit local algoritmul lui Dijkstra, pentru a
construi cea mai scurt cale ctre toate destinaiile posibile.
Rezultatul acestui algoritm poate fi trecut n tabelele de
dirijare, iar apoi operaiile normale pot fi reluate.
11. Dirijarea prin difuzare
n unele aplicaii, calculatoarele gazd au nevoie s trimit mesaje ctre mai
multe sau ctre toate celelalte calculatoare gazd. De exemplu, un serviciu de
distribuire a rapoartelor meteorologice, de actualizare a cursului aciunilor sau
transmisiuni radio n direct ar putea funciona mai bine prin difuzarea datelor
ctre toate mainile, fiind la latitudinea celor interesate de date s le
recepioneze. Trimiterea simultan a unui pachet ctre toate destinaiile se
numete difuzare (broadcast); mai multe metode pentru realizarea ei au fost
propuse.
O metod de difuzare care nu are cerine speciale pentru subreea este ca
sursa s trimit un pachet distinct ctre fiecare destinaie. Metoda este nu numai
consumatoare de lime de band, dar ea cere ca sursa s dein o list complet
a tuturor destinaiilor. S-ar putea ca n practic aceasta s fie singura metod
utilizabil, ns ea este metoda cea mai puin dorit.
Inundarea este un alt candidat evident. Dei inundarea este nepotrivit
pentru comunicaia obinuit capt la capt, pentru difuzare ar trebui luat serios
n considerare, mai ales dac nici una dintre metodele ce vor fi descrise n
continuare nu este aplicabil. Problema folosirii inundrii ca metod de difuzare
este aceeai cu problema ivit la folosirea sa ca algoritm de dirijare capt la capt:
genereaz prea multe pachete i consum lime de band prea mare.
Al treilea algoritm este dirijarea multidestinaie (multidestination routing).
Dac se folosete aceast metod, fiecare pachet conine fie o list a destinaiilor,
fie o hart de bii care indic destinaiile dorite. Atunci cnd un pachet ajunge la
un ruter, ruterul verific toate destinaiile pentru adetermina setul liniilor de
ieire pe care trebuie trimis pachetul. (O linie de ieire este selectat dac este
calea cea mai bun pentru cel puin o destinaie.) Ruterul genereaz o nou copie
a pachetului pentru fiecare linie de ieire folosit i include n fiecare pachet doar
acele destinaii care folosesclinia respectiv. Efectul este partiionarea mulimii
destinaiilor ntre liniile de ieire. Dup un numr suficient de salturi, fiecare
pachet va conine o singur destinaie i poate fi tratat ca un pachet normal.
Dirijarea multidestinaie este asemntoare trimiterii separate a mai multor
pachete ctre adresele destinaie, cu excepia faptului c atunci cnd mai multe
pachete trebuie s urmeze aceeai cale, unul dintre ele pltete tot drumul, iar
celelalte cltoresc gratuit.
Al patrulea algoritm de difuzare utilizeaz explicit arborele de scufundare al
ruterului care iniiaz difuzarea sau orice alt arbore de acoperire util. Un arbore
de acoperire (spanning tree) este un subset al subreelei care include toate
ruterele i nu conine bucle. Dac fiecare ruter cunoate care din liniile sale
particip la arborele de acoperire, el poate copia un pachet de difuzare
recepionat pe toate liniile de ieire care fac parte din arborele de acoperire, cu
excepia celei pe care a fost recepionat. Aceast metod asigur o utilizare
deosebit de eficient a limii de band, genernd numrul minim de pachete
necesare pentru a rezolva problema. Singura problem este c, pentru a fi
aplicabil, fiecare ruter trebuie s dein cunotine despre un anume arbore de
acoperire. Uneori aceast informaie este disponibil (de exemplu la dirijarea
bazat pe starea legturilor), iar alteori nu este disponibil (de exemplu la
dirijarea cu vectori distan).
Ultimul nostru algoritm cu difuzare este o ncercare de a aproxima
comportamentul precedentului, chiar i atunci cnd ruterele nu tiu absolut nimic
despre arborele de acoperire. Ideea, numit trimiterea pe calea invers (reverse
path forwarding) este remarcabil de simpl odat ce a fost indicat. Cnd un
pachet de difuzare ajunge la un ruter, acesta verific dac pachetul a sosit pe linia
pe care se trimit de obicei pachete ctre sursa difuzrii. Dac este aa, este o
ans foarte mare ca nsui pachetul de difuzare s fi urmat cea mai bun cale,
fiind astfel prima copie care ajunge la ruter. Aceasta fiind situaia, ruterul trimite
pachetul pe toate liniile de ieire, cu excepia celei pe care a sosit. Dac ns
pachetul a sosit pe alt linie dect cea preferat pentru a ajunge la surs, pachetul
este distrus, fiind considerat un posibil duplicat.
12. Dirijarea cu trimitere multipla (multicast)
Unele aplicaii necesit ca procese aflate la mari distane unele de altele s
lucreze n grup, de exemplu, un grup de procese care implementeaz o baz de
date distribuit. n aceste situaii, este adesea necesar ca un proces s trimit un
mesaj ctre toi ceilali membri ai grupului. Dac grupul este mic, el poate trimite
fiecrui partener un mesaj capt la capt. Dac grupul este mare, aceast
strategie este costisitoare. Uneori se poate folosi difuzarea, dar folosirea difuzrii
pentru a anuna 1000 de maini dintr-o reea cu un milion de noduri este
ineficient, deoarece majoritatea receptorilor nu sunt interesai de mesaj (sau
chiar mai ru, sunt foarte interesai, dar nu trebuie s vad mesajul). De aceea,
avem nevoie de o modalitate de a trimite mesaje spre grupuri bine definite.
Trimiterea unui mesaj ctre un astfel de grup se numete multicasting, iar
algoritmul de dirijare asociat se numete dirijare multicast (multicast routing). n
aceast seciune, vom descrie o modalitate de a realiza dirijarea multicast.
Dirijarea multicast necesit managementul grupului. Trebuie s existe
modaliti de a crea i distruge grupuri i de a permite proceselor s intre n
grupuri sau s le prseasc. Cum se realizeaz aceste funcii nu este treaba
algoritmului de dirijare. Important pentru algoritmul de dirijare este c atunci
cnd un proces se ataeaz unui grup, el trebuie s informeze gazda sa despre
aceasta. Este important ca ruterele s tie cror grupuri le aparin calculatoarele
gazd asociate. Fie calculatoarele gazd trebuie s anune ruterul asociat la
producerea unei modificri n alctuirea grupurilor, fie ruterul trebuie s
interogheze periodic aceste calculatoare gazd. n ambele cazuri, ruterul afl din
ce grupuri fac parte calculatoarele gazd. Ruterele i informeaz vecinii, astfel c
informaia se propag prin subreea.
Pentru a realiza dirijarea multicast, fiecare ruter calculeaz arborele de
acoperire care acoper toate celelalte rutere din subreea. Atunci cnd un proces
trimite un pachet multicast ctre un grup, primul ruter i examineaz arborele de
acoperire i l reteaz, eliminnd toate liniile care nu conduc ctre calculatoare
gazd, membre ale grupului. Pachetele multicast sunt dirijate doar de-a lungul
arborelui de acoperire corespunztor.
Sunt posibile mai multe moduri de retezare a arborelui de acoperire. Cel
mai simplu se poate folosi dac se utilizeaz dirijarea bazat pe starea legturilor
i fiecare ruter cunoate ntreaga topologie a subreelei, inclusiv apartenena
calculatoarelor gazd la grupuri. Atunci arborele poate fi retezat pornind de la
sfritul fiecrei ci, mergnd spre rdcin i eliminnd toate ruterele care nu
aparin grupului respectiv.
n cazul dirijrii folosind vectori distan, poate fi aplicat o alt strategie de
retezare a arborelui. Algoritmul de baz folosit este trimiterea pe calea invers.
Oricum, ori de cte ori un ruter fr nici un calculator gazd interesat de un
anume grup i fr nici o conexiune la alte rutere primete un mesaj multicast
pentru acel grup, el va rspunde cu un mesaj PRUNE (retezare), anunnd
expeditorul s nu i mai trimit mesaje multicast pentru acel grup. Cnd un ruter
care nu are printre calculatoarele gazd nici un membru al vreunui grup primete
astfel de mesaje pe toate liniile sale, el poate de asemenea s rspund cu un
mesaj PRUNE. n acest fel subreeaua este retezat recursiv.
13. Dirijarea pentru calculatoare gazd mobile
Calculatoarele gazd care nu se mic niciodat se numesc staionare. Ele
sunt conectate la reea prin fire de cupru sau fibre optice. Prin contrast, putem
distinge alte dou categorii de calculatoare gazd. Calculatoarele gazd
migratoare sunt de fapt calculatoare gazd staionare, dar care, din cnd n cnd,
se mut dintr-un loc fixat n altul i care folosesc reeaua doar atunci cnd sunt
conectate fizic. Calculatoarele gazd cltoare efectueaz calcule n timp ce se
deplaseaz i doresc s menin legtura n timpul deplasrii. Vom folosi termenul
gazd mobil pentru a desemna fiecare dintre ultimele dou categorii, adic toate
calculatoarele gazd care sunt departe de cas i doresc totui s fie conectate.
Fiecare domeniu are unul sau mai muli ageni pentru strini (foreign
agent), procese ce in evidena tuturor gazdelor mobile care viziteaz domeniul.
n plus, fiecare domeniu are un agent local (local agent) care ine evidena
calculatoarelor gazd cu domiciliul n domeniul respectiv, dar care momentan
viziteaz alte domenii.
Cnd un nou calculator gazd ptrunde ntr-un domeniu, fie prin
conectarea la acesta (ataarea fizic la LAN), fie prin plimbarea printr-o celul,
trebuie s se nregistreze la agentul pentru strini din domeniul respectiv.
Procedura de nregistrare se desfoar de obicei astfel:
- Periodic, fiecare agent pentru strini difuzeaz un pachet anunndu-i
existena i adresa. Un utilizator mobil nou sosit trebuie s atepte unul
dintre aceste mesaje, ns dac niciunul nu sosete ntr-un interval
rezonabil de timp, calculatorul mobil poate difuza un pachet care spune:
Este vreun agent pentru strini prin zon?
- Calculatorul mobil se nregistreaz la agentul pentru strini preciznd
adresa sa permanent, adresa actual a nivelului legtur de date, precum
i unele informaii de securitate.
- Agentul pentru strini contacteaz apoi agentul local al domeniului din care
provine utilizatorul mobil i i spune: Unul dintre calculatoarele tale gazd
se afl chiar aici. Mesajul agentului pentru strini ctre agentul local
conine adresa de reea a agentului pentru strini. El mai conine de
asemenea i informaia de securitate, pentru a convinge agentul local c
gazda mobil este ntr-adevr acolo.
- Agentul local examineaz informaia de securitate, care conine i o
tampil de timp, pentru a dovedi c a fost generat n ultimele cteva
secunde. Dac este mulumit, atunci anun agentul pentru strini c poate
trece la aciune.
- Cnd agentul pentru strini primete confirmarea de la agentul local, el
creeaz o nou intrare n tabela sa i anun utilizatorul mobil c a fost
nregistrat.
Ideal, atunci cnd un calculator gazd prsete un domeniu, acest lucru
trebuie anunat, pentru a fi scos din eviden, ns muli utilizatori pur i simplu
nchid calculatorul cnd termin.
Agentul local face dou lucruri cand primeste un pachet pentru gazda
mobila. n primul rnd, ncapsuleaz pachetul n cmpul de informaie util
(payload) al unui pachet de trimis, pe care l expediaz apoi ctre agentul pentru
strini. Acest mecanism se numete tunelare. Dup ce recepioneaz pachetul
ncapsulat, agentul pentru strini extrage pachetul iniial din cmpul payload i l
trimite ctre calculatorul gazd mobil drept cadru al nivelului legtur de date.
n al doilea rnd, agentul local anun expeditorul mesajului ca de acum
ncolo s trimit pachetele adresate gazdei mobile ncapsulndu-le n cmpul de
informaie util (payload) al unor pachete trimise explicit agentului pentru strini,
n loc s le trimit la adresa de domiciliu a calculatorului gazd mobil. Pachetele
urmtoare vor putea fi dirijate direct ctre utilizator, prin intermediul agentului
pentru strini, evitnd trecerea prin locaia de domiciliu.
14. Dirijarea n reele AD HOC
Reelele de noduri ce ntmpltor se afl aproape unul de cellalt sunt
numite reele ad hoc (ad hoc network) sau MANET (Mobile Ad hoc NETworks,
reele mobile ad hoc).
Au fost propui diferii algoritmi de dirijare pentru reelele ad hoc. Unul
dintre cei mai interesani este algoritmul de dirijare AODV (Ad hoc On-demand
Distance Vector, vectori distan ad hoc la cerere). Este o rud ndeprtat a
algoritmului cu vectori distan Bellman-Ford dar adaptat pentru un mediu mobil
i care ia n considerare limitele lrgimii de band i durata scurt de funcionare
a unei baterii n acest mediu. O alt caracteristic neobinuit este faptul c
acesta este un algoritm la cerere, adic determin o cale ctre o anumit
destinaie doar atunci cnd cineva dorete s trimit un pachet ctre acea
destinaie.
La orice moment de timp, o reea ad hoc poate fi descris de un graf de noduri (rutere + gazde). Dou noduri sunt conectate (de exemplu, exist un arc ce le unete n graf) dac pot comunica direct folosind radioul. Algoritmul AODV menine o tabel n fiecare nod, n care cheia este destinaia, i care d informaii despre acea destinaie, inclusiv crui vecin trebuie trimise pachetele pentru a ajunge la destinaie. Operatii care se realizeaza in nodurile intermediare atat pe ruta de la dus, cat si la intoarcere :
15. Protocolul IP
O datagram IP const dintr-o parte de antet i o parte de text. Antetul are
o parte fix de 20 de octei i o parte opional cu lungime variabil. Formatul
antetului este prezentat n fig. 5-53. El este transmis n ordinea big endian (cel mai
semnificativ primul): de la stnga la dreapta, ncepnd cu bitul cel mai
semnificativ al cmpului Versiune. (Procesorul SPARC este de tip big endian;
Pentium este de tip little endian - cel mai puin semnificativ primul). Pe mainile
de tip little endian, este necesar o conversie prin program att la transmisie ct
i la recepie.
Cmpul Versiune memoreaz crei versiuni de protocol i aparine
datagrama. Prin includerea unui cmp versiune n fiecare datagram, devine
posibil ca tranziia ntre versiuni s dureze ani de zile, cu unele maini rulnd
vechea versiune, iar altele rulnd-o pe cea nou. La ora actual are loc o tranziie
de la IPv4 la IPv6, care deja dureaz de civa ani i n nici un caz nu s-a apropiat
de final.
Din moment ce lungimea antetului nu este constant, un cmp din antet,
IHL, este pus la dispoziie pentru a spune ct de lung este antetul, n cuvinte de 32
de octei. Valoarea minim este 5, care se aplic atunci cnd nu sunt prezente
opiuni. Valoarea maxim a acestui cmp de 4 bii este 15, ceea ce limiteaz
antetul la 60 de octei i, astfel, cmpul de opiuni la 40 de octei. Pentru unele
opiuni, cum ar fi cea care nregistreaz calea pe care a mers un pachet, 40 de
octei sunt mult prea puini, fcnd aceast opiune nefolositoare.
Cmpul Tip serviciu este unul dintre puinele cmpuri care i-a schimbat
sensul (oarecum) dea lungul anilor. A fost i este n continuare menit s
diferenieze diferitele clase de servicii. Sunt posibile diferite combinaii de
fiabilitate i vitez. Pentru vocea digitizat, livrarea rapid are prioritate fa de
transmisia corect. Pentru transferul de fiiere, transmisia fr erori este mai
important dect transmisia rapid.
La nceput, cmpul de 6 bii coninea (de la stnga la dreapta), un cmp
Preceden de trei bii i trei indicatori, D, T i R. Cmpul Preceden reprezint
prioritatea, de la 0 (normal) la 7 (pachet de control al reelei). Cei trei bii
indicatori permiteau calculatorului gazd s specifice ce l afecteaz cel mai mult
din mulimea {Delay (ntrziere), Throughput (Productivitate), Reliability
(Fiabilitate)}. n teorie, aceste cmpuri permit ruterelor s aleag ntre, de
exemplu, o legtur prin satelit cu o productivitate mare i o ntrziere mare sau o
linie dedicat cu o productivitate sczut i o ntrziere mic. n practic, ruterele
curente ignor adesea ntregul cmp Tip serviciu.
Pn la urm, IETF a cedat i a modificat puin cmpul pentru a-l adapta la
servicii difereniate. ase dintre bii sunt folosii pentru a indica creia dintre
clasele de servicii descrise mai devreme i aparine pachetul. Aceste clase includ
patru prioriti de introducere n coad, trei probabiliti de respingere i clasele
istorice.
Lungimea total include totul din datagram - att antet ct i date.
Lungimea maxim este de 65535 octei. n prezent, aceast limit superioar este
tolerabil, dar n viitoarele reele cu capaciti de gigaoctei vor fi necesare
datagrame mai mari.
Cmpul Identificare este necesar pentru a permite gazdei destinaie s
determine crei datagrame i aparine un nou pachet primit. Toate fragmentele
unei datagrame conin aceeai valoare de Identificare.
Urmeaz un bit nefolosit i apoi dou cmpuri de 1 bit. DF nsemn Dont
Fragment (A nu se fragmenta). Acesta este un ordin dat ruterelor ca s nu
fragmenteze datagrama pentru c destinaia nu este capabil s reasambleze
piesele la loc. De exemplu, cnd un calculator pornete, memoria sa ROM poate
cere s i se trimit o imagine de memorie ca o singur datagram. Prin marcarea
datagramei cu bitul DF, emitorul tie c aceasta va ajunge ntr-o singur bucat,
chiar dac aceasta nseamn c datagrama trebuie s evite o reea cu pachete mai
mici pe calea cea mai bun i s aleag o rut suboptimal. Toate mainile trebuie
s accepte fragmente de 576 octei sau mai mici.
MF nsemn More Fragments (mai urmeaz fragmente). Toate fragmentele,
cu excepia ultimului, au acest bit activat. El este necesar pentru a ti cnd au
ajuns toate fragmentele unei datagrame.
Deplasamentul fragmentului spune unde este locul fragmentului curent n
cadrul datagramei. Toate fragmentele dintr-o datagram, cu excepia ultimului,
trebuie s fie un multiplu de 8 octei - unitatea de fragmentare elementar. Din
moment ce sunt prevzui 13 bii, exist un maxim de 8192 de fragmente pe
datagram, obinndu-se o lungime maxim a datagramei de 65536 octei, cu
unul mai mult dect cmpul Lungime total.
Cmpul Timp de via este un contor folosit pentru a limita durata de via
a pachetelor. Este prevzut s contorizeze timpul n secunde, permind un timp
maxim de via de 255 secunde. El trebuie s fie decrementat la fiecare salt (hop -
trecere dintr-o reea n alta) i se presupune c este decrementat de mai multe ori
cnd st la coad un timp ndelungat ntr-un ruter. n practic, el contorizeaz
doar salturile. Cnd ajunge la valoarea zero, pachetul este eliminat i se trimite
napoi la gazda surs un pachet de avertisment. Aceast facilitate previne
hoinreala la infinit a datagramelor, ceea ce se poate ntmpla dac tabelele de
dirijare devin incoerente.
Cnd nivelul reea a asamblat o datagram complet, trebuie s tie ce s
fac cu ea. Cmpul Protocol spune crui proces de transport trebuie s o predea.
TCP este o posibilitate, dar tot aa sunt i UDP i alte cteva. Numerotarea
protocoalelor este global la nivelul ntregului Internet.
Suma de control a antetului verific numai antetul. O astfel de sum de
control este util pentru detectarea erorilor generate de locaii de memorie
proaste din interiorul unui ruter. Algoritmul este de a aduna toate jumtile de
cuvinte, de 16 bii, atunci cnd acestea sosesc, folosind aritmetic n complement
fa de unu i pstrarea complementului fa de unu al rezultatului. P