# Transizione IPv4/IPv6

In telecomunicazioni e informatica la transizione IPv4/IPv6 riguarda il passaggio nella rete globale Internet del protocollo di livello di rete IP dalla versione 4 alla versione 6. Il passaggio porta ad ingenti problemi di compatibilità poiché la versione 4 del protocollo IP è molto consolidata e rappresenta il protocollo più usato nelle reti per l'indirizzamento e il successivo instradamento. Il piano di transizione è riportato nella RFC 2893.

## Difficoltà della transizione

Il motivo principale che ha portato alla definizione del protocollo IPv6 è il graduale esaurimento degli indirizzi passati su protocollo IPv4. L'eterogeneità e vasta dimensione della rete porta dei vincoli che rallentano l'affermarsi del protocollo IPv6, che per le sue caratteristiche è a tutti gli effetti un nuovo protocollo rispetto alla versione 4 e in quanto tale richiede un aggiornamento massiccio dei dispositivi di rete.
La politica naturalmente adottata per la transizione a IPv6 consiste in un graduale passaggio da un protocollo all'altro, cercando di far coesistere le due versioni di IP in un'unica rete. Per far ciò la strada seguita fino a questo momento consiste nel costruire router e switch di livello 2 e 3 in grado di interpretare entrambi i protocolli. Inoltre fin dai primi anni 2000 i nuovi sistemi operativi sono in grado di generare indirizzi IPv6 e di interpretarli. In questo modo ogni host nella rete è individuabile da almeno due indirizzi, uno dato da IPv4 ed uno da IPv6. La sostituzione di tutti i router nel mondo risulta un lavoro piuttosto arduo e allora si cerca in qualche modo di aggirare via software la non interpretabilità di IPv6.
Tutte le soluzioni finora create possono essere suddivise in tre categorie:
* dual-stack
* NAT-PT
* tunneling

## Soluzioni
### Dual stack

La tecnica del dual stack prevede l'utilizzo del doppio stack IP nella pila protocollare. Questo doppio stack permette di interpretare entrambe le versioni del protocollo e quindi di smistare ai livelli superiori il contenuto del pacchetto senza che questi sappiano da quale indirizzo IP derivi. Un aspetto interessante è che a ciascun pacchetto IPv4 e IPv6 è associato a un diverso EtherType e ciò semplifica lo smistamento del pacchetto, senza quindi dover accedere al campo version del pacchetto di livello 3.
Il dual stack è senza dubbio una delle tecniche più semplici da implementare, ma presenta molte controindicazioni. Innanzitutto aumenta la complessità della rete: router e switch vengono dotati della proprietà del multiprotocollo. Il lavoro di questi viene ulteriormente aggravato poiché devono interpretare più istanze dello stesso protocollo. Inoltre non risolve il problema della diminuzione degli indirizzi IPv4 poiché secondo la tecnica del dual stack un'interfaccia dev'essere sempre e comunque dotata dei due indirizzi IPv4 e IPv6. Inoltre i due indirizzi devono essere entrambi annunciati in internet e ciò non semplifica la situazione del routing, anzi tendenzialmente la complica.
Successivi miglioramenti al dual stack hanno portato alla nascita di nuove tecniche quali il DSTM e l'ALG.

#### Dual Stack Transition Mechanism (DSTM)

Il DSTM è l'evoluzione della tecnica del dual stack e si pone come obiettivo il minimo utilizzo possibile di indirizzi IPv4. Affinché ciò sia possibile gli indirizzi di versione 4 sono assegnati dinamicamente alle interfacce, risparmiando così un ampio range di indirizzi IPv4.

#### Application Level Gateway (ALG)

L'ALG è una soluzione che permette ad una rete totalmente IPv6 di poter dialogare con postazioni IPv4 al di fuori della rete stessa. All'interno di questa vi sono solo host che comunicano mediante il protocollo IPv6 tra loro e l'IPv4 non è previsto, solo il gateway è dotato di dual stack. In questo modo se gli host interni alla rete vogliono dialogare con server esterni o viceversa, ciò è possibile grazie alla capacità del gateway di interpretare entrambi i protocolli.
Il vantaggio della tecnologia ALG consiste nel dotare solo un apparato in tutta la rete del dual stack, non appesantendola ulteriormente. Un limite dei router ALG è che possono operare solamente su alcuni dei servizi di rete, per esempio HTTP. Se invece si vuole dotare la rete di altre funzionalità, lo si fa aggiungendo altri router ALG dotate delle funzionalità desiderate.

### Network Address Translator - Protocol Translator (NAT-PT)

Il NAT-PT è un sistema che sfrutta i concetti introdotti dalla tecnologia dei NAT, infatti esso opera una conversione dell'indirizzo IPv6 in indirizzo IPv4 e viceversa secondo le tecniche di un NAT IPv4, permettendo in questo modo a due reti con protocolli IP diversi di poter comunicare tra di loro.
Anche come nel caso di NAT IPv4, presenta dei limiti: alcuni servizi non funzionano, a meno che non si introducano nella rete specifici ALG. Inoltre può introdurre molti limiti nelle prestazioni e nella complessità della rete.
A fronte di limiti e pregi, questa tecnica risulta essere piuttosto efficiente per le reti IPv6 poiché si tratta di soluzione temporanea che prevede la rimozione del NAT-PT nel momento in cui anche le reti confinanti si saranno adeguate al protocollo IPv6.

### Tunneling

La tecnica del tunneling è quella più utilizzata per far fronte ai problemi di incompatibilità tra le reti IPv4 ed IPv6. Con il tunneling si stabilisce un collegamento point to point tra due host; i pacchetti IPv6 vengono incapsulati dall'host sorgente in pacchetti IPv4, inviati nel tunnel e, una volta giunti a destinazione, l'host li decapsula e li tratta come se fossero comunissimi pacchetti IP.
Il tunneling IPv6 su IPv4 è di difficile realizzabilità sulle reti globali e quindi il suo utilizzo è limitato ad applicazioni e comunicazioni in reti locali più o meno grosse.
Per superare questi limiti sono stati creati numerosi protocolli basati sempre su questa tecnica.

#### 6 over 4

Il 6 over 4 permette a nodi IPv6 isolati di poter comunicare in una rete IPv4; questa tecnica è descritta nella RFC 2529.
Gli host IPv6 inseriti in reti IPv4 riescono a comunicare con il resto della rete utilizzando un tunneling su pacchetti IPv4 di tipo multicast. In questo modo i nodi IPv6 sono in grado di vedere tutto il resto della rete a cui sono connessi come un'unica rete LAN IPv6 virtuale.

#### 6to4

Il 6to4 è una tecnica di tunnel automatico, descritta dalla RFC 3056 successivamente ampliata dalla RFC 6343. Essa integra nell'indirizzo IPv6 l'indirizzo IPv4 dell'host destinazione. Il modello parte dall'assunto che un dispositivo utilizza nativamente un indirizzo IPv6 ma opera in un ambiente, esempio Internet, in cui il fornitore di servizi non utilizza IPv6.
Col 6to4 viene generato un indirizzo IPv6 composto come segue (0 indica il bit più significativo):
* 0-15: prefisso 6to4 al valore esadecimale fisso "2002"
* 16-47: indirizzo IPv4 espresso in notazione esadecimale; ad esempio: "192.0.2.170" diventa "c000:02aa"
* 48-63: identificativo delle sottoreti
* 64-127: identificativo dell'interfaccia fisica
Il pacchetto così generato viene inviato al router che è in grado di interpretarlo e preparare un pacchetto IPv4 da inviare all'host destinazione. Con questa tecnica, un singolo indirizzo IPv4 corrisponde a un indirizzo IPv6 con maschera /48: nell'esempio, l'indirizzo IPv4 "192.0.2.170" equivale al range di indirizzi IPv6 "2002:c000:02aa::/48".

#### Tunnel Broker

Si tratta di servizi di tunneling configurabili tramite pagine web apposite.