U3_L12_Il livello di trasporto e UDP

Il livello di Trasporto e i suoi protocolli
(pag.156)
U3L12
Il livello di Trasporto
Il livello Transport è il cuore di tutta la gerarchia di protocolli. Il suo compito è quello di fornire un
trasporto affidabile ed efficace dall'host di origine a quello di destinazione, indipendentemente dalla
rete utilizzata, quindi ricevere e/o inviare i dati, suddividerli in pacchetti, se necessario, controllarli e
dove previsto possibilmente correggerli. A tale scopo fornisce servizi al livello superiore e sfrutta i
servizi del livello di rete.
A questo livello è anche affidata la qualità del servizio QoS (Qualità of Service) ovvero che i pacchetti
arrivino, senza errori, tutti, senza né perdite né duplicazioni.
Questo è il livello in cui si gestisce per la prima volta una conversazione diretta fra sorgente e
destinazione (end-to-end), il trasporto è svincolato dai problemi di connessione fisica dei
livelli inferiori.
Da host ad host:
• i messaggi di un’applicazione vengono segmentati e trasformati in PDU (Protocol Data Unit) di
livello4 (trasporto), detti segmenti.
• il livello di trasporto passa le PDU al livello di rete che le incapsula in PDU di livello 3 e le inoltra
in rete
• a destinazione i messaggi passano dal livello 3 al 4 e i messaggi dell’applicazione vengono
ricostruiti
il livello di trasporto rende trasparente il trasporto fisico dei messaggi alle applicazioni.
Da ciò discende che il software di livello transport è presente solo sugli host, e non nei router della
subnet di comunicazione.
Il segmento, ovvero l’unità di dati scambiata dal protocollo di trasporto, è detto TPDU (Trasport
Protocol Data Unit):
1
Servizi offerti dal livello transport
Ricordiamo che per servizi intendiamo quelle interfacce software che vengono utilizzate affinchè
un'entità possa comunicare con un'altra entità di livello inferiore o superiore.
Il servizio offerto da uno strato è rappresentato logicamente con una porta di accesso al servizio, detta
Service Access Point (SAP), che ha un nome unico ed è identificata da un indirizzo.
I servizi realizzati dal livello transport possono essere:
•
•
•
•
•
•
(pag.167)
Gestione della connessione: poiché generalmente il livello rete non stabilisce una connessione
con l'host di destinazione, il livello di trasporto si incarica di realizzare una connessione che
viene poi chiusa quando non è più necessaria.
Corretto ordine di consegna e controllo errori. Poiché i pacchetti possono seguire percorsi
diversi all'interno della rete, il livello di trasporto verifica che i pacchetti vengano riordinati
nella giusta sequenza prima di passarli al livello superiore.
Trasferimento affidabile. Il protocollo di trasporto si occupa di garantire che tutti i dati inviati
vengano ricevuti; nel caso il servizio di rete utilizzato perda pacchetti, il protocollo di trasporto
si occupa di ritrasmetterli.
Controllo di flusso. Se gli host coinvolti nella comunicazione hanno prestazioni molto
differenti può capitare che un pc più veloce "inondi" di dati uno più lento. Mediante il controllo
di flusso, un host in "difficoltà" può chiedere di abbassare il tasso di trasmissione in modo da
poter gestire le informazioni in ingresso.
Controllo di Congestione: il protocollo di trasporto riconosce uno stato di congestione della
rete, e adatta di conseguenza la velocità di trasmissione.
Multiplazione. Il protocollo di trasporto permette di stabilire diverse connessioni
contemporanee tra gli stessi due host, utilizzando le “porte” (di cui parleremo). Nell'uso
comune, diversi servizi utilizzano porte diverse.
Nessuno di tali servizi è obbligatorio, quindi per ciascuna applicazione è possibile scegliere il
protocollo più adatto allo scopo.
Sotto certi aspetti i servizi di livello transport assomigliano a quelli di livello data link. Infatti si
occupano, fra le altre cose, anche di:
•
•
•
controllo degli errori;
controllo di flusso;
riordino dei TPDU.
Ci sono però delle importanti differenze. Quella principale è che:
•
•
nel livello data link fra le peer entity c'è un singolo canale di comunicazione;
nel livello transport c'è di mezzo l'intera subnet di comunicazione.
2
Proprietà ed esempi di Servizi
- affidabilità della comunicazione e sequenza dei flussi di dati
- connessione affidabile non affidabile
- non connessione affidabile non affidabile
- datagramma senza connessione non affidabile
- connessioni affidabili sequenze di messaggi
Ma anche richieste diverse: solo garanzia di sequenza di dati che si possono anche perdere, anche dati
che vogliamo che siano ricevuti, sequenze di byte che richiediamo ricevute in modo unico, …
Primitive a livello transport
Per accedere ad un servizio e poter usare i protocolli vengono fornite all’entità di livello delle funzioni
di base chiamate primitive.
Le primitive servono a richiedere il servizio e essere informati dell’esito della richiesta e devono
contenere tutte le informazioni necessarie al fornitore del servizio.
Ad esempio:
E ogni primitiva può avere quattro possibili parametri:
- Request - il service user richiede un servizio (una azione)
- Indication - il service provider indica al service user che è stato richiesto un servizio (segnalazione di
evento)
- Response - il service user specifica la risposta alla richiesta di servizio (una azione)
- Confirm - il service provider segnala la risposta alla richiesta di servizio (segnalazione di evento)
Esempio (pag. 160)
3
La multiplazione e le porte
Un host connesso in rete è identificato da un indirizzo IP (o più di uno in caso di router) e ogni singolo
host può usufruire contemporaneamente di uno o più servizi a livello application che utilizzano il TCP
a livello transport, l’utilizzo del solo indirizzo IP non è sufficiente a indirizzare correttamente i dati
provenienti dalla rete all’applicazione giusta. Si pensi ad esempio che sul medesimo host si stia
navigando in internet e facendo un download di un file, il browser utilizzerà il protocollo http e www a
livello application e il download l’FTP ma a livello di transport tutti e due utilizzeranno il TCP,
come farà quindi il TCP a indirizzare correttamente i dati per il web-browser e quelli per l’FTP?
Più applicazioni possono essere attive su un end-system e il livello di trasporto svolge funzioni di
multiplexing/demultiplexing (ciascun collegamento logico tra applicazioni è indirizzato dal livello di
trasporto):
In Internet le funzioni di multiplexing/de multiplexing vengono gestite mediante indirizzi contenuti
nelle PDU di livello di trasporto.
Tali indirizzi sono lunghi 16 bit e prendono il nome di porte.
Le porte, numerate da 0 a 65.536, corrispondono ad ogni applicazione sul server in ascolto e si
suddividono in tre parti:
1. Well Known Ports (da 0 a 1023)
Sono porte assegnate univocamente e sono riservate ai servizi server standard. I client non dovrebbero
mai usare queste porte.
2. Registered Ports (da 1024 a 49151)
L’utilizzo di questo insieme di porte è generalmente libero nonostante contenga dei servizi registrati.
Non esistono vincoli restrittivi a riguardo tanto che tutti i client usano normalmente le porte a partire
dalla numero 1024 per collegarsi ad un sistema remoto.
3. Dynamic and/or Private Ports (da 49152 a 65535)
Nessun servizio è registrato in quest’area. Il suo utilizzo e assolutamente libero.
Le porte tra 0 e 1023 sono assegnate dalla IANA (Internet Assigned Number Authority), di seguito
vengono elencate alcune di quelle più utilizzate:
Porta
0
7
13
20
21
23
25
Servizio
Riservato
Echo
DAYTIME Restituisce data e ora
FTP (Canale dati)
FTP (Canale controllo)
Telnet
Smtp
Protocollo
UDP
UDP
UDP
TCP
TCP
TCP
TCP
4
37
42
43
53
80
110
139
161
513
514
525
TIME ora
NAME Server dei nomi host
WHOIS Chi è in servizio
DNS
http
Pop (versione 3)
Servizi NetBios
SNMP Monitor di rete
WHO Demone Remote Who UNIX
SYSLOG system log
TIMED demone Time
UDP
UDP
UDP
TCP
TCP
TCP
UDP
UDP
UDP
UDP
UDP
Nel momento in cui un host mittente voglia inviare delle informazioni ad un host di destinazione
riguardante un particolare servizio, l’host origine richiederà una connessione specificando indirizzo IP
e porta del servizio, la combinazione indirizzo IP e numero della porta prende il nome di indirizzo di
socket, una socket può essere considerata né più né meno che un punto di accesso all’host:
Ci pensano le entità di trasporto a suddividere il flusso in arrivo dal livello application in segmenti, a
trasmetterli e a ricombinarli in un flusso che viene consegnato al livello application di destinazione.
Quando un processo viene associato ad una porta (lato cliento lato server) viene associato sempre dal
sistema operativo a due code, una d’ingresso e una d’uscita, per non perdere la priorità di esecuzione.
Funzionalità di buffering dei dati.
Esempio di Multiplazione/Demultiplazione
Multiplazione: Creazione dei segmenti provenienti
dai messaggi di diversi processi applicativi
La multiplazione avviene dal lato del nodo
mittente
Demultiplazione: Ogni segmento dello strato
di trasporto possiede un campo contenente
l’informazione usata per determinare a quale
processo deve essere consegnato il segmento
La demultiplazione avviene dal lato del nodo
destinatario
5
Qualità del Servizio
QoS (Quality of Service) e un servizio aggiuntivo introdotto nel livello di trasporto che permette di
specificare appunto la qualità del servizio richiesta.
L'utilità di questo servizio si nota soprattutto nelle reti medio/grandi, dove c'è un più che discreto
traffico di dati e alcune connessioni necessitano di una “qualità” comunque elevata. La qualità in
evidenza è la velocità di trasferimento dei dati. Sostanzialmente si può specificare un range di valori
entro il quale definire la qualità del servizio per differenziare a dovere le diverse necessità.
Ad esempio:
- se un server di posta consegna una mail con mezzo secondo di ritardo (ma anche con mezzo
minuto) nessuno se ne accorge o ci fa caso: questa trasmissione può accontentarsi del valore più
basso della scala.
- se un applicazione di video streaming trasmette ogni frame video con un ritardo di mezzo secondo,
allora sì che la gente se ne accorge: una tale trasmissione dovrà richiedere il più alto livello di
qualità del servizio
Le stazioni trasmissive negoziano all’inizio per concordare i parametri da utilizzare e se non si
raggiunge un accordo la connessione può anche essere rifiutata.
Negoziazione del QoS
I protocolli del livello di Trasporto
All’interno dell’architettura TCP/IP, il livello di trasporto è basato su due protocolli:
•
•
TCP (Transmission Control Protocol) connesso e affidabile RFC 793, 1122 e 1323;
UDP (User Datagram Protocol) non connesso e non affidabile RFC 768.
I protocolli TCP / UDP forniscono quindi il meccanismo di trasferimento dei dati.
Il TCP è un protocollo cosiddetto connection oriented , ovvero garantisce la consegna dei dati inviati
tra un host e un altro, si stabilisce prima una connessione tra i due host e poi inizia il trasferimento dati.
L’UDP invece non garantisce che i dati siano giunti a destinazione. La scelta dell’uso di un protocollo
rispetto ad un altro è da decidersi in base all’esigenza, l’UDP è più veloce e meno sicuro, il TCP è più
sicuro ma più lento in quanto oltre ad occuparsi della consegna delle informazioni durante una
transazione TCP è necessario eseguire tutta una serie di controlli e impostazioni sullo stato della
connessione. Il protocollo TCP è stato progettato per fornire un flusso di byte affidabile, da sorgente a
destinazione.
6
In base al tipo di applicazione viene scelto il tipo di protocollo di trasporto più adatto:
Il protocollo UDP
Il protocollo UDP è quindi un protocollo non connesso (connession-less) e non affidabile, utile per
inviare dati senza stabilire connessioni (ad esempio per applicazioni client-server).
Non viene quindi stabilita nessuna connessione e l’UDP si limita ad inviare i pacchetti sulla rete senza
richiesta di conferma all’avvenuta ricezione, quindi non verifica se l’host di destinazione abbia o meno
ricevuto le informazioni che gli sono state inviate.
Il protocollo viene utilizzato da quelle applicazioni che inviano piccole quantità di dati o dove è
necessario avere un’alta velocità di trasferimento (ad esempio nello streaming audio e video) e inoltre,
contrariamente al TCP, l’UDP è in grado di supportare il multicast, ovvero l’invio di un’informazione
ad un gruppo di destinatari
Utilizza i numeri di porta in modo che un indirizzo IP specifico possa identificare un processo
particolare: le porte UDP sono diverse dalle porte TCP.
La trasmissione funziona così:
• a priori l’host mittente conosce la porta e l’indirizzo IP del destinatario.
• Il mittente invierà un pacchetto UDP (incapsulato in un datagramma IP)
• Il pacchetto sarà ricevuto dal destinatario che al livello IP eseguirà un controllo ed estrapolerà il
pacchetto arrivato per controllare che è un pacchetto UDP.
• In seguito, prelevato il numero di porta, si eseguirà una verifica se sull’host ricevente la
Destination port è in ascolto, in quel caso saranno recapitati i dati al livello successivo
altrimenti sarà inviato un paccheto ICMP (Internet Control Message Protocol) all'host mittente
con messaggio di port unreachable (porta irraggiungibile).
L’header di un segmento UDP è molto semplice:
Formato dello header UDP
7
dove:
Source Port: campo di 16 bit (facoltativo), contiene la porta UDP di origine dell'host sorgente;
Destination Port: campo di 16 bit, contiene la porta UDP di destinazione del pacchetto sull'host
remoto;
Lenght: campo di 16 bit, contiene la lunghezza in byte dell'intestazione UDP e dei dati;
Checksum: campo di 16 bit, è utilizzato per verificare l'integrità dei dati trasportati;
Dati: contiene il messaggio fornito dal livello applicativo.
Gli unici servizi che UDP fornisce sono:
-
multiplazione/demultiplazione
-
rilevazione degli errori (tramite il calcolo del checksum sia dal mittente che dal ricevente, con
successivo controllo)
La funzione di calcolo del checksum può essere disattivata, tipicamente nel caso di traffico in tempo
reale (come voce e video) per il quale è in genere più importante mantenere un elevato tasso di arrivo
dei segmenti piuttosto che evitare i rari errori che possono accadere.
NOTA:
Attraverso un network sniffer è possibile visualizzare i vari campi di un pacchetto UDP. Un
esempio:
Source IP: 192.168.0.97 Target IP: 195.130.224.18 UDP Length: 27
Essendo UDP incapsulato in IP vediamo prima l'intestazione IP con gli indirizzi sorgente e destinazione e
la dimensione
Source Port: 33997 Target Port: 53 Leng: 35 ChkSum: 2342
Nell'header UDP troviamo la porta sorgente (33997) e la porta destinazione (53 - richiesta DNS) la
dimensione (35) ed il checksum (2342)
00000000: 1A B4 01 00 00 01 00 00 00 00 00 00 09 6C 6F 63
...
Infine troviamo il campo dati
Calcolo del Checksum
L'header UDP è breve, ma contiene un metodo complicato per calcolare un checksum. Si considera il
pacchetto come somma di parole di 16 bit, se il numero di byte nella sezione dati del pacchetto è
dispari, il programma di calcolo aggiunge un byte di padding all- zero alla fine dei dati. Questo assicura
che il pacchetto contiene completi parole di 16 bit. Successivamente, le parole da 16b bit vengono
sommate a due a due, considerando i riporti, quindi viene fatto il complemento a 1 del risultato.
Il programma ricevente esegue lo stesso calcolo. Se i risultati non sono gli stessi, il pacchetto viene
scartato ma nessun messaggio di errore viene rispedito al mittente.
Esempio:
8
sommando i riporti. Facendo quindi il complemento a 1 il checksum sarà: 1011010100111101
Il servizio di trasferimento affidabile
(pag. 177)
Un servizio si dice affidabile … abbiamo già parlato di finestre scorrevoli
(studiare capitolo lezione 3 pagina 177-181) RTT, RTO …
Un esempio di uso dei numeri di sequenza: una sessione telnet
•
•
•
Seq= Numero sequenza (numero del primo byte di dati nel segmento)
Ris = Numero riscontro: (numero sequenza del prossimo byte che ci si aspetta dall'altro lato)
Nell'esempio in figura, l'utente sul terminale A apre una sessione telnet. Ricordiamo che telnet è
un protocollo di livello applicazione per il collegamento remoto che usa TCP come protocollo
di livello trasporto. Dopo aver aperto la sessione telnet e quindi aver iniziato la connessione
TCP avviene quanto segue:
o L'utente sul terminale A digita la lettera W
o B riceve W, spedisce il riscontro per (Ris = 106) e rispedisce anche W (per l'eco sul
terminale)
o A riceve W e rispedisce il riscontro
9