Reading Time: 4 minutes

Panoramica su UDP

Il protocollo UDP (User Datagram Protocol), il più elementare dei protocolli di trasporto definiti dalla famiglia TCP/IP, implementa un approccio best-effort.

Se lo sviluppatore sceglie UDP anziche TCP, come protocollo a livello di trasporto, allora l’applicazione dialoga quasi in modo diretto con IP.

I datagrammi IP trasportati attraverso UDP, infatti, sono trattati utilizzando tutte le risorse disponibili senza garanzia di affidabilità e senza alcun meccanismo che garantisca la ritrasmissione qualora un datagramma venga perso.

UDP prende i messaggi dal processo applicativo, aggiunge il numero di porta origine e destinazione per il multiplexing/demultiplexing, aggiunge altri due piccoli campi e passa il segmento risultante al livello di rete successivo.

Il protocollo UDP, come accennato, è responsabile solamente delle operazioni di multiplexing/demultiplexing dei dati tra le diverse applicazioni attive in una stazione.

Con i termini multiplexing/demultiplexing, si intendono le funzionalità dell’entità a livello di trasporto, in grado di effettuare la consegna dei dati anche in presenza di molteplici applicazioni alternative associate ad uno stesso indirizzo IP.

UDP rappresenta la soluzione di trasporto ideale per tutte le applicazioni che assolvono da sole alle problematiche di ritrasmissione, controllo del flusso e riordino dei dati.

UDP riveste inoltre un ruolo speciale in tutti i servizi che non richiedono la ritrasmissione dei pacchetti ricevuti con errori, sia per la natura dell’informazione trasmessa (video e voce su IP), sia perchè utilizzati su reti locali che garantiscono un bassissimo tasso di errore.

Il servizio offerto dal protocollo UDP è un servizio di trasporto senza connessione, orientato alla consegna di datagrammi UDP indipendenti: ogni datagramma UDP prodotto dalla stazione sorgente deve essere contenuto in un singolo datagramma IP.

Ricordiamo che un servizio senza connessione è definito quando non esiste una fase di handshaking iniziale tra le entità di invio e quelle di ricezione.

Perchè scegliere UDP?

Molte applicazioni risultano più adatte ad un protocollo UDP per i seguenti motivi:

  • Controllo più sottile a livello di applicazione su quali dati sono inviati e quando: non appena un processo applicativo passa dati a UDP, quest’ultimo li impacchetta in un segmento che trasferisce immediatamente al livello di rete.
    Dato che le applicazioni intempo reale spesso richiedono una frequenza minima di trasmissione e non sopportano ritardi eccessivi nella trasmissione dei pacchetti mentre tollerano una certa perdita di dati, il modello TCP (con il controllo congestione) non si adatta a queste esigenze.
    Questo tipo di applicazioni possono usare UDP e implementare, come parte dell’applicazione, funzionalità aggiuntive rispetto al servizio minimale di UDP.
  • Nessuna connessione stabilita: UDP trasferisce dati a raffica senza alcuna operazione preliminare, a differenza di TCP che utilizza la fase iniziale di handshake.
    UDP quindi non introduce alcun ritardo nello stabilire una connessione (motivo principale per cui vedremo che il servizio DNS utilizza UDP).
  • Nessuno stato di connessione: UDP non conserva lo stato della connessione e non tiene traccia di parametri quali buffer di ricezione e d’invio, controllo congestione, numero di sequenza e acknowledgment.
    Per questo motivo un server dedicato a una particolare applicazione può generalmente supportare molti più client attivi quando l’applicazione utilizza UDP anzichè TCP.
  • Intestazioni di pacchetto più corte: l’intestazione dei pacchetti TCP è di 20 byte mentre in UDP solo 8 byte.

Struttura di un segmento UDP

Considerata la limitata complessità del protocollo, l’intestazione UDP risulta breve.

I parametri trasportati da ogni segmento UDP sono solo quattro:

  1. Un numero di porta sorgente (16 bit), che identifica univocamente l’applicazione che ha generato il datagramma UDP, all’interno della stazione sorgente.
  2. Un numero di porta destinazione (16 bit), che identifica univocamente l’applicazione a cui è destinato il datagramma UDP, all’interno della stazione di destinazione.
  3. La lunghezza (16 bit) complessiva del datagramma UDP.
  4. Una checksum (16 bit), che consente di rivelare eventuali errori presenti nel datagramma UDP (copre sia intestazione sia campo dati).

La checksum UDP serve per il rilevamento degli errori.

Viene utilizzata per determinare se i bit del segmento UDP sono stati alterati durante il loro trasferimento (per esempio a causa di disturbi nei collegamenti o quando sono stati memorizzati in un router).

È importante notare che la checksum UDP è facoltativa. Se la sorgente non intende utilizzarla per la rilevazione di eventuali errori, essa viene settata a 0.

Se la sorgente decide di farne uso e il calcolo della checksum risulta essere 0, viene utilizzata una rappresentazione alternativa dello 0 (una sequenza di 16 bit settati a 1).

Un datagramma contenente errori viene silenziosamente scartato dal protocollo UDP senza intraprendere nessuna esplicita azione di recupero.

È responsabilità delle applicazioni coinvolte attivare, se necessario, specifiche procedure di recupero dei dati non ricevuti correttamente.

Considerata la natura stateless delle informazioni contenute nei datagrammi UDP, quando è richiesta garanzia di integrità e autenticità dei dati, è necessario che l’applicazione preposta all’erogazione del servizio sia in grado di autenticare indipendentemente ciascun datagramma UDP ricevuto.

error: Content is protected !!

La maggior parte dei contenuti del blog ComputerSec vengono pubblicati a beneficio di tutti e in modo completamente gratuito.
Tuttavia per supportare il blog, e per avere ulteriori vantaggi, puoi decidere di abbonarti e sfruttare al 100% tutti i contenuti!
Abbonati Ora!

Complimenti! Ti sei iscritto alla nostra Newsletter

C'è stato un errore durante l'invio della richiesta. Per favore riprova.

Computer Security will use the information you provide on this form to be in touch with you and to provide updates and marketing.