Socket-uri de rețea

De la WikiLabs
Jump to navigationJump to search

Limbajul Java, prin setul de biblioteci API, pune la dispoziție suport nativ pentru aplicații în rețea. Cel mai simplu mod de a realiza comunicația între două mașini este prin utilizarea socket-urilor (soclurilor) de comunicație. Socket-urile sunt mecanisme de comunicație în rețea (dezvoltate la Universitatea Berckley din California) care pot folosi orice protocol de comunicație, deși, în general, se folosesc protocoalele din stiva TCP/IP.

Orice calculator conectat la Internet trebuie să aibă o adresă prin care să fie identificat, adresă care se numește adresă IP (Internet Protocol). O adresă IPv4 (versiunea 4) este formată din 4 octeți, iar reprezentarea ei externă se face printr-o secvență de 4 numere separate prin puncte (ex: 192.168.0.1). Pe lângă această reprezentare, se mai pot folosi nume simbolice grupate în domenii, iar corespondențele dintre adresele IP și numele simbolice sunt stocate într-o bază de date distribuită, accesată prin serviciul numelor de domenii (DNS – Domain Name Service).

În Java, clasele și interfețele de programare în rețea sunt cuprinse în pachetul java.net. O adresă IP se reprezintă prin clasa InetAddress care conține atât adresa IP (în format numeric) cât și adresa simbolică corespunzătoare. Această clasă nu are un constructor public, un obiect din această clasă se poate crea la apelul uneia din metodele statice ale clasei: getByName(), getLocalHost() sau getAllByName() care retunează referința la obiectul creat. De exemplu, prototipul metodei getByName() este următorul:

public InetAddress getByName (String host) throws UnknownHostException;

Argumentul metodei (host) este un șir de caractere care reprezintă numele stației dat ca nume simbolic (de exemplu "arh.pub.ro") sau ca formă textuală a adresei IP ("141.85.252.94").

Socket-urile se pot folosi într-unul din două moduri posibile:

  • socluri neconectate;
  • socluri conectate (orientate pe conexiune).

În cazul soclurilor neconectate, se transmit pachete în protocolul UDP (User Datagram Protocol) între procese între care nu există o legătură permanentă, iar pachetele de date (datagramele - datagrams) sunt independente între ele și conțin adresa destinației pentru a putea fi rutate.

În cazul socket-urilor conectate, se stabilește mai întâi o legătură între două socket-uri aparținînd unor procese distincte (posibil plasate în stații diferite, conectate printr-o rețea de comunicație). Transmisia pe socluri conectate folosește protocolul TCP (Transmission Control Protocol) care este un protocol fiabil (cu verificări ale datelor transmise şi recepționate), spre deosebire de protocolul UDP care este un protocol nefiabil.

Pentru ca mai multe aplicații să poată avea acces la rețea în același timp, pachetele pentru fiecare aplicație trebuie să fie separate. Acest lucru se face cu ajutorul porturilor de comunicații. Un port este reprezentat de un număr pe 16 biți și fiecare aplicație folosește un port unic pentru a comunica în rețea. O conexiune are două porturi: cel local, alocat de sistemul de operare la inițierea conexiunii, și cel al server-ului, care este constant, în funcție de aplicație. Fiecare protocol standard are asociat un port conform unei liste menținute de cei de la Internet Assigned Numbers Authority. Ca exemple:

  • port 20 - File Transfer Protocol (date)
  • port 21 - File Transfer Protocol (control)
  • port 21 - Secure Shell (SSH)
  • port 25 - Simple Mail Transfer Protocol (SMTP)
  • port 80 - Hyper Text Transfer Protocol (HTTP)
  • etc.

Lista completă este disponibilă pe http://www.wikipedia.org.