Documente Academic
Documente Profesional
Documente Cultură
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.
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ă.
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.
* )
Î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.