Porturi si socketuri

Aceasta sectiune introduce conceptele port si socket, care sunt necesare pentru a determina in mod exact ce proces local de pe un host comunica cu un alt proces de un host indepartat si ce protocol folosesc. Daca asta suna oarecum confuz considerati urmatoarele:

Porturi

Fiecare proces care doreste sa comunnice cu un alt proces se identifica fata de suita de protocoale TCP/IP prin unul sau mai multe porturi. Un port este un numar intreg pe 16 biti, folosit de protocoalele de comunicatie in retea pentru a identifica carui protocol sau aplicatie (proce) de nivel superior trebuie sa-i livreze mesajele. Exista doua tipuri de porturi:

Bine-cunoscute (well-known)

Porturile bine-cunoscute apartin serverelor standard, spre exemplu Telnet foloseste portul 23. Gama numerelor de porturi bine-cunoscute se intinde de la 1 la 1023 (inainte de 1992, gama dintre 256 si 1023 a fost folosita de serverele specifice UNIX). Porturile bine-cunoscute sunt de regula impare, deoarece sistemele mai vechi care foloseau conceptul de port aveau nevoie de o pereche impar/par de porturi pentru comunicatia duplex. Majoritatea serverelor necesita numai un singur port. Exceptii sunt:

Porturile bine-cunoscute sunt controlate si atribuite de catre o autoritate centrala a Internet: IANA si, pe majoritatea sistemelor, pot fi utilizate numai de catre procesele sistem sau de catre programe lansate in executie de catre utilizatori privilegiati. Existenta porturi bine-cunoscute permite clientilor sa gaseasca serverele fara informatii de configurare. Porturile bine-cunoscute sunt definite in STD 2 Assigned Internet Numbers.

efemerale

Clientii nu au nevoie de numere de port binecunoscute deoarece ei initiaza comunicarea cu serverele si numerele de port pe care le folosesc sunt continute in datagramele UDP trimise serverului. Fiecarui proces client are alocat un numar de port cata vreme este necesar hostului pe care ruleaza. Numerele de port efemerale au valori mai mari decat 1023, de regula in gama de la 1024 la 65535. Un client poate folosi orice numar alocat lui cata vreme combinatia 

 <protocol transport, adresa IP, numar port> 

este unica.

Porturile efemerale nu sunt controlate de IANA si pe majoritatea sistemelor pot fi folosite de catre programe obisnuite facute de utilizator. Confuzia ce poate apare datorita diferitelor aplicatii ce incearca sa foloseasca aceleasi numere de port pe un calculator este evitata scriind aplicatii care solicita un port disponibil de la TCP/IP. Deoarece acest numar de port este atribuit dinamic, el poate diferi de la o invocatie a aplicatiei la urmatoarea. UDP, TCP si ISO TP-4 folosesc toate acelasi tip de identificare prin port.

Nota: In mod normal, un server va folosi atat TCP cat si UDP, dar exista exceptii. Spre exemplu, serverele de nume (domain name servers) (vezi capitolul Domain Name System) foloseste atat portul 53 UDP cat si portul 53 TCP.

Socketuri

Interfata socket este doar una dintre API-urile (application programming interfaces) catre protocoalele de comunicatie. Proiectat pentru a fi o interfata generica de programare a comunicatiei a fost prima dat introdus de catre sistemul UNIX  BSD 4.2. Cu toate ca nu a fost standardizat, a devenit un standard industrial de facto.

BSD 4.2 permitea doua domenii de comunicare diferite: Internet si UNIX. BSD 4.3 a adaugat protocoalele XNS (Xerox Network System) protocols, iar BSD 4.4 va adauga o interfata extinsa pentru a suporta protocoalele ISO OSI. Sa consideram urmatoarele terminologii:

{protocol, adresa locala, proces local}

In suita TCP/IP, spre exemplu:

{tcp, 193.44.234.3, 12345}
{protocol, adresa locala, proces local, adresa straina, proces strain}

In suita TCP/IP, urmatoarea poate fi o asociatie valida:

{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}
{protocol, adresa locala, proces local}

cat si

{protocol, adresa straina, proces strain}

care specifica fiecare jumatate a unei conexiuni.

Doua procese comunica via socketuri TCP. Modelul socket asigura o conexiune full-duplex prin care doua procese isi pot trimite unul celuilalt mesaje sub forma unor fluxuri de octeti (byte streams). Aplicatia nu trebuie sa se preocupe de controlul celor doua fluxuri; aceste facilitati sunt asigurate de catre TCP. Ca si UDP, TCP foloseste porturi bine-cunoscute sau efemerale. Fiecare parte a unei conexiuni TCP poate fi identificata de tripletul

<TCP, adresa IP, numar port>.

Daca doua procese comunica prin TCP, ele au o conexiune logica care este unic identificabila de cele doua socketuri implicate, adica de catre combinatia

<TCP, adresa IP locala, port local, adresa IP departata, port indepartat>

Procesele server sunt capabile sa controleze multiple conversatii printr-un singur port. Pentru mai mult informatii referitoare la socket vezi capitolul API Socket.

Cornel Mironel Niculae, 2004-2005

25-Mar-2008