[successivo] [precedente] [indice]

Progettazione del Server UDP

Gestione Code

Il programma applicativo dal lato server UDP consiste tipicamente in un demone che ascolta su di un porto e si attiva quando sono in arrivo datagrammi su quel determinato porto.

Dato che i datagrammi sono trasmissioni puntuali e indipendenti, si preferisce progettare server UDP che girano in modo iterativo. L'alternativa, comune con server TCP, e' di eseguire una chiamata fork() per generare una copia del server, a cui e' passata la comunicazione in arrivo da gestire. Per datagrammi singoli questo richiederebbe troppe operazioni di fork. Se si prevede un traffico datagrammi notevole in arrivo, e' opportuno lanciare simultaneamente piu' copie del processo server.

I datagrammi in arrivo sono posti in una coda di ricezione, mentre il server li gestisce singolarmente. Puo' darsi che tale coda vada in overflow. In molte implementazioni il protocollo UDP non informa il processo ricevente dell'overflow, ne' informa il processo remoto inviante dello scartamento di datagrammi in seguito a overflow della coda di ricezione. Occorre che il codice degli applicativi preveda questa possibilita'.

Indirizzo Destinazione

Alcuni applicativi invianti hanno bisogno di sapere l'indirizzo IP di destinazione, una volta che il datagramma e' stato inviato. Il protocollo UDP non sempre ha la capacita' di compiere questa operazione. P.es. SVR4, SunOS e Solaris non ne sono in grado.

Limitazione Indirizzi Locali

I server UDP solitamente accettano datagrammi da un indirizzo qualsiasi della rete locale, destinato ad un qualsiasi indirizzo IP destinazione. Naturalmente lo strato IP ha gia provveduto a riconoscere il pacchetto in arrivo come valido per la destinazione locale, ma puo' darsi che la stazione locale abbia piu' interfacce di rete o faccia parte di una sottorete.

E' possibile, al lancio del server UDP, specificare che vengono accettati datagrammi destinati solo ad un indirizzo IP specifico. Tutti gli altri datagrammi vengono scartati e causano l'invio di un messaggio ICMP Destination Unreachable, col codice indicante che il porto di destinazione non era raggiungibile.

Si possono lanciare piu' server UDP che ascoltano sullo stesso porto, ciascuno associato ad un indirizzo di destinazione diverso. Occorre settare un flag che informa il sistema operativo dell'intenzionalita' di questa operazione.

I server UDP associati ad indirizzi specifici hanno sempre priorita' piu' alta dei server associati ad un indirizzo di destinazione generico.

Limitazione Indirizzi Remoti

E' possibile, all'atto del lancio di un server UDP, restringere l'accettazione di datagrammi solo da un particolare indirizzo IP remoto, e anche solo da particolare Porto della stazione remota.

Su molti sistemi Berkeley questo ha una conseguenza: l'indirizzo locale UDP viene anche settato, ed e' l'indirizzo dell'interfaccia sulla quale Ip compie la ricezione dei pacchetti provenienti dalla stazione remota.

Recipienti Multipli

Normalmente un datagramma destinato ad un indirizzo IP e ead un Porto viene recapitato ad un solo server ricevente.

Sui sistemi che supportano il multicasting e' possibile far si' che i datagrammi in arrivo siano recapitati a piu' server in ascolto sullo stesso porto. Occorre normalmente informarne il sistema operativo tramite un flag appropriato.