5.1.4 – Applicazioni di rete

Obiettivi della lezione:

  • Comprendere i servizi di rete. Gli studenti impareranno a identificare e descrivere i vari servizi di rete, comprendendo le loro funzionalità e importanza.
  • Analizzare l’utilizzo dei socket. Gli studenti acquisiranno conoscenze sui socket, comprendendo come vengono utilizzati per la comunicazione in rete.
  • Esaminare le architetture su rete Internet. Gli studenti comprenderanno le diverse architetture utilizzate per le applicazioni distribuite su Internet, con particolare attenzione ai protocolli e alle tecnologie coinvolte.

Introduzione alle applicazioni di rete

Le applicazioni di rete sono progettate per permettere la comunicazione e la condivisione di risorse tra dispositivi connessi a una rete. Queste applicazioni spaziano dai servizi di posta elettronica ai social network, fino ai sistemi di streaming video e alle piattaforme di e-commerce. La comprensione delle basi tecnologiche delle applicazioni di rete è essenziale per progettare e implementare sistemi efficaci e sicuri.


Servizi di rete

I servizi di rete forniscono le funzionalità fondamentali necessarie per il funzionamento delle applicazioni di rete. Essi includono, ma non sono limitati a:

  • DNS (Domain Name System): Risolve i nomi di dominio in indirizzi IP, permettendo agli utenti di accedere ai siti web utilizzando nomi di dominio comprensibili invece di indirizzi IP numerici.
    • Esempio: Quando si digita “www.google.com” nel browser, il DNS traduce questo nome di dominio nell’indirizzo IP del server di Google.
  • DHCP (Dynamic Host Configuration Protocol): Assegna automaticamente gli indirizzi IP ai dispositivi su una rete, semplificando la gestione degli indirizzi IP.
    • Esempio: Quando un computer si connette a una rete Wi-Fi, il DHCP gli assegna automaticamente un indirizzo IP.
  • HTTP/HTTPS (HyperText Transfer Protocol / Secure): Protocollo utilizzato per la trasmissione di dati ipertestuali sul web. HTTPS aggiunge un livello di sicurezza crittografando i dati trasmessi.
    • Esempio: Navigazione web tramite browser che utilizzano HTTPS per proteggere la comunicazione.
  • FTP (File Transfer Protocol): Protocollo utilizzato per trasferire file tra dispositivi su una rete.
    • Esempio: Caricamento di file su un server web utilizzando un client FTP.

Utilizzo dei socket

I socket sono un’interfaccia di programmazione che consente la comunicazione tra processi attraverso una rete. Essi sono la base per la maggior parte delle comunicazioni di rete, permettendo ai programmi di inviare e ricevere dati tra dispositivi connessi.

Tipi di socket

  • Socket TCP: Forniscono una comunicazione orientata alla connessione, garantendo che i dati vengano consegnati in ordine e senza errori.
    • Esempio: Utilizzo dei socket TCP per stabilire una connessione tra un client e un server web, assicurando che le pagine web vengano caricate correttamente.
  • Socket UDP: Forniscono una comunicazione senza connessione, permettendo la trasmissione di dati senza garantire l’ordine o l’integrità. Sono utilizzati quando la velocità è più importante della precisione.
    • Esempio: Utilizzo dei socket UDP per applicazioni di streaming video o giochi online, dove è preferibile una latenza ridotta rispetto alla perfetta integrità dei dati.

Programmazione con i socket

La programmazione con i socket coinvolge l’utilizzo di diverse funzioni per creare, configurare e gestire le connessioni di rete. Ecco un esempio di codice in Python che illustra l’utilizzo dei socket TCP:


# Creazione di un socket TCP
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connessione al server
server_address = ('localhost', 10000)
sock.connect(server_address)

try:
# Invio di dati
message = 'Questa è una prova di messaggio.'
sock.sendall(message.encode())

# Ricezione di dati
data = sock.recv(1024)
print('Ricevuto:', data.decode())
finally:
# Chiusura della connessione
sock.close()

Architetture su rete Internet

Le applicazioni di rete su Internet utilizzano varie architetture per garantire la comunicazione efficiente e sicura tra dispositivi distribuiti. Ecco alcune delle architetture più comuni:

Architettura Client-Server

Nell’architettura client-server, i client richiedono servizi e i server forniscono questi servizi. È l’architettura più comune per le applicazioni web.

  • Vantaggi: Facilità di gestione, sicurezza centralizzata.
  • Svantaggi: Possibile colli di bottiglia sul server, dipendenza da un singolo punto di guasto.

Esempio: Un sito web dove i browser dei client inviano richieste HTTP al server web, che risponde con le pagine web richieste.

Architettura Peer-to-Peer (P2P)

Nell’architettura P2P, ogni nodo può agire sia da client che da server. Questo modello è utilizzato per la condivisione di risorse tra pari senza la necessità di un server centrale.

  • Vantaggi: Scalabilità, ridondanza.
  • Svantaggi: Gestione della sicurezza e della coerenza dei dati può essere complessa.

Esempio: Reti di condivisione di file come BitTorrent.

Architettura a Microservizi

I microservizi dividono un’applicazione in servizi piccoli e indipendenti che comunicano tra loro attraverso API ben definite. Ogni microservizio gestisce una funzionalità specifica ed è sviluppato, distribuito e scalato indipendentemente.

  • Vantaggi: Scalabilità, manutenibilità, indipendenza dei componenti.
  • Svantaggi: Complessità nella gestione delle comunicazioni e delle dipendenze tra i servizi.

Esempio: Piattaforme di streaming come Netflix, dove servizi diversi gestiscono autenticazione, catalogo, raccomandazioni, streaming e così via.

Architettura RESTful

REST (Representational State Transfer) è uno stile architetturale utilizzato per progettare servizi web che consentono la comunicazione tra client e server tramite HTTP. Le API RESTful sono stateless e utilizzano le operazioni HTTP standard come GET, POST, PUT e DELETE.

  • Vantaggi: Semplicità, scalabilità, flessibilità.
  • Svantaggi: Limitazioni del protocollo HTTP, necessità di una gestione accurata delle risposte.

Esempio: Servizi web di social media che permettono ai client di interagire con il server per recuperare e inviare dati.


Esercitazioni pratiche

  1. Esercizio di configurazione di servizi di rete:
    • Configurare e testare un server DNS locale e un server DHCP per comprendere il funzionamento di questi servizi. Gli studenti dovranno configurare i server, collegare i client e verificare la corretta risoluzione dei nomi e l’assegnazione degli indirizzi IP.
  2. Esercizio di programmazione con i socket:
    • Implementare un semplice client e server TCP utilizzando i socket in Python. Gli studenti dovranno sviluppare un’applicazione client-server che permetta lo scambio di messaggi tra due dispositivi.
  3. Analisi delle architetture su rete Internet:
    • Analizzare un caso di studio di un’applicazione web moderna, identificando l’architettura utilizzata e discutendo i vantaggi e gli svantaggi di tale architettura. Gli studenti dovranno presentare le loro conclusioni sotto forma di relazione dettagliata.