7. Il protocollo IP

Transcript

7. Il protocollo IP
7. Il protocollo IP
7.1. Introduzione
IP è il protocollo che è responsabile della interconnessione di
sottoreti che costituisce l'internet
È un protocollo di consegna di messaggi senza connessione
(connectionless)
7.2. Una rete virtuale
Nel capitolo 3 abbiamo studiato questo aspetto. L'utente non si
deve preoccupare delle tecniche necessarie per realizzare
l'interconnessione di due qualunque macchine nel mondo
Ora ci occuperemo proprio di come si realizza questa astrazione di
rete virtuale
7.3. Architettura e filosofia di internet
APPLICATION SERVICES
RELIABLE TRANSPORT SERVICE
CONNECTIONLESS PACKET DELIVERY SERVICE
Figura 7-1
Internet è organizzata su tre livelli di servizio, che qui sono
mostrati
Ognuno di questi livelli di servizio è realizzato mediante
opportuni protocolli perché sono servizi distribuiti
Pagina 7.1
7.4. In concetto di consegna inaffidabile
Il software di internet è progettato attorno a questi
tre livelli di servizio. Il suo successo dipende in gran
parte dal fatto che questa architettura è
sorprendentemente robusta ed adattabile
E la cosa che più sorprende il profano è che il livello di base della
gerarchia è volutamente inaffidabile!
7.5. Un sistema di consegna privo di
connessione (connectionless)
Il servizio fondamentale (IP) è un sistema di consegna
• di pacchetti
• senza necessità di creare una connessione fra mittente e
destinatario
• best-effort, cioè fa quello che può al meglio, sfruttando al
meglio le risorse disponibili
• inaffidabile, perché non è in grado di garantire una data qualità
di servizio
Connectionless: ogni pacchetto viaggia sulla rete "per conto suo",
seguendo la strada migliore/possibile in quel momento: le risorse
sono sfruttate al meglio e non sono "prenotate" per una
connessione
Inaffidabile: come conseguenza dell'uso ottimale delle risorse, i
pacchetti possono essere persi, essere duplicati, ritardati,
consegnati in ordine diverso da quello della spedizione
Pagina 7.2
Importante: i pacchetti non sono persi perché i mezzi di
comunicazione sono fallaci (anzi, sono in genere molto robusti),
né perché IP li butta via a capriccio. Vengono persi (buttati)
quando non si hanno risorse locali per gestirli (per es. mancano
buffer!)
7.6. Scopo dell'internet protocol
Realizzare il servizio di consegna di pacchetti connectionless,
best-effort, inaffidabile: Internet Protocol (IP)
1. Definire il formato della unità di base di trasferimento
dell'informazione
2. Realizzare la funzione di routing (instradamento) che
interconnette le varie sottoreti
3. Definire un insieme di regole di protocollo che incorporano la
nozione di consegna connectionless best-effort, inaffidabile:
3.1. come processare i pacchetti
3.2. come e quando generare messaggi di errore
3.3. sotto quali condizioni è ammissibile scartare pacchetti
Ora parliamo del formato dei pacchetti
Pagina 7.3
7.7. I datagram internet
L'unità di trasferimento di dati si chiama internet datagram, IP
datagram oppure semplicemente datagram
Si chiamano datagram per sottolineare che non fanno parte di una
connessione. Hanno struttura simile a quella dei mezzi fisici
DATAGRAM HEADER
DATAGRAM DATA AREA
Figura 7-2
Il formato della DATA AREA non è fissato da IP, ma dai
protocolli di livello superiore
7.7.1. Formato del datagram
0
4
8
16
19
24
31
VERS
HLEN SERVICE TYPE
TOTAL LENGTH
IDENTIFICATION
FLAGS
FRAGMENT OFFSET
TIME TO LIVE
PROTOCOL
HEADER CHECKSUM
SOURCE IP ADDRESS
DESTINATION IP ADDRESS
IP OPTIONS (IF ANY)
PADDING
DATA
....
Il formato non è dettato da considerazioni hardware, neanche da
vincoli di allineamento
Tutti campi di lunghezza fissa tranne IP OPTIONS, che se
presente appunto termina con un campo di padding per allinearsi
al confine di 32bit. Se nn ci sono opzioni l'header è lungo 5 parole
VERS: numero di versione del protocollo usata
HLEN: lunghezza dell'header (notare) in parole di 32 bit
TOTAL LENGTH: lunghezza di tutto il pacchetto in ottetti,
incluso header → 64KB lunghezza massima!
Pagina 7.4
7.7.2. Service type
0
1
2
PRECEDENCE
3
4
5
D
T
R
6
7
UNUSED
PRECEDENCE: è un campo ignorato dalla maggior parte delle
implementazioni, anche se permette di definire la qualità del
servizio (QoS) che il mittente richiede dalla rete: priorità nel
trattamento del pacchetto. È amministrato e quindi non libero
D, T, R: completano la definizione di QoS: D=richiesto basso
ritardo; T=richiesto alto throughput (a scapito del ritardo); R=alta
affidabilità. Sono un suggerimento per il routing, ma non vengono
quasi mai osservati
7.7.3. Incapsulamento del datagram
Occorre comprendere la relazione che esiste fra datagram e frame
fisici
Dato che i datagram non devono essere trattati dall'hardware dei
mezzi di comunicazione, possono avere la lunghezza che il
progettista decide. Ci sono solo 16bit per la lunghezza
Per ragioni di efficienza sarebbe meglio che un datagram
viaggiasse in un solo frame fisico (non spezzato in due):
incapsulamento
DATAGRAM
HEADER
FRAME
HEADER
DATAGRAM DATA AREA
FRAME DATA AREA
Figura 7-5
Pagina 7.5
7.7.4. Dimensione del datagram, network
MTU e frammentazione
Sfortunatamente, ogni mezzo fisico ha una massima dimensione
del frame, scelta in base a considerazione di efficienza e costo
dell'hardware
Es.: ethernet 1500B, proNET-10 2044, X.25 128B, ...Questa è la
maximum transfer unit = MTU
Allora quale dimensione scegliere per spedire un datagram?
Scegliere la più piccola non è conveniente, e per di più non è nota
a chi spedisce, e cambia a seconda della strada seguita dal
datagram!
È quindi compito di IP scegliere una dimensione per il datagram
che sia conveniente per la sottorete di partenza, e poi se IP deve
far passare un datagram in una sottorete la cui MTU è inferiore a
quella del datagram provvederà a spezzarlo in frammenti. Il
processo è chiamato frammentazione
Si noti subito che all'arrivo a destinazione IP dovrà provvedere a
riassemblare i frammenti in un unico datagram, perché gli utenti
di IP non devono preoccuparsi di questa frammentazione
introdotta da IP
Host
B
Host
A
Net1
Net3
MTU=1500
MTU=1500
G1
Net2
MTU=620
G1
Pagina 7.6
La frammentazione avviene, quando avviene, in un qualche router
fra la rete origine e quella destinazione. La dimensione è quella
massima permessa, con il vincolo che la lunghezza sia multipla di
otto ottetti (vedremo poi perché)
Ciascuno dei frammenti ha la stessa forma del datagram originale!
DATAGRAM
HEADER
data1
600 ottetti
data2
600 ottetti
data3
200 ottetti
FRAGMENT 1
HEADER
data1
600 ottetti
FRAMMENTO 1 (offset 0)
FRAGMENT 2
HEADER
data2
600 ottetti
FRAMMENTO 2 (offset 600)
FRAGMENT 3
HEADER
data3
200 ottetti
FRAMMENTO 3 (offset 1200)
Figura 7-7: Gli header dei frammenti 1 e 2 hanno il bit MoreFragments settato per
indicare che un frammento "segue"; l'offset indicato nel campo
dell'header è quello indicato diviso per 8
Ognuno ha il suo header quasi uguale a quello originale:
• il valore del campo FRAGMENT OFFSET indica la posizione
del frammento nel datagramma originale: se diverso da zero è un
frammento
• il terzo bit settato dei FLAGS indica se segue un altro
frammento
• il campo TOTAL LENGTH indica la lunghezza del frammento
Pagina 7.7
7.7.5. Riassemblaggio dei frammenti
I frammenti viaggiano separati fino a destinazione e qui vengono
riassemblati. Svantaggi:
• frammenti piccoli viaggiano in sottoreti con MTU grande
• se un frammenti viene perso, il riassemblaggio non può essere
fatto e quelli arrivati hanno viaggiato invano
Vantaggio: l'operazione di riassemblaggio viene fatta una volta
sola anche se avvengono numerose frammentazioni lungo la strada
Il riassemblaggio è basato su un reassembly timer, che il ricevente
fa partire quando riceve il primo frammento. Se scade, viene
buttato tutto quanto ricevuto
7.7.6. Controllo della frammentazione
I campi interessati sono IDENTIFICATION, FLAGS, e
FRAGMENT OFFSET.
• IDENTIFICATION = intero unico non ripetibile che identifica
il datagramma
• FRAGMENT OFFSET = misurato in unità di otto ottetti (per
risparmiare spazio nell'header). Identifica la posizione del
frammento nel datagramma originale (notare che
frammentazioni in cascata continuano a indicare l'offset rispetto
al datagramma originale). Solo il primo frammento ha 0
• FLAGS = primo bit è riservato (deve essere 0); il secondo se
settato vieta di eseguire frammentazione (se necessaria allora il
pacchetto viene scartato con un messaggio di errore al mittente);
il terzo indica se seguono ancora frammenti. Notare che è
necessario perché la lunghezza del datagramma originale non è
nota al ricevitore
Pagina 7.8
7.7.7. Time to live (TTL)
Il campo TIME TO LIVE specifica il tempo in secondi che il
datagramma può restare nella rete. Chi tratta il pacchetto deve
decrementare il TTL del tempo usato per trattarlo (notare, anche il
tempo in coda di spedizione!): quando il TTL non è più positivo il
pacchetto deve essere scartato (con messaggio di errore al
mittente)
Ogni router deve decrementare almeno di uno il TTL, e poi
dovrebbe aggiungere il tempo di attesa in coda
La cosa essenziale è che venga sempre decrementato, per evitare
che instradamenti sbagliati tengano un pacchetto per sempre nella
rete
7.7.8. Altri campi dell'header
PROTOCOL = analogo al type field dell'ethernet: vi possono
essere più protocolli utenti di IP, e in questo modo l'IP ricevente
sa a chi passare i dati ricevuti (ogni protocollo utente formatta i
dati a modo suo!)
HEADER CHECKSUM = controlla l'integrità dell'header =
somma in complemento a 1 delle parole di 16bit che costituiscono
l'header (in network byte order!) e infine il complemento a 1 del
risultato. Nel fare la somma il campo HEADER CHECKSUM
viene assunto avere valore 0 in spedizione (alla ricezione si
somma e si deve ottenere 0!)
NOTARE: si controlla solo l'header, i dati non vengono
controllati → ogni protocollo di livello superiore scegli la propria
funzione di controllo, e non vengono fatti tre controlli (solo due
perché anche la sottorete fisica controlla i suoi dati e quindi anche
l'header di IP)
SOURCE IP ADDRESS e SOURCE IP ADDRESS sono ovvii
Pagina 7.9
IP OPTIONS (vedi sotto) è l'unico a lunghezza variabile; il campo
PADDING viene aggiunto se necessario ad allinearsi a 32bit
7.8. Internet datagram options
Non è necessario; principalmente per testing e debugging
Alcune opzioni di un solo ottetto option code, altre del codice più
altro; si susseguono una all'altra; se non terminano con la fine
dell'header (quindi c'è padding), c'è una opzione di "fine opzioni"
Option code ha la seguente struttura
0
1
2
COPY OPTION CLASS
3
4
5
6
7
OPTION NUMBER
COPY indica ai router se l'opzione deve essere copiata in tutti i
frammenti oppure solo nel primo
Option Class
0
1
2
3
Meaning
datagram or network control
reserved for future use
debugging and measurement
reserved for future use
Pagina 7.10
Option Option
Class Number Length
Descrizione
0
0
Fine opzioni
0
1
No operation. Per
allineamento
0
2
11
Restrizioni di sicurezza
(militare)
0
3
var Loose source routing
0
7
var Record route
0
8
4
Stream identifier (obsoleto)
0
9
var Strict source routing
2
4
var Internet timestamp
Quelle interessanti sono la Record Route e timestamp, e la Source
Routing
7.8.1. Record route option
La registrazione dell'instradamento seguito dai router e la
registrazione dei timestamp permettono di controllare come
funziona l'internet
Con record route il mittente inizializza una lista vuota di IP
address dei router attraverso cui il pacchetto passa. Ogni router
deve aggiungere il proprio IP address alla lista:
0
8
CODE (7)
16
24
31
LENGTH
POINTER
FIRST IP ADDRESS
SECOND IP ADDRESS
...
LENGTH è la lunghezza totale (in ottetti) dell'opzione, partendo
dal CODE; POINTER permette di inserire il proprio IP address
senza scandire la lista. NOTARE: lo spazio per la lista è allocato
alla partenza! La destinazione deve essere d'accordo a trattare le
route tracciate!
Pagina 7.11
7.8.2. Source route option
Serve per forzare i router a seguire un particolare instradamento
deciso alla partenza, invece che quello che deciderebbero loro
La forma STRICT contiene esattamente la route, senza salti
intermedi. Errore se un router non è direttamente connesso a
quello indicato come successivo nella route
La forma LOOSE invece permette di inserire router intermedi fra
quelli indicati nella route
Il formato dell'opzione è lo stesso, ma POINTER indica il punto
nella route a cui si è arrivati
7.8.3. Timestamp
Viene allocato spazio per la registrazione di IP address e i
corrispondenti valori dell'orologio quando il pacchetto è stato
trattato da quel router
7.9. Conclusioni
A questo punto abbiamo visto due delle cose fondamentali che un
servizio di comunicazione di livello rete deve fornire:
1. un indirizzamento uniforme e globale
2. una funzione consegna di pacchetti che includa
frammentazione e riassemblaggio de pacchetti per rendersi
indipendenti dalle caratteristiche fisiche delle sottoreti
attraversate
Pagina 7.12