Salta el contingut
 

Comunicació en xarxa

Autor: Joan Puigcerver Ibáñez

Correu electrònic: j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Introducció

L’objectiu principal de les xarxes és el d’interconnectar diversos dispositius per tal de compartir totalment o parcialment els seus recursos.

Les aplicacions distribuïdes són aquelles que s’executen en diversos dispositius a la vegada.

La comunicació és un procés complex en el qual es produeix una transferència d’informació entre agents independents. La forma més clàssica de comunicar dispositius digitals és aplicant el model de client-servidor. El servidor és un dispositiu que conté informació a compartir amb altres agents anomenats clients.

Sovint les aplicacions treballen amb recursos al núvol o extreuen les dades d’un SGBD situat en un servidor remot. Gràcies a la connectivitat dels nostres dispositius podem veure pel·lícules sense haver d’emmagatzemar-les en un disc local, podem sincronitzar els rellotges amb l’hora oficial, comprar entrades per anar al teatre sense moure’ns de casa o fer una partida en línia del nostre videojoc preferit. Tota aquesta capacitat de comunicació només és possible gràcies a les xarxes.

Comunicació entre aplicacions

Als sistemes distribuïts, les aplicacions es comuniquen entre si per aconseguir un objectiu. Per exemple, quan visitem una pàgina web el navegador del nostre equip es comunica amb el servei HTTP del servidor web.

Es produeix un procés comunicatiu que involucra una sèrie d'elements fonamentals que cal tenir presents:

Canal de comunicació

Figura 1. Canal de comunicació

  • Emissor: aplicació que envia el missatge.
  • Receptor: aplicació que rep el missatge.
  • Missatge: la informació a transmetre.
  • Paquet: el missatge es dividirà en trossos més petits abans de ser enviat. Aquests trossos són la unitat bàsica d'informació i se'ls anomena paquets.
  • Canal: és el medi físic pel qual es transmeten els missatges i és el que connecta al receptor i a l'emissor.
  • Protocol: conjunt de regles que fixen el comportament a l'hora d'enviar un missatge. En un protocol es defineixen tant el format dels missatges com la manera d'enviar-los.

Generalment durant una transmissió d'informació l'emissor i el receptor canvien de funció per compartir informació en els dos sentits.

Protocols de comunicació: IP, TCP i UDP

Capes en la comunicació en xarxa

Figura 2. Capes en la comunicació en xarxa

A les xarxes d'ordinadors i internet, la pila de protocols usada és TCP/IP, aquest nom ve dels dos protocols més importants que la componen. Quan es va definir l'estàndard de protocols de comunicacions OSI, es van crear les capes de sessió i transport, que a TCP/IP es troben dins de la capa aplicació.

Funcionament de la pila de protocols

Les aplicacions que es comuniquen es troben al nivell superior, capa d'aplicació, tant de l'emissor com del receptor. L'aplicació crea el missatge que cal transmetre, que es passa a la capa següent.

A la capa transport se separa el missatge en paquets i aquests es passen a la capa següent.

A la capa de xarxa es calcula la ruta que seguiran els paquets per la xarxa per arribar a la destinació, siga final o intermedi, que conega com arribar al receptor. Amb aquesta informació, els paquets es passen a la següent capa.

A la capa nivell es preparen els datagrames per al canal de comunicació que s'utilitzarà i es passa el paquet al següent nivell que és el canal.

Una vegada els datagrames arriben al receptor, es produeix el procés invers.

TCP

Transmission Control Protocol o TCP és un protocol de la capa de transport:

  • Garanteix que les dades no es perden, sempre que la comunicació siga possible.
  • Garanteix que els missatges arriben en ordre, sempre que la comunicació siga possible.
  • És orientat a connexió. Això significa que la connexió està activa mentre s'envien els missatges i segueix activa fins que l'emissor o receptor la tanquen.

UDP

User Datagram Protocol o UDP és un protocol de la capa de transport:

  • No garanteix que els missatges arriben.
  • Permet enviar com a màxim 64KB per missatge.
  • No és orientat a connexió. Això ho converteix en un protocol més ràpid que TCP.
  • Els paquets en UDP se'ls coneix com a datagrames.

Sockets

Els sockets van aparèixer l'any 1981, a la versió 4.2 d'UNIX BSD. Des d'aleshores, s'han convertit en el mecanisme estàndard de comunicació entre processos distribuïts a la majoria d'entorns. Actualment, la majoria de llenguatges d'alt nivell ofereixen interfícies de programació per a sockets.

Els sockets permeten fer transferències d'informació entre aplicacions oferint abstracció sobre la pila de protocols.

En anglès socket significa literalment endoll i representa l'extrem d'un canal de comunicació establert entre emissor i receptor. Les dos aplicacions, l'emissor i el receptor respectivament, han de crear els seus propis sockets i connectar-los entre si. Una vegada connectats, els sockets creen una "canonada privada", on les aplicacions escriuen (write) al socket per enviar informació i llegeixen (read) per rebre'n.

Adreces i ports

Igual que amb una comunicació tradicional, com és l'enviament de cartes per correu on l'emissor ha de conèixer l'adreça exacta del receptor (carrer, número, porta, codi postal, país), en els sistemes distribuïts les aplicacions han de saber on estan ubicades entre si per poder enviar missatges.

En el protocol TCP/IP s'usen les adreces IP assignades a cada equip a la xarxa.

Es possible que en una mateixa màquina amb adreça IP pròpia hi haja diverses aplicacions funcionant que utilitzen sockets per comunicar-se. Per distingir-les, s'usen els ports.

Un port és un número entre 0 i 65535 que identifica cada socket a la màquina. Quan es crea un socket cal especificar el número de port. Normalment se sol dir que un socket escolta (listen) un port.

Tipus de sockets

Hi ha dos tipus bàsics de sockets:

  • Stream socket: Es comunica mitjançant el protocol TCP/IP.
  • Datagram socket: Es comunica mitjançant el protocol UDP/IP.

Stream socket

Són sockets orientats a connexió. Si s'utilitzen sobre IP, ho faran mitjançant el protocol TCP, oferint totes les característiques d'aquest protocol. Un socket stream s'utilitza per comunicar-se sempre amb el mateix receptor, mantenint el canal obert fins que finalitza la connexió.

Per establir la connexió mitjançant un socket stream s'han de seguir una sèrie de passos tant a l'emissor com al receptor. Un farà el paper de procés servidor i l'altre el paper de procés client.

El servidor serà el primer a crear el socket i esperarà que el client es connecte. El client crearà el seu socket i es connectarà al servidor creant el canal de comunicació.

En qualsevol moment algun dels dos processos pot tancar el socket, destruint el canal i acabant la connexió.

Client
  • Creació del socket: Es crea i assigna un port. Generalment el port al client no és important així que es deixa que el sistema ho assigne automàticament.
  • Connexió del socket (connect): Es localitza el socket del servidor mitjançant l'adreça IP del servidor i el port i es crea el canal.
  • Enviament i recepció de missatges: Mitjançant operacions de lectura i escriptura (read i write) s'envia i rep informació.
  • Tancament de la connexió (close): El client pot tancar la connexió.
Servidor
  • Creació del socket: Es crea el socket de la mateixa manera que al client, però en aquest cas és important assignar el port. Mitjançant l'operació bind es realitza aquesta assignació.
  • Escolta (listen): Es configura el socket perquè quede preparat per acceptar connexions des del client.
  • Acceptació de connexions (accept): Quan arriba una petició de connexió al servidor, es crea un nou socket i aquest serà el que quedarà connectat al socket client i pel qual s'enviarà i rebrà la informació. El socket servidor quedarà lliure escoltant, a l'espera de noves connexions.
  • Enviament i recepció de missatges: Mitjançant operacions de lectura i escriptura (read i write) s'envia i rep informació.
  • Tancament de la connexió (close): El servidor pot tancar la connexió. El socket servidor continuarà escoltant com s'ha indicat anteriorment.

Datagram socket

Són sockets no orientats a connexió. Si es fan servir sobre IP, ho faran mitjançant el protocol UDP, oferint totes les característiques d'aquest protocol. Un datagram socket s'utilitza per enviar missatges a múltiples receptors ja que es fa servir un canal temporal per a cada enviament.

Amb aquests sockets no hi ha distinció entre client i servidor, totes les aplicacions usen sockets datagram.

  • Creació del socket: Es crearà el socket de la mateixa manera que al servidor amb els sockets stream.
  • Enviament i recepció de missatges: Mitjançant operacions enviar (send) i rebre (receive) s'enviaran els datagrames. L'operació send necessita una adreça IP i un port per enviar el datagrama.
  • Tancament de la connexió (close): Es pot tancar la connexió.

Programació de Sockets

la majoria de llenguatges de programació d'alt nivell disposen de llibreries per crear, destruir i operar amb sockets sobre TCP/IP.

A Java els podem trobar al package java.net i tenim les següents classes:

Classe Socket

Els mètodes més importants de la classe Socket són:

  • Socket(): Constructor de la classe Socket desconnectat.
  • Socket(String host, int port): Constructor de la classe Socket que es connecta a l'adreça IP i el port especificat.
  • connect(SocketAddress endpoint): Connecta el Socket al endpoint especificat.
  • getInputStream(): Obté el InputStream que permet llegir del Socket.
  • getOutputStream(): Obté el OutputStream que permet escriure al Socket.
  • close(): Acaba la connexió i tanca el Socket.

Classe ServerSocket

Els mètodes més importants de la classe ServerSocket són:

  • ServerSocket(): Constructor de la classe Socket que no està lligat a cap port.
  • ServerSocket(int port): Constructor de la classe Socket que està lligat al port especificat.
  • bind(SocketAddress endpoint): Lliga el ServerSocket al endpoint especificat.
  • accept(): Espera a rebre una nova connexió i l'accepta. Aquest mètode retorna un Socket per comunicar-se amb el client.
  • close(): Acaba la connexió i tanca el ServerSocket.

Comentaris