> For the complete documentation index, see [llms.txt](https://juan-martin-franco.gitbook.io/network-+/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://juan-martin-franco.gitbook.io/network-+/6.-direccionamiento-ip/6.8-direccionamiento-ipv6.md).

# 6.8 - Direccionamiento IPv6

## Direccionamiento IPv6

El <mark style="color:blue;">**direccionamiento IPv6**</mark>, o direccionamiento Internet Protocol version 6, es el tipo menos común de direccionamiento IP utilizado en las redes.

Uno de los problemas que tenemos con IPv4, es que el espacio de direcciones es limitado. Esto se debe a que están compuestas de 32 bits, por lo que solo tenemos 4.2 billones de direcciones posibles.

A este agotamiento de las direcciones IPv4 se lo conoce como **IPv4 Address Exhaustion**.

Por este motivo, el Grupo de Trabajo de Ingeniería de Internet (Internet Engineering Task Force), mejor conocido como IETF, desarrolló el estándar IPv6.

IPv6 es una gran mejora de IPv4, ya que mientras IPv4 contaba con un total de direcciones IP diferentes de 4.2 billones (2^32), IPv6 cuenta con 340 undecillones de direcciones posibles (2^128).

<figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FQr5AUS4YClldH35Jbata%2Fimage.png?alt=media&amp;token=ecc5c187-b8c7-439b-a553-f040968d4d42" alt=""><figcaption></figcaption></figure>

En lugar de utilizar una dirección de 32 bits como IPv4, <mark style="color:red;">**IPv6 utiliza una dirección de 128 bits.**</mark>

### Beneficios de IPv6

Entre los beneficios de IPv6 sobre IPv4 encontramos:

* Espacio de direcciones mucho más amplio
* IPv6 incrementa la eficiencia de nuestras redes removiendo el tipo de flujo de datos conocido como Broadcast
* Es más seguro que IPv4 ya que no existe la fragmentación de paquetes
* No existe el MTU
* Puede coexistir con IPv4 en la misma red
* Posee una cabecera simplificada

### Dual Stack

Se conoce como <mark style="color:blue;">**Dual Stack**</mark> al **equipamiento que corre redes que soportan tanto el protocolo IPv4 como el protocolo IPv6 en los mismos dispositivos de red de manera simultanea**.

Con dispositivos dual stack, si un cliente soporta IPv6 el router o switch usará IPv6 como preferido y dialogará utilizando dicho protocolo, y en caso de no soportarlo utilizará el protocolo IPv4 para poder soportarlo.

### Tunneling

Se conoce como <mark style="color:blue;">**Tunneling**</mark> al método que **permite que IPv6 sea tunelizado sobre un dispositivo IPv4**.

Esto le permite a nuestros viejos routers IPv4 llevar tráfico IPv6.

IPv6 será tunelizado como un mecanismo de encapsulamiento de paquetes IPv6 dentro de cabeceras IPv4.

Esto ocurre creando un tunel punto a punto entre la fuente y el destino, y luego encapsulando dicha información.

Esto le permite a los clientes y servidores IPv6 aislados ser capaces de comunicarse sin la necesidad de actualizar toda la infraestructura de routers y switches que continua utilizando IPv4.

### Notación en direcciones IPv6

Si bien es cierto que se puede utilizar la notación decimal para las direcciones IPv6 al igual que como se hace en IPv4, <mark style="color:blue;">**se optó por utilizar la notación hexadecimal**</mark>, ya que hay que representar 128 bits, lo que equivale a 16 octetos en notación decimal.

En el sistema hexadecimal, **cada dígito representa 4 bits**, lo que nos permite representar una dirección IPv6 de 128 bits en 32 dígitos hexadecimales.&#x20;

A la unión de 4 dígitos hexadecimales se la conoce como segmento. Es decir, cada segmento contiene 16 bits (4 dígitos hexadecimales x 4 bits cada uno).

En resumen, una dirección IPv6 está compuesta por 8 segmentos separados por dos puntos (:).

### Atajos en direcciones IPv6

Existen ciertos atajos a la hora de escribir direcciones IPv6, los cuales facilitan su escritura ya que no es fácil escribir 128 bits.

Los siguientes atajos son válidos a la hora de escribir direcciones del tipo IPv6:

* Si se tiene cuatro 0s en un segmento, se puede poner un único 0 u omitir directamente este segmento.<br>

  <figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FbBMl85LUdHWYAcvHhJNP%2Fimage.png?alt=media&amp;token=ee3570fa-2d25-44c7-926e-191aacfb75c3" alt=""><figcaption></figcaption></figure>
* Si existen múltiples segmentos juntos que están compuestos únicamente de 0s, podemos resumirlos utilizando dos puntos ( : ).<br>

  <figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FOrCbKUSGL56AFEGMlzWN%2Fimage.png?alt=media&amp;token=a1cd8223-c882-43ee-8eff-42f3246b0a76" alt=""><figcaption></figcaption></figure>

### ¿Cómo reconocer una dirección IPv4 vs una dirección IPv6?

Mientras que IPv4 siempre utiliza la notación punto-decimal formada por 4 octetos, **IPv6 utiliza dos puntos entre sus segmentos, además de estar escrita en hexadecimal.**

### **Tipos de direcciones IPv6**

Cuando hablamos de IPv6, existen 3 tipos diferentes de direcciones que podemos utilizar:

* <mark style="color:green;">**Unicast**</mark>
* <mark style="color:green;">**Multicast**</mark>
* <mark style="color:green;">**Anycast**</mark>

Una de las cuestiones interesantes de IPv6 es que podemos asignar múltiples direcciones IPv6 a una única interfaz en un cliente, y estas asignaciones pueden ser una mezcla entre cualquiera de estos 3 tipos diferentes de direcciones.

Incluso si tenemos una única interfaz de red (NIC) en nuestra estación de trabajo, podemos tener múltiples direcciones IPv6 y diferentes tipos de direcciones IPv6 asignadas a dicha tarjeta.

### Direcciones Unicast

Las direcciones <mark style="color:blue;">**unicast**</mark> son utilizadas para identificar una única interfaz.&#x20;

Estas direcciones pueden clasificarse en:

* <mark style="color:red;">**Direcciones unicast globalmente ruteadas (globally-routed unicast address)**</mark>: Una dirección unicast globalmente ruteada es **similar al concepto de IP pública de IPv4** utilizando direcciones unicast de clase A, B y C.  \
  Estas direcciones **se caracterizan por comenzar su primer segmento con el rango 2000-3999**.<br>
* <mark style="color:red;">**Direcciones de enlace local (link-local address)**</mark>: Una dirección de enlace local, también llamada dirección de uso local, **es utilizada como una dirección IP privada en IPv4.** \
  Estas direcciones solo pueden utilizarse en una red de área local y **siempre comienzan con FE80 en su primer segmento.**\
  **Cuando un sistema IPv6 arranca, crea una dirección de enlace local para cada interfaz IPv6 en el sistema, incluso si una dirección globalmente ruteable ya fue configurada manualmente u obtenida a través de un protocolo de configuración como DHCP.**\
  Para realizar esto utiliza algo conocido como **SLAAC (Stateless Address Autoconfiguration)**.

### Direcciones Multicast

Las direcciones <mark style="color:blue;">**multicast**</mark> son utilizadas para identificar un conjunto de interfaces, por lo que un paquete puede ser enviado a una dirección multicast y luego ser entregado a todas las interfaces dentro de un grupo.\
\
Estas direcciones **siempre comienzan con FF**.

### Direcciones Anycast

Las direcciones <mark style="color:blue;">**anycast**</mark> son utilizadas para identificar un conjunto de interfaces, por lo que un paquete puede ser enviado a cualquier miembro de un conjunto.

Las direcciones anycast **son asignadas desde el espacio de direcciones unicast, por lo que no hay forma de diferenciar si una dirección es unicast o anycast solo mirando la dirección IPv6**.

### SLAAC (Stateless Address Autoconfiguration)

Con la <mark style="color:blue;">**autoconfiguración de direcciones sin estado**</mark>, conocida como <mark style="color:blue;">**SLAAC**</mark>, el host no necesita obtener direcciones u otra información de configuración desde un servidor centralizado como con DHCP.

En su lugar, **puede asignarse de manera independiente una dirección de enlace local, testear su unicidad de dicha dirección, asignarse esa dirección de enlace local a si misma, contactar al router y proveer dirección al nodo sobre como proceder con la autoconfiguración**.

Además, **puede configurar la dirección unicast global que desea utilizar**.

### EUI-64 (Extended Unique Identifier - 64)

SLAAC es utilizado en IPv6 para descubrir la red actual en la que está localizada la interfaz de red y luego permite seleccionar su propio host ID basado en su dirección MAC utilizando un proceso llamado <mark style="color:blue;">**EUI-64**</mark>.

Este proceso conocido como EUI-64 **permite a un host asignarse a si mismo un identificador único de interfaz IPv6 de 64 bits** llamado EUI-64.

El formato de esta dirección EUI-64 es obtenido utilizando la dirección MAC de 48 bits de la interfaz:

Primero, la dirección MAC es separada en dos porciones de 24 bits.

**La primera mitad de la dirección MAC contendrá el OUI (Organizational Unique Identifier)**, mientras que **la segunda mitad contendrá el NIC (Network Interface Card)**. \
Entre ambas partes, se colocará el valor hexadecimal de 16 bits de **FF FE**.&#x20;

De esta forma, tenemos una dirección formada por:

<mark style="color:purple;">**24 bits (OUI) + 16 bits (FF FE) + 24 bits (NIC),**</mark> lo que forma la dirección EUI de 64 bits.

<figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FMP3QWBNTuKFEOEPQFwjE%2Fimage.png?alt=media&amp;token=70015ca6-c619-48b5-bde0-5ec97ec2b7eb" alt=""><figcaption></figcaption></figure>

Esto nos da la dirección de 64 bits necesaria para identificar nuestra interfaz en dicha red.

Luego, la interfaz utilizará autodescubrimiento para determinar en que red está y agregar la porción de red de la dirección IPv6, los cuales serán los primeros 64 bits de nuestra dirección.

Es decir, **la dirección IPv6 finalmente está compuesta** **por**:

64 bits de la porción de red + 64 bits de la porción del host (generados en el proceso EUI-64 utilizando la dirección MAC)

Como resultado de esto, obtenemos una dirección IPv6 unicast globalmente ruteable.&#x20;

### DHCPv6 (Dynamic Host Configuration Protocol version 6)

Si se desea utilizar DHCP con IPv6, se debe utilizar el <mark style="color:blue;">**Protocolo de Configuración Dinámica de Hosts para IPv6**</mark>, conocido como <mark style="color:blue;">**DHCPv6**</mark>.

Este protocolo permite que DHCP automáticamente asigne cosas desde un servidor DHCP versión 6.

Debido a que el proceso de autoconfiguración con EUI-64 está construido en el protocolo IPv6 por defecto, realmente no se necesita utilizar DHCPv6.&#x20;

Sabido esto, si se desea utilizar DHCPv6, se puede y nos permitirá asignar la dirección que tendrá cada interfaz en lugar de hacerlo de manera automática utilizando el protocolo de autoconfiguración SLAAC.

Es decir, IPv6 elegirá su propia dirección basada en la dirección MAC por defecto.&#x20;

Luego, utiliza algo conocido como NDP (Neighbor Discovery Protocol).

### NDP (Neighbor Discovery Protocol)

El <mark style="color:blue;">**protocolo de descubrimiento de vecinos**</mark>, conocido como <mark style="color:blue;">**NDP**</mark>, se utiliza para aprender las direcciones de Capa 2 (direcciones MAC) de una red dada y luego elegirá su propio Host ID.

NDP es utilizado para realizar:

* <mark style="color:green;">**Solicitud de Router (Router Solicitation):**</mark> se genera un mensaje de este tipo cada vez que una interfaz de un nodo es activado, para así pedir a los enrutadores que se anuncien.\
  Es decir, nuestro cliente envía un mensaje para localizar los routers de la red, ya que debe saber cuál es el default gateway para poder "salir de la red".
* <mark style="color:green;">**Anuncio de Router (Router Advertisement):**</mark> es generado automáticamente por los enrutadores al recibir una solicitud de router (router solicitation), o periódicamente para mantener informados a los nodos.<br>

  <figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2F3wKwzCbx9bqqnYm2siPb%2Fimage.png?alt=media&amp;token=a54e9140-b0b0-43c2-aa29-3cd971fc9705" alt=""><figcaption></figcaption></figure>
* <mark style="color:green;">**Solicitud de Vecino (Neighbor Solicitation):**</mark> son utilizadas por los nodos para determinar la dirección MAC de un vecino, o para verificar que un vecino sigue siendo accesible a través de una dirección MAC que se encuentra en caché. También es utilizado para detectar direcciones IP duplicadas.
* <mark style="color:green;">**Anuncio de Vecino (Neighbor Advertisement):**</mark> se genera automáticamente al recibir una *solicitud de vecino*, o se genera cuando se va a realizar un cambio en la dirección MAC (reemplazar el host por otro).<br>

  <figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FrDS8pWhbS3z35AufmStA%2Fimage.png?alt=media&amp;token=716ae0ae-5515-46e6-86ee-62a55636cc9d" alt=""><figcaption></figcaption></figure>
* <mark style="color:green;">**Redirección (Redirection):**</mark> se genera cuando un nodo quiere informar a un enrutador de una mejor ruta hacia un destino. Estos mensajes siempre son unicast.<br>

  <figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FXauS3PHQdeWKDyuyq0am%2Fimage.png?alt=media&amp;token=e87b52c0-f486-4cc3-9863-e2eece432b38" alt=""><figcaption></figcaption></figure>
