[successivo] [precedente] [indice]

Testata IP

La testata di un pacchetto IP e' definita dallo RFC791.

Testata IP

I campi testata sono allineati al confine di 32 bit e trasmessi in formato Big Endian.

Il primo campo e' la Versione, settato a 4 per la versione corrente di IP. Questo campo varra' 6 nella prossima versione. Il campo IHL e' lo Internet Header Length, o lunghezza della testata stessa, misurato in parole da 32 bit. IHL varia da 5, quando non vi sono opzioni, ad un massimo di 15, che permette un massimo di 40 byte per le opzioni.

Il Tipo Servizio definisce la precedenza del pacchetto ed il tipo di routing desiderato. La Lunghezza Totale e' il numero di byte totale del pacchetto, inclusa la testata: la dimensione massima di un pacchetto IP e' di 65535 byte.

I campi Identificazione, Flag ed Offset di Frammento servono a gestire la frammentazione di un pacchetto IP.

Il campo Tempo di Vita (Time To Live - TTL) definisce formalmente la vita massima di un pacchetto espressa in secondi, allo scopo di impedire che alcuni pacchetti entrino in un loop infinito di routing e persistano per sempre nella rete. Questo campo e' molto utile anche a livelli superiori. Per esempio, se TCP attende lo scadere del TTL dopo la chiusura di una connessione, ha la garanzia che non arrivino piu' pacchetti che appartenevano alla connessione chiusa. Il TTL come tempo in secondi e' di difficile implementazione; in pratica i router decrementano di uno questo campo ogni volta che inviano un pacchetto in via di smistamento. Se il valore del TTL scende a zero, il pacchetto viene scartato.

L'Indirizzo Sorgente e l'Indirizzo Destinazione sono gli indirizzi del mittente iniziale e del destinatario ultimo di un pacchetto.

Il campo Protocollo identifica il programma a cui il pacchetto deve essere passato quando giunge a destinazione. Sono definiti vari numeri identificativi di protocollo.

Tipi di Protocolli

Il campo Checksum Testata serve a controllare l'integrita' della testata durante la trasmissione. Il checsum e' definito come:

il complemento a 1 a 16 bit della somma dei complementi ad 1 a 16 bit di tutte le parole a 16 bit della testata, dopo che il campo Checksum stesso e' stato posto a zero

Questo tipo di checksum e' considerato un compromesso accettabile tra velocita' di calcolo e capacita' di detezione errori.

Precedenza e Tipo Servizio

Il campo Tipo di Servizio ha due sottocampi: Precedenza e Tipo di Servizio.

Tipo di Servizio

La precedenza e' un'indicazione della priorita' del pacchetto. Influenza la priorita' di trattamento di di un pacchetto in una coda. Vi sono otto valori di precedenza:

Il documento RFC791 emtte in guardia da possibili abusi del campo di sicurezza e suggerisce che tale campo debba essere gestito solo all'interno di una rete locale.

Il ccampo Tipo di Servizio consiste di cinque bit di flag, di cui quattro definiti:

Solo uno dei bit del campo puo' essere settato.

Molti protocolli di smistamento come OSPF e BGP supportano questo tipo di servizio.

Frammentazione dei Pacchetti

Tronconi diversi di rete supportano trame a basso livello di lunghezze massime diverse. La lunghezza massima tipica di un troncone si chiama il Maximum Transmission Unit (MTU) del troncone.

Se un pacchetto transita da un troncone di rete con MTU alto ad uno con MTU piu' basso, puo' succedere che la sua lunghezza sia piu' elevata del nuovo MTU. In tal caso il pacchetto viene spezzato o "frammentato" in piu' pacchetti componenti.

I frammenti vengono inviati indipendentemente sulla rete dal punto di frammentazione fino alla destinazione finale.

I campi Identificazione, Flag ed Offset di Frammento della testata IP gestiscono la frammentazione.

Il campo Flag e' composto da tre bit. Il primo bit e' sempre zero. Il secondo bit e' il bit Don't Fragment (DF) ed indica che il pacchetto originale non deve essere frammentato. Se questo bit e' settato e vi e' necessita' di frammentazione, il pacchetto viene scartato, e un possibile messaggio ICMP e' inviato al mittente.

Il bit More Fragments (MF) e' settato a 1 per tutti i frammenti del pacchetto originario tranne l'ultimo.

Il campo Offset Frammento e' l'indirizzo in byte che il primo byte del frammento corrente occupava nel pacchetto originario.

La frammentazione puo' avvenire in piu' punti del percorso in rete di un pacchetto, e puo' anche avvenire ricorsivamente. I campi Offset e MF sono sempre espressi relativi al pacchetto originale.

Il campo Identificativo esprime l'identita' del pacchetto originale.

Il riassemblaggio del pacchetto e' compiuto solo dalla destinazione finale, che deve ricomporre tutti i frammenti con lo stesso identificativo.

In caso di perdita in transito anche di un solo frammento, l'intero pacchetto viene scartato. Il ricevente ha un tempo di timeout per consentire a tutti i pacchetti di giungere a destinazione: il timeout e' implementato in modo naturale decrementando il Tempo di Vita del pacchetto ogni secondo e scartando il pacchetto se questo raggiunge lo zero.

Problemi

Il fatto che l'identificativo di frammento sia di soli 16 bit da la possibilita' che venga riusato un identificativo quando i frammenti vecchi con lo stesso identificativo non sono ancora giunti a destinazione. Questo e' evitato attendendo un tempo minimo TTL prima del riutilizzo di un identificativo. Cio' implica un limite teorico massimo di invio di 65536 pacchetti per TTL; TCP ha un TTL massimo di 2 minuti, quindi con una dimensione di pacchetto di 4 kilobyte la banda passante massima e' di 9 Megabit al secondo.

L'arrivo simultaneo di molti pacchetti frammentati puo' causare una scarsita' di buffer sulla stazione ricevente che deve compiere il riassemblaggio.

Una prima soluzione e' la negoziazione di un Path MTU, o minimo MTU di tutto il percorso da stazione inviante a stazione destinazione, prima dell'invio dei pacchetti dati veri e propri. Tutti i pacchetti vengono quindi inviati con il bit Don't Fragment settato. La dimensione dei pacchetti a livello TCP viene inoltre settata allo stesso valore dei pacchetti IP per ottimizzare l'invio.

Opzioni IP

Ogni parametro opzione e' identificato da un byte che contiene alcuni campi.

Il flag Copiato (C) indica che l'opzione deve eventualmente essere copiata in tutti i frammenti. Se il bit non e' settato, l'opzione viene copiata solo nel primo frammento.

Due Classi di opzioni sono state definite:

Il Numero identifica l'opzione. Sono definite molte opzioni nel documento RFC791.

Opzioni IP

Molte opzioni hanoo una codifica a lunghezza variabile: il byte di tipo e' immediatamente seguito da un byte che contiene la Lunghezza dell'opzione, incluso il campo tipo e lunghezza stessi.

Le uniche eccezioni sono l'opzione "No Option" che serve come pad per allineare le opzioni a confini di 32 bit, e l'opzione "End of Options".

Le opzioni vengono raramente usate in tempi recenti: alcune sono obsolete, altre vengono sostituite da procedure diverse per ottenere lo stesso scopo. Alcuni router non supportano addirittura piu' tutte le opzioni.

Le uniche opzioni veramente usate sono il Loose e lo Strict Source Routing, che hanno la stessa sintassi.

Opzioni Source Routing

Il Puntatore e' seguito dai Dati di Routing che consistono in una lista di indirizzi internet esprimenti i router attraverso i quali deve o puo' transitare il pacchetto. Il campo Indirizzo Destinazione della testata IP contiene ad ogni salto l'indirizzo del prossimo router nella lista dei router. Il campo Puntatore e' un indice nella lista, ed inizia dal valore 4. Ad ogni salto viene incrementato il Puntatore di quattro byte e scambiato l'indirizzo IP di destinazione con l'indirizzo puntato nella lista dei router. Quando il valore del puntatore raggiunge o supera il valore della Lunghezza, allora il pacchetto e' arrivato a destinazione.

Se il routing e' Strict e non e' raggiungibile il router successivo, il pacchetto IP viene scartato. Se il routing e' Loose e il prossimo router non e' raggiungibile allora viene compiuto il tentativo di recapito al router ancora seguente.

L'uso delle opzioni ha come conseguenza una diminuzione della velocita' di trasferimento di un pacchetto. Vi sono alternative all'uso delle opzioni. Invece di usare l'opzione di Source Routing, si puo' incapsulare il pacchetto IP in un altro pacchetto IP.

Per esempio per iviare un pacchetto da A a B attrverso C, puo venire incapsulato nel seguente modo:

Il costo di processamento per A e B e' lo stesso che per l'uso dell'opzione di Source Routing. Il costo di processamento per C e per tutti i router intermedi e' molto minore.

E' da notare che l'opzione Source Routing viene spesso ignorata da router che siano consci di problematiche di sicurezza.