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

  1. Implementa un servidor TCP que escolti en un port específic i enviï una resposta personalitzada a cada client que es connecti.
  2. 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

  1. Implementa un servidor UDP que escolti en un port específic i enviï una resposta personalitzada a cada missatge rebut.
  2. 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.

© Copyright 2024. Tots els drets reservats