Els protocols de transport són una part fonamental de les xarxes de comunicació, ja que s'encarreguen de proporcionar serveis de transferència de dades fiables i eficients entre dispositius. En aquest tema, explorarem els conceptes clau dels protocols de transport, els tipus principals de protocols i com funcionen.

Objectius d'Aprenentatge

Al final d'aquest tema, hauràs de ser capaç de:

  1. Comprendre la funció dels protocols de transport en una xarxa.
  2. Diferenciar entre els protocols de transport més comuns: TCP i UDP.
  3. Explicar com funcionen els mecanismes de control de flux i control d'errors.
  4. Implementar exemples bàsics de comunicació utilitzant TCP i UDP.

Conceptes Clau

Funció dels Protocols de Transport

Els protocols de transport tenen diverses funcions essencials:

  • Segmentació i Reassemblatge: Divideixen els missatges grans en segments més petits per a la seva transmissió i reassemblen els segments en el destinatari.
  • Control de Flux: Gestionen la velocitat de transmissió de dades per evitar la saturació del receptor.
  • Control d'Errors: Detecten i corregeixen errors en la transmissió de dades.
  • Multiplexació: Permeten que múltiples aplicacions utilitzin la mateixa connexió de xarxa.

Tipus de Protocols de Transport

Els dos protocols de transport més comuns són:

  1. TCP (Transmission Control Protocol):

    • Connexió orientada.
    • Fiable, amb control d'errors i retransmissions.
    • Control de flux i congestió.
    • Ús comú: navegació web, correu electrònic, transferència de fitxers.
  2. UDP (User Datagram Protocol):

    • Sense connexió.
    • No fiable, sense control d'errors ni retransmissions.
    • Menor sobrecàrrega.
    • Ús comú: streaming de vídeo, jocs en línia, VoIP.

TCP vs UDP

Característica TCP UDP
Tipus de connexió Orientada a connexió Sense connexió
Fiabilitat Alta (control d'errors i retransmissions) Baixa (sense control d'errors)
Control de flux No
Control de congestió No
Velocitat Més lent (més sobrecàrrega) Més ràpid (menys sobrecàrrega)
Ús comú Navegació web, correu electrònic, transferència de fitxers Streaming, jocs en línia, VoIP

Mecanismes de TCP

Establiment de Connexió (Three-Way Handshake)

  1. SYN: El client envia un segment SYN al servidor per iniciar la connexió.
  2. SYN-ACK: El servidor respon amb un segment SYN-ACK.
  3. ACK: El client envia un segment ACK per confirmar la connexió.

Control de Flux

TCP utilitza una finestra desplaçable per gestionar la quantitat de dades que es poden enviar abans de rebre una confirmació del receptor.

Control d'Errors

TCP utilitza números de seqüència i confirmacions (ACK) per assegurar-se que els segments es reben correctament i en ordre.

Tancament de Connexió (Four-Way Handshake)

  1. FIN: El client o servidor envia un segment FIN per iniciar el tancament.
  2. ACK: L'altre extrem respon amb un segment ACK.
  3. FIN: L'altre extrem envia un segment FIN.
  4. ACK: El primer extrem respon amb un segment ACK final.

Exemples Pràctics

Exemple de 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
data = client_socket.recv(1024)
print(f"Dades rebudes: {data.decode()}")

# Enviar resposta
client_socket.sendall(b'Hola, client!')

# Tancar la connexió
client_socket.close()
server_socket.close()

Exemple de UDP en Python

import socket

# Crear un socket UDP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# Enllaçar el socket a una adreça i port
server_socket.bind(('localhost', 8080))
print("Esperant missatges...")

# Rebre dades
data, client_address = server_socket.recvfrom(1024)
print(f"Dades rebudes de {client_address}: {data.decode()}")

# Enviar resposta
server_socket.sendto(b'Hola, client!', client_address)

# Tancar el socket
server_socket.close()

Exercicis Pràctics

Exercici 1: Implementar un Client TCP

Implementa un client TCP que es connecti al servidor TCP de l'exemple anterior, enviï un missatge i rebi una resposta.

Exercici 2: Implementar un Client UDP

Implementa un client UDP que enviï un missatge al servidor UDP de l'exemple anterior i rebi una resposta.

Solucions

Solució Exercici 1: Client TCP

import socket

# Crear un socket TCP
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connectar-se al servidor
client_socket.connect(('localhost', 8080))

# Enviar dades
client_socket.sendall(b'Hola, servidor!')

# Rebre resposta
data = client_socket.recv(1024)
print(f"Resposta del servidor: {data.decode()}")

# Tancar la connexió
client_socket.close()

Solució Exercici 2: Client UDP

import socket

# Crear un socket UDP
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# Enviar dades
client_socket.sendto(b'Hola, servidor!', ('localhost', 8080))

# Rebre resposta
data, server_address = client_socket.recvfrom(1024)
print(f"Resposta del servidor: {data.decode()}")

# Tancar el socket
client_socket.close()

Resum

En aquest tema, hem explorat els protocols de transport, centrant-nos en TCP i UDP. Hem après les seves funcions, diferències i mecanismes interns, com el control de flux i el control d'errors. També hem vist exemples pràctics de com implementar comunicacions TCP i UDP en Python. Amb aquests coneixements, estàs preparat per aprofundir en altres aspectes dels protocols de comunicació en xarxes.

© Copyright 2024. Tots els drets reservats