L'header IP è costituito dalle prime 5 righe (campo options escluso poichè opzionale e poco usato).Il campo Data sono i dati utili provenienti dai livelli superiori .
La lunghezza minima della parte di controllo è di 20 byte; difatti sono 5 righe a 4 byte ciascuno. La lunghezza massima è di 60 byte. Vediamo ora il significato di ogni singolo campo.
Version
Esistono più versioni di protocollo IP , come IPv4 o IPv6 . Questo campo indica come interpretare il datagramma, quindi quale versione di protocollo IP viene utilizzata.
IHL (Internet Header Length)
Denota la lunghezza dell'header , quindi l'inizio dell'informazione contenente i dati .
Sono 4 bit, perciò il piu' grande numero rappresentabile è 1111 = 15, da cui essendo un multiplo di 4 byte, si conclude che la massima lunghezza dell'header è di 15x4=60 byte.
Invece dal momento che la lunghezza minima della parte di controllo è di 20 byte il campo IHL non può avere valore minore a 5. Dunque il minimo valore consentito è 0101.
Type of service
Il campo TOS denota la precedenza dei livelli di traffico. In parole povere in base a specifiche combinazioni di questi 8 bit, per quel particolare datagramma si potrebbe voler minimizzare il traffico, massimizzare il throughput o l'affidabilita. Quindi verrano scelti percorsi ad hoc per tali esigenze.
Packet length
Rappresenta la lunghezza dell'intero pacchetto IP, compresi i dati. E di 16 bit, dunque il suo valore massimo è 2^16=65536, ma in genere non supera i 1500 byte.
Ora, vista la prima riga del pacchetti IP, per capire i campi della seconda bisogna comprendere prima cosa si intende per frammentazione e perchè un pacchetto IP viene frammentato.
Frammentazione
La frammentazione è una delle operazione svolte dal livello 3 insieme ad indirizzamento e instradamento. E' opportuno frammentare poichè un pacchetto quando viaggia può avere a che fare con tecnologie differenti. Ad esempio un router che ha una interfaccia che utilizza una tecnologia IEE 802.3 (Ethernet) supporta MTU di 1500 byte, oppure altre tecnologie che permettono la comunicazione a grandi distanze possono avere trame al massimo di 526 byte.
Dunque è facile intuire che se il nostro pacchetto è di 3000 byte e deve essere inoltrato verso una interfaccia di rete che utilizza tecnologia IEE 802.3 è opportuno frammentare il pacchetto in due informazioni da 1500 byte ciascuna.
Identifier
Il campo identificatore "marchia" i pacchetti numerandoli, secondo una numerazione progressiva. Pertanto è utile a riconoscere frammenti che appartengono alla stesso pacchetto,quindi alla stessa informazione. Ad esempio, ritornando all'esempio precedente, nel caso in cui il nostro pacchetto da inviare sia di 3000 byte e questo debba essere diviso in due, il campo Identifier per i due frammenti sarà lo stesso.
Fragment Offset
I frammenti di un singolo pacchetto devono essere a loro volta ordinati. Di questo se ne occupa il campo fragment offset che rappresenta lo spiazzamento del frammento . Questo campo,di 13 bit è 0 per il primo frammento ed è orientato al byte.
Flag
Il campo flag è di soli 3 bit. Il bit più significativo(More fragment) di tale campo se posto ad uno indica che ci sono più frammenti per quel pacchetto. Ad esempio 100. Se invece il bit meno significativo e posto ad 1 , significa "Don't Fragment", cioè non si vuole che questo pacchetto venga frammentato per varie esigenze. Quindi è come se si stesse chiedendo al router di trovare percorsi alternativi, quindi interfacce di uscita con tecnologie tali che ci permettano di non dover frammentare il paccheto. Se il router non riesce nell'impresa il livello 3 lo dirà ai livelli superiori che a loro volta decideranno le azioni da svolgere.
Time to leave
Tradotto in italiano è il tempo di vita del pacchetto. E' un numero di 8 bit che indica quanti router intermedi può attraversare il pacchetto. Ogni volta che il pacchetto arriva in un router questo ne decrementa il time to leave di una unità; se il time to leave di un pacchetto è 0 il router provvede a scartarlo.
Si usa il time to leave per evitare di creare cicli nella rete e che un pacchetto vi possa viaggiare indefinitamente. Quindi questo fa presupporre che i protocolli di instradamento non sono perfetti e vengono adottate alcune precauzioni come il TTL.
Protocol
Questo campo risponde alla semplice domanda " A quale protocollo di livello trasporto va mandato questo pacchetto ?". Quindi identifica i vari protocolli , ad esempio il valore 6 indica il protocollo TCP e il valore 17 indica il protocollo UDP. Questi valori sono consultabili sugli RFC publicati dalla IANA.
Checksum
Si occupa di fare un controllo sull'integrità del solo header IP, ma non dei dati.Quindi è un controllo errore abbastanza Ligth questo che fa il livello 3, proprio perché si presuppone che della integrità dei dati se ne occupi il livello collegamento.
La checksum consiste nel complemento ad 1 della somma dei byte dei campi di controllo.
Ogni router quando arriva il pacchetto calcola la propria checksum e vede se coincide con quella presente sul datagramma. Se dovesse essere diversa allora il pacchetto viene scartato.
Si noti che la checksum e il TTL sono gli unici due campi del pacchetto IP che vengono aggiornati di router in router.
Indirizzi IP sorgente e destinazione
Gli indirizzi IP svolgono la funzione di identificare univocamente un host nella rete. Ogni volta che viene generato un pacchetto vengono inseriti indirizzo IP sorgente e destinazione per raggiungere l'host destinatario.
Data
Nel campo data infine ci andranno i dati provenienti dai livelli superiori. In particolare la PDU del livello trasporto.
Ogni router quando arriva il pacchetto calcola la propria checksum e vede se coincide con quella presente sul datagramma. Se dovesse essere diversa allora il pacchetto viene scartato.
Si noti che la checksum e il TTL sono gli unici due campi del pacchetto IP che vengono aggiornati di router in router.
Indirizzi IP sorgente e destinazione
Gli indirizzi IP svolgono la funzione di identificare univocamente un host nella rete. Ogni volta che viene generato un pacchetto vengono inseriti indirizzo IP sorgente e destinazione per raggiungere l'host destinatario.
Data
Nel campo data infine ci andranno i dati provenienti dai livelli superiori. In particolare la PDU del livello trasporto.