|
TCP/IP - implementare a modelului ISO-OSI
Dupa cum am spus si in articolul anterior: un internet (cu i mic) este o retea de retele. Cel mai cunoscut
internet este Internet-ul (cu I mare). Pentru a realiza comunicarea in Internet se foloseste suita de protocoale TCP/IP, prezentate, in numarul din iulie 1999, al revistei e-mail REPORT la rubrica Internet.
Modelul ISO/OSI reprezinta un model ideal de retea. In realitate implementarile retelelor respecta intr-o mai mare sau mai mica masura specificatiile acestui model. Suita TCP/IP foloseste doar cinci dintre nivelurile ISO/OSI.
Sa facem o scurta descriere a nivelurilor TCP/IP si a protocoalelor care le deservesc.
1. Nivelul fizic
Este identic cu nivelul fizic din modelul ISO/OSI, fiind compus din mediile de transmisie: cabluri, fibra optica,
legaturi radio, legaturi laser, infrarosu, etc. Acum cativa ani Internetul era mai mult text, in prezent este text si grafica, iar in viitor va fi cat mai mult multimedia (sunet si film). Asta inseamna ca nevoia de largime de banda a crescut si va creste continuu, cautand noi solutii pentru mediile de transmisie.
Majoritatea retelelor locale sunt realizate in conformitate cu normele elaborate de doua institutii: IEEE (Institute of Electrical and Electronics Engineers) si ANSI (American National Standards Institute). In acest sens au fost standardizate normele IEEE 802 care definesc, in principal, modul de utilizare a suportului de comunicatie, ocupandu-se de modul de interconectarea diferitelor dispozitive: calculatoare, terminale, imprimante, plottere, telecopiatoare, echipamente de legatura cu alte retele, etc.
Reteaua de tip Ethernet (solutie adoptata de marea majoritate a retelelor locale) are ca protocol de acces CSMA (Carrier Sense Multiple Access) descris in standardul IEEE 802.3
2. Nivelul legatura de date
Controleaza schimburile de date intre nivelul fizic si nivelul retea, comunicand direct cu modulul IP de pe
nivelul retea. Cu alte cuvinte, nivelul legatura, 'ascunde' nivelului retea detaliile de implementare ale nivelului fizic (chiar daca se foloseste tehnologia Ethernet sau Token Ring). O aplicatie scrisa, folosind protocoalele TCP/IP va putea fi utilizata indiferent de tehnologia care sta la baza constructiei retelei. Acest nivel este reprezentat de placa de retea.
Pe acest nivel se afla protocoalele ARP si RARP. Protocolul ARP (Address Resolution Protocol) realizeaza translatarea adreselor IP in adrese ale nivelului legatura de date (la retele Ethernet au o dimensiune de 6 octeti). RARP (Reverse Address Resolution Protocol) este o varianta a protocolului ARP ce face conversia unei adrese a nivelului legatura de date in adresa IP.
Tot pe acest nivel se afla si o serie de protocoale utilizate pentru comunicatia dintre doua calculatoare pe linia telefonica standard. In acest caz se utilizeaza un modem iar comunicatia se realizeaza pe portul serial al calculatorului si nu pe placa de retea. Putem aminti protocoalele:
SLIP - Serial Line IP,
CSLIP - Compressed SLIP,
PPP - Point-to-Point Protocol.
3. Nivelul retea
Este reprezentat, in principal, de protocolul IP, un protocol fara conexiune (vezi articolul anterior). Pachetele IP
se mai numesc si datagrame. Se spune ca IP asigura o transmisie nefiabila a pachetelor de date. Sa vedem de ce este caracterizat IP a fi un protocol nefiabil.
IP considera fiecare pachet ca o entitate independenta, fara legatura cu alte pachete. Orice asociere intre pachetele IP trebuie sa fie tratata de nivelele superioare. Fiecare datagrama contine atat adresa calculatorului sursa cat si adresa calculatorului destinatie, astfel incat ea poate fi transmisa si rutata independent de celelalte. IP este nefiabil pentru ca nu garanteaza ajungerea la destinatie a datagramelor si nici daca continutul lor este corect. Nivelul IP verifica, totusi, o suma de control a propriilor antete (20 de bytes). Daca un antet IP nu este corespunzator, intregul pachet este anulat si nu mai este transmis nivelului superior, nivel care verifica toate datele continute de datagrama. Nivelul IP este responsabil cu rutarea pachetelor in Internet si cu o posibila fragmentare a datelor. Fragmentarea unui pachet este facuta de un Gateway, atunci cand pachetul este prea mare pentru a parcurge in continuare reteaua (depaseste valoarea MTU a retelei). Fragmentele rezultate sunt transmise in continuare ca pachete IP independente si sunt reasamblate la destinatie, formand datagrama initiala. Daca unul dintre fragmente este eronat sau pierdut se anuleaza intreaga datagrama.
Pe motiv ca IP nu garanteaza livrarea pachetelor de retea si nici nu realizeaza semnalizarea esecului atunci cand se pierd sau altereaza pachetele de date, s-a elaborat protocolul : ICMP (Internet Control Message Protocol). Chiar daca este considerat un protocol pe nivelul retea, utilizeaza tot IP pentru livrarea datelor.
Pe acest nivel se afla si IGMP (Internet Group Management Protocol - protocol de gestiune a grupurilor di Internet). si acesta se bazeaza pe IP pentru a transmite mesaje in retea.
4. Nivelul transport
Acest nivel este deservit, in principal de doua protocoale: UDP si TCP.
UDP este considerat tot un protocol nefiabil si tot din aceleasi motive. Pachetele UDP sunt denumite tot datagrame. Este recomandata folosirea acestui protocol in retele LAN. Atunci cand se utilizeaza UDP in retele WAN este necesar ca aplicatiile sa-si asigure propriile mecanisme de control.
La prima vedere nu exista diferente foarte clare intre nivelul retea si cel de transport respectiv intre protocoalele IP si TCP (UDP). La o analiza mai atenta descoperim ca IP se ocupa cu distribuirea datelor intre calculatoarele retelei, pe cand TCP distribuie datele intre aplicatii.
Sa presupunem ca un calculator (vom folosi, in continuare, si termenul de host pentru a desemna un calculator apartinand unei retele) legat intr-o retea stabileste o conexiune cu un alt host. Practic, in prima faza, o aplicatie de pe primul calculator, adreseaza o cerere de comunicatie cu o alta aplicatie, de pe cel de-al doilea. Acum intra in actiune protocolul IP care stabileste legatura intre cele doua calculatoare. Cum, in ultimul timp, sistemele de operare rulate pe calculatoare sunt multitasking, ne punem intrebarea: cum stie cel de-al doilea host sa livreze pachetele de date aplicatiei cerute de primul calculator. Din acest considerent s-a introdus notiunea de port. Oricarei aplicatii, care are capacitatea de a lucra in retea, ii este asignat un numar de port.
In comunicatia dintre doua aplicatii, de pe hosturi diferire, protocolul IP are sarcina sa memoreze adresele IP ale celor doua calculatoare, pe cand protocolul de transport (TCP sau UDP) trebuie sa retina numerele porturilor sursa si destinatie.
In Internet, fiecarui protocol ii este asociat un numar de port. Prezentam mai jos cele mai cunoscute protocoale si numarul portului pe care acestea comunica intre ele.
File Transfer Protocol
|
21
|
Telnet Protocol
|
23
|
Simple Mail Transfer Protocol
|
25
|
Trivial File Transfer Protocol
|
69
|
Finger Protocol
|
79
|
HyperText Transfer Protocol
|
80
|
Tabelul 1. Protocoale Internet si porturi
Protocoalele TCP si UDP utilizeaza porturile in mod diferit. UDP fiind un protocol fara conexiune, lasa pur si simplu datele pe port. In schimb TCP se concentreaza pe conexiune - nu pe port. Prin urmare, aplicatiile care folosesc TCP pot sa deschida pe acelasi port mai multe conexiuni fara sa apara probleme de transmisie.
TCP este considerat un protocol fiabil, asigurand integritatea datelor transmise. Utilizand acest protocol, programatorul, nu trebuie sa se mai ocupe de aspecte de corectitudine a transmisiei pachetelor, lucru asigurat de protocolul insusi. Din acest motiv scade, intr-o oarecare masura, viteza de transfer.
TCP are urmatoarele caracteristici principale:
Transfer de date in flux continuu - datele circula in acelasi timp, in ambele sensuri ale conexiunii. Spunem ca TCP este o conexiune duplex.
Siguranta transmisiei - recupereaza pachetele transmise cu erori, pierdute sau cu numar de secventa eronat. Aceasta caracteristica este asigurata prin stabilirea unui numar de secventa fiecarui octet transmis si necesitatea unui mesaj de confirmare (ACK) din partea receptorului. Daca, dupa un anumit interval de timp, expeditorul nu primeste un mesaj de confirmare, pachetul este considerat pierdut si este retransmis.
Controlul fluxului de date - in fiecare mesaj ACK, trimis de receptor, este continuta o 'fereastra' care indica numarul permis de octeti pe care emitatorul ii poate transmite. In urma unui astfel de mesaj, emitatorul isi va dimensiona pachetele transmise la lungimea indicata de receptor. Aceasta lungime este valabila pana la receptionarea urmatorului mesaj ACK, care contine o alta 'fereastra'.
Multiplexarea - permite mai multor procese, care ruleaza pe acelasi host, sa utilizeze facilitatile protocolului TCP simultan.
Controlul conexiunii - in transferul de date dintre doua procese putem distinge trei etape: stabilirea conexiunii, controlul conexiunii, inchiderea conexiunii. Controlul conexiunii presupune: stabilirea numarului de secventa si a dimensiunii ferestrei, pentru fiecare pachet TCP.
Prezentam mai jos un tabel sumar, care prezinta comparativ facilitatile oferite de cele trei protocoale IP, UDP, TCP.
|
IP
|
UDP
|
TCP
|
Orientare pe conexiune
|
nu
|
nu |
da |
Limitarea lungimii mesajului
|
da |
da |
nu |
Checksum la date
|
nu |
da |
da |
Raspuns la validare
|
nu |
nu |
da |
Timeout si retransmitere
|
nu |
nu |
da |
Detectarea pachetelor duplicate
|
nu |
nu |
da |
Secventiere
|
nu |
nu |
da |
Controlul fluxului de date
|
nu |
nu |
da |
5. Nivelul aplicatie
In suita de protocoale TCP/IP acest nivel inglobeaza nivelele: sesiune (5), prezentare (6), aplicatie (7), din
modelul ISO/OSI. Din acest motiv se mai numeste si nivel proces. Pe acest nivel se utilizeaza, ca mijloc de comunicatie intre procese, mecanismul socket. In prezent aproape toate sistemele de operare au implementat acest mecanism. Asta nu inseamna ca este singura solutie pentru programarea in retea. Un concurent este TLI (Transport Lazer Interface) aparut in jurul anului 1985 cu sistemul de operare UNIX SYSTEM V. Un alt mecanism de programare in retea este RPC (Remote Procedure Call) vazut ca o extensie a solutiei socket.
Un programator de aplicatii, care va concepe programe in retea, se va intalni foarte des cu problema crearii unui socket. Dupa ce socket-ul a fost creat, tot greul comunicatiei intre procese revine sistemului de operare prin intermediul implementarii stivei TCP/IP. Programatorul va trebui sa 'stapaneasca' doar ce date se vor transmite prin retea.
Pentru crearea unui socket, se executa instructiunea:
socket_handle = socket( protocol_family, socket_type, protocol)
care are aproximativ aceeasi sintaxa pe toate sistemele de operare.
Ei ... si cum 'teoria ca teoria, dat practica ne omoara', vom incerca data viitoare sa realizam un program care utilizeaza socket-uri (sau mai bine zis doua programe: unul client si celalalt server).'