Sunteți pe pagina 1din 8

8.

4 Adresele de internet
Am arătat că o internet se comportă ca o reţea virtuală, utilizând doar adresele
TCP/IP - adrese pe 32 de biţi atribuite universal fiecărui calculator - pentru trimiterea
sau primirea pachetelor. Pe de altă parte se ştie că, într-o reţea fizică dată, două maşini
pot comunica numai dacă îşi cunosc reciproc adresele fizice de reţea. Aşadar, o
problemă esenţială o constituie modul în care un calculator sau un ruter poate converti
adresa IP într-o adresă fizică corectă atunci când trebuie să trimită un pachet printr-o
anume reţea fizică.

1. Problema determinării
adreselor
Să considerăm două maşini A şi B care utilizează în comun o reţea fizică.
Fiecare calculator are atribuită câte o adresă IP - IA şi IB - şi câte o adresă fizică -
PA şi PB . Scopul este acela de a elabora un program care să ascundă adresele fizice
şi să permită programelor de la nivelul superior să lucreze doar cu adresele de internet.
În final, totuşi, comunicaţia trebuie să fie executată de către reţelele fizice, utilizând
modul de adresare fizică oferit de hardware. Să presupunem că maşina A doreşte să
trimită un pachet maşinii B prin intermediul unei reţele fizice la care ambele
calculatoare sunt ataşate, dar A cunoaşte doar adresa de internet IB a lui B. Se pune
problema: cum poate A să convertească această adresă în adresa fizică PB a lui B?
Punerea în corespondenţă a adreselor trebuie să fie executată la fiecar pas de-a
lungul traseului de la sursa originară până la destinaţia finală. În particular, apar două
cazuri. În primul caz, la ultimul pas al livrării unui pachet, pachetul trebuie trimis
printr-o reţea fizică către destinaţia sa finală; calculatorul care a trimis pachetul trebuie
să convertească adresa de Internet a destinatarului final în adresa fizică a destinaţiei. În
al doilea caz, în oricare punct al traiectoriei dintre sursă şi destinaţie cu excepţia
pasului final, pachetul trebuie trimis unui ruter intermediar; prin urmare, emiţătorul
trebuie să convertească adresa de Internet a ruterului intermediar într-o adresă fizică.
Problema punerii în corespondenţă a adreselor de nivel înalt cu adresele fizice
este cunoscută ca problema determinării adreselor [address resolution
problem] şi a fost rezolvată pe mai multe căi. Unele suite de protocoale menţin în
fiecare maşină tabele ce conţin perechi de adrese de nivel înalt şi fizice. Altele rezolvă
problema codificând adresa hardware în adresă de nivel înalt. Utilizarea oricăreia din
aceste metode în mod exclusiv conduce la o adresare de nivel înalt, în cel mai bun caz,
greoaie.

2. Două tipuri de adrese fizice


Există două tipuri principale de adrese fizice: adrese fizice mari, fixe (ca în
Ethernet) şi adrese fizice mici, uşor de configurat (ca în inelul cu jeton proNET).
Pentru primul tip, problema determinării adreselor este dificil de rezolvat, dar pentru
cel de al doilea tip ea se rezolvă uşor. Vom considera mai întâi cazul mai simplu.

3. Determinarea adreselor prin


conversie directă
Reţeaua de tip inel cu jeton proNET utilizează numere mici drept adrese fizice
şi permite utilizatorului să aleagă o adresă hardware la instalarea unei plăci de
interfaţă în calculator. Secretul uşurinţei cu care se face determinarea adreselor cu un
astfel de hardware de reţea rezidă în aceea că, întrucât avem libertatea de a alege atât
adrese IP cât şi cele fizice, le putem alege astfel încât părţi din ele să fie identice. De
regulă, se atribuie adresele IP cu partea reprezentând hostid egală cu 1, 2, 3, etc.
şi apoi, la instalarea hardware-l interfeţei de reţea, se selectează o adresă fizică ce
corespunde adresei IP. Spre exemplu, administratorul de sistem va selecta adresa
fizică 3 pentru un calculator cu adresa IP 192.5.48.3, căci această adresă este de
clasa C cu hostid = 3.
Pentru reţele precum proNET, calcularea uni adrese fizice dintr-o adresă IP
este o operaţie banală. Calculul constă în extragerea porţiunii hostid din adresa IP.
Această extragere este eficientă din punct de vedere al calculului, întrucât ea necesită
doar câteva instrucţiuni maşină. Corespondenţa este uşor de menţinut căci ea poate fi
efectuată fără legătură cu datele externe. În fine, la reţea pot fi adăugate noi maşini
fără a necesita schimbarea adreselor deja atribuite sau recompilarea codului.
Din punct de vedere conceptual, alegerea unei soluţii de numerotare care să facă
eficientă determinarea adreselor înseamnă selectarea unei funcţii f care să
convertească adresele IP în adrese fizice. Proiectantul este şi el liber să selecteze o
soluţie de numerotare a adreselor fizice în funcţie de hardware. Determinarea adresei
IP IA înseamnă calcularea
PA = f (IA)
Se doreşte o cât mai mare eficienţă a calculării funcţiei f. Dacă mulţimea
adreselor fizice are restricţii, este posibil să se găsească o altă metodă eficientă de
punere în corespondenţă decât cea din exemplul de mai sus. De exemplu, dacă se
utilizează IP într-o reţea bazată pe conexiuni precum ATM, nu putem alege adresele
fizice. În astfel de reţele, unul sau mai multe calculatoare stochează perechi de adrese,
fiecare pereche fiind formată dintr-o adresă Internet şi adresa fizică corespunzătoare.
De exemplu, valorile pot fi stocate într-o tabelă din memorie în care se va face
căutarea perechii. Pentru a face eficientă determinarea adresei în astfel de cazuri,
programul poate utiliza o funcţie hash convenţională pentru căutarea în tabelă.

4. Determinarea adreselor prin


legătură dinamică
Pentru a înţelege de ce este dificilă determinarea adreselor pentru unele reţele,
să luăm cazul tehnologiei Ethernet. Se ştie că fiecărei interfeţe Ethernet îi este
atribuită, la fabricaţie, o adresă fizică pe 48 biţi. Drept consecinţă, când hardware-ul
se defectează şi este necesară înlocuirea interfeţei Ethernet, adresa fizică a maşinii se
va schimba. Mai mult, întrucât adresa Ethernet are o lungime de 48 biţi, ea nu poate fi
în nici un fel codificată ca o adresă IP pe 32 biţi *).
Proiectanţii protocoalelor TCP/IP au găsit o soluţie creatoare la problema
determinării adreselor pentru reţele care posedă capacitatea de difuzare (precum
Ethernet). Soluţia permite adăugarea de noi maşini la reţea fără a fi necesară
recompilarea codului şi nu necesită întreţinere şi nici o bază de date centralizată.
Pentru a evita stocarea unei tabele de corespondenţe, proiectanţii au ales utilizarea
unui protocol de nivel jos care să pună în corespondenţă adresele în mod dinamic.
Acest protocol, ce oferă un mecanism destul de eficient şi, tot odată, uşor de întreţinut,
se numeşte Protocolul de determinare a adreselor [Address Resolution
Protocol (ARP)]. Acest protocol permite unui calculator să găsească adresa fizică a
unui calculator “ţintă” din aceeaşi reţea fizică dacă îi cunoaşte adresa IP.

A X B Y

( a )

A X B Y

( b )

După cum arată fig. de mai sus, ideea care stă în spatele determinării dinamice a
adreselor cu ajutorul ARP este simplă: când calculatorul A vrea să determine adresa
IP IB a calculatorului B din aceeaşi reţea fizică, el va difuza un pachet special care
cere calculatorului cu adresa IP IB să răspundă cu adresa sa fizică PB. Toate
calculatoarele din reţeaua fizică, inclusiv B, primesc cererea, dar numai calculatorul
B îşi va recunoaşte adresa IP şi va trimite un răspuns conţinând perechea (IB , PB).
Când A primeşte răspunsul, el va utiliza adresa fizică PB pentru a trimite pachetul
internet direct lui B.

* )
Întrucât punerea directă în corespondenţă este mai convenabilă şi mai eficientă decât
legătura dinamică, viitoarea generaţie a IP a fost proiectată astfel încât să permită
codificarea adreselor pe 48 biţi în adrese IP.
5. Memoria cache pentru
determinarea adreselor
Faptul că, pentru a trimite un pachet de la A la B, A trebuie să trimită mai
întâi o difuzare care să ajungă şi la B pare lipsit de sens. Dar şi mai ciudat pare faptul
că A difuzează o întrebare de tipul “cum pot să ajung la tine?” în loc să difuzeze pur
şi simplu pachetul care trebuie să ajungă (şi) la B. Dar acest schimb de mesaje are o
raţiune: difuzarea este mult prea costisitoare pentru a fi utilizată de fiecare dată când o
maşină are de transmis un pachet altei maşini, întrucât ea reclamă ca fiecare maşină
din reţea să proceseze pachetul difuzat. Pentru a reduce costurile comunicaţiei,
calculatoarele care utilizează ARP menţin în memoria cache ultimele legături pe care
le-a stabilit între adresele IP şi cele fizice aferente, nefiind astfel nevoite să utilizeze
ARP în mod repetat. Ori de câte ori un calculator primeşte un răspuns ARP, el
salvează în această memorie, în vederea inspectării ei ulterioare, perechea adresă IP -
adresa fizică aferentă. Când transmite un pachet, un calculator inspectează întotdeauna
mai întâi memoria sa cache, pentru a verifica dacă există legătura între adrese care îl
interesează. Dacă ea există în memoria cache ARP, calculatorul nu mei trebuie să
difuzeze în reţea. Experienţa a arătat că, întrucât majoritatea comunicaţiilor dintr-o
reţea implică transferul a mai mult de un pachet, chiar şi o mică memorie cache se
justifică.

6. Perfecţionări ale ARP


Sunt posibile mai multe perfecţionări ale mecanismului ARP. Mai întâi se va
observa că, dacă un calculator A este gata să utilizeze ARP întrucât doreşte să îi
transmită calculatorului B, există o mare probabilitate ca şi B să trebuiască să-i
transmită lui A într-un viitor apropiat. Pentru a anticipa necesitatea lui B de a
comunica şi pentru a evita un surplus de trafic în reţea, A va include corespondenţa
(IA , PA) dintre adresele sale în cererea sa către B. B va extrage corespondenţa între
adresele lui A din cererea sosită de la acesta, va salva această pereche în memoria sa
cache de ARP şi apoi îi va trimite un răspuns lui A. În al doilea rând, vom observa
că, întrucât A difuzează cererea sa iniţială, toate maşinile din reţea o recepţionează,
putând extrage şi stoca în memoria lor cache corespondenţa dintre adresele IP şi
fizică ale lui A. În al treilea rând, când unui calculator i se înlocuieşte interfaţa de
reţea (pentru că hardware-ul eis-a defectat, de exemplu), adresa sa fizică se va
schimba. Celelalte calculatoare din reţea, care au stocat în memoria lor cache ARP
corespondenţa adresă IP - adresă fizică pentru acest calculator, trebuie să fie
informate de această schimbare, pentru a-şi actualiza respectiva corespondenţă. Un
sistem poate să le informeze pe celelalte despre noua sa adresă trimiţând o difuzare
ARP la pornire (boot-are). Aşadar regula de lucru a ARP se perfecţionează astfel:
corespondenţa adresă IP - adresă fizică a emiţătorului se va include în fiecare
difuzare ARP; receptoarele îşi vor actualiza informaţia privind corespondenţa
adreselor din memoria lor cache înainte de a procesa un pachet ARP.
7. Relaţia dintre ARP şi
celelalte protocoale
ARP oferă un mecanism posibil de punere în corespondenţă a adreselor IP cu
adresele fizice. Am semnalat, însă, că unele tehnologii de reţele nu au nevoie de aşa
ceva. Ideea este că ARP ar deveni complet inutil dacă am putea face ca toate
hardware-urile de reţele să recunoască adresele IP. Prin urmare, ARP impune, mai
degrabă, o nouă tehnicăde stabilire a adreselor peste mecanismul de adresare utilizat
de hardware - oricare ar fi el. De aceea ARP este privit ca un protocol de nivel jos
ce face parte din sistemul reţelei fizice, nu din protocoalele de internet.

8. Implementarea ARP
Din punct de vedere funcţional, ARP este compus din două părţi. Prima parte
converteşte o adresă IP într-o adresă fizică la trimiterea unui pachet; a doua parte
răspunde cererilor venite de la celelalte maşini. Dându-se o adresă IP a destinaţiei,
programul consultă memoria sa cache ARP pentru a dacă posedă conversia din
adresă IP în adresă fizică. Dacă da, programul extrage adresa fizică, pune această
adresă într-un cadru cu date şi îl trimite. Dacă nu găseşte corespondenţa dintre adrese,
programul va trebui să difuzeze o cerere ARP, aşteptând un răspuns.
Această tehnică de difuzare a unei cereri ARP pentru a găsi o corespondenţă
de adrese poate deveni complicată. Maşina destinaţie poate fi scoasă din funcţiune sau
doar prea ocupată pentru a mai accepta şi această cerere. Într-un astfel de caz,
emiţătorul nu va primi un răspuns sau îl va primi cu întârziere. Cum o reţea Ethernet
reprezintă un sistem de livrare cu effort minim, s-ar putea ca cererea ARP difuzată
iniţial se poate chiar pierde (caz în care emiţătorul va trebui să o retransmită - măcar o
dată). Între timp, calculatorul trebuie să stocheze pachetul transmis iniţial, pentru a
putea fi transmis de îndată ce adresa destinatarului va fi determinată (dacă întârzierea
este mare, calculatorul poate decide să elimine pachetul stocat pentru a fi trimis). În
realitate, calculatorul trebuie să decidă dacă să permită celorlalte programe de aplicaţii
să se desfăşoare în continuare în timp ce el prelucrează o cerere ARP (majoritatea
procedează astfel). Dacă da, programul trebuie să facă faţă cazului când o aplicaţie
generează cereri ARP suplimentare pentru aceeaşi adresă, fără a difuza cereri
multiple pentru o destinaţie dată.
În fine, să considerăm cazul când maşina A a obţinut o corespondenţă de
adrese pentru maşina B, dar, ulterior, hardware-ul lui B s-a defectat şi a fost
înlocuit. Deşi adresa lui B s-a schimbat, corespondenţa din memoria cache a lui A
nu s-a modificat, astfel că A va utiliza o adresă hardware inexistentă, făcând
imposibilă o recepţie cu succes. Acest caz ilustrează de ce este important ca programul
ARP să trateze tabela sa de corespondeţe ca o memorie cache, ştergând elementele
după o perioadă dată. Desigur, ceasul (timer) pentru orice element din memoria cache
trebuie resetat ori de câte ori soseşte o difuzare ARP conţinând corespondenţa de
adrese (dar nu se resetează când acel element este folosit pentru a trimite un pachet).
A doua parte a codului ARP se ocupă de pachetele ARP ce sosesc din reţea.
Când vine un pachet ARP, programul extrage mai întâi adresa IP a emiţătorului şi
adresa hardware pereche, apoi examinează memoria cache locală pentru a constata
dacă posedă deja un element pentru emiţător. Dacă există un element în memoria
cache pentru adresa IP dată, programul actualizează acel element suprascriind adresa
fizică obţinută din pachet. Apoi, receptorul prelucrează restul pachetului ARP.
Un receptor trebuie să facă faţă la două tipuri de pachete ARP care sosesc.
Dacă soseşte o cerere ARP, maşina receptoare trebuie să constate dacă ea este
destinatara cererii (adică o altă maşină a difuzat o cerere pentru adresa fizică a
receptorului în cauză). Dacă da, programul ARP formează un răspuns, furnizând
adresa sa hardware, şi trimite acest răspuns direct înapoi solicitantului. Receptorul
adaugă de asemenea perechea de adrese a emiţătorului în memoria sa cache, dacă ea
nu este deja prezentă. Dacă adresa IP menţionată în cererea ARP nu corespunde
adresei locale IP, înseamnă că pachetul cere o corespondenţă de adrese pentru o altă
maşină din reţea şi, deci, poate fi ignorat.
Un alt caz interesant apare când soseşte răspunsul ARP. În funcţie de
implementare, mecanismul (handler) memoriei cache poate fi nevoit să creeze un nou
element în această memorie sau elementul fusese deja creat când a fost generată
cererea. În oricare din cazuri, odată actualizată memoria cache, receptorul încearcă să
pună în corespondenţă răspunsul cu o cerere emisă anterior. De obicei, răspunsurile
vin ca urmar a unei cereri generate din cauză că maşina are un pachet de transmis.
Între momentul când o maşină îşi difuzează cererea ARP şi cel în care primeşte
răspunsul, programele de aplicaţii sau protocoalele de nivel mai înalt pot genera cereri
suplimentare pentru aceeaşi adresăş programul trebuie să-şi “amintească” că a trimis
deja o cerere şi să nu mai trimită încă una. De regulă, programul ARP plasează
pachetele suplimentare într-o coadă de aşteptare. Odată răspunsul sosit şi
corespondenţa de adrese conoscută, programul ARP scoate pachetele din coadă,
plasează fiecare pachet într-un cadru şi utilizează corespondenţa de adrese pentru a
completa adresa fizică a destinaţiei. Dacă nu a emis anterior o cerere pentru adresa IP
din răspuns, maşina actualizează adresa fizică din elementul aferent din memoria sa
cache şi, apoi, încetează pur şi simplu prelucrarea pachetului.

9. Încapsularea mesajelor ARP


şi identificarea lor
Mesajelele ARP sunt transportate de la o maşină la alta în cadre fizice, în
câmpul de date al acestora. Fig. ce urmează ilustrează încapsularea mesajelor ARP.
MESAJUL ARP

ANTETUL CÂMPUL DE DATE AL CADRULUI


CADRULUI
Pentru a marca un cadru ce poartă un mesaj ARP, emiţătorul atribuie o valoare
specială câmpului tipul cadrului din antetul cadrului şi apoi depune mesajul ARP în
câmpul de date al cadrului. Când soseşte un cadru la un calculator, software-ul de
reţea utilizează tipul cadrului pentru a determina conţinutul acestuia. În majoritatea
tehnologiilor, se utilizează o unică valoare pentru tipul cadrului pentru toate cadrele
care poartă mesaje ARP, iar software-ul de reţea de la receptor va trebui să
examineze în continuare mesajul ARP pentru a face distincţia între cereri şi
răspunsuri ARP.

10. Formatul mesajelor în


protocolul ARP
Spre diferenţă de majoritatea protocoalelor, datele din pachetele ARP nu au un
antet de format fix. Pentru a face ARP utilizabilă pentru o mare gamă de tehnologii
de reţea, lungimile câmpurilor ce conţin adresele depind de tipul de reţea. Totuşi,
pentru a face posibilă interpretarea oricărui mesaj, antetul conţine, aproape de
începutul său, nişte câmpuri fixe care indică lungimile adreselor ce se află în
câmpurile următoare.
Exemplul din fig. de mai jos ilustrează formatul pe 28 octeţi al mesajelor ARP,
utilizat într-o reţea Ethernet (în care adresele fizice sunt pe 6 octeţi = 48 biţi) pentru
convertirea adreselor IP (care au o lungime de 4 octeţi) *).
0 8 16 24 31
TIPUL HARDWARE-ULUI TIPUL PROTOCOLULUI
LUNGIME AH LUNGIME AP OPERAŢIUNEA
AH EMIŢĂTOR (octeţii 0 ÷ 3)
AH EMIŢĂTOR (octeţii 4 şi 5) IP EMIŢĂTOR (octeţii 0 şi 1)
IP EMIŢĂTOR (octeţii 2 şi 3) AH DESTINATAR (octeţii 0 şi 1)
AH DESTINATAR (octeţii 2 ÷ 5)
IP DESTINATAR (octeţii 0 ÷ 3)
Câmpul TIPUL HARDWARE-ULUI indică tipul interfeţei hardware pentru
care emiţătorul cere un răspuns; el conţine valoarea 1 pentru Ethernet. Câmpul
TIPUL PROTOCOLULUI specifică tipul adresei de protocol de nivel înalt furnizat
de emiţător; el conţine 080016 pentru adresele IP. Câmpul OPERAŢIUNEA
precizează dacă mesajul este: o cerere ARP (1), un răspuns ARP (2), o cerere
RARP **) (3) sau un răspuns RARP **) (4). Câmpurile LUNGIME AH şi
LUNGIME AP permit utilizarea ARP la reţele arbitrare, întrucât ele specifică
lungimea adresei hardware şi respectiv lungimea adresei de protocol de nivel înalt.
Emiţătorul furnizează adresa sa hardware şi adresa sa IP - dacă le cunoaşte - în
câmpurile AH EMIŢĂTOR şi respectiv IP EMIŢĂTOR. La efectuarea unei cereri,
emiţătorul furnizează şi adresa IP a destinatarului (pentru ARP) sau adresa
hardware a destinatarului (pentru RARP), utilizând respectiv câmpurile AH

* )
În această fig. (ca şi în cele ce vor urma) s-a adoptat - din motive grafice - reprezentarea
mesajului cu 4 octeţi pe linie; dar (ca la majoritatea protocoalelor ce vor urma) câmpurile
de lungimi variabile din pachetele ARP nu se aliniază exact la 32 biţi, fapt ce necesită
atenţie la urmărirea formatului. Astfel, spre exemplu, adresa hardware a emiţătorului -
notată cu AH EMIŢĂTOR - ocupă 6 octeţi consecutivi, astfel că ea se continuă pe
următoarea linie a reprezentării formatului.
* *)
RARP este un protocol ce serveşte la determinarea unei adrese de internet la pornirea
unui calculator şi care foloseşte acelaşi format de mesaje; el va fi descris în capitolul
următor.
DESTINATAR şi IP DESTINATAR. Înainte de a răspunde, maşina destinatar
completează adresele lipsă, schimbă între ele adresele destinatarului şi emiţătorului şi
modifică operaţiunea într-un răspuns. Prin urmare, un răspuns transportă adresele IP
şi hardware atât ale maşinii care a făcut cererea originară cât şi ale maşinii cu care
dorea să ia legătura.