Il livello Trasporto.

Bibliografia:
Computer Networking. Cap. 3. Autori: James F. Kurose (University of Massachusetts, Amherst) Keith W. Ross (Polytechnic Institute of NYU).

Trasporto senza connessione: UDP

I protocolli Internet del livello Trasporto sono UDP e TCP.

Si supponga di voler progettare un semplice protocollo di livello Trasporto. Inizialmente, dal lato del trasmettitore, si pensa di prendere i messaggi dal processo del livello applicazione e di consegnarli al livello Rete, e al lato del ricevitore, si prendono i pacchetti provenienti dal livello Rete e si passano direttamente al processo applicativo. Ma, come si è visto, serve almeno un servizio di multiplexing/demultiplexing per scambiare i messaggi tra il corretto processo applicativo e il livello Rete.

Il protocollo UDP, oltre a questo servizio, introduce anche un controllo sugli errori. UDP prende i messaggi dal processo del livello applicazione, aggiunge i numeri porta sorgente e destinazione e passa il segmento al livello Rete. Il livello Rete incapsula il segmento in un datagramma IP e provvede a consegnare il pacchetto al destinatario con il minimo impegno. Quando il pacchetto arriva all'host destinatario, UDP usa i numeri di porta e gli indirizzi IP per consegnare i dati al processo applicativo.

UDP non sincronizza le entità del livello 4 del trasmettitore e del ricevitore per cui è detto privo di connessione.

DNS è un esempio di protocollo del livello Applicazione che usa UDP. Quando l'applicazione DNS in un host produce una interrogazione, costruisce un messaggio DNS e lo passa al socket UDP senza sincronizzare il processo dal lato trasmettitore con il processo che esegue UDP sul sistema ricevitore. UDP aggiunge i campi dell'intestazione al messaggio e passa il segmento al livello Rete. Il livello Rete incapsula il segmento UDP in un datagramma e lo invia al server di risoluzione dei nomi. L'applicazione DNS che ha generato l'interrogazione attende la risposta. Se non la riceve, perchè si è perso il pacchetto di richiesta o il pacchetto di risposta, ripete l'invio dell'interrogazione a un altro server o informa il processo applicativo che non è stata ricevuta la risposta.

Le ragioni per cui si può preferire UDP a TCP sono:

La Tabella seguente elenca le principali applicazioni Internet e, per ognuna, indica il protocollo del livello Trasporto che essa usa: e-mail, terminale remoto, Web e il trasferimento dei file utilizzano il TCP - queste applicazioni hanno bisogno di un servizio affidabile. Le applicazioni che usano l'UDP sono, ad esempio, il RIP - il protocollo di tipo Distance Vector - che consente di aggiornare le tabelle di instradamento dei router. UDP è usato anche per i dati SNMP. L'UDP è preferito nei casi di intenso traffico sulla rete.

ApplicazioneProtocollo del livello
Applicazione
Protocollo del livello
trasporto sottostante
posta elettronicaSMTPTCP
terminale remotoTelnetTCP
WebHTTP TCP
trasferimento fileFTPTCP
file server remotoNFSUDP
streaming multimedialeproprietarioUDP
telefonia su InternetproprietarioUDP
Network ManagementSNMPUDP
Protocollo di instradamentoRIPUDP
Traduzione dei nomi di dominioDNSUDP

Applicazioni Internet e protocolli di trasporto su cui si appoggiano

UDP è usato anche con le applicazioni multimediali, come la telefonia su Internet, la video conferenza real-time, e lo streaming di file audio e video. Ognuna di queste applicazioni può tollerare una piccola perdita di pacchetti, quindi non è necessario un protocollo affidabile. Inoltre le applicazioni interattive real-time, come telefonia e video conferenza, non migliorano le prestazioni introducendo, con il TCP, il controllo della congestione. Infine, siccome il TCP non consente il multicast, questo tipo di applicazioni usa l'UDP.

L'esecuzione di applicazioni multimediali su UDP è critica, perchè UDP è privo di qualsiasi forma di controllo della congestione. Il controllo della congestione serve per impedire che la rete si saturi di traffico. Se tutti gli utenti di una rete avviassero uno streaming video ad alta velocità, senza alcun controllo della congestione, si verificherebbe una sovrascrittura di pacchetti nei router e nessuno vedrebbe nulla. Per rendere affidabile il trasferimento tramite l'UDP se ne dovrebbe incaricare il processo applicativo.

Le principali applicazioni di streaming usano l'UDP e posseggono un meccanismo di conferma dei pacchetti allo scopo di limitarne le perdite.

Ci sono alcune critiche rivolte alla scelta di appoggiare le applicazioni multimediali sull'UDP. Come visto, UDP non introduce un controllo sulla congestione. Ma si pensi che il controllo della congestione serve per prevenire lo stato di saturazione dei canali, dove i pacchetti subiscono un ritardo illimitato. Se ogni utente iniziasse lo streaming alla massima velocità di trasferimento, senza controllare la congestione, si dovrebbe verificare una sovrascrittura di pacchetti nelle code dei router e pochissimi pacchetti riuscirebbero a compiere il percorso completo da sorgente a destinazione. Inoltre l'elevato tasso di pacchetti persi, conseguente al mancato controllo della congestione da parte delle sorgenti UDP, causerebbe la riduzione del flusso dei pacchetti inviati dalle sorgenti TCP (che invece controllano la congestione). Quindi il mancato controllo della congestione ha due effetti negativi: aumenta il tasso dei pacchetti persi e diminuisce (se non addirittura si annulla) il traffico generato dalle sorgenti TCP.

Struttura del segmento UDP

Numero Porta Sorgente
Numero Porta Destinazione
Lunghezza Campo Dati
Checksum

dati del livello
Applicazione

Il messaggio generato dall'applicazione occupa il campo dati del datagramma UDP. Ad esempio il campo dati del DNS contiene la richiesta o la risposta. Il campo dati di un'applicazione di streaming audio contiene i campionamenti audio. L'intestazione dell'UDP ha solo quattro campi, ognuno di 32 bit. Il campo checksum serve per il controllo degli errori.

il campo di controllo degli errori in un segmento UDP

Il checksum fornisce un metodo per riconoscere la presenza di errori nel segmento. Cioè il campo checksum nel segmento UDP consente di verificare se il messaggio è stato alterato dal rumore, mentre viaggiava sul canale. Il messaggio del pacchetto viene considerato come una sequenza di numeri di 16 bit. L'UDP dal lato del trasmettitore somma, scartando i riporti, tutti questi numeri, esegue il complemento a uno del risultato e lo inserisce nel campo checksum.

Un semplice esempio di calcolo del checksum.
Si abbiano i seguenti 3 gruppi di 16 bit:

0110011001100000
0101010101010101
1000111100001100

La somma dei primi due gruppi di 16 bit è

0110011001100000
0101010101010101
1011101110110101

A questo risultato si aggiunge il terzo gruppo di 16 bit e si ha:

1011101110110101
1000111100001100
0100101011000010

Notare che quest'ultima addizione ha generato un riporto che è stato scartato. Il complemento dei bit 0100101011000010 del risultato è 1011010100111101, che diventa il checksum.

Il ricevitore calcola la somma dei tre gruppi di 16 bit ricevuti, aggiunge anche il checksum e si aspetta di ottenere un numero formato da tutti 1, cioè 1111111111111111. Se c'è un bit a 0 UDP segnala l'errore. La correzione del messaggio non è possibile, per cui si dovrebbe chiedere la ritrasmissione del pacchetto.

UDP introduce il controllo degli errori, anche se questo controllo avviene al livello 2. La ragione è che lungo il percorso potrebbe esserci un protocollo di livello 2 che non fornisce il controllo degli errori, quindi per sicurezza provvede il protocollo del livello Trasporto.

PORT SCANNING

Un processo server aspetta su una porta aperta che un client gli chieda un servizio.

Alcune porte sono riservate altre sono usate da applicazioni di rete. Di conseguenza, se si scopre la porta aperta su un host si è in grado di conoscere l'applicazione corrispondente in esecuzione su quell'host. Questa informazione è molto utile agli amministratori di rete, che sono interessati a conoscere quali applicazioni sono in esecuzione sui computer della rete.

Ma anche gli attaccanti sono interessati a conoscere le porte aperte sui computer. Se si scopre che un host sta eseguendo un'applicazione, di cui si conosce un difetto nella sicurezzza, (ad esempio, un server SQL in ascolto sulla porta 1434 poteva essere vittima di un attacco "buffer overflow", che permetteva ad un utente della rete di eseguire qualsiasi elenco di istruzioni su quell'host), allora quell'host è vulnerabile ad un attacco.

È molto facile determinare quali applicazioni sono in ascolto sulle porte dell'host. Infatti, per questi scopi esistono dei programmi di dominio pubblico, detti "port scanners". Il più noto è nmap, che si può ottenere gratuitamente all'indirizzo: http://nmap.org ed è incluso in molte distribuzioni Linux.

Per il protocollo TCP, nmap genera in sequenza dei numeri di porta, alla scoperta di quelle che accettano connessioni.

Per il protocollo UDP, nmap genera in successione i numeri di porta e aspetta di ricevere un segmento di risposta.

In entrambi i casi, nmap restituisce lo stato (aperta, chiusa, irraggiungibile) di tutte le porte scoperte.

Un host su cui viene eseguito nmap può tentare di scansionare ogni computer collegato a Internet.