Copyright © 1996, 1997 Università di Firenze. All rights reserved.
license available.
CORSO DI TELEMATICA
Domain Name System - Protocolli UDP e TCP
di: Emiliano Nundini e Francesco Scapecchi
|
Molti sistemi operativi permettono la gestione della multiprogrammazione, cioè la possibilità di avere più Task in esecuzione contemporaneamente. Un Task identifica un processo a livello utente (programma applicativo) attualmente in esecuzione. Ogni Task potrebbe essere pensato come destinazione o sorgente di un messaggio, ma questo porterebbe a notevoli complicazioni. La instabilitità di un Task, dato che esso può essere distrutto o generato molte volte dal S.O. (riavvio della macchina), porterebbe alla necessità di dover complicare notevolmente il software che gestisce la trasmissione e la ricezione dei messaggi; inoltre risulta più logico associare come destinazione ad un messaggio la funzione che un Task deve svolgere, piuttosto che il Task capace di svolgere tale funzione (basti pensare al FTP), dato che possono esistere più Task capaci di svolgere la stessa funzione. Per questi motivi ogni macchina è fornita di un insieme di punti astratti di destinazione, le così dette Porte di Protocollo, identificate da un numero positivo. Il S.O. provvederà poi ad associare una porta di protocollo ad un processo attivo che intende comunicare. Un trasmettitore, quindi, per spedire un messaggio dovrà conoscere l'indirizzo IP dell'Host destinazione e il numero di porta del protocollo del processo destinazione.
|
Nell'insieme dei protocolli TCP/IP, lo User Datagram Protocol, fornisce il meccanismo primario utilizzato dai programmi applicativi per inviare messaggi ad altri programmi applicativi. L' U.D.P. utilizza come informazioni di destinazione il numero di Porta del Protocollo del processo di destinazione; inoltre invia anche la Porta del Protocollo del processo mittente per permettere la ricezione di una eventuale risposta. L' U.D.P. è ad un livello superiore al protocollo IP, infatti, per spedire i messaggi, utilizza il sottostante Internet Protocol, ereditandone tutte le caratteristiche; prima fra tutte l'inaffidabilità del servizio di consegna dei datagrammi. L' U.D.P. non aggiunge nulla alle caratteristiche del' IP (non usa riscontri per verificare la corretta ricezione dei messaggi, non effettua ordinamento ecc. ecc.). I messaggi U.D.P. possono, quindi, essere persi, venire duplicati da qualche nodo intermedio di rete o arrivare fuori ordine. Un programma applicativo che intenda utilizzare l' U.D.P. per comunicare sulla rete, deve assumersi l'onere di gestire tutte le problematiche connesse sopra mensionate.
|
Nella Slide è evidenziato il formato dei campi che compongono un datagramma U.D.P.. Esso è composto da due parti logiche :
L' intestazione e composta da :
Questi due campi vengono utilizzati per demultiplexare i datagrammi nella macchina Host, tra i vari processi attivi, connessi con delle porte di protocollo.
|
|
Il datagramma UDP, per essere formato completamente ha bisogno di molte più informazioni. Per calcolare il valore da inserire nel campo Checksum, il software crea una pseudo-intestazione composta dai seguenti campi:
Questa pseudo-intestazione viene calcolata e posizionata in testa al datagramma UDP. Viene inserito un ulteriore byte di zeri per raggiungere un multiplo di 16. Successivamente viene calcolata la Checksum su tutto il messaggio creato, viene scartata la pseudo-intestazione e spedito il datagramma. In fase di ricezione, il livello UDP, ricrea la pseudo-intestazione interagendo con il livello IP, calcola nuovamente la checksum e verifica la correttezza del messaggio ricevuto. In caso di errore viene generato un messaggio di ritrasmissione del datagramma.
|
|
Nello schema viene evidenziato come i programmi applicativi accedono all'UDP, attravesro l'incapsulamento delle informazioni. Un messaggio UDP, completo della propria intestazione, viene posizionato nell'area dati del datagramma IP del livello inferiore ( Incapsulamento ); a sua volta il livello IP aggiunge la sua intestazione, tra cui l'indirizzo IP della macchina destinazione, e passa tutto al livello inferiore. Il datagramma IP viene nuovamente posizionato nell'area dati, ma questa volta del frame trasmissivo, che poi verra fisicamente spedito in rete. In fase di ricezione la pila viene percorsa in senso inverso, cioè dal basso verso l'alto. Il frame trasmisivo raggiunge il livello di interfaccia di rete, il quale interpreta l'intestazione, la elimina ed estrae il datagramma IP, che passa al livello superiore. Il livello IP esegue gli stessi passi, cioè interpreta l'intestazione, la elimina e passa il datagramma UDP al livello superiore. Il livello UDP riceve un datagramma identico a quello che il pari livello mittente ha creato (escludendo eventuali errori di trasmissione). In caso di ricezione errata, il livello UDP genera un messaggio di errore e comunica al mittente di ritrasmettere il messaggio completo.
|
|
Abbiamo descritto il funzionamento del
protocollo UDP, evidenziando la sua possibilità di
identificare come destinazione un processo attivo in una
macchina host. Questo meccanismo prende il nome di Multiplexing
(Demultiplexing in ricezione ) dei datagrammi. In
fase di ricezione, la macchina host, preleva dalla rete
il messaggio e dopo alcune elaborazioni questo ragguinge
il livello UDP privo delle intestazioni dei livelli
sottostanti. Il livello UDP interpreta l'intestazione del
datagramma ed effettua un demultiplexing basato sul
numero di porta del protocollo di destinazione.
L'assegnazione della porta di protocollo ad processo da
parte del sistema operativo avviene sotto richiesta del
processo stesso; una volta assegnata tale processo farà
riferimento ad essa per trasmettere informazioni sulla
rete. Analogamente tale porta verrà utilizzata dagli
altri processi su macchine host per comunicare con quel
processo attivo. Se nella fase di demultiplexing, il
datagramma fa riferimento ad una porta di protocollo non
attualmente allocata, esso viene scartato e l'UDP genera
un messaggio di errore (ICMP) di Porta
irraggiungibile.
|
|
Due processi situati su macchine
diverse, per potersi scambiare informazioni, hanno
necessità di connettersi ad una porta di protocollo
assegnata dal sistema operativo. Le porte di protocollo
sono quindi essenziali per le comunicazioni tra processi.
Come si assegna una porta di protocollo ad un processo?
Esistono due metologie fondamentali :
I progettisti del TCP/IP hanno poi utilizzato una tecnica
che può essere considerata un ibrido tra le due sopra
descritte. Infatti esistono dei numeri di porta di
protocollo assegnati su base universale ai servizi più
comuni ed utilizzati come ad esempio il File Trasfert.
Questi valori sono globalmente noti. La maggior parte
delle porte di protocollo sono, però, lasciate a
disposizione dei processi applicativi locali e verranno
assegnate solo su richiesta del processo stesso, senza
nessuna logica apparente, una assegnazione dinamica. Di
seguito è riportata una tabella campione illustativa di
porta UDP assegnate attualmente.
| Decimale | Parola-chiave | Parola-chiave Unix | Descrizione |
|---|---|---|---|
| 0 | - | - | Riservata |
| 7 | ECHO | echo | Eco |
| 9 | DISCARD | discard | Scarto |
| 11 | USERS | systat | Utenti attivi |
| 13 | DAYTIME | daytime | Ora del giorno |
| 15 | - | netstat | Chi è collegato o NETSTAT |
| 17 | QUOTE | qotd | Citazione del giorno |
| 19 | CHARGEN | chargen | Generatore di caratteri |
| 37 | TIME | time | Tempo |
| 42 | NAMESERVER | name | Server di nomi dell'Host |
| 43 | NICNAME | whois | Chi è |
| 53 | DOMAIN | nameserver | Server di nomi del dominio |
| 67 | BOOTPS | bootps | Server del protocollo di bootstap |
| 68 | BOOTPC | bootpc | Client del protocollo di bootstrap |
| 69 | TFTP | tftp | Trivial File Transfer |
| 111 | SUNRPC | sunrpc | RPC di Sun Microsystem |
| 123 | NTP | ntp | Protocollo dell'ora di rete |
| 161 | - | snmp | Monitor di rete SNMP |
| 162 | - | snmp-trap | Trappole SNMP |
| 512 | - | biff | Comsat di Unix |
| 513 | - | who | Demone rwho di Unix |
| 514 | - | syslog | Log di sistema |
| 525 | - | timed | Demone di tempo |
Sono mostrate le parole-chiave standard e le loro equivalenti in Unix