Sunteți pe pagina 1din 33

Protocoale de reţea, informații

generale și aplicarea:

Partea I DHCP
Partea II DNS
Partea III DNS şi WINS

Aspecte de programare
Conținut

I. Introducere..................................................................................................................................................4
II. Funcțiile de implementare...........................................................................................................................5
III. Instalarea Windows Server 2008 DHCP Server..........................................................................................9

2
I. Introducere

RFC 1531 a definit inițial DHCP ca protocol standard în octombrie 1993, urmând Bootstrap
Protocol (BOOTP). Următorul update, RFC 2131, lansat în 1997, este definiția DHCP curenta pentru
rețele Internet Protocol Version 4 (IPv4). Extensiile DHCP pentru IPv6 (DHCPv6) au fost publicate în
RFC 3315.
Dynamic Host Configuration Protocol automatizează alocarea parametrilor de rețea la
dispozitive de către unul sau mai multe fault-tolerant servere DHCP. Chiar și în rețele mici, DHCP este
folositor, deoarece simplifica adăugarea unor noi echipamente în rețea.
Dynamic Host Configuration Protocol (DHCP) este un serviciu cheie în infrastructura oricărei
rețele, care aloca adrese IP și furnizează informații de la serverul DNS, calculatoarelor-client și altor
dispozitive. DHCP se folosește ca să nu alocăm static adrese IP fiecărui dispozitiv din rețeaua noastră
și pentru a rezolva problemele care apar la alocarea adreselor IP statice. DHCP tot mai mult și mai
mult se distribuie la folosirea în noile servicii de rețea, așa ca Windows Health Service și Network
Access Protection (NAP).
Cu toate acestea, înainte de a al utiliza în mai multe servicii sofisticate, trebuie mai întâi să
instalați și să configurați elementele de bază. Să vedem cu se face acest lucru.
Serviciul DHCP este folosit pentru alocarea automata a adreselor IP într-o rețea, cu acest serviciu
putem totodată sa folosim in rețea mai mulți utilizatori decât adresele IP disponibile.

Mod de funcționare:
Un client DHCP este un calculator care cere adrese IP de la un server de DHCP , în momentul în
care un client accesează acest serviciu având loc următoarele evenimente :
 clientul transmite un mesaj de descoperire care e îndrumat către serverele DHCP ale
rețelei;
 serverele DHCP răspund oferind adrese IP;
 clientul selectează una din ele și transmite către serverul de DHCP o cerere de utilizare a
acestei adrese;
 serverul DHCP confirma cererea si acorda clientului dreptul de a o folosi;
 clientul folosește adresa pentru a se loga in rețea.

Dynamic Host Configuration Protocol automatizează alocarea parametrilor de rețea la
dispozitive de către unul sau mai multe fault-tolerant servere DHCP. Chiar și în rețele mici, DHCP este
folositor, deoarece simplifica adăugarea unor noi echipamente în rețea.
Când un client configurat (un computer sau orice alt dispozitiv de rețea) se conectează la rețea,
clientul DHCP trimite o broadcast interogare în ce privește informația necesară la serverul DHCP.
Serverul DHCP gestionează o rezervă de adrese IP și informații despre configurarea parametrilor
clientului, ca gateway-ul implicit, numele domeniului, serverul DNS, alte servere ca serverul de timp,
ș.a.m.d. La primirea unei cereri valide, serverul atribuie calculatorului o adresă de IP, un contract de
leasing (perioada de validitate a alocării respective), precum și alți parametri de configurare de IP, cum
ar fi masca de subrețea și gateway-ul implicit . Interogarea este de obicei inițiată imediat după boot, și
trebuie să fie completată, înainte ca clientul să poată iniția comunicarea IP cu alte gazde.
Când un client configurat (un computer sau orice alt dispozitiv de rețea) se conectează la rețea,
clientul DHCP trimite o broadcast interogare în ce privește informația necesară la serverul DHCP.
Serverul DHCP gestionează o rezervă de adrese IP și informații despre configurarea parametrilor

3
clientului, ca gateway-ul implicit, numele domeniului, serverul DNS, alte servere ca serverul de timp,
ș.a.m.d. La primirea unei cereri valide, serverul atribuie calculatorului o adresă de IP, un contract de
leasing (perioada de validitate a alocării respective), precum și alți parametri de configurare de IP, cum
ar fi masca de subrețea și gateway-ul implicit. Interogarea este de obicei inițiată imediat după boot, și
trebuie să fie completată, înainte ca clientul să poată iniția comunicarea IP cu alte gazde.

II. Funcțiile de implementare


Serverul DHCP poate avea trei metode de alocare a adreselor IP:
 alocare dinamică: Un administrator de rețea atribuie o serie de adrese IP la DHCP, și
fiecare computer din LAN este configurat să ceară o adresa de IP de la serverul DHCP în
timpul inițializării de rețea. Procesul de cerere și aprobare folosește un concept ca un
contract de leasing pe o perioada determinată, permițând serverului DHCP să revendice
(și să realoce) adrese IP disponibile (refolosirea dinamică de adrese de IP).
 alocare automată: Serverul DHCP alocă în permanență o adresă de IP disponibilă, din
gama definită de administrator, către un client. Acest proces este asemănător alocării
dinamice, dar serverul DHCP păstrează un tabel cu alocările de IP anterioare, astfel încât
să poată atribui preferențial pentru un client aceeași adresă de IP pe care acesta a avut-o
anterior.
 alocare statică: Serverul DHCP alocă adresa de IP în baza unui tabel cu perechi adresa
MAC/adresa IP, acestea fiind completate manual (probabil de către administratorul
rețelei). Numai clienții care au adresa MAC lisată în acest tabel vor primi o adresă de IP.
Această caracteristică (care nu e suportată de orice router) este denumită Static DHCP
Assignment (by DD-WRT), fixed-address (by the dhcpd documentation), DHCP
reservation or Static DHCP (by Cisco/Linksys), și IP reservation sau MAC/IP binding (de
către diverși alți producători de routere).

Închirierea adreselor DHCP


Închirierea este fundamentală pentru procesul DHCP. Fiecare adresă oferită de un server DHCP
are o perioadă de închiriere asociată, perioadă în care clientul are permisiunea să folosească adresa.
Perioada de închiriere este denumită ”lease time” și poate avea orice valoare, de la câteva minute până
la câteva luni, ani sau chiar pentru totdeauna. Închirierea pe perioadă nelimitată de timp transformă
adresarea dinamică în adresare statică.
Dacă s-a scurs peste 50% din timpul de închiriere al adresei, clientul trimite serverului care i-a
închiriat adresa, o cerere de prelungire a perioadei de utilizare a adresei (”renew”). Dacă acest client nu
a reușit prelungirea perioadei de închiriere de la serverul de la care a primit inițial închirierea (”lease-
ul”) la scurgerea a 87,5% (7/8) din timp, clientul trimite un ”broadcast packet”, încercând să închirieze
o adresă IP de la orice server existent în rețea. Procesul de închiriere poate fi anulat atât de client cât și
de server înaintea perioadei stabilite inițial. De asemenea, serverul DHCP are posibilitatea de a trimite
mesaje clienților obligându-i să înnoiască contractul de închiriere înainte de terminarea lui.

Identificarea Furnizorului.
O opțiune de a identifica furnizorul și funcționalitatea a clientului DHCP. Informația este un
string de lungime variabilă de caractere ori octete care au un sens anumit din partea furnizorului al
clientului DHCP. O metodă este că DHCP clientul poate să comunice cu serverul care folosește un
anumit tip de hardware ori brand este de a seta valoarea în cererile a DHCP numite Clasă de
Identificare a Furnizorului (Vendor Class Identifier) (VCI) (Option 60). Această metodă permite ca
4
DHCP serverul să diferențieze între două tipuri de utilajul clientului și procesează solicitările de la cele
două tipuri de modem-uri aproximativ. Unele tipuri de set-top parți de asemenea setează opțiunea VCI
(Option 60) să informeze serverul DHCP despre tipul de hardware și funcționalitatea utilajului.
Valoarea acestei opțiuni setate constă în atribuirea serverului DHCP un indiciu despre orice extra
informație necesară pe care clientul are nevoie la răspunsul DHCP.
DHCP relocare
În rețele mici, unde doar un IP de subnet este gestionat, clienții DHCP comunică direct cu
serverele DHCP. Cu toate acestea, DHCP serverele de asemenea pot sa furnizeze IP adrese pentru
multiple subnet-uri. În acest caz, un client DHCP care încă nu a obținut o adresă IP nu poate comunica
direct cu serverul DHCP folosind rutarea IP, fiindcă acesta nu are o adresă IP de rută și nici nu știe
adresa IP a ruterului. Ca clienții DHCP în subnet-uri care nu sunt deserviți direct de DHCP servere să
comunice cu servere DHCP, DHCP agenții de alocare pot fi instalați pe aceste subnet-uri. Sesiunile a
clienților DHCP pe legătura locală; agenții de alocare primesc sesiunile și le transmit la unul sau mai
multe DHCP servere folosind metodă unică de legătură. Agenții de alocare stochează IP adresele sale
în câmpul GIADDR a pachetului DHCP. Serverul DHCP folosește GIADDR să determine subnet-ul
pe care agenții de alocare au primit sesiunea, ți alocă o IP adresă pentru acel subnet. Când serverul
DHCP răspunde clientului, el trimite un răspuns la adresa GIADDR, iarăși folosind mono difuziunea.
Agentul de alocare apoi retransmite răspunsul pe rețeaua locală.
Siguranța
Protocol DHCP asigură siguranța în câteva metode: renovare periodică, re-legare, și preluare la
eroare. Clienții DHCP sunt arendări alocate care durează ceva timp. Client începe să încerce să
înoiască alocările odată ce jumătate din intervalul de alocare a expirat. Ei fac aceasta prin trimiterea
mono difuziunii prin mesajul DHCPREQUEST la DHCP server care a garantat alocarea originală.
Dacă acel server este defectat ori nu a fost găsit, el va eșua să răspundă la DHCPREQUEST. Cu toate
acestea, mesajul DHCPREQUEST va fi repetat de client din timp în timp, deci când DHCP serverul
revine ori poate fi ajuns, clientul DHCP client va continua în contactarea lui, și va reînnoi alocarea.

Confirmarea cererilor DHCP


Când serverul DHCP primește mesajul DHCPREQUEST de la client, procesele de configurare
intră în faza finală. Faza de confirmare presupune trimiterea unui pachet DHCPACK clientului. Acest
pachet include durata contractului de leasing, precum și orice alte informații de configurare pe care
clientul le-ar putea fi solicitat. În acest moment, procesul de configurare IP este finalizat.
Protocolul așteaptă ca clientul DHCP să-și configureze interfața de rețea cu parametri negociați.

5
DHCPDISCOVER DHCPOFFER
UDP Src=0.0.0.0 sPort=68 UDP Src=192.168.1.1 sPort=67
Dest=255.255.255.255 dPort=67 Dest=255.255.255.255 dPort=68
OP HTYPE HLEN HOPS OP HTYPE HLEN HOPS
0x01 0x01 0x06 0x00 0x02 0x01 0x06 0x00
XID XID
0x3903F326 0x3903F326
SECS FLAGS SECS FLAGS
0x0000 0x0000 0x0000 0x0000
CIADDR CIADDR
0x00000000 0x00000000
YIADDR YIADDR
0x00000000 0xC0A80164
SIADDR SIADDR
0x00000000 0xC0A80101

GIADDR GIADDR

0x00000000 0x00000000
CHADDR CHADDR

0x00053C04 0x00053C04

0x8D590000 0x8D590000
0x00000000 0x00000000
0x00000000 0x00000000
192 octets of 0's. BOOTP legacy 192 octets of 0's. BOOTP legacy
Magic Cookie Magic Cookie
0x63825363 0x63825363
DHCP Options DHCP Options
DHCP option 53: DHCP Discover DHCP option 53: DHCP Offer
DHCP option 1: 255.255.255.0 subnet
DHCP option 50: 192.168.1.100 requested
mask
DHCP option 55: Parameter Request List: DHCP option 3: 192.168.1.1 router
Request Subnet Mask (1), Router (3), DHCP option 51: 86400s (1 day) IP lease
Domain Name (15), time

Domain Name Server (6) DHCP option 54: 192.168.1.1 DHCP server
DHCP option 6: DNS servers 9.7.10.15,
9.7.10.16, 9.7.10.18

6
DHCPREQUEST DHCPACK
UDP Src=0.0.0.0 sPort=68 UDP Src=192.168.1.1 sPort=67
Dest=255.255.255.255 dPort=67 Dest=255.255.255.255 dPort=68
OP HTYPE HLEN HOPS OP HTYPE HLEN HOPS
0x01 0x01 0x06 0x00 0x02 0x01 0x06 0x00
XID XID
0x3903F326 0x3903F326
SECS FLAGS SECS FLAGS
0x0000 0x0000 0x0000 0x0000
CIADDR CIADDR (Client IP Address)
0x00000000 0x00000000
YIADDR YIADDR (Your IP Address)
0xC0A80164 0xC0A80164
SIADDR SIADDR (Server IP Address)
0xC0A80101 0xC0A80101
GIADDR (Gateway IP Address switched
GIADDR
by relay)
0x00000000 0x00000000
CHADDR CHADDR (Client Hardware Address)

0x00053C04 0x00053C04

0x8D590000 0x8D590000
0x00000000 0x00000000
0x00000000 0x00000000
192 octets of 0's. BOOTP legacy 192 octets of 0's. BOOTP legacy
Magic Cookie Magic Cookie
0x63825363 0x63825363
DHCP Options DHCP Options
DHCP option 53: DHCP Request DHCP option 53: DHCP ACK
DHCP option 1: 255.255.255.0 subnet
DHCP option 50: 192.168.1.100 requested
mask
DHCP option 54: 192.168.1.1 DHCP server. DHCP option 3: 192.168.1.1 router
DHCP option 51: 86400s (1 day) IP lease
time

DHCP option 54: 192.168.1.1 DHCP server


DHCP option 6: DNS servers 9.7.10.15,
9.7.10.16, 9.7.10.18

7
III. Instalarea Windows Server 2008 DHCP Server
Instalarea Windows Server 2008 DHCP Server este foarte simplă. DHCP Server acum este
disponibil în calitate de “role” în Windows Server 2008 și nu în calitate de componentă a sistemului de
operare ca în versiunile precedente.
Așadar pentru a instala DHCP avem nevoie Windows Server 2008 deja instalat și configurat cu o
adresă IP statică. Va trebui să știți care este diapazonul adreselor IP în rețea, diapazonul de IP adrese în
care se vor afla calculatoarele, adresa IP a serverului DNS și gateway-ul principal.
Pentru a începe instalarea DHCP deschideți Server Manager și apăsați Add roles.

După ce se deschide Add Roles Wizard apăsați Next în această fereastră. Mai departe, alegeți
DHCP Server Role și apăsați Next.

Dacă serverului dvs nu-i este alocată o adresă IP statică, veți primi un mesaj precum că nu puteți
instala DHCP pe un server cu adresă IP dinamică.

8
La această etapă vi se va sugera de ai introduce informații cu privire la rețeaua IP, scope-zone și
informații despre DNS. Dacă doriți să instalați DHCP fără careva zone sau parametri, aveți
posibilitatea să apăsați Next la aceste opțiuni și de a continua instalarea.
Pe de altă parte puteți să configurați DHCP Server în această parte a instalării.
În acest exemplu folosim această posibilitate, pentru a configura câțiva parametri de bază,
precum și de a configura prima zonă DHCP Scope.

Wizard-ul întreabă pe care interfață dorim să rulăm DHCP, am ales implicit și mergem mai
departe Next.
Introducem numele Domenului Principal, Serverul DNS Preferat și Serverul DNS Alternativ și
apăsăm Next:

9
Nu folosim WINS, mai departe apăsând Next.
Mai departe trebuie să configurăm diapazonul de vizualizare DHCP al noului server DHCP.
Diapazonul luat al adreselor IP valorile 192.168.1.50-100, pentru a avea mai mult de 25 calculatoare în
rețeaua locală. Pentru asta am apăsat Add. Cum vedem mai jos am numit diapazonul WBC-Local, am
configurat primul și ultimul IP cu valorile 192.168.1.50-192.168.1.100, cu masca de rețea
255.255.255.0 și gateway-ul principal 192.168.1.1, tipul subrețelei și am activat diapazonul.

În continuare am dezactivat DHCPv6 Stateless Mode pentru acest server, mergem mai departe cu
Next.
Confirmăm opțiunile alese pentru configurarea DHCP și apăsăm Install.

10
După ce serverul DHCP este instalat, apare fereastra de mai jos:

Apăsând Close, trecem la gestionarea noului server DHCP.

Cum să gestionăm noul server Windows Server 2008 DHCP Server


Ca și procesul de instalare, gestionarea serverului Windows Server 2008 DHCP Server este
foarte simplă. Pentru a configura serverul DHCP și de a vedea care clienți au primit IP adrese trebuie
să intrăm în DHCP Server MMC.

11
Consola permite foarte multe opțiuni de configurare. Ea arată așa:

Consola MMC a serverul DHCP ne oferă informații despre IPv4 şi IPv6 serverului DHCP,
incluzând diapazon, pool, rezervări, opțiuni pentru diapazon etc.
Dacă vom merge la Address Pool și la opțiunile diapazonului, vom vedea că configurările care
le-am făcut la momentul instalării serverului DHCP, sunt active și funcționează.

12
Deci cum să ne convingem dacă serverul funcționează, dacă nu îl vom testa? Nicicum. Așadar,
să vedem cum testăm serverul DHCP.

Cum testăm serverul Windows Server 2008 DHCP Server?


Pentru a testa serverul vom lansa comanda niște comenzi la un client, care se află în acest
segment de rețea.
Prima comanda este IPCONFIG /RELEASE, apoi IPCONFIG /RENEW. Vom verifica dacă
acest client a primit adresa IP de la noul server DHCP, vedem mai jos rezultatul:

De asemenea verificăm și pe serverul Windows Server 2008, dacă clientul se află în lista
clienților.

13
În rezultat am obținut un server DHCP în plină funcționalitate.

14
Partea 2
DNS ((Domain Name Servers)

Ce înseamnă DNS?

DNS (Domain Name Servers) menţine o relaţie între adresele IP şi numele de domeniu. DNS este
compus dintr-un set de servere de baze de date care menţin relaţia dintre adresele IP şi numele de
domeniu şi facilitează căutarea între cele două. Calculatoarele utilizează sistemul DNS pentru
transferul electronic de date cu alte calculatoare prin intermediul internetului.

Spre exemplu articole.web-start.ro traduce adresa IP 174.37.19.12.

Ce este un nume de gazdă?

Un nume de gazdă este pur şi simplu un nume de identificare a unui computer dintr-o reţea sau un
domeniu pe Internet.

Câteva exemple de nume de gazdă de pe Internet:


www.web-start.ro (numele de gazdă pentru serverul web-start.ro)
www.google.com (nume de gazdă pentru serverul de web Google)

Site-urile au atât un nume prietenos, adresă, numită Uniform Resource Locator (URL) cât şi o adresă
IP. Oamenii folosesc URL-uri pentru a găsi site-uri, dar computerele utilizează adrese IP pentru
aceasta. DNS traduce URL-urile în adrese IP (şi invers). De exemplu, dacă tastaţi http://articole.web-
start.ro în bara de adrese din browser, computerul trimite o cerere de la un server DNS. Serverul DNS
traduce URL-ul într-o adresă IP, astfel încât computerul poate găsi acest site cu articole.

(Serviciul DNS este de obicei inclus în serviciul de gazduire a site-ului)

Adresa IP, DNS


Generalităţi
15
Un server de nume domeniu, Domain Name Server (DNS), este un program software, care ascultă
cereri pe un port standard (53) şi care rulează pe un calculator conectat permanent (de obicei) la
Internet. În mare, el asigură un serviciu, pentru un domeniu sau mai multe, de traducere a unei adrese
tip nume într-o adresă IP .
De exemplu, un navigator web vrea să se conecteze la adresa tip nume www.cnfb.ro. În primul rând,
'întreabă' un server DNS adresa IP pentru www.cnfb.ro şi după aceea se conectează la serverul web
care rulează pe calculatorul cu adresa de IP obţinută de la DNS. Adresele de IP sunt folosite pentru a
comunica în reţelele locale sau pe Internet. Adresele tip nume sunt folosite din comoditate, deoarece
sunt uşor de memorat.

Ce este un Domain Name Server (DNS)?

Domain Name Server-ul (DNS) este un serviciu de registru Internet distribuit. DNS-ul translatează de
fapt (“mapează”) din numele domeniului (sau nume ale maşinilor de calcul) în adrese IP şi din adrese
IP în nume. Translatarea numelui în adresa IP se numeşte “rezolvarea numelui de domeniu”. Cele mai
multe servicii Internet se bazează pe DNS şi dacă acesta cade, siturile web nu pot fi găsite iar livrarea
mail se blochează. Numele de domenii sunt mult mai uşor de reţinut decât adresele IP, dar nu oferă
nici o indicaţie despre cum să găsiţi situl pe internet. Acest lucru este făcut de către sistemul DNS, care
rezolvă domeniile în adevăratele lor adrese – adresele IP.

O mapare este o simplă asociere între două lucruri, în acest caz un nume de maşină, ca ftp.linux.org,
şi IP-ul maşinii (sau adresa) 199.249.150.4.

Un calculator se identifică printr-o adresă, unică în Internet, numită adresa IP a calculatorului


respectiv. Totodată calculatorul poate avea asociat şi un nume. Astfel, adresa IP este utilizată la nivelul
programelor de prelucrare în reţea. La nivelul utilizatorilor cu acces la mediul Internet, identificarea
calculatoarelor se face printr-un nume de calculator host gestionat de sistemul DNS.

Concepţia protocolului TCP/IP este implementată astfel încât schema de adresare permite utilizatorilor
şi programelor din reţea să identifice în mod unic o reţea sau un calculator host, atât prin intermediul
unei adrese IP (adresa unică pe care o are fiecare calculator cuplat la mediul Internet), cât şi prin
intermediul unui nume de calculator host. Evident, protocolul IP realizează o corespondenţă bijectivă
între adresele IP şi numele gestionate de DNS.

Structura DNS realizează administrarea unor nume prin care se acordă diferite responsabilităţi de grup,
fiecare nivel reprezentând un domeniu.

  

IP (Internet Protocol) este un protocol care asigură un serviciu de transmitere a datelor, fără


conexiune permanentă. Acesta identifică fiecare interfaţă logică a echipamentelor conectate printr-un
număr numit "adresă IP". Versiunea standard folosită în majoritatea cazurilor este IPv4. În IPv4,
standardul curent pentru comunicarea în Internet, adresa IP este reprezentată pe 32 de biţi (de ex.
16
192.168.0.1). Alocarea adreselor IP nu este arbitrară; ea este realizată de către organizaţii însărcinate
cu distribuirea de spaţii de adrese. De exemplu, RIPE este responsabilă cu gestiunea spaţiului de adrese
atribuit Europei.

DNS (Domain Name System) este un serviciu de registru Internet distribuit. DNS translatează


("mapează") numele de domeniu (sau nume ale maşinilor de calcul) în adrese IP şi adresa IP în nume.
Translatarea numelui în adresa IP se numeşte "rezolvarea numelui de domeniu". Cele mai multe
servicii Internet se bazează pe DNS şi, dacă acesta cade, site-urile web nu pot fi găsite iar livrarea mail
se blochează. 
Numele de domenii sunt mult mai uşor de reţinut decât adresele IP, dar nu oferă indicaţii despre modul
cum poate fi găsit site-ul pe internet. Acest lucru intră în atribuţiile sistemului DNS, care rezolvă
domeniile în adevăratele lor adrese - adresele IP. 
Maparea este o simplă asociere între două elemente, în acest caz un nume de maşină, ca ftp.linux.org,
şi IP -ul maşinii (sau adresa) 199.249.150.4. Un calculator se identifică printr-o adresă, unică în
Internet, numită adresa IP a calculatorului respectiv. Totodată calculatorul poate avea asociat şi un
nume. Astfel, adresa IP este utilizată la nivelul programelor de prelucrare în reţea. În schimb, la nivelul
utilizatorilor cu acces la mediul Internet, identificarea calculatoarelor se face printr-un nume de
calculator host gestionat de sistemul DNS.

Concepţia protocolului TCP/IP este astfel implementată încât schema de adresare permite utilizatorilor
şi programelor din reţea să identifice în mod unic o reţea sau un calculator host, atât prin intermediul
unei adrese IP (adresa unică pe care o are fiecare calculator cuplat la mediul Internet), cât şi prin
intermediul unui nume de calculator host. Evident, protocolul IP realizează o corespondenţă bijectivă
între adresele IP şi numele gestionate de DNS.

•  Structura DNS realizează administrarea unor nume prin care se acordă diferite responsabilităţi de
grup, fiecare nivel reprezentând un domeniu.
Cum funcţionează? 
Fiecare calculator trebuie să 'ştie' de existenţa a cel puţin un server DNS pentru a rezolva corelaţia între
un nume calificat de domeniu (FQDN, sau nume de domeniu DNS), adică o adresă literală (gen
www.google.com, sau www.rdsnet.ro) şi adresa sa numerică (IP address, de tipul xx.yyy.zz.tt); aceasta
pentru că o conexiune TCP/IP între 2 calculatoare în Internet se face la nivel de adrese numerice IP.

17
Dacă procesul 'resolver' din calculatorul propriu nu reuşeşte să facă o căutare validă DNS (acel DNS
lookup), atunci se recepţionează o eroare pentru orice pagină web sau server mail, apelate prin numele
lor de domeniu. 

Dacă primind o eroare pentru www.rdslink.ro, homepage-ul cu adresa IP echivalentă: xx.yyy.zz.tt


poate fi încărcat, înseamnă că există o problemă DNS - nu neapărat la nivel central. 

Domenii şi DNS 

Sistemul de nume din Internet este structurat pe domenii şi subdomenii. Considerând un server de
nume (name server) admin.rdslink.ro, domeniul cel mai larg este ro, care include domeniul rdslink.ro,
iar admin este un computer din cadrul domeniului rdslink.ro. Deci luând de la dreapta la stânga un
nume, pe cea mai din dreapta poziţie se află domeniul cel mai general, după care urmează, în ordinea
subordonării, restul subdomeniilor. Pe cea mai din stânga poziţie se află numele computerului. 
În Internet există domenii dedicate (standardizate). Iată câteva dintre ele: com desemnează domeniul
comercial, edu desemnează domeniul educaţional, gov - domeniul guvernamental, mil - domeniul
militar, org -alte organizaţii, net - resurse de reţea, int - resurse internaţionale, etc. 
Extinderea Internet-ului în diferite ţări a dus la crearea de domenii pentru fiecare
ţară: ro România, fr Franţa, it Italia, uk Marea Britanie, us USA, etc. 

Sistemul de căutare a unui nume în Internet este următorul:

DNS este o bază de date distribuită pe toată reţeaua Internet. Se numeşte distribuită deoarece nu există
un singur server care să aibă toată informaţia necesară traducerii oricărui domeniu într-o adresă IP.
Fiecare server menţine o bază de date cu propriile domenii pe care sistemele de pe Internet pot să o
interogheze. 
În Internet există servere (servere DNS) care ţin tabele de corespondenţă între numele cunoscute de
fiecare şi adresele fizice corespunzătoare. Fiecare server DNS are un server DNS superior cu care face
periodic schimb de informaţie. Sigur, trebuie să existe un sistem care să se asigure că serverele DNS de
pretutindeni au acces la aceeaşi informaţie privind adresele IP ale siturilor şi domeniilor web. De aceea
există sistemul de name servere autoritare şi servere rădăcină . 

* Servere DNS Autoritare: fiecare domeniu trebuie să aibă 2 servere DNS ce funcţionează
ca Autoritar şi Primar. Acestea sunt serverele ce păstrează cea mai corectă şi adusă la zi informaţie
privind adresa IP a unui domeniu. De obicei, aceste servere DNS sunt operate de către deţinătorii
domeniilor în cauză. Alte servere DNS din internet vor face apel la name serverele autoritare pentru a
le furniza adresa corectă a domeniului pe web.

* Servere DNS Rădăcină: următoarea parte a unui sistem DNS, sunt cele 13 servere DNS ce deţin
informaţia 'top level' pentru întregul sistem DNS. Aceste 13 sisteme, operate de către mai multe
companii private, instituţii academice şi laboratoare militare, au sarcina de a propaga informaţia
privind adresele IP a fiecărui server autoritar al unui domeniu, către alte servere DNS de pe Internet. 

Exemplu : Dacă utilizatorul doreşte să acceseze www.microsoft.ro:

 Scrie 'www.microsoft.com' în bara de adrese a browserului


 Browserul trimite un mesaj serverului DNS al Furnizorului de Servicii Internet (D.C.D.).
 Serverul caută în înregistrările sale adresa sitului www.microsoft.com
 Dacă nu are adresa sitului www.microsoft.com, o va solicita unui server rădăcină.
 microsoft.com face parte din .com TLD [top-level-domain], aşa că întreabă un server rădăcină
responsabil cu .com TLD [serverul rădăcină are o listă cu toate domeniile .com cunoscute,
precum şi cu serverele autoritare ale fiecărui domeniu]

18
 Serverul rădăcină se conectează la adresa IP 131.107.1.240, serverul autoritar pentru
microsoft.com, de unde primeşte adresa IP pentru www.microsoft.com
 Serverul rădăcină trimite înapoi serverului DNS al Furnizorului de Servicii Internet (D.C.D.)
această adresă, care la rândul lui o va transmite înapoi browserului utilizatorului. Browserul se
conectează la adresa IP şi primeşte paginile de la www.microsoft.com.
 Serverul DNS al ISP-ului utilizatorului păstrează adresa www.microsoft.com în cache-ul DNS
propriu. Când cineva conectat la acelaşi ISP într-o altă sesiune doreşte să se conecteze la
microsoft.com, va avea adresa stocată local şi o poate rezolva mult mai rapid.
 În funcţie de modul cum Furnizorul de Servicii Internet (D.C.D.) a configurat serverele DNS
proprii, adresa poate fi păstrată în cache pentru câteva ore sau câteva zile. Acest amănunt este
important, deoarece, dacă adresa IP a microsoft.com [sau a oricărui domeniu] se schimbă în
intervalul respectiv, serverul DNS nu o va mai solicita serverelor rădăcină până când nu expiră
cache-ul.

1.Ce port foloseste serverul DNS?

- foloseste portul standart 53.

2.Ce rol are DNS-ul pentru comunicarea adreselor a site-urilor si ip?

-El asigura un serviciu pentru un domen sau mai multe, de traducere a unei adrese
de tip nume Intr-o adresa IP.

3.De exemplu un navigator web vrea sa se conecteze la adresa tip nume www.mail.ru (este un
exemplu) care sunt pasii de navigare si ce rol are DNS?

-In primul rind solicita dintr-un server DNS adresa IP pentru www.mail.ru si dupa aceea se
conecteaza la serverul web care ruleaza pe calculatorul cu adresa IP obtinuta de la DNS.

4.Pentru ce se folosesc adresele IP?


-Adresele IP sunt folosite pentru a comunica in retelele locale sau pe Internet.

5.De unde luam adresa DNS serverului?


-De la administratorul de retea sau de la provaider.

6Avantajul adreselor de tip nume (adica www.adresa.md) .?


Avantajul este ca adresele sunt usor de memorat.
Exemplu: Este mai usor sa memorezi ok.ru decit adresa ip 217.20.155.45 a acestui site.

Sistem de nume de domeniu

Un sistem de nume de domeniu (abreviat DNS, în engleză Domain Name System) este un
sistem distribuitde păstrare și interogare a unor date arbitrare într-o structură ierarhică. Cea mai
cunoscută aplicație a DNS este gestionarea domeniilor în Internet.

Caracteristicile sistemului de nume (DNS) sunt:

• folosește o structură ierarhizată;

• deleagă autoritatea pentru nume;

19
• baza de date cu numele și adresele IP este distribuită.

Fiecare implementare TCP/IP conține o rutină software (name resolver) specializată în


interogarea serverului de nume (DNS) în vederea obținerii translatării nume/adresă IP sau
invers.

Există 2 tipuri de rezoluție de nume:

• rezoluție recursivă (name resolverul cere serverului de nume să facă translatarea);

• rezoluție iterativă (name resolverul cere serverului de nume să îi furnizeze adresa IP a


unui server care poate face translatarea).

Tipic, procesul de rezoluție a numelor se desfășoară astfel:

1. Name resolverul primește de la o aplicație client TCP/IP un nume; acesta formulează o


interogare primului server de nume din lista serverelor;

2. Serverul de nume (DNS) determină daca este mandatat (autorizat) pentru domeniul
respectiv (dacă există configurată o zonă DNS care conține numele respectiv);

3. Dacă este autorizat, transmite răspunsul clientului;

4. Dacă nu, transmite o interogare altui server de nume pentru un răspuns autorizat; obține
răspunsul autorizat și transmite clientului un răspuns neautorizat; totodată stochează răspunsul
local pentru a răspunde la alte cereri pentru același nume.

5. Resolverul de nume transmite răspunsul aplicației utilizator și îl păstrează într-un cache


pentru o anumită perioadă;

6. Dacă name resolverul nu primește un răspuns într-un anumit timp, transmite cererea
următorului server de nume din listă. Când lista este epuizată, va genera o eroare.

20
Partea 3

DNS&WINS
WINS si DNS sunt servicii care permit aflarea adresei IP atunci cand se cunoaste un nume pentru un
calculator.
Serviciul WINS determina adresa IP atunci cand este cunoscut numele NetBIOS al calculatorului
respectiv (spreexemplu MYCOMPUTER, cel pe care il setati din Network Neighbourhood,
Properties, Computer Name in Windows 98) in timp ce  serviciul DNS determina
adresa IP atunci cand se cunoaste   Fully Qualified Domain Names.

DNS
Pentru a înregistra o intrare de nume de gazdă în DNS, trebuie să înregistraţi numele gazdei fără a
înregistra o adresă IP. Utilizaţi oricare dintre următoarele metode, după cum este potrivit pentru
situaţia dvs.

Metoda 1: Utilizaţi DNS Management Console


1. Deschideţi DNS Management Console.
2. Faceţi clic cu butonul din dreapta pe zona care corespunde domeniului de căutare potrivit, apoi
faceţi clic pe Other New Records.
3. În lista Select a resource record type, selectaţi Text (TXT).
4. Faceţi clic Create Record.
5. În New Resource Record, tastaţi numele rezervat în caseta Record Name. 

De exemplu, dacă doriţi să rezervaţi numele „WPAD”, tastaţi WPAD în caseta Record Name.


6. Faceţi clic pe OK pentru a adăuga înregistrarea nouă la zonă.
7. Repetaţi paşii 5 şi 6 pentru toate celelalte nume rezervate pe care doriţi să le blocaţi.
8. Repetaţi paşii 1 până la 7 pentru fiecare domeniu de căuare.

Metoda 2: Utilizaţi comenzi într-un prompt comandă


1. Deschideţi o fereastră Prompt comandă.
2. Într-un prompt de comandă, tastaţi următoarea comandă, apoi apăsaţi ENTER:
dnscmd NumeServer /RecordAdd ZoneName <nume rezervat> TXT ""
De exemplu, dacă doriţi să rezervaţi numele „WPAD”, tastaţi următoarea comandă:
dnscmd NumeServer /RecordAdd ZoneName WPAD TXT ""
Note
 Este posibil să doriţi să introduceţi un text de referinţă ca date ale înregistrării TXT, cum
ar fi „KB934864”.
 Dacă NumeServer nu este specificat, atunci se va utiliza computerul local.
3. Repetaţi pasul 2 pentru toate celelalte nume rezervate pe care doriţi să le blocaţi.
4. Repetaţi paşii 1 până la 3 pentru fiecare domeniu de căuare.

21
WINS
Pentru a înregistra înregistrare cu nume rezervat în WINS, trebuie să înreigstraţi atât numele, cât şi
numele calificat. (Un nume calificat este un nume care este urmat de caracterul punct (.)) De exemplu,
pentru a înregistra înregistrarea numelui „WPAD” rezervat în WINS, trebuie să înregistraţi
următoarele două nume:

 WPAD
 WPAD.
Când înreigstaţi atât numele cât şi numele calificat, sunt adevărate următoarele condiţii:
 Toate înregistrările de nume rezervate sunt blocate.
 WINS este împiedicat de la a răspunde către clienţi WINS care solicită rezolvarea înregistrărilor
de nume rezervate.

Exemplu WPAD
Utilizaţi următoarea procedură pentru numele rezervat „WPAD” ca model, apoi parcurgeţi paşii pentru
următoarele elemente:
 Fiecare server WINS
 Fiecare nume rezervat, cum ar fi numele rezervat „WPAD”
 Orice alte nume pe care doriţi să le blocaţi
1. Deschideţi WINS Manager.
2. Creaţi un grup Internet atribuit statistic, denumit „WPAD”, cu o singură adresă IP 0.0.0.0.
3. Faceţi clic pe Apply.
4. Ştergeţi adresa, apoi faceţi clic pe Apply. Acum, aveţi o intrare cu mai multe înregistrări în
WINS, care nu conţine înregistrări.
5. Creaţi un grup Internet atribuit statistic, denumit „WPAD.”, cu o singură adresă IP 0.0.0.0.
6. Faceţi clic pe Apply.
7. Ştergeţi adresa, apoi faceţi clic pe Apply. Acum, aveţi o intrare cu mai multe înregistrări în
WINS, care nu conţine înregistrări.

Diferența dintre WINS si DNS


WINS este o abreviere pentru Windows Internet Name Service și DNS standuri pentru Domain Name
System. După cum sugerează și numele, WINS este special pentru dispozitive bazate pe Windows,
cum ar fi serverele NT PC-uri, laptop-uri sau. Pe de altă parte, DNS este în principal pentru servere și
dispozitive de rețea. WINS este, în principiu platformă dependentă, în timp ce DNS este independent
de platforma, și funcționează pentru Windows, Linux, Unix, Cisco, etc. WINS este folosit pentru
adrese IP dinamice, cum ar fi sisteme de DHCP, în cazul în care adresele IP continuă schimbare oră.
Contrar, DNS este utilizat în principal pentru doar adrese IP statice, cum ar fi servere sau gateway-uri,
în cazul în care adresele IP rămân la fel. DNS nu acceptă sistemele de DHCP.

Scopul principal al victorii este de a rezolva numele NetBIOS la adresele IP, și nu invers. Numele
incluse în WINS se află în una spațiu de nume apartament și 15 de caractere, și, înregistrarea acestor
denumiri se face automat adrese IP dinamice. DNS este utilizat pentru rezolvarea nume de gazdă în
adrese IP, și poate efectua, de asemenea, o căutare inversă, adică traducerea adreselor IP pentru nume
de gazdă, atunci când este necesar. Numele incluse într-un DNS sunt într-o structură ierarhică și
constau din orice caracter exprimabilă octet. Numele complet de domeniu într-un DNS poate fi de
până la un maxim de 253 de caractere. Înregistrarea acestor nume DNS este configurat manual cu o
adresă IP statică.

22
WINS susține reproducere incrementală a datelor, ceea ce înseamnă că doar modificările aduse în baza
de date sunt copiate între servere WINS. Acest lucru se face periodic pentru a menține coerența.
Întrucât, DNS nu aprobă astfel de reproducere incrementală a datelor, precum și copiile întreaga bază
de date ori de câte ori orice fel de modificări sunt făcute. La înregistrarea unui domeniu pentru a obține
a găzduit, de obicei dureaza 2-3 zile pentru a obține adresa IP distribuit și actualizate între toate
serverele DNS. Cu toate acestea, acest lucru nu este cazul cu victorii, ca mapările adresa IP sunt
actualizate dinamic, iar aceste adrese IP actualizate sunt accesibile tuturor clientilor de pe rețea.
WINS este folosit în principal pentru acei clienți care sunt legate de Microsoft, și sunt în rețelele
Microsoft. Acești clienți pot înregistra numele lor o singură dată. Cu toate acestea, DNS este, în
principiu folosit pe Internet și, de asemenea, pe rețele de calculatoare locale, și utilizează TCP / IP
adresare modul sau TCP / IP gazde. Cu DNS, administratorii pot produce mai multe aliasuri diferite
pentru o singură gazdă. WINS nu are suport pentru servicii TCP / IP de aplicații cum ar fi de rutare de
e-mail, în timp ce, DNS suporta toate serviciile de aplicații TCP / IP.
Rezumat:

1. WINS este platforma dependentă, în timp ce DNS este independent de platforma.

2. WINS sprijină adrese IP dinamice, în timp ce DNS acceptă adrese IP statice.

3. WINS traduce numele NetBIOS la adrese IP, în timp ce DNS traduce numele de gazdă la adrese IP.

4. WINS sprijină reproducere incrementală a datelor pentru modificări, în timp ce copii DNS întreaga
bază de date.

5. WINS nu are suport pentru servicii TCP / IP de aplicații, în timp ce, DNS suporta toate
serviciile de aplicații TCP / IP.

Deosebiri

WINS convertește numele NetBIOS la IP-adrese interne și DNS convertește adresa IP de Internet-
nume.
Numele WINS nu a putut ordonat și nu au nici o ierarhie. În consecință, serviciul WINS - lucru destul
de banal raport cu DNS.
În plus, este important ca DNS este standardul pentru toți și WINS standard includ, dar numai
Microsoft.

23
Aspecte de programare
Notiuni generale despre retele

Programarea în retea implica trimiterea de mesaje si date între aplicatii ce ruleaza pe calculatoare aflate
într-o retea locala sau conectate la Internet. Pachetul care ofera suport pentru scrierea aplicatiilor de
retea este java.net. Clasele din acest pachet ofera o modalitate facila de programare în retea, fara a fi
nevoie de cunostine prealabile referitoare la comunicarea efectiva între calculatoare. Cu toate acestea
sunt necesare câteva notiuni fundamentale referitoare la retele, cum ar fi protocol, adresa IP, port,
socket.

Ce este un protocol ?

Un protocol reprezinta o conventie de reprezentare a datelor folosita în comunicarea între doua


calculatoare. Având în vedere faptul ca orice informatie care trebuie trimisa prin retea trebuie
serializata astfel încât sa poata fi transmisa secvential, octet cu octet, catre destinatie, era nevoie de
stabilirea unor conventii (protocoale) care sa fie folosite atât de calculatorul care trimite datele cât si de
cel care le primeste.
Cele mai utilizate protocoale sunt TCP si UDP.

Definitii TCP (Transport Control Protocol) este un protocol ce furnizeaza un flux sigur de date între
doua calculatoare. Acest protocol asigura stabilirea unei conexiuni permanente între cele doua
calculatoare pe parcursul comunicatiei.

UDP (User Datagram Protocol) este un protocol ce trimite pachete independente de date,
numite datagrame, de la un calculator catre altul fara a garanta în vreun fel ajungerea acestora
la destinatie. Acest protocol nu stabileste o conexiune permanta între cele doua calculatoare.

Cum este identificat un calculator în retea ?

Orice calculator gazda conectat la Internet este identificat în mod unic de adresa sa IP (IP este
acronimul de la Internet Protocol). Aceasta reprezinta un numar reprezentat pe 32 de biti, uzual sub
forma a 4 octeti, cum ar fi de exemplu: 193.226.26.231 si este numit adresa IP numerica.
Corespunzatoare unei adrese numerice exista si o adresa IP simbolica, cum ar fi fenrir.infoiasi.ro.
De asemenea fiecare calculator aflat într-o retea locala are un nume unic ce poat fi folosit la
identificarea locala a acestuia.

Clasa Java care reprezinta notiunea de adresa IP este InetAddress.

Ce este un port ?

Un calculator are în general o singura legatura fizica la retea. Orice informatie destinata unei anumite
masini trebuie deci sa specifice obligatoriu adresa IP a acelei masini. Insa pe un calculator pot exista
concurent mai multe procese care au stabilite conexiuni în retea, asteptând diverse informatii. Prin
urmare datele trimise catre o destinatie trebuie sa specifice pe lânga adresa IP a calculatorului si
procesul catre care se îndreapta informatiile respective. Identificarea proceselor se realizeaza prin
intermdiul porturilor.

24
Un port este un numar de 16 biti care identifica în mod unic procesle care ruleaza pe o anumita
masina. Orice aplicatie care realizeaza o conexiune în retea va trebui sa ataseze un numar de port
acelei conexiuni. Valorile pe care le poate lua un numar de port sunt cuprinse între 0 si 65535
(deoarece sunt numere reprezentate pe 16 biti), numerele cuprinse între 0 si 1023 fiind însa rezervate
unor servicii sistem si, din acest motiv, nu trebuie folosite în aplicatii.

Clase de baza din java.net

Clase din java.net permit comunicare între procese folosind protocoalele TCP si UDP si sunt
prezentate în tabelul de mai jos.

TCP UDP
URL
DatagramPacket
URLConnection
DatagramSocket
Socket
MulticastSocket
ServerSocket

Aceste clase permit programarea de retea la nivel de aplicatie.


Cele 7 nivele ale comunicarii în retea sunt :

Application Layer
Application-level layers Presentation Layer
Session Layer (Sockets)
Transport Layer (TCP, UDP)
Network Layer (IP)
Data communication-level layers
Data Layer
Physical Layer

Lucrul cu URL-uri

Definitie

URL este acronimul pentru Uniform Resource Locator si reprezinta o referinta (adresa) la o
resursa aflata pe Internet. Aceasta este în general un fisier reprezentând o pagina Web sau o
imagine, însa un URL poat referi si interogari la baze de date, rezultate ale unor comenzi
(programe), etc.

Exemple de URL-uri sunt:

http://java.sun.com
http://students.infoiasi.ro/index.html
http://www.infoiasi.ro/~acf/imgs/taz.gif
http://www.infoiasi.ro/~acf/java/curs/9/prog_retea.html#url
25
Dupa cum se observa din exemplele de mai sus, un URL are doua componente principale:

1. Identificatorul protocolului folosit (http, ftp, etc)


2. Numele resursei referite. Acesta are urmatoarele componente:
o numele calculatorului gazda (www.infoiasi.ro)
o calea completa spre resursa referita (~acf/java/curs/9/prog_retea.html)
Notatia ~user semnifica uzual subdirectorul html al directorului rezervat pe server
utilizatorului specificat (HOME).
In cazul în care este specificat doar un director, fisierul ce reprezinta resursa va fi
considerat implicit index.html.
o optional, o referinta de tip anchor în cadrul fisierului referit (#url)
o optional, portul la care sa se realizeze conexiunea

Clasa care permite lucrul cu URL-uri este java.net.URL. Aceasta are mai multi constructori
pentru creearea de obiecte ce reprezinta referinte catre resurse aflate în retea, cel mai uzual
fiind cel care primeste ca parametru un sir de caractere. In cazul în care sirul nu reprezinta un
URL valid va fi aruncata o exceptie de tipul MalformedURLException.

         try {
                 URL myURL = new URL("http://java.sun.com");
         } catch (MalformedURLException e) {
                 . . .
         }

Odata creat, un obiect de tip URL poate fi folosit pentru

o aflarea informatiilor despre resursa referita (numele calculatorului gazda, numele


fisierului, protocolul folosit. etc),
o citirea printr-un flux a continutului fisierului respectiv
o conectarea la acel URL pentru citirea si scrierea de informatii

Citirea continutului unui URL

Orice obiect de tip URL poate returna un flux de intrare de tip InputStream pentru citirea
continutului sau. Secventa clasica pentru aceasta operatiune este:

//Afisarea paginii index.html de la adresa www.infoiasi.ro


public class CitireURL {
  public static void main(String[] args) throws IOException{
         BufferedReader br = null;
         try {
                 URL resursa = new
URL("http://www.infoiasi.ro");
                 InputStream in = resursa.openStream();
                 br = new BufferedReader(new
InputStreamReader(in));
                 String linie;
                 while ((linie = br.readLine()) != null) {
                         //proceseaza linia citita
                         System.out.println(linie);
                 }
         } catch(MalformedURLException e) {
26
                 System.err.println("URL incorect: " + e);
         }
         finally {
                 br.close();
         }
  }
}

Conectarea la un URL

Se realizeaza prin metoda openConnection ce realizeaza stabilirea unei conexiuni


bidirectionale cu resursa specificata. Aceasta conexiune este reprezentata de un obiect de tip
URLConeection ce permite crearea atât a unui flux de intrare pentru citirea informatiilor de la
URL-ul specificat cât si a unui flux de iesire pentru scrierea de date catre acel URL.
Operatiunea de trimitere de date dintr-un program catre un URL este similara cu trimiterea de
date dintr-un FORM aflat într-o pagina HTML. Metoda folosita pentru trimitere este POST. In
cazul trimiterii de date, obiectul URL este de fapt un program (comanda) ce ruleaza pe serverul
Web referit prin URL-ul respectiv (servlet, cgi-bin, php, etc).

Socket-uri

Definitie

Un socket (soclu) este o abstractiune software folosita pentru a reprezenta fiecare din cele doua
"capete" ale unei conexiuni între doua procese ce ruleaza într-o retea. Fiecare socket este atasat
unui port astfel încât sa poata identifica unic programul caruia îi sunt destinate datele.

Socket-urile sunt de doua tipuri:

o TCP, implementate de clasele Socket si ServerSocket


o UDP, implementate de clasa DatagramSocket

O aplicatie de retea ce foloseste socket-uri se încadreaza în modelul client/server de concepere


a unei aplicatii. In acest model aplicatia este formata din doua categorii distincte de programe
numite servere, respectiv clienti.
Programele de tip server sunt cele care ofera diverse servicii eventualilor clienti, fiind în stare
de asteptare atâta vreme cât nici un client nu le solicita serviciile Programele de tip client sunt
cele care initiaza conversatia cu un server, solicitând un anumit serviciu. Uzual, un server
trebuie sa fie capabil sa trateze mai multi clienti simultan si, din acest motiv, fiecare cerere
adresata serverului va fi tratata într-un fir de executie separat.

Comunicarea prin conexiuni

In acest model se stabileste o conexiune TCP între un program client si un server care
furnizeaza un anumit serviciu.

Structura generala a unui server bazat pe conexiuni

               while (true) {

27
                   accept a connection ;
                   create a thread to deal with the client ;
               end while
import java.net.*;
import java.io.*;
public class SimpleServer extends Thread {
  // Definesc portul pe care se gaseste serverul in afara
intervalului 1-1024:
  public static final int PORT = 8100;
  private static ServerSocket serverSocket = null;
 
  private Socket clientSocket = null;
 
  public void run() {
         //Executa solicitarea clientului
         String cerere, raspuns;
         try {
                 //in este fluxul de intrare de la
client                    
                 BufferedReader in = new BufferedReader(new
InputStreamReader(
                         clientSocket.getInputStream() ));
                               
                 //out este flux de iesire catre client
                 PrintWriter out = new PrintWriter(
                         clientSocket.getOutputStream() );
                        
                 //primesc cerere de la client
                 cerere = in.readLine();
                 //trimit raspuns clientului
                 raspuns = "hello " + cerere;
                 out.println(raspuns);
                 out.flush();
                
         } catch (IOException e) {
                 System.err.println("Eroare de citire/scriere \
n" + e);
         } finally {
                 // Inchid socketul deschis pentru clientul
curent
                 try {
                         clientSocket.close();
                 } catch (IOException e) {
                         System.err.println("Socketul nu poate
fi inchis \n" + e);
                 }
                
         }
  }
  public SimpleServer() throws IOException {
         serverSocket = new ServerSocket(PORT);
         try {
                 //Asteapta un client
                 clientSocket = serverSocket.accept();

28
        
                 //Executa solicitarea clientului intr-un fir
de executie
                 new Thread(this).start();
        
         } finally {
                 serverSocket.close();
         }
  }
 
  public static void main(String[] args) throws IOException {
         SimpleServer server = new SimpleServer();
  }
}

Structura generala a unui client bazat pe conexiuni

import java.net.*;
import java.io.*;
public class SimpleClient {
 
  public static void main(String[] args) throws IOException {
         //adresa IP a serverului
         String serverAddress = "127.0.0.1";
         //portul la care serverul ofera serviciul
         int PORT = 8100;
         Socket clientSocket = null;
         PrintWriter out = null;
         BufferedReader in = null;
         String cerere, raspuns;
         try {                         
                 clientSocket = new Socket(serverAddress,
PORT);
                 out = new PrintWriter(
                         clientSocket.getOutputStream(), true);
                 in = new BufferedReader(new InputStreamReader(
                         clientSocket.getInputStream()));
                 //se trimite o cerere la server
                 cerere = "duke";
                 out.println(cerere);
                 //se asteapta raspuns de la server
                 raspuns = in.readLine();
                 System.out.println(raspuns);
                
         } catch (UnknownHostException e) {
                 System.err.println("Serverul nu poate fi gasit
\n" + e);
                 System.exit(1);
         } finally {
                 if (out != null)
                         out.close();
                 if (in != null)
                         in.close();
                 if (clientSocket!= null)
29
                         clientSocket.close();
         }
  }
}

Comunicarea prin datagrame

In acest model clientul trimite un pachet cu cererea catre server, acesta primeste pachetul si
returneaza raspunsul tot prin intermediul unui pachet. Un astfel de pachet se numeste
datagrama si este reprezentat printr-un obiect din clasa DatagramPacket. Primirea si
trimiterea datagramelor se realizeaza tot prin intermediul unui socket, acesta fiind modelat
preintr-un obiect al clasei DatagramSocket.

Structura generala a unui server bazat pe datagrame

import java.net.*;
import java.io.*;
public class DatagramServer {
  public static final int PORT = 8200;
  private DatagramSocket socket = null;
  DatagramPacket cerere, raspuns = null;
 
  public DatagramServer() throws IOException {
         Socket = new DatagramSocket(PORT);
         try
         {      
                 while (true) {
                
                         //Declara pachetul in care va fi
receptionata cererea
                         byte[] buf = new byte[256];
                         cerere = new DatagramPacket(buf,
buf.length);
                         //Astepta aparitia unui pachet cu
cererea
                         socket.receive(cerere);
                
                         //Afla adresa si portul de la care
vine cererea
                         InetAddress adresa =
cerere.getAddress();
                         int port = cerere.getPort();
                
                         //Construieste raspunsul
                         buf = ("Hello " + new
String(cerere.getData())).getBytes();
                        
                         //Trimite un pachet cu raspunsul catre
client

30
                         raspuns = new DatagramPacket(buf,
buf.length, adresa, port);
                         socket.send(raspuns);
                 }
         } finally {
                 socket.close();
         }
  }
 
    public static void main(String[] args) throws IOException {
        new DatagramServer();
    }
}

Structura generala a unui client bazat pe datagrame

import java.net.*;
import java.io.*;
public class DatagramClient {
 
  public static void main(String[] args) throws IOException {
         //adresa IP si portul la care ruleaza serverul
         InetAddress address =
InetAddress.getByName("127.0.0.1");
         int port=8200;
         DatagramSocket socket = null;
         DatagramPacket packet = null;
         byte buf[];
        
         try {
                 //Construieste un socket pentru comunicare
                 socket = new DatagramSocket();
                 //Construieste si trimite pachetul cu cerere
catre server
                 buf = "Duke".getBytes();
                 packet = new DatagramPacket(buf, buf.length,
address, port);
                 socket.send(packet);
                 //Asteapta pachetul cu raspunsul de la server
                 buf = new byte[256];
                 packet = new DatagramPacket(buf, buf.length);
                 socket.receive(packet);
                 //Afiseaza raspunsul
                 System.out.println(new
String(packet.getData()));
                
         } finally {
                 socket.close();
         }
    }
}

Trimiterea de mesaje catre mai multi clienti

31
Diverse situatii impun gruparea mai multor clienti astfel încât un mesaj (pachet) trimis pe
adresa grupului sa fie receptionat de fiecare dintre acestia. Gruparea mai multor programe în
vederea trimiterii multiple de mesaje se realizeaza prin intermediul unui socket special, descris
de clasa MulticastSocket, extensie a clasei DatagramSocket.

Un grup de clienti abonati pentru trimitere multipla este specificat printr-o adresa IP din
intervalul 224.0.0.1 - 239.255.255.255 si un port UDP. Adresa 224.0.0.0 este rezervata si nu
trebuie folosita.

Inregistrarea unui client într-un grup

import java.net.*;
import java.io.*;
public class MulticastClient {
 
  public static void main(String[] args) throws IOException {
         //adresa IP si portul care reprezinta grupul de
clienti
         InetAddress group =
InetAddress.getByName("230.0.0.1");
         int port=4444;
         MulticastSocket socket = null;
         byte buf[];
        
         try {
                 //Se alatura grupului aflat la adresa si
portul specificate
                 socket = new MulticastSocket(port);
                 socket.joinGroup(group);
                 //asteapta un pachet venit pe adresa grupului
                 buf = new byte[256];
                 DatagramPacket packet = new
DatagramPacket(buf, buf.length);
                 socket.receive(packet);
                 System.out.println(new
String(packet.getData()));
                
         } finally {
                 socket.leaveGroup(group);
                 socket.close();
         }
    }
}

Transmiterea unui mesaj catre un grup

import java.net.*;

import java.io.*;

public class MulticastSend {


    public static void main(String[] args) throws Exception {
         InetAddress group =
InetAddress.getByName("230.0.0.1");
32
         int port = 4444;
         byte[] buf;
         DatagramPacket packet = null;
         //Creeaza un socket cu un numar oarecare
         DatagramSocket socket = new DatagramSocket(0);
        
         try
         {      
                 //Trimite un pachet catre toti clientii din
grup
                 buf = (new String("Salut grup")).getBytes();
                 packet = new DatagramPacket(buf, buf.length,
group, port);
                 socket.send(packet);
         } finally {
                 socket.close();
         }
  }      
}

33

S-ar putea să vă placă și