Lezione 8

Transcript

Lezione 8
CAPITOLO 12. SUITE DI PROTOCOLLI TCP/IP
12.5
88
UDP (User Datagram Protocol)
L’UDP (User Datagram Protocol) é uno dei due protocolli del livello di
trasporto. Come l’IP, é un protocollo inaffidabile, che demanda l’eventuale gestione degli errori di trasmissione e del riordinamento dei pacchetti in
ricezione ad un livello superiore.
Mentre il protocollo IP si occupa del trasferimento dei pacchetti tra due
host, il protocollo UDP aggiunge la possibilitá di distinguere tra piú destinazioni (i programmi applicativi) sullo stesso host. Piú che l’host, il vero
destinatario di un pacchetto é infatti un’applicazione (programma) che gira
su di esso, sia allo scopo di realizzare un servizio (server e–mail, web, ecc.)
che allo scopo di consentire ad un utente di usufruire di un servizio (client).
Infatti, i dati o le richieste che un utente formula attraverso un client devono
poter giungere ad un programma in esecuzione (server) in grado di elaborarle. L’UDP, cosı́ come l’altro protocollo di trasporto, consente di indirizzare
un pacchetto verso uno specifico servizio (realizzato da un’applicazione) su
un determinato host.
Ció é fatto tramite un insieme di punti astratti di destinazione (e sorgente), detti porte di protocollo. Una porta, definita da un numero intero a 16
bit (per un totale di 65536 possibili porte) viene utilizzata da un processo
(programma in esecuzione) per stabilire un collegamento con un altro processo che gira su un altro host. L’header del pacchetto UDP conterrá quindi
i numeri di porta di destinazione e sorgente (l’header del pacchetto IP che lo
contiene conterrá invece gli indirizzi IP degli host destinazione e sorgente).
Un’applicazione che vuole inviare un pacchetto ad un’altra applicazione
che realizza un certo servizio su un certo host (server) invierá un pacchetto
UDP indicando il numero di porta appropriato (su cui l’applicazione destinazione é nota essere in ascolto). Il sistema operativo dell’host destinazione
analizzerá l’header del pacchetto UDP e provvederá ad inviare il pacchetto
all’applicazione in ascolto (se c’é) sul numero di porta specificato. Tale applicazione userá la porta sorgente per comunicare con l’applicazione che ha
iniziato la comunicazione.
Per iniziare la comunicazione, l’applicazione sorgente deve conoscere il
numero di porta a cui indirizzare i pacchetti. A tale scopo un certo numero di
porte sono state assegnate a determinati servizi (well–known ports) da parte
di un’autoritá centrale. Ad esempio, tra di esse troviamo (sono usualmente
memorizzate in un file denominato services)
ftp-data
20/tcp
ftp-data
20/udp
# 21 is registered to ftp, but also used by fsp
ftp
21/tcp
CAPITOLO 12. SUITE DI PROTOCOLLI TCP/IP
ftp
21/udp
ssh
22/tcp
ssh
22/udp
telnet
23/tcp
telnet
23/udp
# 24 - private mail system
smtp
25/tcp
smtp
25/udp
time
37/tcp
time
37/udp
rlp
39/tcp
rlp
39/udp
nameserver
42/tcp
nameserver
42/udp
. . . . . . . . . .
http
80/tcp
http
80/udp
pop2
109/tcp
pop2
109/udp
pop3
110/tcp
pop3
110/udp
. . . . . . . . . .
imap
143/tcp
imap
143/udp
89
fsp fspd
# SSH Remote Login Protocol
# SSH Remote Login Protocol
mail
mail
timserver
timserver
resource
resource
name
name
#
#
#
#
resource location
resource location
IEN 116
IEN 116
www www-http
# WorldWideWeb HTTP
www www-http
# HyperText Transfer Protocol
pop-2
postoffice
# POP version 2
pop-2
pop-3
# POP version 3
pop-3
imap2
imap2
# Interim Mail Access Proto v2
Richiedendo un servizio, ad esempio la visualizzazione di una pagina web,
il client utilizzato invierá una richiesta alla porta 80 dell’host destinazione.
Tale assegnazione puó essere anche forzata dall’utente. Ad esempio, se nel
browser (client) web utilizzato digitiamo
www.unifi.it:8080
il client invierá la richiesta di verso la porta 8080. Se peró nessun server web
é in ascolto su di essa, la richiesta non verrá raccolta.
La maggior parte delle porte ĺasciato libero. Ognuna di esse puó essere
assegnata dinamicamente dal sistema operativo ad un processo che ne fa
richiesta.
12.6
TCP (Transmission Control Protocol)
Il TCP (Transmission Control Protocol) é l’altro protocollo del livello di trasporto. É nato e si é sviluppato con Internet e non é mai stato completamente
standardizzato. Per esso vengono definite solo le caratteristiche dei servizi
del protocollo, lasciando libera l’implementazione degli stessi.
CAPITOLO 12. SUITE DI PROTOCOLLI TCP/IP
90
Come l’altro protocollo di trasporto, l’obiettivo del TCP é mettere in comunicazione le applicazioni che girano su diversi host. Al contrario dell’UDP,
peró, il TCP mira a realizzare una connessione affidabile tra due host, impiegando una tecnica di conferma di ricezione con ritrasmissione. Ció vuol dire
che l’host di destinazione provvede a inviare delle conferme di avvenuta e
corretta ricezione dei pacchetti. Per non sottoutilizzare la rete, l’host sorgente invia comunque un certo numero di pacchetti senza aspettare conferma.
Nel pacchetto inviato per confermare una corretta ricezione viene indicato il
numero del primo byte dei dati che non é stato ancora ricevuto. Si conferma
cosı́ l’avvenuta corretta ricezione dei byte precedenti e si indica quale pacchetto é eventualmente da ritrasmettere, se la conferma non giunge entro un
tempo di time–out.
Le caratteristiche fondamentali del protocollo TCP sono le seguenti.
• Orientato al flusso (stream). Con ció si intende che i dati sono ricevuti con l’identica sequenza dei byte trasmessi (provvede all’eventuale
riordinamento).
• Connessione a circuito virtuale. Viene fornita una visione del collegamento come un circuito fisico dedicato (circuito virtuale), in cui si
ha una fase di richiesta e accettazione del collegamento, una fase di
scambio di dati, e la chiusura della connessione, anche se si appoggia
al protocollo IP (che é senza connessione, ossia a datagramma).
• Trasferimento bufferizzato. A meno di richieste esplicite da parte dei
livelli superiori, per ottimizzare il numero dei pacchetti da trasmettere, i dati da trasmettere vengono suddivisi in pacchetti e trasmessi
solo quando sono sufficienti a riempire un datagramma relativamente
grande.
• Flusso non strutturato. Il protocollo TCP non entra nel merito del
formato o del tipo dei dati trasmessi, demandando alle applicazioni
l’estrazione e l’interpretazione corretta dei dati dai pacchetti ricevuti.
• Connessione full–duplex. É consentito il trasferimento in entrambe le
direzioni.
Il protocollo TCP assicura quindi una trasmissione affidabile dei pacchetti.
L’UDP mira invece ad un invio rapido degli stessi. Ció fa preferire l’UDP nel
caso di un trasferimento voce/video, in cui lo scarto di un numero limitato di
pacchetti é meno dannoso del ritardo introdotto da un’eventuale ritrasmissione. Il TCP é invece utilizzato quando si vuole assicurare la ricezione dei
dati spediti (es. e–mail, ftp, web, ecc.).
CAPITOLO 12. SUITE DI PROTOCOLLI TCP/IP
Host 1
client web
91
Host 2
client web
187.233.1.34
porta 1234 (client 1)
porta 2555 (client 2)
155.215.6.33
porta 1234
Internet
150.217.8.124
porta 80
Server
web
Figura 12.2: Connessione di piú client ad un unico server mediante TCP.
Come per l’UDP, per identificare l’applicazione sorgente e destinazione del
pacchetto, viene utilizzato il numero di porta. Al solito, tale informazione é
contenuta nell’header del datagramma TCP. Al contrario dell’UDP peró, il
TCP lavora in termini di connessione, dove questa é caratterizzata da due
punti (due applicazioni su due host), ognuno dei quali é caratterizzato da un
indirizzo IP e un numero di porta. La connessione é quindi individuata da 4
numeri (Fig. 12.2)
host 1
host 2
indirizzo IP
indirizzo IP
numero di porta
numero di porta
Ció permette che una porta su di un certo host su cui, ad esempio, é
in ascolto un certo server, possa essere condivisa simultaneamente da piú
connessioni (piú client dallo stesso o da diversi host). Il protocollo distingue
comunque le connesioni poiché almeno uno dei 4 numeri é diverso per le
diverse connessioni. Cosı́, ad esempio, piú utenti si possono collegare al
solito server di posta. Non si ha ambiguitá anche se i protocolli TCP e UDP
condividono la stessa porta, dato che i pacchetti IP contengono l’informazione
del tipo di protocollo contenuto.
Capitolo 13
Protocolli applicativi
In questo capitolo prenderemo brevemente in considerazione alcuni protocolli applicativi della suite TCP/IP, alla base di altrettanti servizi messi a
disposizione degli utenti della rete.
13.1
Telnet
Ogni sistema operativo prevede un’interfaccia a linea di comando, da cui un
utente puó avviare processi, gestire il file system, ecc. ecc. Ad esempio, il
prompt del DOS (cmd o command) nei sistemi Windows.
Telnet é un protocollo, che si appoggia sul TCP, che consente l’accesso
all’interfaccia a linea di comando di un sistema remoto. Per utilizzare tale
servizio, un utente avvierá un client Telnet (ad esempio Telnet, per i sistemi
Windows e Linux/Unix) per connettersi ad un host su cui girerá un server
Telnet.
Dopo una fase di autenticazione, in cui l’utente deve fornire un login ed
una password validi per l’host a cui ci si collega, il client passa tutto ció che
é digitato sull’host dell’utente al server remoto, come se fosse digitato alla
tastiera di quest’ultimo. Tutte le risposte vengono quindi visualizzate sul
monitor del client (Fig. 13.1). Il protocollo consente inoltre la negoziazione
di alcune opzioni da parte del client e del server.
Per consentirne l’uso con sistemi operativi quanto piú eterogenei possibile, il protocollo definisce il formato con cui le sequenze dei comandi e dati
sono inviati sulla rete (NVT: Network Virtual Terminal). La particolare versione del server e del client si occuperá della traduzione da e verso il sistema
operativo ospite.
Nonostante ció che si puó pensare, l’utilizzo di terminali a linea di comando risulta estremamente utile. Ció avviene, ad esempio, nel caso in cui
92
CAPITOLO 13. PROTOCOLLI APPLICATIVI
I/O utente
(tastiera/monitor)
93
host A
host B
client
Telnet
server
Telnet
sistema
operativo
sistema
operativo
Internet
Figura 13.1: Connessione tra client e server Telnet.
un host non sia facilmente raggiungibile e, comunque, per consentire a piú
utenti di accedere contemporaneamente ad una certa macchina, ad esempio, per sfruttrne le capacitá di calcolo. Sotto i sistemi operativi come gli
Unix/Linux, l’interfaccia a linea di comando mette a disposizione un insieme
di strumenti molto potenti per la gestione e la configurazione della macchina
stessa. Inoltre un’interfaccia a linea di comando richiede pochissime risorse,
e puó funzionare anche in condizioni critiche.
Secondo il protocollo Telnet, tutto il traffico, compreso il nome di login e
la password, transita in chiaro, ossia come stringa di testo, quindi potenzialmente visibili anche ad altri utenti. Per questo, in molti casi, per problemi
di sicurezza, viene preferito l’utilizzo del protocollo (e di server/client) SSH
(Secure Shell), che prevede la crittatura di tutti i dati e messaggi in transito tra client e server, comprese le informazioni di login e password di un
utente autorizzato a collegarsi. In tal caso, l’utente avvierá un client ssh, per
connettersi ad un host su cui gira un server ssh.
13.2
FTP (File Transfer Protocol)
Il protocollo FTP (File Transfer Protocol) implementa un meccanismo per
il trasferimento di file tra due host. Oltre a poter esser utilizzato dalle applicazioni, é prevista una semplice interfaccia utente testuale per l’accesso al
file system dell’host remoto. Inoltre é prevista un’autenticazione dell’utente
tramite un nome di login ed una password, e puó essere specificato il formato
dei dati da trasferire, allo scopo di effettuare una conversione automatica