IPv6 – 2: struttura dell’header

Il passaggio ad IPv6 implica cambiamenti notevoli rispetto ad IPv4. Vediamo quali sono.

Innanzi tutto osserviamo che le variazioni riguardano solo il protocollo di rete, non quelli di trasporto. TCP e UDP non sono toccati dalla migrazione da IPv4 a IPv6.

Dobbiamo solo notare che per UDP l’effettuazione del checksum diventa obbligatoria, dato che non viene più effettuato nessun controllo sull’integrità dei dati ricevuti da parte di IP.

Per apprezzare meglio i vantaggi e le novità introdotte da IPv6 conviene rivedere un momento l’header del protocollo IPv4:

Header protocollo IPv4

Header IPv4

Notiamo che nell’header IPv4 sono presenti 12 campi diversi; la lunghezza dell’header può variare. I campi presenti sono:

  • Version (4 bit): contiene il numero di versione del protocollo (4).
  • HD Len (4 bit): lunghezza dell’header in word da 32 bit
  • Type of service (8 bit): valore che indica come il pacchetto deve essere trattato dai router.
  • Lunghezza totale (16 bit): dimensione massima del datagramma, incluso header e payload, in byte.  La massima lunghezza teorica del datagramma è di 65535 byte (o per essere terminologicamente più precisi, ottetti; la sostanza non cambia).
  • Identification (16); usato per identificare i frammenti di pacchetti nel caso di frammentazione
  • Flags(3): Riservato, Don’t Fragment (indica di non frammentare il pacchetto), More Fragment (1: indica che il pacchetto è frammentato, e quello corrente non è l’ultimo frammento; 0 pacchetto non frammentato, o ultimo frammento)
  • Fragment offset(13): offset di ricostruzione del pacchetto frammentato, in blocchi da 8 byte
  • TTL (8bit): il Time to Live. Viene decrementato di 1 (o più) nel passaggio attraverso i router.
  • Protocol Number (8 bit): specifica il numero del protocollo di livello superiore trasportato dal pacchetto (TCP, UDP, ICMP,…) secondo i numeri assegnati da IANA.
  • Header Checksum (16 bit): error checking riverificato da ogni router durante il percorso
  • Source IPv4 (32 bit): ip address del mittente
  • Destination IPv4 (32 bit): ip address del destinatario
  • Options (variabile): campo di opzioni che possono apparire ed aumentare la lunghezza dell’ header
  • Payload (variabile): non fa parte dell’header, costituisce i dati da consegnare

Vediamo ora la struttura dell’header di IPv6:

header IPv6

Header IPv6

  • Version (4 bit): contiene il numero di verrsione del protocollo (6)
  • Traffic class (8 bit): diviso in due parti: i primi sei bit vengono usati per i così detti differentiated services (meccanismo usato in QoS per stabilire le priorità di istradamento di un pacchetto – vedi RFC 2474). Gli ultimi 2 bit sono usati da ECN, Explicit Congestion Notification,  RFC3168).
  • Flow label (20 bit): se utilizzato indica un unico flusso di dati che dovrebbe essere trattato uniformemente dai router
  • Payload lenght (16 bit): la dimensione del payload in ottetti, pari a quella di IPv4.  Questo campo viene messo a zero nel caso in cui sia usata l’opzione  Jumbo Payload, che consente di avere pacchetti di dimensione teorica fino a 4 Giga
  • Next header (8 bit): specifica, come nel caso del protocol number, il tipo dell’header che segue. I valori sono gli stessi, indicati da IANA.
  • Hop limit (8 bit): concettualmente identico al TTL di IPv4.
  • Source address (128 bit): indirizzo IPv6 del mittente.
  • Destination address (128 bit): indirizzo IPv6 del destinatario.

Tra i due header esistono parecchie differenze:

  • l’header IPv6 ha lunghezza fissa, e  questo ne rende più semplice il parsing da parte dei router
  • non ha checksum (le linee ormai sono abbastanza affidabili da poterlo demandare ad un protocollo di livello superiore). Questo riduce il carico computazionale sui router che debbono effettuare istradamento del pacchetto.
  • non presenta nessuna informazione sulla frammentazione, per il semplice fatto che in IPv6 la frammentazione non è prevista, il mittente usa PMTUD (Path MTU Discovey) per scoprire la massima MTU possibile.

Il fatto che la frammentazione venga accantonata porta diversi vantaggi; dal punto di vista della sicurezza, la frammentazione è stata utilizzata per diversi tipi di attacchi (An analysis of fragmentation attacks, Anderson, Cisco PIX and CBAC Fragmentation Attack, etc.). Eliminare la necessità del riassemblaggio sull’endpoint della trasmissione è comunque positivo anche da un punto di vista computazionale.

Notiamo inoltre che la determinazione della MTU riguarda i soli endpoint. Frammentazione lungo il percorso (ad esempio per instradazione su celle ATM a bassa MTU, può sempre accadere).

In generale ci possiamo aspettare che un datagram IPv6 sia più facilmente instradabile, con un carico computazionale inferiore per i router. A questo si aggiunge il tipo specifico di gerarchia dello spazio di indirizzi IPv6 (che vedremo in seguito), che consente una semplificazione notevole delle tabelle di routing.

La tabella che segue riporta una sintesi delle principali differenze tra i due header.

IPv4 IPv6 Confronto
Versione (4 bit) Versione (4 bit) Cambia il valore
Header length (4 bit) Rimosso in IPv6
ToS (8 bit) Traffic class (8 bit) Stessa funzione
Flow label (20 bit) Tag di un flusso
Total length (16 bit) Payload length (16 bit) Stessa funzione
Identification (16 bit) IPv6 gestisce la
Flags (3 bit) Frammentazione
Fragment Offset (13 bit) Differentemente
TTL (8 bit) Hop limit (8 bit) Stessa funzione

Extension Header

La semplificazione dell’header IPv6 è consentita dal fatto che molte informazioni vengono spostate in Extension header (degli header che si concatenano a quello iniziale) successivi. In questo modo i router possono però ispezionare rapidamente l’header iniziale (che, ripetiamo, ha lunghezza fissa) e tralasciare le informazioni di cui non hanno bisogno.

Gli Extension Header sono definiti in molte RFC diverse (RFC 2460, RFC 2711, RFC 6564, RFC 7045, etc.)

L’unico che deve essere SEMPRE elaborato da tutti gli apparati dei rete è lo Hop by Hop EH, che è sempre il primo ad essere inserito dopo l’header IPv6.  Questo header porta informazioni che debbono essere lette da ogni nodo lungo il percorso fino a destinazione.

Il Destination Header porta invece informazioni che debbono essere elaborate dal solo nodo di destinazione.

Esistono diversi altri tipi di EH, che vengono esaminati in ordine fisso:

  • Basic IPv6 header
  • Hop-by-Hop Options
  • Destination Options (se viene usato Routing header)
  • Routing
  • Fragment
  • Authentication
  • Encapsulating Security Payload
  • Destination Options
  • Upper-layer (TCP, UDP, ICMPv6, …)

Altro sugli EH (tipi e funzioni, come e quando si usano, etc. )  ed IPv6 in generale  prossimamente. Stay tuned.

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. Usiamo i cookies per ragioni tecniche. Teniamo in alta considerazione la tua privacy.

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi