Sunteți pe pagina 1din 72

FA C U LTA T E A D E I N F O R M A T I C A , U N I V E R S I TA T E A “A L . I .

C U Z A” - I A S I

INTRODUCERE IN
R E T E L E D E C A L C U L A T OA R E
SABIN CORNELIU BURAGA

busaco@infoiasi.ro
http://www.infoiasi.ro/~busaco
NOTA AUTORULUI

In cele ce urmeaza vom face o prezentare generala a problematicii retelelor de


calculatoare si Internet-ului, ca retea a retelelor, insistind asupra protocoalelor de comunicatie dintre
calculatoarele conectate la retea si asupra unor aspecte practice legate de Internet (istoric,
arhitectura, servicii importante etc.). Cursul este insotit si de o anexa cuprinzind aspecte mai
tehnice, legate de programarea in retea, folosind socket-uri in limbajul C standard, pe sisteme de
operare compatibile UNIX (Linux).
PARTEA 1

PREAMBUL

RETEA = un sistem de calculatoare, terminale si baze de date conectate prin linii de comunicatii.
Ele permit utilizatorilor diferitelor tipuri de calculatoare sa schimbe date si
sa foloseasca programe speciale sau supercomputere (mainframe).
Dimensiunile ei fizice merg de la o retea locala la una internationala.

Raspandirea informatiilor printre grupurile de calculatoare si utilizatorii lor constituie un


sector principal al Erei Informationale. Acceptarea calculatorului personal si a retelelor locale in
timpul anilor ’80 a dus la capacitatea de-a accesa informatii in baze de date aflate la distanta;
incarcarea unor aplicatii de pe computere aflate, de asemenea, la mare distanta; trimiterea unui
mesaj catre un prieten in alta tara si partajarea unor fisiere cu un coleg de birou, toate acestea
facandu-se cu ajutorul unui PC.

Retele care permit ca toate acestea sa fie facute asa de usor sant de fapt entitati sofisticate
si complexe. Calculatoarele se sprijina pe efectivitatea lor asupra multor componente ce lucreaza
intre ele. Design-ul si asamblarea retelelor mondiale de computere pot fi privite ca una din cele
mai importante minuni tehnologice ale ultimei decade.

M O D E M - U R I S I C A L C U L AT OA R E D E B I RO U

In anii ’70 calculatoarele existente erau foarte scumpe, erau masini fragile care trebuiau
supravegheate de specialisti si pastrate intr-un mediu controlat, special. Ele puteau fi folosite fie la
conectarea directa cu un terminal sau utilizand o linie de telefon si un modem pentru a avea acces
la distanta. Datorita pretului lor ridicat tindeau de-a fi considerate resurse centralizate asupra
carora utilizatorul trebuia sa aranjeze propriul lor acces. In tot acest timp companiile ce ofereau
timp de acces la un computer mainframe s-au dezvoltat. Retelele de calculatoare din aceasta
perioada nu erau disponibile pe piata. Chiar si asa una din cele mai mari dezvoltari menite sa
modifice lumea moderna a tehnologiiilor a fost initiata la acea vreme. Aceasta realizare este
cunoscuta astazi sub numele de Internet.

RETELE LOCALE

Unul din cele mai dramatice evenimente in retelele de calculatoare a fost introducerea si
dezvoltarea rapida a retelelor locale, ca un mod de standardizare a sistemelor de conectare a
computerului folsite in firma. Acest lucru insemna conectarea impreuna a unui numar de
elemente computationale. La cel mai simplu nivel o retea locala furniza nu mai mult decat un
mediu de conectare (cum ar fi un cablu coaxial la care toate calculatoarele si imprimantele sant
conectate) impreuna cu un set de reguli ce guverneaza accesul catre acel mediu. Cea mai folosita
retea locala, Ethernet, utilizeaza un mecanism numit CALL SENSE MULTIPLE ACCESS –
COLISION DETECT/CSMA - CD (Accces multiplu a sensului de apel – detectie de coliziuni).
Aceasta inseamna ca fiecare componenta conectata poate folosi legatura cand s-a stabilit ca nu
exista un alt dispozitiv care-l foloseste. Daca coliziunea totusi se produce dispozitivul care sonda
conexiunea se retrage si incearca din nou mai tarziu. Ethernet transforma date la viteza de 10
MB/sec, ceea ce este suficient de rapid pentru a face ca distantele dintre dispozitive sa fie
nesemnificative. Ele apar ca si cum ar fi direct conectate cu destinatia lor. Ethernet-ul si CSMA-
CD sant exemple de retele locale. Exista multe componente diferite ce alcatuiesc acest sistem
(cum ar fi magistrala, inelul, conexiunea stea) si un numar diferit de protocoale de acces. In ciuda
acestei varietati toate retelele locale dau posibilitatea accesarii caracteristicilor in care ele sant
limitate in distanta (fizic, ele acopera o singura cladire) si sant suficient de rapide pentru a face
reteaua de conectare invizibila dispozitivelor care o folosesc. In plus, retelele locale moderne pot
oferi utilizatorilor o gama larga de facilitati sofisticate. Pachetele de software de management sant
disponibile pentru a controla modul in care dispozitivele sant configurate in reteaua locala, cum
sant administrate, utilizate si cum resursele de retea sant controlate. O larga structura adoptata a
retelei locale este de-a avea un numar de servicii ce sant valabile unui numar, de obicei, mult mai
mare de clienti. Vechile computere (acele puternice) furnizau servicii cum ar fi: controlul
imprimantei, a partajarii fisierelor si posta.

RO U T E R E S I P U N T I D E L E G A T U R A

Facilitatile multor retele locale sant foarte puternice. Multe companii nu doresc sa posede
insule, izolate de facilitatile de calcul. Ele, de obicei, doresc sa extinda facilitatile pe-o arie larga, in
asa fel incat acele grupuri sa poata lucra fara a fi nevoie sa fie localizate. Routerele si puntile de
legatura sant dispozitive specializate ce permit ca doua sau o singura retea locala sa fie conectate.
Puntea de legatura este, mai de graba, un dispozitiv de baza, el putand sa controleze doar retele
locale de acelasi tip. Routerul este o componenta mai inteligenta ce poate interconecta mai multe
tipuri diferite de retele de calculatoare. Multe companii mari au retele de date ce se regasesc intr-o
colectie de routere si retele locale.

Din punct de vedere al utilizatorului acest aranjament le pune la dispozitie o retea fizica
diversa ce seamana cu o resursa coerenta.

R E T E L E T E R I T O R I A L E ( W. A . N. )

De la un anumit punct devine nepractic extinderea unei retele locale pe mai departe.
Acest lucru il determina uneori limitarile fizice, dar mult mai des apar modalitati mai convenabile
si mai ieftine de-a extine o retea de calculatoare.

Doua componente importante in majoritatea retelelor de calculatoare existente sant


telefonul public si reteaua de date. Acestea furnizeaza legaturi la distanta ce fac posibila virtual
extinderea retelei locale intr-o retea teritoriala (W.A.N.). Aproape toti operatorii nationali de retea
(British Telecom in Marea Britanie, Deutsche Bundespost in Germania) ofera servicii pentru
interconectarea retelelor de calculatoare. Aceste servicii merg de la retele de legaturi de date
simple si mici la care reteaua telefonica e capabila, prin intermediul serviciilor de date sofisticate,
de mare viteza, care sant ideal relizate pentru interconectarea de retele locale. Aceste servicii de
date de mare viteza sant cunoscute ca fiind conexiuni cu lungime larga de banda. Se anticipeaza
ca ele vor furniza legaturi necesare intre retele locale ce realizeaza ceea ce va transforma asa
numita autostrada informationala in realitate.

D I S T R I BU T E D C O M P U T I N G ( C A L C U L D I S T R I BU I T )

Ar fi mai usor sa ne inchipuim ca, calculatoarele vor fi capabile sa lucreze impreuna odata
ce ele dispun de conexiune intr-o banda larga. Intrebarea care se pune este : cum se poate reusi ca
calculatoarele construite de diversi producatori din diverse tari sa lucreze impreuna. Pana nu de
mult majoritatea calculatoarelor erau construite cu propria lor interfata si erau structurate intr-un
mod propriu, unic. Un computer putea conversa cu un altul de acelasi tip, insa avea dificultati in
comunicarea cu un altul strain. Totusi, existau cateva echipamente privilegiate ce aveau
posibilitatea sa extraga date dintr-o varietate de resurse.

La inceputul anilor ’90 diferentele dintre diferitele tipuri de calculatoare s-au redus pana
cand au atins stadiul in care puteau interactiona efectiv. Aceasta a permis, virtual, oricui sa
foloseasca prin control de la distanta, cu rezultate bune, o masina de calcul. Principalii
contribuitori la aceasta sant:

CLIENT/SERVER

In loc sa se construiasca sisteme de calculatoare tip bloc (monolitic) s-a ajuns la un punct
de vedere comun ce stipuleaza ca ele ar trebui construite de tipul sistemelor client/server. Clientul
(un utilizator PC) cere un serviciu (cum ar fi tiparirea la imprimanta) iar serverul (un procesor al
unui calculator conectat la o retea locala) il furnizeaza. Aceasta imagine de consens a structurii
sistemelor calculatoarelor demonstreaza ca exista o separatie a functiilor ce alta data erau
inghesuite impreuna. Detaliile implementarii ce decurg dintr-un singur concept au de strabatut un
drum lung pentru a face ca toate computerele sa fie tratate la fel.

SISTEME DESCHISE

Acest termen acopera conceptul general de constructie a sistemelor de computere in asa


fel incat ele pot fi deja interconectate. In practica conceptul de sisteme deschise abordeaza, pe
componente, toate complexitatile unui sistem de calculator utilizand structuri similare indiferent
de tipul sistemelor. Acest fapt atrage dupa sine un amestec de standarde (care ii spun
producatorului ceea ce el ar trebui sa faca) si consortii (grupuri de experti ce-i ajuta pe
producatori sa-si atinga scopul). Efectul general este ca acestia doi pot colabora (expert-
producator). Scopul final este de fapt sa permita oricui sa cumpere calculatoare de la un numar
diferit de producatori, sa le poata amplasa convenabil oriunde, sa foloseasca conexiunile de banda
larga pentru a le lega intre ele si sa poata opera pe ele ca pe o masina care profita la maxim de
aceste legaturi rapide.

S E C U R I TA T E S I M A NA G E M E N T

Posedand retele de calculatoare alcatuite din masini ce pot comunica intre ele nu este din
pe departe scopul final. Spectrul autostrazii informationale abia acum devine ceva de luat in
seama, cevea cu adevarat important.

Securitate

Odata cu cresterea volumului de informatii importante care sa fie lasate doar in seama
calculatorului, securitatea acestuia devine din ce in ce mai importanta. Intr-un astfel de sistem ar fi
mult prea usor ca o persoana cu inalta pregatire sa acceseze informatii confidentiale fara a fi
detectata. Standardul sistemelor de date pentru protectia informatiilor de pe computer introdus la
sfarsitul anilor ’70 i s-a atasat recent un sistem de chei publice ce permit utilizatorilor sa
fragmenteze si sa defragmenteze usor mesajele lor fara ca o terta persoana sa se interpuna.

Management

Nu e un lucru usor sa pastrezi operationala o retea locala si ea sa functioneze in parametri


optimi. Facand ca o retea de calculatoare ce se intinde in intrega lume sa mearga foarte bine, duce
provocarea managementului unei retele cu un pas mai departe. Conceptele esentiale pentru acest
tip de management a diverselor retele a capatat in ultima vreme o atentie deosebita. Astazi exista
suficiente mijloace si standarde pentru aceste aspecte importante ale retelelor de calculatoare
pentru a fi posibila supervizarea efectiva a retelelor locale.
INTERNETUL

Când si cum a apărut INTERNETUL

Reţeaua Internet a apărut la sfârşitul anilor '60 printr-un efort de conectare a reţelei
Departamentului Apărării Statelor Unite (cunoscută sub numele de ARPAnet - Advanced
Research Projects Agency) cu alte reţele conectate prin dispozitive radio şi satelit. ARPAnet a fost
o reţea experimentală proiectată să asigure suportul pentru cercetarea militară - în particular
cercetări privind construirea unor reţele care puteau rezista cu succes unor întreruperi parţiale.

În modelul ARPAnet comunicarea se face întotdeauna între un calculator sursă şi unul


destinaţie. Reţeaua se presupune a fi nesigură; orice porţiune din ea poate dispare în orice
moment. Noul tip de reţea a fost conceput pentru a cere minimul de informaţie de la calculatorul
client. Pentru a trimite un mesaj (pachet de informaţie) în reţea un calculator trebuie pur şi simplu
să-şi depună datele sale într-un "plic" numit pachet de Protocol Internet (IP) şi să specifice
corect(printre altele)adresa destinatarului acelui pachet. Calculatoarele care comunicau schimbând
pachetele IP (nu reţeaua în ansamblul ei) aveau obligaţia să verifice încheierea comunicaţiei.
Avantajul era acela că orice calculator putea conversa în condiţii egale cu alt calculator din reţea.

Drumul dintre calculatorul sursă şi cel destinaţie nu trebuie să fie mereu acelaşi: dacă
intervine o modificare de structură în cadrul reţelei se vr identifica în mod dinamic noi "drumuri"
- numite rute - între calculatoare

Timpul a demonstrat că acest protocol (IP) este suficient de robust şi fiabil pentru a putea
modela tranzacţiile în cadrul acestei reţele

Până în jurul anului 1993 s-a maturizat suficient de mult si tehnologia reţelelor locale
(LAN - Local Area Network). Majoritatea staţiilor de lucru rulau Berkeley UNIX care includea
software dezvoltat pe baza protocolului IP. A apărut o nouă cerinţă: în locul conectării unei staţii
de lucru la serverul unic ce deservea reţeaua locală se punea acum problema conectării întregilor
reţele la ARPAnet. În acelaşi timp multe companii si organizaţii au început sa-şi construiască
reţele private folosind aceleaşi protocoale ca şi în cazul ARPAnet. Era clar că dacă aceste reţele ar
putea comunica între ele(de pe orice calculator al unei reţele de tip LAN se putea comunica cu
orice calculator dintr-o altă reţea) acest lucru ar însemna un mare avantaj. Una din cele mai
importante reţele noi astfel apărute a fost NSFNET, înfiinţată de NSF (National Science
Foundation), o agenţie guvernamentală americană. Spre sfârşitul anilor '80 această organizaţie a
creat cinci noduri de comunicare puternice în centrele universitare americane cele mai
importante. Problema care apărea acum era datorată costului ridicat al serviciului prin linii
telefonice închiriate pe distanţe foarte mari. Soluţia a constat în înfiinţarea unor centre regionale.
Astfel aproape fiecare campus universitar a fost conectat la centrul Internet cel mai apropiat.
Aceste lanţuri de centre au fost conectate la rândul lor la centrele mari deservite de
supercomputere capabile să facă faţă unui trafic extrem de mare. În scurt timp serverele centrale
au ajuns în stadiul să stocheze un volum uriaş de informaţie, dar lucrul cel mai important era
faptul că această informaţie putea fi accesată foarte uşor de pe orice calculator conectat la unul
din centrele regionale. Datorită creşterii traficului de la an la an ,s-a ajuns la o supraîncărcare a
acestei reţele, astfel încât în anul 1987 s-a impus o îmbunătăţire a liniilor telefonice ,precum şi a
performanţelor tehnice ale serverelor.

Pe măsură ce performanţele au crescut ,cererea de servicii Internet a devenit tot mai mare.
Cele mai multe dintre colegiile americane au fost conectate la Internet, impactul educaţional fiind
imens. Odată depăşit acest stadiu, atenţia s-a îndreptat spre şcolile elementare şi medii americane.
Impactul acestei măsuri pe scară largă s-a manifestat mai cu seamă în domeniul companiilor şi
firmelor comerciale. Foştii absolvenţi ai colegiilor americane au convins marile corporaţii din
toate domeniile de utilitatea conectării la Internet. Acest fapt a dus la o dezvoltare accelerată a
acestei reţele. În prezent majoritatea firmelor mici şi mijlocii folosesc serviciile Internet pentru
rezolvarea problemelor proprii legate de transferul de informaţie.

Cine guvernează reţeaua INTERNET

Deşi cerinţele de administrare ale unei astfel de reţele sunt uriaşe, nu există o autoritate
supremă care să o guverneze. Există în schimb un număr de organizaţii constituite pe bază de
voluntariat care au ca scop investigarea problemelor ce pot apare şi care propun măsuri de
îmbunătăţire. Internet Architecture Board (IAB) este o astfel de organizaţie. Membrii acesteia se
întâlnesc regulat pentru a se consulta în privinţa stabilirii standardelor, a alocării resurselor, pentru
a propune soluţii pe termen mediu şi lung. Odată un nou standard adoptat, este publicat pe
Internet, urmând ca pe baza acestuia să se construiască noi aplicaţii, scopul fiind acela al unei
compatibilităţi cât mai mari între arhitecturi, sisteme de operare etc. Deşi Internet este departe de
a fi la stadiul de anarhie, oricine este liber să-şi exprime sugestiile despre cum ar trebui organizat.
Astfel s-a format o noua organizaţie numită Internet Engineering Task Force (IETF). Membrii
acesteia se întâlnesc periodic pentru a discuta probleme de natură operaţională pe termen scurt.
Atunci când se prezintă o problemă se formează un grup de lucru care cercetează exclusiv acea
problemă şi caută soluţii cât mai performante. La sfârşitul unei astfel de cercetări se creează un
raport. Dacă soluţia propusă este valoroasă poate fi trimisă la IAB pentru a fi acceptată ca
standard

Cine plăteşte pentru serviciile Internet

Contrar aşteptărilor, nimeni nu plăteşte pentru Internet în ansamblul său; nu există nici o
firmă care să colecteze plăţile de la toate reţelele Internet sau de la utilizatori. În schimb, toată
lumea plăteşte pentru partea sa de acces. NSF plăteşte pentru NSFNET, NASA plăteşte pentru
NASA Science Internet. Un colegiu sau o corporaţie plăteşte pentru conectarea sa la o reţea
regională, care la rândul ei plăteşte un furnizor naţional pentru accesul său la o reţea
internaţională.

Ce înseamnă şi ce oferă Internetul pentru furnizorul individual

Faptul că Internet nu este o reţea de calculatoare, ci o colecţie de reţele, înseamnă foarte


puţin pentru utilizatorul final al resurselor sale. Pentru a rula un program sau pentru a accesa o
anumită colecţie de date nu este necesară cunoaşterea modului de interacţiune a acestor reţele.
Singura dată când acest lucru devine important este momentul când apar probleme . Fiecare reţea
are propriul său centru de operaţiuni (NOC - Network Operation Center). Centrele discută între
ele şi ştiu cum să-şi rezolve problemele. Utilizatorul individual trebuie în acest caz să ia legătura
cu furnizorul său de servicii Internet.

Accesul Internet înseamnă, în ultimă instanţă, posibilitatea accesării a milioane de servere


situate pe tot cuprinsul globului. Astfel utilizatorul poate găsi răspuns la orice întrebare pe care şi-
o pune, poate trimite mesaje în lume aproape instantaneu, poate transfera documente cu
informaţii din orice domeniu de activitate, poate efectua cumpărături, vizita galerii de artă,
conversa on-line cu orice alt utilizator conectat, află ultimile ştiri ale agenţiilor de presă sau poate
aduce programe soft de pe arhivele publice.

Reţeaua Internet este adesea numită Autostradă Internaţională. Acest concept de


infrastructură informaţională globală sau "Information Superhighway" introdus de ex-vicepreşedintele
american Al Gore şi preluat de Bill Gates are o structură similară Reţeaua are posibilităţi enorme
pentru comunicarea globală, rapidă şi ieftină şi poate domina în scurt timp aria educaţională. Dar
canalele de comunicaţii existente (în primul rând accesul la liniile telefonice) impun restricţii.
Înlocuirea acestora cu canale cu fibră optică şi tehnologie digitală permit facilităţi superioare.
PARTEA 2

PRELIMINARII

Internet

• reţea de reţele

• comunicarea :

!"între 2 reţele

!"între 2 calculatoare ale unei reţele

Reţea – formată din conectarea fizică a două sau mai multe calculatoare.

Comunicarea

• transmisie de biţi

• transmisie serială (între calculatoare)

• transmisie paralelă (pentru imprimantă)


Cum se face comunicarea prin cablu ?

- simplex - se transmite într-un singur sens

- semi-duplex – se poate transmite in ambele sensuri, dar nu în acelaşi timp

- full-duplex - pot exista fluxuri de biţi în acelaşi timp între cele două calculatoare

REŢEA = cabluri + set de protocoale, interfeţe si servicii

de circuite

Transmiterea datelor se face prin comutare

de pachete

Comutarea de circuite – creează o cale unică neîntreruptibilă între două dispozitive care
comunică:

B imprimantă

Comutarea de pachete – între A şi B există o mulţime de drumuri (chiar dacă se


întrerupe undeva o legătură, pachetele circulă pe toate rutele până ajunge la B)

A B
Trebuie ştiute adresa destinatarului şi a expeditorului.

Topologii (de reţea) – se referă la forma geometrică a reţelei, mai exact la forma
geometrică virtuală

Definiţia topologiilor de reţea – forma geometrică de amplasare a calcula-toarelor într-


o reţea

♦ bus(magistrală)

♦ inel

♦ stea

♦ arbore

BUS: se foloseşte un mediu unic de transmisie a datelor

-Se foloseşte cablu coaxial

-Este foarte răspândită

Avantaje: datele circulă în ambele sensuri

Dezavantaje:

♦ orice defecţiune fizică într-un loc oarecare al magistralei atrage după sine
întreruperea tuturor comunicaţiilor în reţea
♦ securitatea datelor este extrem de redusă (informaţia trece pe la fiecare calculator
al reţelei)

Inel (ring) :

♦ calculatoarele sunt legate sub forma unui inel continuu

♦ într-o topologie inel informaţia circulă într-un singur sens

♦ orice defecţiune a cablului atrage întreruperea comunicării în reţea

♦ securitatea scăzută

Stea :

Informaţia circulă trecând printr-un nod central.

Avantaje:

♦ Defectarea unui cablu nu afectează comunicarea în reţea

♦ Securitatea este bună


Dezavantaje:

♦ Costuri ridicate la “căderea” nodului central

SCOPUL REŢELELOR

♦ Partajarea resurselor: soft, fişiere, spaţiu pe disc, imprimante

♦ Fiabilitate mai mare a reţelelor

- Toleranta la defecte

- Sistemul bancar, reactoare, etc.

♦ Economia de bani

Ideea e de a mări puterea de calcul fără a renunţa la calculatoarele vechi: mainframe (Felix C256,
Felix 512, Felix1024) sau minicalculatoare (Independent I-100, I-102, I-108, Coral, PDP 11)

♦ Reţeaua ca mediu de comunicare

- accesul la informaţie de la distanţă,

- comunicaţiile interpersonale,

- divertismentul interactiv.
PARTEA 3

MODELE DE COMUNICARE

Tipuri de reţele : (după mărime)

• LAN (Local Area Network) – la nivel de incapere, cladire

• MAN (Metropolitan Area Network) – la nivelul unui oraş

• WAN (World-Wide Area Network) – reţele larg răspândite (Internetul)

TEHNOLOGII DE TRANSMISIE

• Reţele cu difuzare (Broadcast)

• Reţele “point-to-point”

Reţele cu difuzare (Broadcast)

• au un singur canal de transmisie care este partajat la toate nivelurile din reţea;

• se emite pe canal pentru toate maşinile; toate maşinile “aud” dar numai cele
implicate răspund;

• unităţile de transmisie sunt mesaje scurte numite “pachete”;

• este posibil să fie transmise pachete la un grup de utilizatori (Multicasting);


Reţele punct-la-punct

• se referă la comunicarea între maşini, aflate la distanţă mare, iar comunicarea se


face prin acele conexiuni multiple între perechi de maşini

• ca să ajungă de la o maşină la alta un pachet trece prin mai multe maşini


intermediare (în cazul în care nu există legătură directă)

• pachetele sunt ghidate după nişte algoritmi numiţi algoritmi de rutare

Modul de transmisie poate fi sincron (negociere şi transmisie) – asemănător telefonului


– sau asincron – mesajele postale.

• modul sincron

!"presupune existenţa unui orologiu (ceas) la fiecare maşină;

!"discutăm de două maşini care dispun de ceas propriu;

!" ceasurile trebuie să fie reglate la aceeaşi frecvenţă;

A B

ceas sincron ceas

• modul asincron

!"caracterele pot fi emise oricând, iar intervalul între două caractere


transmise poate fi oricât de mare;

!"biţii din fiecare caracter transmis sunt precedaţi şi urmaţi de către un bit
special de start şi stop

!"nu mai depinde de ceasul maşinilor


Există protocoale diferite care realizează comunicarea sincronă şi cea asincronă

La comunicarea în mod sincron, după ce are loc o negociere care stabileşte canalul de
comunicare, comunicarea este extrem de fluidă;

La comunicarea în mod asincron transmiţi când vrei, dar preţul plătit este că nu am o
fluiditate a comunicării şi mereu trebuie să scriem adresa iar pachetele nu vor veni în ordinea în
care au fost trimise.

C O N E C TA R E A C A L C U L A TOA R E L O R Î N R E Ţ E A

Probleme:

• Aceeaşi limbă, acelaşi alfabet

• Aceeaşi limbă, alfabete diferite

• Limbi diferite, acelaşi alfabet

• Limbi diferite, alfabete diferite

Apare atenuarea semnalului emis, şi pentru a putea face semnalul transmisibil, trebuie să
introducem un Repetor.

Repetorul

• copie si amplifică semnalul

• el elimină pierderea semnalului prin eliminarea atenuării

• măreşte lungimea magistralei în LAN (cablu)

Bridge (punte)

• joacă rolul agentului de circulaţie

• în termeni de reţea, conectează două reţele care utilizează aceeaşi tehnologie


(Ethernet)
• este în general un calculator, şi el realizează următorul lucru:

- împart reţeaua în două grupuri şi pun un alt calculator(1) care realizează puntea
între ele; calculatorul (1) identifică un pachet din reţeaua “a” şi transmite la reţeaua B (micşorează
pachetele ce se plimbă între cele două reţele)

- calculatorul (1) examinează pachetele din fiecare reţea şi le transferă doar atunci
când este cazul

Avantaj: creşte performanţa, fiabilitatea şi securitatea

- performanţa : creşterea din cauza eliminării coliziunilor, ambuteiajelor de pachete

- fiabilitatea : ruperea la nivelul unui cablu nu afectează toate calculatoarele din


reţea;

- securitatea: trafic de informaţii pe reţea şi accesări autorizate sau nu

Router

• Direcţionează datele între două reţele care au tehnologii diferite şi protocoale


diferite: Ethernet, Token-Ring (IBM);

• este un calculator ceva mai complicat;

• cunoaşte adresa tuturor calculatoarelor pe care le vede în reţea;

• dirijează pachetele conform unor algoritmi de rutare (reuşeşte să facă “traducerea”


dintr-un protocol în alt protocol);

• orice router poate fi în acelaşi timp şi Bridge;

Gateway(poartă)

• se referă în fapt la anumite aplicaţii care sunt de-a lungul reţelei (poartă de
aplicaţii);
PARADIGMELE COMUNICĂRII ÎN REŢEA

• modelul client-server

- în reţea la nivelul aplicaţiilor există 2 „actori” importanţi – server si client (noţiuni


software, extinse la noţiuni hardware

- serverul – stă în aşteptare de a oferi nişte servicii şi aceste servicii le oferă doar printr-un
anumit port

- clientul – accesează un port şi apelează serviciul oferit de către server

• RPC (Remote Procedure Call) – apel de procedură la distanţă

PROTOCOALE ŞI INTERFEŢE

In proiectarea retelelor de calculatoare apărut o abordare stratificată, fiind dată de


complexitatea comunicării în reţea.

A B

i+1 i+1 nivel

i i

i-1 i-1

1 1
Exemplu practic – relatiile de afaceri intre doi directori de companie, din tari diferite:

A B

Director Director

Secretară Secretară

Traducător Traducător

Cut.poştală Funcţionar poştal

Serv. Poştale Servicii poştale


Notiunile importante vehiculate in continuare sunt:

Protocol = un set de reguli care:

• are loc la unul dintre niveluri

• face posibilă comunicarea la acest nivel între două maşini;

• este o transcriere în program a unor reguli;

• este un set de reguli care definesc convenţiile de comunicare conforme unui nivel

Interfaţă = acele servicii care permit comunicarea la acest nivel între două niveluri
consecutive;

ARHITECTURĂ DE REŢEA = niveluri + interfeţe + protocoale

Principiu:

La nivelul n al destinatarului se primeşte exact acelaşi mesaj ca la nivelul n al emiţătorului.

In prezent exista doua ierarhii de protocoale:

• Modelul ISO/OSI (Open Systems Interconection)

o model al reţelei ideale;

o are 7 straturi;

• Modelul TCP/IP

o model cu 5 straturi;
o este de mai mare succes practic decât cel ideal propus de ISO

Interfaţa:

n+1

Client pentru stratul (n-1)

Server pentru stratul (n+1)

n-1

Detaliile de implementare sunt ascunse pe stratul (n+1).

Serviciu:

- fiecare nivel oferă servicii specifice, de care depinde nivelul superior;

- Serviciile nivelului n ofera funcţionalitatea nivelului n de care depinde nivelul n+1

Protocol şi Serviciu

- fiecare nivel se conformează unui set de reguli (protocol)

- protocoalele definesc serviciile în felul următor:

- dau reguli pe care nivelul trebuie să le urmeze pentru a implementa serviciul


corespunzător.

- serviciul defineşte funcţionalitatea nivelului.


Modelul OSI din punct de vedere al programatorului:

7.nivelul aplicaţie protocol de aplicaţie 7.nivelul aplicaţie

6.nivelul prezentare protocol de prezentare 6.nivelul prezentare

5.nivelul sesiune protocol sesiune 5.nivelul sesiune

4.nivelul transport protocol de transport 4.nivelul transport

3.nivelul reţea protocol de reţea 3.nivelul reţea

2.nivelul leg. de date protocol leg de date 2.nivelul leg. de date

1.nivelul fizic protocol de comunicare efectivă 1.nivelul fizic

Host A Host B

- model cu 7 niveluri;

- reprezintă în fapt o reţea ideală, un standard pentru o reţea ideală;

- specificaţie de proiectare pentru reţele;

- suite de protocoale care implementează X.25 (CCITTX.25);

- protocoalele de la nivelele 2-6 realizează o comunicare virtuală

- numele fiecărui nivel identifică protocoalele corespunzătoare asociate nivelului


respectiv şi nivelurile corespondente din hosturile diferite se numesc procese pereche;

- comunicaţia între procesele pereche este o comunicare virtuală căci de fapt


comunicaţia nu are loc decât la nivelul fizic;

- reţelele nu transferă date în mod direct între procesele pereche;

- comunicarea virtuală (conversaţie virtuală) dintre niveluri corespondente


simplifică programarea în reţea
Conversaţia virtuală la nivelul n se desfasoara astfel:

Cererile de servicii şi răspunsurile sunt transmise prin intermediul primitivelor.

Putem distinge 4 clase mari de primitive:

- cererile – sunt nivelurile client (n+1) şi transmit cereri de servicii (ale nivelului n);

- indicaţiile – corespund notificării transmise la un nivel la distanţă ce urmează unei


cereri de serviciu.

- răspunsurile – clasa permite răspunsul la o indicaţie.

- confirmările – permit unui producător de servicii să răspundă la cererea unui client.

Clasificarea ne permite să distingem 2 clase de servicii:

- serviciile confirmate (se utilizează toate cele 4 tipuri de primitive conform următoarei
scheme)

host A reţeaua host B

cerere n+1 n n n+1

transfer indicaţie

răspuns
confirmare

Exemplu: Serviciul de stabilire a conexiunii (TCP)

- servicii neconfirmate – utilizează numai cereri şi indicaţii.


N I V E L E L E I N D E TA L I U

Funcţionalitatea (serviciile) nivelurilor este urmatoarea:

- Nivelul 1: stratul fizic se ocupă cu caract. fizice: semnale, modulare/demodulare,


multiplexări etc. Unitatea de informatie este bitul.

- Nivelul 2: permite specificarea modului în care datele traversează distanţa dintre


două maşini. Unitatea cu care se lucrează se numeşte cadru (frame). La nivelul 2 există strategii
diferite care fac posibilă delimitarea acestor unităţi de transmisie. La cadre se mai adaugă o
informaţie suplimentară care ne ajută să detectăm orice eroare introdusă la nivel fizic; tehnica
utilizată în mod curent de aceste coduri corectoare de erori CRC (Cyclic Redundancy Codes).
Tot acest nivel de ocupa cu reglarea schimbului de date: cadrele conţin pe lângă datele care se
schimbă în mod normal un câmp care permite dialogul între entităţile de date, respectiv de a
transporta un cadru. Nivelul 2 lucrează cu informaţii despre cadru, limitele lui, reguli pentru
transferul de date şi controlul acestui transfer.

- Nivelul 3 (nivelul retea): are ca responsabilitate livrarea datelor în reţea.


Determină ruta (calea) pe care o vor urma datele în drumul lor de la host A la host B (de la maşina
A la maşina B).
Se ocupă de:

o gestionarea datelor în reţea

o rezolvarea congestiilor

o ratele de transfer de-a lungul reţelei (viteza)

Într-o reţea cu comutare de pachete cum este Internetul, în fiecare pachet avem adresele
destinatar şi sursă.
Protocoalele nivelului 3 definesc responsabilităţile fiecărui element din reţea în ceea ce priveşte
rutarea datelor. Se garantează că hostul destinatar recepţionează pachetele în mod corect.
În modelul ISO/OSI nivelul reţea asigură secvenţialitatea pachetelor spre deosebire de TCP/IP
unde acest lucru îl realizează nivelul transport (nivelul 4). De asemeni, se face gestiunea traficului
în reţea, contorizarea traficului în reţea.

- Nivelul 4 (nivelul transport): este un mecanism de verificare a comunicării


destinatar-expeditor, funcţia sa importantă fiind de livrare a datelor în codrul hostului local.
procese proces proces

niv 4 niv 4

niv 3

Host A Host B

- Nivelul 5 (nivelul aplicaţie): negociază legătura între procese şi aplicaţii de pe


hosturi diferite gestionează entităţi ca nume, cantitate, parole, autentificare.

- Nivelul 6 (prezentare): este conceput în OSI astfel: unele funcţii folosite în


comunicarea în reţea sunt des folosite (interfaţa cu imprimanta, interfaţa cu monitorul); detaliile
legate de interfeţe sunt gestionate la nivelul 6.

- Nivelul 7: include programele care utilizează reţeaua: posta electronica, transferul


de fisiere, conectare la distanta etc.
TCP/IP – este organizat în 4 straturi conceptuale care se sprijină pe cel de-al 5-lea strat,
cel al hardului reţelei, fiind utilizat de Internet.
PARTEA 4

S T I VA D E P R O T O C OA L E T C P / I P

- TCP – Transmission Control Protocol

- IP – Internet Protocol

In prezent, TCP/IP reprezinta mai mult de doua protocoale. Tot ce se numeşte


Tehnologie Internet de fapt se referă la suita de protocoale TCP/IP. Astfel, putem defini
Internetul ca fiind orice reţea care foloseşte tehnologia Internet (Internet Technology).

Stiva de protocoale TCP/IP

Suita de protocoale TCP/IP asigură transmisia şi gestionarea informaţiilor/datelor care se


deplasează în Internet. Ca programatori de reţea trebuie să înţelegem funcţionarea TCP/IP.
Stiva de protocoale TCP/IP are 4 nivele de bază care se sprijină pe un nivel fizic:
aplicatie, transport (TCP si UDP), retea (IP), legatura de date.

aplicaţie aplicaţie

F L U X U L D E DA T E

Există 3 paşi importanţi în transmiterea datelor în Internet:

1. Transmiterea informaţiei de la aplicaţie la reţea (cu ajutorul stivei de protocoale).

2. Reţeaua trebuie să determine unde trebuie să ajungă datele


(determinând adresa destinatarului).

3. Reţeaua trebuie să ruteze şi să transporte datele la destinatar acolo unde cu


ajutorul stivei de protocoale informaţia urcă de la nivelul aplicaţiei.
În transmiterea fluxului de informaţii, informaţia are diferite formate:
- la nivelul aplicaţie – stream-uri (mesaje) de date

- la nivelul TCP – pachete

- la nivelul reţea – cadre (frame-uri)

La nivelul fizic se folosesc cabluri coaxiale sau torsadat, iar la nivelul legătură de date se
utilizeaza Ethernet, Token Ring, fiecare placa de retea posedind o adresa de 6 octeti. Pentru a
realiza conversia dintre adresele placilor de retea si cele ale calculatoarelor din Internet se folosesc
protocoalele :

- ARP - Address Resolution Protocol (protocol de conversie a adreselor) - funcţia


sa este de a transforma adresele de nivel reţea în adrese de nivel legătură de date (adica adrese
fizice ale placilor de retea);

- RARP - Reverse Address Resolution Protocol – operaţia inversă ARP –


transformă adresele de nivel legătură în adrese de nivel reţea.

Nivel reţea → nivel aplicaţie

Nivelul IP (nivel internet) se ocupă de comunicarea la nivelul maşinilor. Rolul lui este de a
permite hosturilor să emită pachete în reţea şi face ca pachetele să circule independent de maşinile
intermediare.

Comunicare sigură(fiabilă) şi comunicare nesigură

- Este similară cu lipsa expeditorului la trimiterea unei scrisori.

- In cazul ISO/OSI – costul de a asigura o comunicare sigură este foarte mare, dar
la suita de protocoale TCP/IP (mult mai practică) e sigură la nivelul IP.
- TCP/IP introduce la nivelul transport (TCP) un control final al transmisiei numit
“end-to-end”.

A B

control al transmisiei “end-to-end”

TCP TCP

IP IP IP IP IP

Leg

Orice pas intermediar se numeşte hop.

Nivelul transport

- Asigură comunicarea “end-to-end”;

- Asigură controlul fluxului de date ;

- Consta din doua protocoale:

!"TCP (Transmission Control Protocol) – protocol sincron - realizează


comunicare orientată-conexiune (circuit virtual), similara telefonului;

!"UDP (User Datagram Protocol) – asincron – realizeaza o comunicare care


nu este orientată conexiune, similara telegramelor.

Nivelul aplicaţie

Reuneşte funcţionalităţile nivelurilor sesiune, prezentare, aplicaţie de la modelul


ISO/OSI.
A S E M Ă N Ă R I Ş I D E O S E B I R I Î N T R E O S I Ş I TC P / I P

ASEMĂNĂRI:

1. Ambele se bazează pe stivă de protocoale (independente).

2. Funcţionalitatea nivelurilor este oarecum asemănătoare.

3. În topul stivelor de protocoale se află nivelul aplicaţie care se bazează pe nivelul


transport .

Se disting trei concepte importante:

- serviciu – dă funcţionalitatea fiecărui strat (spune ce face), dar nu spune ce


foloseşte şi cum funcţionează.

- interfaţă – spune protocolului aflat deasupra ce parametri trebuie să îi dea şi ce


rezultat va obţine.

- protocol – explică regulile după care se face comunicarea (cum se îndeplineşte


serviciul).

DEOSEBIRI:

1. OSI distinge cele 3 concepte, iar TCP/IP nu le distinge. OSI este bun ca model,
TCP/IP este bun ca implementare

2. Fiabilitatea / Siguranţa comunicării.


X.25 (suita de protocoale corespunzătoare lui OSI) face detectarea şi tratarea erorilor la fiecare
nivel :
- Nivelul 2: erori de transmisie
proceduri de acoperire – se foloseşte o cifră de control pentru fiecare pachet, confirmare pentru
aceste cifre de control.

- Nivelul 3:
Face detectarea si corectarea erorilor la nivel de pachete

- Nivelul 4:
TCP/IP – cifre de control, algoritmi de retransmisie, proceduri de acoperire a erorilor, time-out,
timpul de viata a pachetelor
Fiabilitatea în OSI – foarte bună, eficienţa – foarte slabă
Fiabilitatea în TCP/IP – mai mică, eficienţa – mai bună

3. Unde este localizată decizia şi controlul

- OSI – controlul şi decizia – centralizat (rutări, control, de flux şi trafic, confirmări de


transmisie) în dispecerat de reţea

- TCP/IP - cere tuturor serverelor să participe aproape la toate operaţiile reţelei


(detectarea de erori, rutări, controlul fluxului în reţea). Astfel reţeaua este o sumă de servere active
din punct de vedere al Internetului, decizia şi controlul se distribuie.

Concluzii:

- OSI – bun ca model

- TCP/IP – bun ca ansamblu de protocoale efective.

Independent de schema de stratificare putem enunţa PRINCIPIUL STRATIFICĂRII


(funcţionează independent de schema de stratificare şi de funcţionalitatea straturilor):
ENUNŢ:
Protocoalele sunt proiectate astfel încât stratul n la destinatar
primeşte exact ceea ce se emite de stratul n la expeditor.

Asadar, pentru programatori este important doar stratul n, fara a-i interesa ce se petrece la
straturile inferioare.
PARTEA 5

P R O T O C OA L E D E C O M U N I C A T I E
I N R E T E L E L E D E C A L C U L A T OA R E
(DETALII)

Cel mai adesea comunicaţiile interprocese de-a lungul unei reţele sunt realizate prin
intermediul familiei de protocoale TCP/IP. Dupa cum am vazut si mai sus, familia de protocoale
TCP/IP constă din următoarele protocoale:

- TCP

Transmission Control Protocol este un protocol orientat-conexiune ce oferă posibilitatea de a


realiza comunicaţii full-duplex sigure. Se bazează pe protocolul IP. TCP este de departe cel mai
folosit protocol în comunicarea interprocese.

- UDP

User Datagram Protocol – comunicaţii nesigure în mod neconectat

- ICMP

Internet Control Message Protocol – folosit pentru tratarea erorilor şi controlul informaţiilor.
Foloseşte protocolul IP pentru realizarea schimbului de date. În mod normal procele utilizator nu
au nevoie să aceseze ICMP, deoarece mesajele acestuia sunt procesate de către software-ul
TCP/IP.
- IP

Internet Protocol – protocolul de bază pentru UDP, TCP şi ICMP. Procesele utilizator
folosesc doar TCP sau UDP, folosirea directă a IP-ului fiind rar întâlnită.

Diferitele piese ale Internetului sunt conectate de un set de calculatoare numite routere,
care conectează împreună reţelele. Aceste reţele sunt uneori Ethernet, uneori reţele de tip inel,
sau alteori reţele telefonice.

La nivelul protocolului IP, un router primeşte datele trimise de undeva şi decide unde
trebuie să le trimită mai departe folosind pentru aceasta cea mai bună cale de comunicare. Suita
de reguli prin care se realizează schimbul de date se numeşte protocol. Protocolul Internet (IP)
trimite mesajele sau verifică faptul că routerul ştie ce să facă cu datele când acestea îi sosesc
funcţionând ca un plic.

Adresele Internet constau din patru numere (octeti), fiecare mai mic decât 256. Atunci
când sunt scrise, numerele sunt separate prin puncte, astfel:

187.110.27.7

135.120.4.2

Adresa este în fapt formată din mai multe părţi. Deoarece Internet este o reţea de reţele,
începutul adresei spune routerului Internet reţeaua la care suntem conectaţi. Sfârşitul adresei ne
spune care calculator gazdă (host) va recepta pachetul. Fiecare calculator de pe Internet are o
adresă unică în acest fel. De exemplu, serverul studentilor Facultatii de Informatica are adresa IP
urmatoare : 193.231.30.197.

Pentru o serie de motive practice (dintre cele mai notabile putem număra limitările
echipamentelor), informaţia trimisă de-a lungul reţelelor IP este "spartă" în piese de dimensiuni
mai mici, numite pachete. Informaţia din interiorul pachetelor are o lungime de regulă între unul şi
aproximativ 1500 caractere. Asta pentru a preîntâmpina ca un utilizator să monopolizeze reţeaua,
permiţând tuturor să aibă acces la ea. Totodată dacă reţeaua este supraîncărcată, asta înseamnă că
ea se va comporta rău pentru toţi utilizatorii ei: ea nu se opreşte pentru unii, în timp ce alţi
utilizatori mai importanţi o monopolizează.
- ARP

Address Resolution Protocol mapează adresele Internet în adrese hardware. Numai anumite
reţele au nevoie de el.

- RARP

Reverse Address Resolution Protocol mapează adrese hardware în adrese Internet.

Relaţiile dintre aceste protocoale sunt ilustrate în figura următoare.

Componentele familiei de Protocoale Internet

Ca în cazul oricărui protocol bazat pe mai multe nivele, fiecare nivel încapsulează datele
nivelului inferior.

Familia de protocoale TCP/IP a fost dezvoltată de către Defense Advanced Research Projects
Agency (DARPA) în anii 1970.
Obiectivul principal al DARPA a fost de “a dezvolta o tehnică efectivă pentru utilizare
multiplexată a reţelelor interconectate”. Acest obiectiv a fost atins şi astăzi mii de reţele
(conectate sau nu la faimosul Internet) folosesc familia de protocoale TCP/IP.

În al doilea rând ei au urmărit următoarele obiective: comunicaţiile trebuie să continue în


ciuda piederii de servicii; suport pentru tipuri multiple de servicii; arhitectura Internet trebuie să
se adapteze la o varietate de reţele; să permită un management distribuit al resurselor; să fie
eficientă din punt de vedere al costului; şi să permită adăugarea de noi hosturi cu minimum de
efort.

În special un obiectiv, continuarea comunicaţiilor în ciuda pierderii de servicii, a jucat un


rol major în procesul de proiectare. Pentru a atinge acest obiectiv, informaţiile de stare care
descriu conversaţia în curs trebuie să fie protejate. Aşa că aceste informaţii sunt obţinute la
punctele finale de comunicare şi nici un packet care traversează nodurile reţelei nu are nevoie de
informaţiile de stare.

Fiecare host are asignată o adresă IP pe 32 de biţi. Această adresă identifică reţeaua la care
este ataşat acel host. Detalii despre adresa IP vom afla mai tirziu.

Numere de Port

Datagramele IP specifică doar host-ul destinaţie. Pentru a identifica aplicaţia căreia îi sunt
destinate aceste datagrame TCP şi UDP folosesc numere de port pe 16 biţi. Numerele de port sunt
mai flexibile decât id-urile de proces, un proces poate avea, în acelaşi timp, mai multe conexiuni
distincte cu alte procese utilizând mai multe porturi. De asemeni un port poate fi folosit pentru a
recepţiona mesaje de la mai multe surse.

Serverele aşteaptă cererile clienţilor la porturi binecunoscute. De exemplu, HTTP


(HyperText Transfer Protocol) are portul TCP şi UDP cu numărul 80. Numerele de port
binecunoscute cu numere între 1 şi 1023 sunt administrate de către Internet Assigned Numbers
Authority (IANA).

Procesele client în mod normal nu trebuie să-şi facă griji în privinţa numărului pe care îl
vor folosi deoarece pot primi în mod automat un port unic la nivelul hostului pe care rulează.
Multiplexare/Demultiplexare

Protocoalele de comunicaţie folosesc tehnici de multiplexare şi demultiplexare pe toate


nivelele ierarhiei. Când trimitem un mesaj protocoalele diferitelor nivele ale stivei de protocoale
TCP/IP de pe calculatorul sursă, includ în acesta biţi suplimentari prin care se specifică tipul
mesajului, protocolul folosit etc. Calculatorul destinaţie foloseşte aceste informaţii în procesul de
demultiplexare a mesajelor. Procesul de demultiplexare a mesajelor pentru frame-uri Ethernet este
ilustrat mai jos.

Demultiplexarea mesajelor într-o reţea Ethernet


PROTOCOLUL INTERNET

Internet Protocol (IP) este protocolul de bază pentru TCP şi UDP. Comunicaţiile IP sunt
nesigure, în mod neconectat, şi mesajele protocolului IP sunt datagrame.

Nesiguranţa protocolului IP se referă la faptul că datagramele pot fi pierdute, duplicate,


sau pot sosi într-o altă ordine decât cea în care au fost trimise. Nu se stabileşte o conexiune
înaintea începerii schimbului de datagrame.

Header-ul (antetul) unei datagrame IP, este prezentat în figura de mai jos:

Câmpurile header-ului unei Datagrame IP

- lungime header – reprezintă lungimea header-ului IP

- tipul serviciului – indică dacă această datagramă necesită sau nu o tratare specială.
- lungime totală – stabileşte lungimea datagramei, inclusiv a header-ul. Lungimea maximă
a unei datagrame IP este 65515 bytes. Dacă este necesar IP fragmentează în mod automat
mesajele ce trebuie transmise

- identificare – identifică în mod unic fiecare datagramă trimisă de un host

- flaguri şi fragment offset – sunt folosite în procesul de fragmentare a datagramelor

- timpul de viaţă – limitează numărul de rutere prin care datagrama poate trece

- protocol – specifică tipul mesajului (e.g. UDP sau TCP), acest câmp este util în procesul
de demultiplexare a datagramelor IP

- sumă de control header – suma de control a header-ului IP

- adresă IP sursă – originea datagramei IP

- adresă IP destinaţie – destinaţia datagramei IP

PROTOCOLUL U DP

User Datagram Protocol (UDP) – vezi si figura de mai jos – adaugă datagramelor IP
informaţii suplimentare astfel încât acestea să poată fi folosite de către procese; pentru
identificarea procesului destinaţie se folosesc numărele de port. Suma de control UDP se referă la
header-ul UDP, unele câmpuri ale header-ului IP, şi la date. Câmpul length se referă la numărul de
bytes al datagramei UDP inclusiv header-ul.
Datagramă UDP

UDP este doar o interfaţă care face datagramele IP folosibile de către procese diferite.
Deci UDP e la fel de nesigur ca şi IP, acest protocol negarantând că mesajele vor ajunge la
destinaţie. Mai multe despre specificaţiile UDP pot fi găsite în RFC 768.

PROTOCOLUL TCP

Transmission Control Protocol, sau TCP, oferă un flux de date sigur, orientat-
conexiune, şi full-duplex.. Foloseşte protocolul IP pentru transmiterea datelor.

TCP este protocolul, frecvent menţionat împreună cu IP, care este folosit pentru a
corecta problemele care pot apărea la transportul datelor. TCP preia informaţia pe care vrem să o
transmitem şi o sparge în bucăţi. El numerotează apoi fiecare piesă astfel încât cel care primeşte
datele să poată verifica şi să le pună înapoi în ordinea corectă. Pentru a transmite secvenţa de
numere prin reţea, el are un plic propriu cu informaţiile necesare. Acesta este, la rândul său, pus
în interiorul unui plic IP şi transmis reţelei. Odată pus într-un plic IP reţeaua poate să îl
transporte.

La recepţie, un pachet de programe TCP colectează plicurile, extrage datele şi le aşează în


ordinea corectă. Dacă unele plicuri lipsesc, el cere emiţătorului să le mai transmită odată. Când are
toată informaţia ordonată corect, el trece datele către acel program de aplicaţii care utilizează
serviciile sale.
Aceasta este o viziune puţin utopică a TCP-ului. În realitate pachetele nu numai că se
pierd, dar ele pot fi chiar alterate de către erorile de pe liniile telefonice pe care le tranzitează.
TCP se ocupă şi de această problemă. Când pune datele într-un plic, el calculează o sumă de
control. O suma de control este un număr care permite programului receptor să detecteze erorile
din pachet. Când pachetul ajunge la destinaţie, TCP-ul care face recepţia pachetelor, recalculează
suma de control şi o compară cu cea a emiţătorului. Dacă ele nu sunt egale, o eroare a apărut în
timpul transmiterii. TCP-ul care recepţionează va anula pachetul şi va cere retransmiterea lui.

Înainte ca două aplicaţii să transfere date via TCP, între acestea trebuie stabilită o
conexiune. Deoarece mesajele de control TCP nu sunt vizibile aplicaţiilor, acestea folosesc
fluxurile de date TCP similar cu apelurile I/O din UNIX. Siguranţa fluxului de date TCP e
asigurată prin:

- Datele sunt fragmentate în segmente.


TCP menţine un timer pentru fiecare segment trimis. Dacă nu primeşte o confirmare în timpul
indicat de timer atunci retransmite acel segment.

- Datele primite sunt confirmate.


Prin intermediul sumei de control se verifică corectitudinea datelor. Segmentele corupte sunt
eliminate iar emiţătorul neprimind confirmările în timpul indicat de timer le va retransmite.
Deoarece TCP se bazează pe datagramele IP în realizarea schimbului de date, şi acestea pot sosi
în altă ordine decât cea în care au fost trimise, TCP resecvenţionează datele în cazul în care e
necesar.

- TCP detectează şi elimină duplicatele datagramelor IP.


Controlul fluxului de date e realizat de TCP: fiecare punct final de comunicaţie deţine o mulţime
finită de date care sunt expediate până sunt confirmate de către cealaltă parte (acest procedeu se
numeşte „fereastră glisantă“).
Headerul TCP

Header-ul TCP, prezentat în figura de mai sus, conţine cel puţin 20 de octeţi. Ca şi în
cazul datagramelor UDP, segmentele TCP conţin numerele de port ale proceselor sursă şi
destinaţie. Împreună cu adresele IP sursă şi destinaţie acestea identifică în mod unic fiecare
conexiune.

Câmpul număr de secvenţă – identifică poziţia acestei secvenţe de date în segment.

Număr de confirmare – coţine numărul următoarei secvenţe de date pe care emiţătorul


confirmării aşteaptă să o primească.

Lugime header – lungimea header-ului TCP.

Se utilizează diferite flaguri (biti) pentru stabilirea conexiunii şi controlul informaţiilor de


stare. Dimensiunea ferestrei glisante indică modulului TCP de la recepţie numărul de octeţi pe care
emiţătorul poate să îl accepte. În mod normal, dimensiunea ferestrei glisante este de câteva mii de
octeţi. Suma de control TCP include datele TCP în calcule. TCP cere ca emiţătorul să calculeze
suma de control şi să o includă în acest câmp. Modulul de recepţie trebuie să verifice sumele de
control când primeşte datele. Pointerul de urgenţă specifică poziţia unui octet în zona de date TCP.
Scopul său este de a atenţiona modulul TCP receptor că există date urgente şi de a indica poziţia
acestora.

Mai multe informaţii despre specificaţiile TCP pot fi găsite în RFC 793.

Pentru a garanta siguranţa şi secvenţialitatea pentru fluxul de octeţi, TCP foloseşte


confirmări (monitorizate de timere) şi sume de control.

IP UDP TCP

orientat-conexiune da nu da

numere de port nu da da

sume de control nu opt. da

confirmări nu nu da

timeout şi retransmisii nu nu da

detecţia duplicatelor nu nu da

secvenţiere nu nu da

controlul fluxului nu nu da

O comparaţie între protocoalele IP, UDP, şi TCP

M O D E L E D E C A L C U L D I S T R I BU I T

Modelul Client/Server

În cadrul modelului client/server două sau mai multe procese, eventual rulând pe maşini
diferite, cooperează în realizarea unui anumit task. Schema de comunicare este următoare: un
proces (numit client) trimite o cerere (cere un serviciu) către alte procese (numite servere). Serverele
vor transmite un anumit răspuns către client. Aceste interacţiuni sunt ilustrate în figura următoare.
Modelul Client/Server

Există două tipuri de servere:

- servere concurente care pot rezolva mai multe cereri simultan, şi

- servere iterative care pot rezolva o singură cerere la un moment dat.

Serverele concurente sunt folosite mai ales atunci când răspunsul nu poate fi transmis
înapoi imediat sau când trebuie realizate comunicaţii suplimentare cu clientul. De obicei serverele
concurente folosesc protocoale de comunicaţie orientate conexiune. Ele sunt implementate prin
intermediul proceselor (via apelul fork() in sistemele UNIX, in limbajul C standard) sau al firelor
de execuţie (thread-uri, in sisteme de operare sau limbaje care permit aceasta). Serverele iterative
sunt ideale în cazul în care cererile pot fi rezolvate rapid iar răspunsul este scurt. În mod normal
sunt construite cu ajutorul protocoalelor neorientate-conexiune.
Un scenariu de interacţiune Client/Server

Un client este o parte a aplicaţiei care este rulată de către utilizator. Serverele, în mod
normal, sunt demoni care sunt lansaţi în execuţie la boot-area sistemului, sau când soseşte o cerere
către acel serviciu. Odată lansaţi în execuţie demonii rămân în memorie până la reboot-area
sistemului. Cele mai multe servere petrec majoritatea timpului în aşteptarea cererilor pe care sunt
capabile să le rezolve. Este posibil ca procesele client şi server să ruleze pe acelaşi computer, dar
acest lucru nu este necesar dacă cele două procese folosesc facilităţile oferite de reţeaua de
comunicaţie.
PARTEA 8
A S P E C T E P R AC T I C E
L E G AT E D E I N T E R N E T

SISTEMUL DE NUMIRE A DOMENIILOR

Destul de devreme, s-a realizat că adresele sunt bune pentru comunicarea dintre maşini,
dar şi că oamenii preferă nume. Este dificilă discuţia despre Internet folosind adrese numerice,
dar şi mai greu sunt de ţinut minte. De aceea calculatoarelor de pe Internet li s-au dat nume
pentru uşurinţa folosirii lor, de către utilizatorii umani.

La început, când Internetul era o organizaţie nu prea dezvoltată, utilizarea numelor era
uşoară. NIC-ul (Network Informaţion Center) ţinea un registru (un fisier denumit hosts) pe care îl
actualiza mereu. Se putea trimite un formular, electronic desigur, şi NIC îl adăuga la lista de nume
şi adrese pe care o întreţinea. Acest fişier numit fişierul de calculatoare gazdă, era distribuit regulat
către fiecare maşină gazdă de pe reţea. Numele erau cuvinte simple, fiecare alese pentru a fi unice.
Dacă cineva utiliza un nume, calculatorul îl căuta în fişier şi îl substituia cu adresa
corespunzătoare.

Din nefericire, când Internetul s-a răspândit şi a crescut, tot astfel s-a întâmplat şi cu acel
fişier. Exista o întârziere semnificativă în obţinerea unui nume deja înregistrat şi devenise dificil
de găsit nume care nu mai fuseseră încă folosite. De asemenea, se pierdea prea mult timp în reţea
pentru a distribui acest fişier mare către fiecare maşină care era cuprinsă în acesta. Era clar că era
nevoie de un sistem distribuit, conectat direct la un sistem central care să influenţeze în bine rata
de schimb a fişierelor. Acest sistem este numit Sistemul de Numire a Domeniilor sau DNS
(Domain Name System).

DNS este o metodă de administrare a numelor prin trecerea către grupuri diferite a
responsabilităţii pentru subseturile care formează acest nume. Fiecare nivel în acest sistem este
numit domeniu. Domeniile sunt separate prin puncte:

• ux.cso.uiuc.edu

• nic.ddn.mil
• yoyodyne.com

• fenrir.infoiasi.ro

Dacă citim un astfel de nume, fiecare domeniu pe care îl întâlnim este mai mare decât cel
precedent. Pentru primul nume (ux.cso.uiuc.edu), ux este numele calculatorului gazdă. Numele
pentru acel calculator este creat şi întreţinut de către grupul cso. Departamentul cso este o parte a
Universităţii Ilinois din Urbana Champaign (uiuc). Uiuc este o porţiune din grupul de instituţii de
educaţie (edu) – universitati, institute de cercetare. Deci domeniul edu conţine toate calculatoarele
din institutele educaţionale ale SUA, domeniul uiuc.edu conţine toate calculatoarele de la Univ.
Ilinois şi aşa mai departe.

Fiecare grup poate crea sau schimba tot ceea ce există în interiorul său. Dacă uiuc decide
să creeze un alt grup numit ncsa, el poate face asta fără să ceară permisiunea nimănui. Tot ce
trebuie să facă este să adauge noile nume în partea sa din baza de date mondială, iar mai devreme
sau mai târziu toţi cei care au nevoie să afle vor şti de noul nume (nsca.uiuc.edu). Similar, cso poate
cumpăra un nou calculator, să-i dea un nume şi să-l adauge în reţea fără să ceară permisiunea
nimănui. Dacă fiecare grup de la edu în jos va respecta regulile şi vor fi siguri că numele pe care le
dau sunt unice, atunci fiecare două sisteme de oriunde din Internet nu vor avea acelaşi nume.

Similar, pentru numele simbolic fenrir.infoiasi.ro.

Este uşor să ne dăm seama de unde vin numele şi domeniile dintr-o organizaţie ca
universitatea sau o companie. Domeniile de la cel mai înalt nivel (ca edu) au fost create atunci
când a fost inventat sistemul domeniilor. La început, cele mai înalte nivele au fost în număr de
şase:

Domeniul Utilizare

Com pentru organizaţii comerciale (www.amazon.com)

Edu organizaţii educaţionale (www.gmu.edu)

Gov organizaţii guvernamentale, nemilitare (whitehouse.gov)

Mil organizaţii militare (navy.mil)

Org alte organizaţii (www.w3.org)

Net Resurse pentru reţea (internic.net)


Când Internet a devenit o reţea internaţională, a fost necesară o modalitate de a da
celorlalte ţări responsabilitatea pentru propriile nume. Acum există un set de domenii notate cu
două litere (conform codului rutier), care corespund domeniilor de nivel cel mai înalt, pentru ţări.
De exemplu .ro pentru Romania, .fr pentru Franta, .jp pentru Japonia sau chiar .us pentru USA.

Când se foloseşte un nume ca fenrir.infoiasi.ro, calculatorul trebuie să îl transforme într-o


adresa. Pentru aceasta el cere ajutorul serverelor DNS, începând de la dreapta spre stânga
numelui. Pentru început, el cere serverului local DNS să caute adresa. În acest moment sunt trei
posibilităţi:

• Serverul local ştie adresa, pentru că adresa este în porţiunea din baza de date mondială a
acestui server

• Serverul local ştie adresa pentru că altcineva a întrebat recent de aceeaşi adresă

• Serverul local nu cunoaşte adresa, dar ştie cum să o afle.

Software-ul serverului contactează un server rădăcină. Acesta este serverul care ştie
adresele serverelor pentru zona (ro) nivelului cel mai înalt (cel din dreapta). El cere serverului
rădăcină adresa calculatorului responsabil cu zona infoiasi.ro. Programul contactează apoi acel
calculator şi îi cere adresa serverului fenrir. În sfârşit, el contactează acea maşină şi primeşte adresa
lui fenrir, calculatorul gazdă care a fost scopul acestei aplicaţii.

În concluzie, avantajul real al DNS este că el împarte giganticul Internet într-un mănunchi
de piese mai uşor de stăpânit. Deşi sunt sute de mii de calculatoare ele au un nume; iar numele
sunt organizate într-o manieră convenabilă, făcând mai uşor pentru utilizator de ţinut minte cele
de care are nevoie.
S E RV I C I I D E BA Z Ă Î N I N T E R N E T

Conectarea la distanţă

Telnet este protocolul Internetului de conectare la distanţa. El ne permite ca de la o


tastatură legată la un calculator să ne conectăm la un alt calculator aflat la distanţă. Conectarea se
poate face la o maşină care se află în aceeaşi cameră, în acelaşi campus, sau într-un colţ îndepărtat
al lumii. Atunci când suntem conectaţi e ca şi cum tastatura ar fi legată direct la acel calculator.
Putem accesa oricare din serviciile pe care acea maşină le oferă pentru terminalele ei locale. Putem
rula o sesiune interactivă normală (conectarea la sistem, executarea de comenzi) sau putem avea
acces la o mulţime de servicii speciale: putem citi un catalog al unei biblioteci, să accesăm un text
dintr-un ziar sau să profităm de multe alte servicii care sunt oferite de diferite sisteme din reţea.

Deşi există un număr mare de comenzi, având un număr şi mai mare de subcomenzi,
doar câteva sunt utilizate în general:

close
Termină o conexiune care exista deja sau a fost creată. Ea deconectează imediat
utilizatorul de la sistemul aflat la distanţă; pate ieşi şi din Telnet dacă am specificat numele
calculatorului direct în comanda telnet. Această comandă este folositoare dacă am intrat
intr-o legătură cu un alt calculator şi vrem să ieşim de acolo.

open nume
Încearcă sa creeze o conexiune cu maşina indicată. Este necesar numele sau adresa
maşinii. Majoritatea programelor Telnet vor cere explicit un nume de maşină dacă acesta
nu este specificat. Reţinem că trebuie să dăm comanda close pentru a închide o conexiune
existentă înainte de a deschide o alta nouă.

set echo
Activează sau dezactivează ecoul local. Ecoul este procesul prin care caracterele pe care
le-am tastat apar pe ecran. De obicei, calculatorul aflat la distanţă este responsabil cu
trimiterea caracterelor tastate înapoi către terminalul nostru după ce le-a recepţionat.
Acest lucru se numeşte ecou la distanţă şi este considerat mai sigur pentru că atunci poţi
şti dacă sistemul aflat la distanţă a recepţionat corect ceea ce am tastat. Ecoul local
înseamnă că afişarea, pe ecran, a ceea ce tastăm, este responsabilitatea calculatorului local.
Deoarece ecoul la distantă este mai sigur Telnet începe cu ecoul local dezactivat.
Comanda set echo funcţionează ca un întrerupător.

Cum ştim când trebuie activat sau dezactivat ecoul local? Dacă ecoul este dezactivat şi el
ar trebui să fie activ, caracterele tastate nu vor afişate; nu vom vedea comenzile pe care le
trimitem sistemului aflat la distanţă, dar vom vedea rezultatul acestor comenzi. Dacă
ecoul local este activ şi el ar trebui să fie dezactivat, vom vedea fiecare caracter pe care îl
tastăm de două ori. În ambele cazuri soluţia este aceiaşi: se intră în linia de comandă şi se
tastează set echo.

set escape car


Atribuie caracterului escape (singurul caracter care nu poate fi transmis la distanţă de
Telnet) valoarea caracterului specificat. E important ca acel caracter escape pe care l-am
ales să nu fie niciodată nevoie să îl folosim cât timp lucrăm în mod normal. Acest lucru
poate fi o problemă, multe programe atribuie acţiuni pentru aproape toate tastele.

quit
termină programul Telnet

^z (CTRL+Z)
Suspendă temporar sesiunea Telnet pentru a permite altor comenzi să fie executate pe
sistemul local. Conexiunile şi alte opţiuni rămân neschimbate la revenirea în program.

Transferul fişierelor: ftp

Adeseori, vom găsi informaţie pe Internet pe care nu dorim să o examinăm de pe un


sistem aflat la distanţă având nevoie de o copie.

Programul ftp se numeşte aşa după protocolul de aplicaţie pe care îl foloseşte: File
Transfer Protocol (FTP). Aşa cum spune şi numele, sarcina protocolului este să transfere fişiere
de la un calculator la altul. Nu contează unde sunt situate cele două calculatoare, cum sunt
conectate şi nici chiar dacă folosesc acelaşi sistem de operare.

Vom prezenta în continuare cele mai folositoare comenzi ftp


ascii
Intră în modul ASCII, pentru transferarea fişierelor text.

binary

Intră în modul binar, pentru transferarea fişierelor binare.

cd director_la_distanţă

Schimbă directorul de lucru pe maşina aflată la distanţă

close

Termină sesiunea ftp cu o anumită maşină şi se întoarce în modul comandă ftp. După
close, putem introduce open pentru a deschide o conexiune cu un nou sistem, sau quit
pentru a ieşi din ftp.

delete nume_fişier

Şterge fişierul numit de pe maşina aflată la distanţă.

dir fişier_destinaţie
Oferă un listing complet al directorului curent de pe maşina aflată la distanţă. Fişier şi
destinaţie sunt ambele opţionale. fişier poate fi numele unui singur fişier sau o construcţie
de metacaractere. Listingul oferă toate numele de fişiere care satisfac specificaţia. Dacă
fişier este omis, listingul dă toate fişierele din directorul curent de pe maşina aflată la
distanţă. Destinaţia specifică unde va fi pus rezultatul. Dacă destinaţie este omis, apare
listingul pe ecran.

hash

Spune ftp-ului să tipărească un caracter diez (#) de fiecare dată când este transferat un
bloc de date, semnalându-ne vizual dacă datele au fost transferate.

help comandă

Afişează o bucată mică din documentaţia despre acea comandă.

lcd director

Schimbă directorul implicit de pe maşina locală în directorul numit

ls fişier_destinaţie
Oferă un listing scurt al directorului de pe maşina aflată la distanţă. Argumentele sunt la
fel ca la dir.

mget listă_fişiere

Transferă mai multe fişiere de pe maşina accesată

mput listă_fişiere

Pune mai multe fişiere pe maşina accesată

open nume_maşină

Realizează conexiunea cu maşina numită. Este folositoare dacă vrem să ne conectăm la un


nou sistem după ce am transferat fişiere de pe un alt sistem.

prompt

Cu mget şi mput, comanda prompt spune ftp-ului să ceară confirmarea înaintea


transferării fiecărui fişier. Este folositor dacă vrem să fim siguri că nu transferăm fişiere de
care nu avem nevoie

pwd

Afişează numele directorului curent de pe maşina accesată.

quit

Închide conexiunea, dacă există una, şi iese din ftp.

user nume_utilizator

Trimite numele de utilizator către maşina aflată la distanţă pentru conectare. Este
folositoare dacă am introdus numele de utilizator sau parola incorect. Decât să închidem
conexiunea şi să deschidem alta nouă, putem încerca din nou introducând comanda user.
Sistemul de poştă electronică

Preliminarii

Este unul din cele mai larg răspândite servicii Internet. Pornind iniţial ca un serviciu
simplu capabil să mute mesaje text (şir de caractere) de pe un calculator pe altul şi să-l adauge la
un fişier numit căsuţa poştală, e-mail a cunoscut o dezvoltare concomitentă cu dezvoltarea
reţelelor de comunicaţie.

În general, un mesaj e-mail este un text împreună cu informaţiile referitoare la destinatar,


expeditor etc., informaţii constituite în aşa-numitul header al mesajului. De obicei, header-ul unui
mesaj este generat de aplicaţia e-mail folosită. Iată în cele ce urmează o listă a câmpurilor care
formează header-ul unui mesaj:

• From - conţine adresa de e-mail a "expeditorului"(utilizatorul care trimite mesajul);

• To - conţine adresa e-mail a destinatarului; aceasta trebuie sa fie cunoscută de către


expeditorul mesajului;

• Subject - este o descriere în câteva cuvinte a mesajului - nu este obligatorie;

• Date - este data la care mesajul a fost transmis - este comletată automat de
programul client;

• Replay-to - este adresa la care expeditorul doreşte să primească răspunsul la mesajul


respectiv.(este util atunci când acesta deţine mai multe căsuţe poştale şi doreşte ca răspunsurile să
fie colectate într-una singură);

• Message-ID - un şir de identificare generat de agentul de transport la trimiterea


mesajului. Acest identificator este unic pentru fiecare mesaj;

• Received - fiecare calculator care primeşte mesajul şi îl transmite mai departe adaugă
câte un astfel de câmp. În felul acesta se poate reconstitui drumul urmat de mesaj de la expeditor
la destinatar;

• Cc (carbon copy - copie la indigo) - utilizatorii ale căror adrese sunt trecute în
acest câmp vor primi câte o copie a mesajului;
• Bcc (blind carbon copy) - sunt copii trimise unei liste de cititori, la fel ca şi copiile
indigo obişnuite (Cc). Totuşi linia de antet care listează destinatarii este ştearsă automat din
mesajul trimis. De aceea , nici unul dintre destinatarii mesajului nu va şti cine a mai primit "copii
la indigo invizibile". Din moment ce nu există nici o înregistrare în mesajul recepţionat că aceste
copii au fost trimise, acţiunile ulterioare care folosesc date din antet, nu îi vor include şi pe aceşti
destinatari;

• Fişierele semnătură .signature - sunt o cale de adăugare a unor informaţii


suplimentare la mesajele trimise. Ele sunt adesea folosite pentru a include informaţii despre
utilizator şi cum poate fi el contactat

Singurul indiciu pe care îl are sistemul de e-mail pentru a livra un mesaj este adresa
destinatarului. Acesta este de forma nume_utiliator@domeniu. Numele utilizatorului este
numele contului pe care acel utilizator îl deţine sau, mai rar, poate fi un alias al utilizatorului,
definit pe maşina acestuia. Într-o reţea în care conturile utilizator sunt dispuse pe mai multe
maşini se pot specifica adrese de e-mail care să ascundă numele maşinii şi astfel din exterior să
apară adrese cu acelaşi domeniu pentru toţi utilizatorii.

Facilităţi e-mail generale

La primul contact cu sistemul e-mail utilizatorul va compune (Compose) un mesaj.


Câmpul To: poate conţine mai multe adrese de destinatari. Este sarcina utilizatorului să-şi
actualizeze lista de adrese de e-mail a utilizatorilor cu care va schimba mesaje. Dar nu este
singurul mod de a trimite mesaje:

• Reply - Odată un mesaj primit el poate fi returnat expeditorului, eventual în


prealabil modificat. Mesajul returnat poate conţine corpul mesajului original, sau nu. Mesajul
original poartă numele de quoted text. Returnarea poate fi făcută doar expeditorului (Reply to
sender) sau expeditorului şi tuturor celor care au primit mesajul (Reply to all recipients).

• Forward - mesajul primit pate fi "trimis mai departe" unor alţi utilizatori (care nu
se aflau în lista destinatarilor mesajului original).

Mesajele sunt organizate în colecţii numite foldere. Mesajele noi apar colecţionate într-un
folder numit de cele mai multe ori inbox (căsuţă de intrare). Dacă sistemul local de e-mail
permite stocarea temporară a mesajelor care urmează să fie trimise, aceasta poartă numele de
outbox (căsuţă de ieşire). De asemenea, odată un mesaj compus şi trimis, o copie a acestuia
rămâne stocată într-un folder numit sent-mail.
Atunci când mesajul electronic nu poate fi distribuit, expeditorul primeşte o notificare în
acest sens, care explică şi cauzele insuccesului. Există trei motive obişnuite pentru care poşta
electronică eşuează:

• Sistemul de poşta electronică nu poate găsi maşina destinatarului - "Host


unknown" (acest lucru înseamnă că domeniul din adresa destinatarului este inexistent);

• Destinatarul nu este cunoscut de acea maşină - "Unknown user" (domeniul este


corect, dar pe maşina respectivă nu se afla un utilizator cu numele specificat în mesaj);

• Programul poate găsi atât maşina cât şi destinatarul, dar nu poate transmite
mesajul. Iată câteva motive posibile:

• reţeaua poate avea erori, făcând imposibil contactul cu maşina aflată la


distanţă;

• sistemul aflat la distanţă poate fi "mort" (poate avea de exemplu,


probleme hardware);

• sistemul aflat la distanţă poate fi greşit configurat.

Agenţi de transport pentru poşta electronică

Cu toate că utilizatorul serviciului e-mail interacţionează nemijlocit doar cu clientul e-mail


(programul care permite în esenţă trimiterea şi primirea mesajelor ), credem că se impun câteva
specificaţii despre protocoalele care asigură transferul mesajelor de pe un calculator pe altul.
Aceste protocoale sunt protocoale la nivelul aplicatie in cadrul stivei de protocoale TCP/IP.

• SMTP (Simple Mail Transport Protocol) - este protocolul consacrat de


transport e-mail în Internet. În general, pentru trimiterea unui mesaj între două maşini din
Internet se realizează o conexiune de tip SMTP care constă într-o etapă de autentificare şi
transferul efectiv. Din punctul de vedere al utilizatorului singura interacţiune cu acest protocol
constă în specificarea numelui server-ului SMTP. Acest nume se obţine de la administratorul de
sistem.

• POP (Post Office Protocol) - este un protocol care lucrează pe principiul unei
căsuţe poştale: programul client se conectează din timp în timp la serverul POP. La o conexiune
sunt trimise mesajele din outbox-ul clientului şi sunt aduse mesaje noi de pe pop-server.
Autentificarea se realizează la nivel de utilizator, cu parolă. Numele POP-server-ului este de
asemenea furnizat de administratorul de sistem, la fel ca şi numele contului POP.

Sistemul news (ştiri în reţea)

Stirile în reţea sunt echivalentul Internet al unui grp de discuţii. Acestea permit
utilizatorului să consulte articole publicate (posted) în Internet, fiind grupate după tematică. Ştirile
în reţea grupează discuţiile sub un set larg de titluri, numite grupuri de ştiri (newsgroups). Un
program de citire a news-urilr prezintă aceste discuţii într-o modalitate ordonată. În fiecare grup de
ştiri exista mai multe discuţii despre anumite subiecte, astfel că grupurile sunt organizate ierarhic,
având numele celui mai larg grup la început, urmat de un număr arbitrar de subgrupuri. Numele
fiecărui subgrup este separat de grupul părinte şi de subgrupurile sale printr-un punct ".".

Majoritatea grupurilor de ştiri sunt parte a USENET, un set de grupuri considerate a fi


de interes global şi care este disponibil în toată lumea în mod gratuit. USENET nu este o reţea de
calculatoare, ci un set de reguli unanim acceptate pentru transferul ştirilor şi administrarea
grupurilor de ştiri. Reguli pentru folosirea, crearea şi ştergerea grupurilor au existat înainte de
Internet (USENET a precedat Internet-ul; în acele timpuri ştirile erau transmise prin conexiuni
telefonice folosind un protocol de transfer numit uucp – Unix to Unix Copy). Cele şapte categorii
mari de grupuri de ştiri sunt:

1. comp - calculatoare, informatică şi subiecte aflate în legătură cu acest domeniu.


Include informatica pură, surse de programe, informaţii despre sisteme software şi hardware, ca şi
subiecte de interes general.

2. news - grupuri interesate de reţeaua de ştiri şi de programe de ştiri. Include


subgrupuri importante ca news.newuser.questions (întrebări de la utilizatori noi) şi
news.announce.newusers (informaţii importante pentru noii utilizatori).

3. rec - aici se discută despre hobby-uri, activităţi recreaţionale şi despre artă.

4. sci - aici se discută despre cercetări şi programe ştiinţifice.

5. soc - grupuri care pun în discuţie probleme sociale.


6. talk - grupurile talk sunt un forum pentru dezbateri pe teme controversate.
Discuţiile tind să devină întortocheate şi fără rezultat.

7. misc - tot ce nu intră în categoriile de mai sus, sau intră în mai multe categorii.

Serverele pot avea şi grupuri de ştiri locale. Orice administrator poate crea oricâte grupuri
de ştiri doreşte, corespunzător intereselor utilizatorilor locali. Grupurile locale pot deveni cu
timpul grupuri globale cu acceptul larg al utilizatorilor. Astfel au apărut grupuri alternative (pe
lângă USENET). De exemplu:

• alt - grupuri care discută "moduri alternative de a vedea lucrurile". În unele din
aceste grupuri mesajele suferă de o incoerenţă evidentă;

• bionet - grupuri interesate de biologie;

• biz - discuţii referitoare la afaceri. Această ierarhie de grup de ştiri permite


trimiterea de reclame şi materiale de prospectare a pieţei; astfel de activităţi nu sunt permise în
alte grupuri;

• de - discuţii tehnice, recreaţionale şi sociale în limba germană.

• hepnet - discuţii de interes în principal pentru comunitatea celor interesaţi de


fizica energiilor înalte;

• relcom - diferite grupuri originale din fosta URSS (unele pot necesita programe
speciale pentru a afişa alfabetul chirilic).
RESURSE BIBLIOGRAFICE

• Sabin Buraga, Gabriel Ciobanu – Atelier de programare in retele de calculatoare,


Ed. Polirom, Iasi, 2001

• Arnaud Dufour - Internet, Computer Press Agora, Tg.Mures, 1997

• A.Tanenbaum - Retele de calculatoare, Computer Press Agora, Tg.Mures, 1996

• V.V.Patriciu et al. - Securitatea informatica în UNIX si Internet, Ed.Tehnica,


Bucuresti, 1998

• Mihai Jalobeanu - Acces in Internet, Ed. Promedia Plus, Cluj-Napoca, 1996

• Douglas E. Comer and David L. Stevens - Internetworking with TCP/IP Vol. III,
Client-Server Programming and Applications BSD Socket Version, Prentice Hall, 1996

• J. Postel (Ed.), Internet Protocol - DARPA Internet Program Protocol Specification,


http://cwis.auc.dk/rfc/rfc/rfc791.html

• J. Postel, User Datagram Protocol,


http://cwis.auc.dk/rfc/rfc/rfc768.html

• J. Postel (Ed.), Transmission Control Protocol - DARPA Internet Program Protocol


Specification, http://cwis.auc.dk/rfc/rfc/rfc793.html

• * * - RPC Remote Procedure Call Specification – Sun Microsystems Inc.


http://cwis.auc.dk/rfc/rfc/rfc1057.html

• * * - Requests For Comments (RFCs):


ftp://ftp.internic.net/rfc/
ANEXA - Interfaţa socket

1.Crearea unui socket utilizând socket()

2.Atribuirea unui nume pentru un socket - bind()

3.Specificarea unui socket pe maşina de la distanţă - connect()

4.Închiderea unui socket – close()

5.O detaliere: conexiuni Client-Server

6.Deschiderea unui socket numai pentru ascultare - listen()

7.Stabilirea conexiunii de partea server-ului - accept()

8.Transfer de date prin socket-uri conectate - send() and recv()

Socketurile sunt o facilitate generalizată a reţelelor introdusă pentru prima dată în


BSD 4.1c şi mai apoi perfecţionată în versiunea curentă odată cu BSD 4.2.
Socketurile sunt disponibile în majoritatea versiunilor UNIX în prezent (Interfaţa
straturilor de transport (TLI) se găseşte în alternativa System V). Socketurile
permit comunicarea între două procese diferite de pe aceeaşi maşină sau de pe
maşini diferite. Se utilizează în mod implicit protocoalele internet pentru
comunicarea între maşini; alte protocoale cum ar fi DECnet pot fi utilizate acolo
unde sunt disponibile.
Din punctul de vedere al programatorului, un socket arată şi se comportă
aproximativ ca un descriptor de fişier de nivel coborât. Aceasta deoarece comenzi
cum ar fi read() şi write() lucrează cu socketurile în aceeaşi manieră în care
lucrează cu fişiere şi pipe-uri. Diferenţele dintre socketuri şi descriptorii normali de
fişiere apar la crearea unui socket şi la o serie de operaţiuni speciale de control al
socketurilor. Aceste operaţiuni sunt diferite între socketuri şi descriptori normali de
fişiere datorită complexităţii suplimentare la stabilirea conexiunilor în reţea
comparativ cu accesul normal la disc.
Pentru majoritatea operaţiilor ce utilizează socketuri, rolurile clientului şi
serverului trebuiesc atribuite. Un server este un proces care realizează anumite
funcţii la cererea unui client. Aşa cum se va observa în această discuţie, rolurile nu
sunt simetrice şi nu pot fi inversate fără un oarecare efort.
Această descriere a utilizării socketurilor parcurge trei stadii:
Utilizarea socketurilor intr-un mod neconectat sau mod datagramă între procese
client şi server aflate pe aceeaşi maşină. În această situaţie, clientul nu stabileşte în
mod explicit o conexiune cu serverul. Clientul, bineînţeles, trebuie să cunoască
adresa serverului. Serverul, în schimb, pur şi simplu aşteaptă un mesaj să apară.
Adresa clientului este unul dintre parametrii cererii de recepţionare a mesajului şi
este utilizată de către server pentru a răspunde.
Utilizarea socketurilor în mod conectat între un client şi un server pe aceeaşi
maşină. În acest caz, rolurile clientului şi serverului sunt mai profund întărite în
sensul că socketul este stabilit şi utilizat. Acest model este adesea denumit model
client-server orientat pe conexiune.
Utilizarea socketurilor într-un mod conectat între client şi server pe maşini
diferite. Aceasta este extensia cazului de reţea descrisă în stadiul 2 de mai sus.
Modul neconectat sau datagramă între client şi server pe maşini diferite nu este
discutat în mod explicit aici. Utilizarea acestuia poate fi dedusă din prezentările
făcute la stadiile 1 şi 3.

1.Crearea unui socket utilizând socket()


#include <sys/types.h>
#include <sys/socket.h>

int socket(int af, int type, int protocol)


socket() este foarte asemănătoare cu socketpair() cu excepţia faptului că numai un
socket este creat în loc de două. Aceasta este cel mai des utilizată dacă procesul cu
care doriţi să comunicaţi nu este un proces fiu. Câmpurile af, type şi protocol sunt
utilizate exact ca şi în apelul sistem socketpair()
În caz de succes, se returnează un descriptor de fişier ataşat socketului. În caz de
eroare, se returnează –1 iar errno descrie problema.
• AF_UNIX este utilizat pentru comunicaţii între procese aflate pe un singur
sistem; AF_INET pentru comunicaţii între procese aflate pe aceeaşi maşină
sau pe maşini diferite utilizând protocoalele standard DARPA
(IP/UDP/TCP).

Tipul socketului se referă la “stilul” comunicării. Cele mai utilizate două valori
includ:
• SOCK_STREAM: un stream dedate fără limite ale înregistrărilor. Livrarea
într-un mediu de reţea este garantată; dacă livrarea este imposibilă,
expeditorul primeşte un indicator de eroare.
• SOCK_DGRAM: un stream de înregistrări, fiecare de o dimensiune dată.
Livrarea într-un mediu de reţea nu este garantată.

O valoare 0 a protocolului este foarte des întâlnită. Aceasta permite


sistemului să aleagă primul protocol permis cu perechea de valori specificate
pentru familie şi tip.

2.Atribuirea unui nume pentru un socket - bind()


#include <sys/types.h>
#include <sys/socket.h>

int bind(int s, struct sockaddr *name, int namelen)


Utilizând socketpair(), socketurile pot fi partajate numai între procese
părinte şi fiu sau între fii aceluiaşi părinte. Cu un nume ataşat socketului, orice
proces de pe sistem în poate descrie sau utiliza.
Într-un apel la bind(), s este descriptorul de fişier pentru socket, obţinut din apelul
la socket() . name este un pointer la o structură de tip sockaddr. Dacă familia de
adrese este AF_UNIX (aşa cum se specifică la crearea socketului) structura este
definită după cum urmează:
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
name.sa_family trebuie să fie AF_UNIX. name.sa_data trebuie să conţină cel mult
14 octeţi dintr-un nume de fişier care va fi ataşat socketului. namelen dă lungimea
reală a numelui, adică lungimea conţinutului iniţializat al structurii de date.
În caz de succes se returnează valoare 0. În caz de eroare se returnează valoarea –1,
cu descrierea erorii în errno.
Exemplu:
struct sockaddr name;
int s;
name.sa_family = AF_UNIX;
strcpy(name.sa_data, "/tmp/sock");
if((s = socket(AF_UNIX, SOCK_STREAM, 0) < 0)
{
printf("socket create failure %d\n", errno);
exit(0);
}
if (bind(s, &name, strlen(name.sa_data) +
sizeof(name.sa_family)) < 0)
printf("bind failure %d\n", errno);

3.Specificarea unui socket pe maşina de la distanţă - connect()


#include <sys/types.h>
#include <sys/socket.h>

int connect(int s, struct sockaddr *name, int namelen)


Apelul bind() permite numai specificarea unei adrese locale. Pentru
specificarea capătului de la distanţă a unei conexiuni de adrese se va utiliza apelul
connect(). În apelul la connect(), s este descriptorul de fişier pentru socket. Name
este un pointer la o structură de tip sockaddr:
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
Ca şi în cazul apelului sistem bind(), name.sa_family trebuie să fie
AF_UNIX. name.sa_data trebuie să conţină maximum 14 octeţi dintr-un nume de
fişier care va fi atribuit socketului. namelen dă lungimea reală a numelui.
Returnarea valorii 0 indică succesul, în timp ce o valoare de -1 indică eşecul, cu
descrierea erorii dată de errno.
O mostră de fragment de cod:
struct sockaddr name;

name.sa_family = AF_UNIX;
strcpy(name.sa_data, "/tmp/sock");

if (connect(s, &name, strlen(name.sa_data) +


sizeof(name.sa_family)) < 0) {
printf("connect failure %d\n", errno);
}

4.Închiderea unui socket – close()


#include <stdio.h>

void close(int s).

Apelul I/O close() va închide descriptorul socketului s exact la fel cum închide
orice descriptor de fişier deschis.
Exemplu - sendto() şi recvfrom()

/* receiver */
#include <sys/types.h>
#include <sys/socket.h>

struct sockaddr myname;


struct sockaddr from_name;
char buf[80];

main()
{
int sock;
int fromlen, cnt;

sock = socket(AF_UNIX, SOCK_DGRAM, 0);


if (sock < 0) {
printf("socket failure %d\n", errno);
exit(1);
}

myname.sa_family = AF_UNIX;
strcpy(myname.sa_data, "/tmp/tsck");

if (bind(sock, &myname, strlen(myname.sa_data) +


sizeof(name.sa_family)) < 0) {
printf("bind failure %d\n", errno);
exit(1);
}

cnt = recvfrom(sock, buf, sizeof(buf),


0, &from_name, &fromlen);
if (cnt < 0) {
printf("recvfrom failure %d\n", errno);
exit(1);
}

buf[cnt] = '\0'; /* assure null byte */


from_name.sa_data[fromlen] = '\0';

printf("'%s' received from %s\n",


buf, from_name.sa_data);
}

/* sender */
#include <sys/types.h>
#include <sys/socket.h>

char buf[80];
struct sockaddr to_name;

main()
{
int sock;

sock = socket(AF_UNIX, SOCK_DGRAM, 0);


if (sock < 0) {
printf("socket failure %d\n", errno);
exit(1);
}

to_name.sa_family = AF_UNIX;
strcpy(to_name.sa_data, "/tmp/tsck");

strcpy(buf, "test data line");

cnt = sendto(sock, buf, strlen(buf), 0, &to_name,


strlen(to_name.sa_data) + sizeof(to_name.sa_family));
if (cnt < 0) {
printf("sendto failure %d\n", errno);
exit(1);
}
}

5.O detaliere: conexiuni Client-Server


Socketurile pot fi utilizate pentru a scrie aplicaţii client-server utilizând o tehnică
client-server orientată pe reţea. Unele caracteristici ale aceste tehnici includ:

• Serverul poate manipula multiple cereri client pentru conexiuni şi servicii.


• Serverul răspunde oricăror cereri client independent de toţi ceilalţi clienţi
• Un client ştie cum să stabilească o conexiune cu serverul.

Conexiunea client-server, odată stabilită, rămâne validă până ce fie clientul


fie serverul o întrerup în mod explicit, cam ca o conexiune telefonică fără
probleme. Socketul utilizat pentru această conexiune se numeşte un socket
orientat pe conexiune.
Tipul socketului este specificat ca SOCK_STREAM. În consecinţă, procesul care
primeşte un mesaj prelucrează acest mesaj după următoarele reguli:

• Datele transmise nu au limite.


• Toţi octeţii dintr-un mesaj primit trebuie citiţi înainte de prelucrarea
următorului mesaj.
• Octeţii dintr-un mesaj primit pot fi citiţi într-o structură de control cu
program buclă deoarece nu sunt pierduţi octeţi de date.
• Serverul va crea un proces fiu cu ajutorul fork() la stabilirea unei conexiuni
client.
• Acest proces fiu este proiectat să comunice cu exact un proces client.
• Procesul fiu server execută serviciile cerute pentru clientul său conectat.
• Procesul fiu server se termină când serviciul cerut a fost îndeplinit.
Funcţiile listen() şi accept() permit serverului să asculte cererile de servicii.. read()
şi write() pot fi utilizate de client şi de server pentru a trimite/primi mesaje; send()
şi recv() pot fi utilizate de asemenea.

6.Deschiderea unui socket numai pentru ascultare - listen()


#include <sys/types.h>
#include <sys/socket.h>

int listen(int s, int backlog)


listen stabileşte socket-ul ca un capăt pasiv a unei conexiuni. Nu suspendă execuţia
procesului.
Nu pot fi trimise mesaje prin acest socket. Pot fi recepţionate mesaje.
s este descriptorul de fişier asociat socket-ului creat folosind apelul de sistem
socket().
backlog este mărimea cozii de aşteptare a cererilor în timpul în care server-
ul este ocupat cu o cerere a unui serviciu. Sistemul curent impune maximul la 5.
0 este returnat în caz de succes, -1 în caz de eroare şi errno indică problema.
Exemplu:
#include <sys/types.h>
#include <sys/socket.h>

int sockfd; /* socket file descriptor */


if(listen(sockfd, 5) < 0)
printf ("listen error %d\n", errno);

7.Stabilirea conexiunii de partea server-ului - accept()


#include <sys/types.h>
#include <sys/socket.h>

int accept(int sockfd, struct sockaddr *name, int *namelen)


Apelarea accept() stabileşte o conexiune client-server de partea server-ului.
(Cererea clientului se face utilizând apelul de sistem connect().) Server-ul trebuie
să aibe creat socket-ul folosind socket(), să aibe dat un nume folosind bind(), şi
stabilind coada de ascultare folosind listen().
sockfd este descriptorul de fişier al socket-ului returnat la apelul de sistem socket().
name este un pointer la o structură de tip sockaddr cum este descris mai jos
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
În cazul întoarcerii cu succes după apelul accept(), această structură va conţine
adresa de protocol a socket-ului clientului.
Zona de date la care indică namelen trebuie iniţializată la lungimea actuală a lui
name. În cazul întoarcerii cu succes după apelul accept(), zona de date la care
indică namelen va conţine lungimea actuală a adresei de protocol a socket-ului
clientului.
În caz de succes, accept() creează un nou socket cu aceleaşi familie, tip, şi protocol
ca sockfd. Descriptorul de fişier pentru acest nou socket este valoarea returnată de
accept(). Acest nou socket este folosit pentru toate comunicaţiile cu clientul.
Dacă nu există nici o cerere de conectare, accept() se va bloca până când cererea
unui client este pusă în coadă.
accept() va eşua mai ales dacă sockfd nu este un descriptor de fişier sau dacă tipul
socket-ului nu este SOCK_STREAM. În acest caz, accept() returnează valoarea -1
şi errno descrie problema.

8.Transfer de date prin socket-uri conectate - send() and recv()


Două apeluri de librărie pentru transferul datelor , numite send() şi recv(),
sunt disponibile dacă socket-urile sunt conectate. Ele corespund foarte îndeaproape
cu funcţiile read() and write() folosite pentru I/O la descriptori de fişiere obişnuiţi.
#include <sys/types.h>
#include <sys/socket.h>

int send(int sd, char *buf, int len, int flags)

int recv(int sd, char * buf, int len, int flags)


În ambele cazuri, sd este descriptorul de socket.
Pentru send(), buf indică spre un tampon ce conţine datele ce trebuie trimise,
len este lungimea datelor şi flags va fi de obicei 0. Valoarea returnată este numărul
de octeţi trimişi în caz de succes. Dacă eşuează, -1 este returnat şi errno descrie
eroarea.
Pentru recv(), buf indică la o zonă de date în care se vor copia datele recepţionate,
len este mărimea acestor date în octeţi, şi flags este de obicei 0 sau setat la
MSG_PEEK dacă datele recepţionate trebuie reţinute în sistem după ce este
recepţionat. Valoarea returnată este numărul de octeţi recepţionaţi în caz de succes.
Dacă eşuează, -1 este returnat şi errno descrie eroarea.

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