Introducció
En els sistemes distribuïts, la comunicació entre diferents components és essencial per al seu funcionament. Els protocols de comunicació defineixen les regles i convencions per a l'intercanvi de dades entre nodes en una xarxa. En aquesta secció, explorarem els conceptes bàsics dels protocols de comunicació, els tipus de protocols més comuns i com s'utilitzen en sistemes distribuïts.
Conceptes Bàsics
Definició de Protocol de Comunicació
Un protocol de comunicació és un conjunt de regles que permeten la transmissió de dades entre dispositius en una xarxa. Aquestes regles inclouen:
- Format de les dades: Com es representen les dades en la transmissió.
- Seqüència de missatges: L'ordre en què es transmeten els missatges.
- Control d'errors: Com es detecten i corregeixen els errors en la transmissió.
- Control de flux: Com es gestiona el ritme de transmissió de dades per evitar la saturació de la xarxa.
Capes de Protocols
Els protocols de comunicació es poden organitzar en capes, seguint el model OSI (Open Systems Interconnection) o el model TCP/IP. Les capes més rellevants per als sistemes distribuïts són:
- Capa de Transport: Garanteix la transmissió fiable de dades (ex. TCP, UDP).
- Capa de Xarxa: Gestiona l'encaminament de paquets de dades (ex. IP).
- Capa d'Aplicació: Proporciona serveis de xarxa a les aplicacions (ex. HTTP, FTP).
Tipus de Protocols de Comunicació
Protocols de Transport
TCP (Transmission Control Protocol)
- Característiques:
- Connexió orientada.
- Garantia de lliurament de dades.
- Control de flux i control d'errors.
- Ús: Aplicacions que requereixen una transmissió fiable, com ara correu electrònic i transferència de fitxers.
UDP (User Datagram Protocol)
- Característiques:
- Sense connexió.
- No garanteix el lliurament de dades.
- Menor sobrecàrrega que TCP.
- Ús: Aplicacions que requereixen velocitat i poden tolerar pèrdues de dades, com ara streaming de vídeo i jocs en línia.
Protocols d'Aplicació
HTTP (Hypertext Transfer Protocol)
- Característiques:
- Protocol sense estat.
- Utilitzat per a la transferència de documents HTML.
- Ús: Navegació web, serveis RESTful.
FTP (File Transfer Protocol)
- Característiques:
- Protocol per a la transferència de fitxers.
- Suporta autenticació d'usuaris.
- Ús: Transferència de fitxers entre servidors i clients.
MQTT (Message Queuing Telemetry Transport)
- Característiques:
- Protocol lleuger de missatgeria.
- Dissenyat per a dispositius amb recursos limitats.
- Ús: Internet de les coses (IoT), comunicació entre sensors.
Exemples Pràctics
Exemple 1: Comunicació TCP en Python
import socket # Crear un socket TCP server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Enllaçar el socket a una adreça i port server_socket.bind(('localhost', 8080)) # Escoltar connexions entrants server_socket.listen(1) print("Esperant connexions...") # Acceptar una connexió client_socket, client_address = server_socket.accept() print(f"Connexió acceptada de {client_address}") # Rebre dades del client data = client_socket.recv(1024) print(f"Dades rebudes: {data.decode()}") # Enviar una resposta al client client_socket.sendall(b'Hola, client!') # Tancar la connexió client_socket.close() server_socket.close()
Exemple 2: Comunicació UDP en Python
import socket # Crear un socket UDP udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Enviar un missatge a un servidor server_address = ('localhost', 8080) message = b'Hola, servidor!' udp_socket.sendto(message, server_address) # Rebre una resposta del servidor data, server = udp_socket.recvfrom(1024) print(f"Dades rebudes: {data.decode()}") # Tancar el socket udp_socket.close()
Exercicis Pràctics
Exercici 1: Implementar un servidor i client TCP
- Implementa un servidor TCP que escolti en un port específic i enviï una resposta personalitzada a cada client que es connecti.
- Implementa un client TCP que es connecti al servidor, enviï un missatge i mostri la resposta del servidor.
Exercici 2: Implementar un servidor i client UDP
- Implementa un servidor UDP que escolti en un port específic i enviï una resposta personalitzada a cada missatge rebut.
- Implementa un client UDP que enviï un missatge al servidor i mostri la resposta del servidor.
Solucions dels Exercicis
Solució 1: Servidor i Client TCP
Servidor TCP
import socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 8080)) server_socket.listen(1) print("Esperant connexions...") while True: client_socket, client_address = server_socket.accept() print(f"Connexió acceptada de {client_address}") data = client_socket.recv(1024) print(f"Dades rebudes: {data.decode()}") client_socket.sendall(b'Hola, client!') client_socket.close()
Client TCP
import socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('localhost', 8080)) client_socket.sendall(b'Hola, servidor!') data = client_socket.recv(1024) print(f"Dades rebudes: {data.decode()}") client_socket.close()
Solució 2: Servidor i Client UDP
Servidor UDP
import socket udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udp_socket.bind(('localhost', 8080)) print("Esperant missatges...") while True: data, client_address = udp_socket.recvfrom(1024) print(f"Dades rebudes de {client_address}: {data.decode()}") udp_socket.sendto(b'Hola, client!', client_address)
Client UDP
import socket udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_address = ('localhost', 8080) message = b'Hola, servidor!' udp_socket.sendto(message, server_address) data, server = udp_socket.recvfrom(1024) print(f"Dades rebudes: {data.decode()}") udp_socket.close()
Resum
En aquesta secció, hem après sobre els protocols de comunicació en sistemes distribuïts, incloent-hi els conceptes bàsics, els tipus de protocols més comuns i exemples pràctics de comunicació TCP i UDP. Hem vist com aquests protocols permeten la transmissió de dades de manera fiable i eficient entre diferents components d'un sistema distribuït. En la propera secció, explorarem RPC i RMI, que són tècniques avançades per a la comunicació entre processos en sistemes distribuïts.
Curs d'Arquitectures Distribuïdes
Mòdul 1: Introducció als Sistemes Distribuïts
- Conceptes Bàsics de Sistemes Distribuïts
- Models de Sistemes Distribuïts
- Avantatges i Desafiaments dels Sistemes Distribuïts