Cambio a IPv6

Tanto tiempo hablando del IPv6 que parecía que nunca iba a llegar, pero sí, ese día llegó, este blog ya está también en IPv6, de hecho ahora mismo tiene dos direcciones IP, la IPv4 69.163.225.164 y la IPv6 2607:f298:1:105::8fa:1c1 y el blog responde a ambas, dependiendo desde qué tipo de dirección se origine la petición.

No se si todavía queda mucha gente que esto del IPv6 le suene a chino, supongo que sí y me gustaría explicar de forma fácil qué es y por qué.

Las direcciones IP versión 4 (IPv4) son las que hemos utilizado desde que Internet existe, realmente desde antes, pero ahí están, y al utilizar 32 bits nos permitía utilizar 4.294.967.296, cuatro mil millones de IPs, pero ya no quedan, se han terminado y claro hay que buscar alguna alternativa o por encontrario podríamos seguir con las que tenemos y no crecer más, es decir, no más ADSLs, no más servidores web, no más sistemas de domótica, no más webcams, no más teléfonos móviles, etc… ¿eso es lo que queremos?, obiamente no, siempre queremos más y que no podamos crecer por una limitación numérica es cuanto menos bastante extraño y podría sonar hasta ridículo, aunque nada de eso.

La solución podría pasar por hacer chapuzas como por ejemplo compartir direcciones IP entre varias personas o cosas similares, pero ¿compartirías la dirección postal de tu casa con tus vecinos?, no lo he dicho, pero hacer esto podría hacer que cosas aparentemente tan simples como el Skype o el Bittorrent dejaran de funcionar, pufff, ¿mal rollo verdad?

La solución buena pasa por tener más direcciones IP, así que en vez de utilizar 32 bits mejor podemos utilizar 128, y a grosso modo (muy grosso modo) es lo que podemos conseguir con IPv6, porque con 128 bits podemos tener 3.40282367 × 1038 direcciones, es decir muchísimas, para hacernos una idea, con esta cantidad de direcciones cada bombilla que hay en la tierra podría tener una dirección IP y todavía sobrarían.

El transito de IPv4 a IPv6 no es baladí y está costando mucho esfuerzo y dinero, pero poco a poco se van consiguiendo cosas, una de ellas es que ya está este blog disponible para IPv6 y la IP única que lo identifica es la 2607:f298:1:105::8fa:1c1.

¿Os imagináis poder hacer esto con la comida? se acabaría el hambre en el Mundo.

Si queréis saber un poco más de IPv6 os dejo aquí este vídeo de unos gallegos muy simpáticos ;-)

IPv6, el cambio es inevitable en 2011

¿Os acordáis del famoso “efecto 2000”? las empresas empezaron a tener miedo que sus sistemas fallaran justo a las 0 horas del 1 de enero de 2000, y al final los daños conocidos por tal efecto fueron mínimos, no así los daños reales, pero bueno, eso es otra historia.

Pues ahora estamos ante algo mucho peor y por alguna razón no tomamos en serio, quizás por la crisis, quizás por el desconcierto que hay.

Las direcciones IP se acaban, pero cuando digo que se acaban no digo que en los próximos años se vayan a acabar, es que se acaban el año que viene, Internet ha llegado a su límite y no puede crecer más, y es así de triste, Internet no dispone a día de hoy de un sistema de direccionamiento escalable, es decir, dentro de un año no se podrá conectar nada más a no ser que hagamos algo.

La solución evidentemente pasa por la migración a IPv6, una versión del protocolo IP que utilizamos actualmente, la nueva versión tiene bastantes diferencias con la versión actual del protocolo IP, la 4, pero quizás la más significativa sea el aumento del tamaño del campo orientado a almacenar las direcciones que pasa de 32 bits a 128 bits, con lo que con IPv6, con lo que con IPv6 conseguiríamos tener suficientes direcciones IP como para dar una IP a cada bombilla que haya en la Tierra.

Pero el problema principal reside en que IPv6 no es compatible con IPv4, y cambia absolutamente todo, desde DNSs, pasando por protocolos de routing, firewalls, etc… así que la migración será lenta y dolorosa, pero acelerada, el año que viene será sin duda el año del IPv6, el año que comenzará la recuperación económica se utilizará para empezar a cambiar el Internet que conocemos y hay que estar preparados, tanto los profesionales que nos dedicamos a ello, como los usuarios finales, porque este cambio afectará hasta el último ordenador que haya conectado a Internet en toda el Mundo.

Cabecera de opciones salto a salto

Un tipo de opciones es la de salto a salto, la cual se utiliza para llevar información opcional a los nodos que componen el camino y que se encuentran en cada salto, este tipo de cabecera se encuentra en aquellos paquetes de IPv6 que indican en el campo «cabecera siguiente» un 0.

El formato sería el siguiente:
opciones

  • Cabecera siguiente: 8 bits: Indica la siguiente cabecera.
  • Longitud cabecera de extensión: 8 bits: Longitud de la cabecera en octetos, no incluye el primer octeto.
  • Opciones: Tamaño variable: Debe de tener un tamaño que permita la alineación del paquete, para ello se podrá utilizar Pad1 y PadN.

Hemos de tener en cuenta que aquí aplica todo lo explicado en el punto «cabecera siguiente» explicado con anterioridad.

Opciones de las cabeceras de extensión

Las cabeceras de opciones de salto a salto y de encaminamiento disponen de un número variable de opciones que siguen el siguiente formato:

Tipo de opción
Longitud de de datos de la opción
Datos de la opción
  • Tipo de opción: 8 bits: 2 bits de acción + 1 de modificación de encaminado + 5 tipo de opción
  • Longitud de de datos de la opción: 8 bits: Longitud en octetos del campo «datos de la opción».
  • Datos de la opción: Variable. Datos específicos del tipo de opción.

La acción a tomar con estas cabeceras de opción viene descrita por los 2 bits de más alto orden del campo «tipo de opción» y su significado es el siguiente:

  • 00: Ignorar esta opción y continuar procesando la cabecera.
  • 01: Descartar el paquete.
  • 10: Descartar el paquete sin tener en cuenta si el destino es multicast o no y devolver al origen un ICMP de «problema de parámetro», código 2, señalando «tipo de opción desconocido».
  • 11: Descartar el paquete y si la dirección de destino no es multicast enviar ICMP «problema de parámetro», código 2, a la dirección origen del paquete señalando el «tipo de opción desconocido».

En cuanto al bit de modificación de encaminado se utiliza para indicar si los «datos de opción» modifican o no el encaminado hacia el destino final del paquete.

  • 0: Los «datos de opción» no modifican el encaminado.
  • 1: Los «datos de opción» modifican el encaminado.

En cuanto a los últimos 5 bits restantes especifican el tipo de opción.

Las opciones individuales pueden no tener un tamaño necesario para cubrir la trama que tiene que ser de n*8 octetos, así que será necesario utilizar opciones de relleno, estas se representan mediante la expresión xn + y, donde x representa el número de octetos a desplazar a partir del comienzo de la cabecera e y representa el número de octetos a desplazar además.

Por ejemplo 8x+2 significaría un desplazamiento de 8 octetos a partir del inicio del paquete más 2 octetos más.

Existen dos opciones de relleno para utilizarse cuando sea necesario alinear opciones a la cabecera contenedora:

La opción Pad1 es especial porque no dispone de campos de longitud ni de datos de la opción, esta opción se utiliza únicamente cuando es necesario añadir un único octeto dentro del área de opciones de una cabecera.

0

En caso de requerirse más octetos de relleno sería necesario utilizar la opción PadN, la cual está compuesta por un primer octeto de 1s y otro octeto donde se define el campo «longitud de datos de opción» y un único campo de tamaño N-2 octetos compuestos de ceros.

1
Longitud da datos de opción
Datos de opción = 0s

Orden de cabeceras de extensión en IPv6

También es importante recordar el orden propuesto para las cabeceras de extensión y de las cabeceras de los paquetes como se especifica en la RFC 2460 «Internet Protocol, Version 6 (IPv6) Specification»:

  • Cabecera IPv6.
  • Cabecera opciones de salto a salto.
  • Cabecera opciones de destino.
  • Cabecera de encaminamiento.
  • Cabecera fragmento.
  • Cabecera autenticación.
  • Cabecera seguridad del encapsulado de la carga útil.
  • Cabecera opciones de destino.
  • Cabecera de capa superior.

Las cabeceras de extensión sólo aparecerán una vez excepto la «cabecera opciones de destino» que aparecerá justo antes de la «cabecera de encaminamiento» y antes de la «cabecera de capa superior».

También puede darse el caso debido a una tunelización o a un doble encapsulado que el protocolo de capa superior fuera IPv6, en ese caso se volvería a repetir el proceso completo.

Cabeceras de extensión de IPv6

En IPv6 la cabecera es de tamaño fijo para favorecer al caso más común, pero existen ocasiones en los que la cabecera estándar de IPv6 no es suficiente, en esos casos necesitamos ampliar la cabecera con las denominadas «cabeceras de extensión de IPv6», las cuales son cabeceras opcionales que se codifican a parte.

Estas cabeceras se situan entre la cabecera de IPv6 y las cabeceras de nivel superior utilizando el campo «siguiente cabecera» de la cabecera de IPv6 para indicar su existencia a los nodos.

Las cabeceras de extensión no son ni examinadas ni procesadas a lo largo de la ruta salvo en el nodo de destino excepto las cabeceras de extensión de «opciones de salto a salto», las cuales llevan información que tiene que ser procesada por todos los nodos del camino.

Al no ser procesadas por los nodos intermedios estamos liberando a estos nodos intermedios de la necesidad de procesar información que no es necesaria para los nodos intermedios, optimizando de esta manera el funcionamiento de los routers y nodos intermedios.

La arquitectura general es la siguiente:

cabeceras_extension

as cabeceras de extensión, a excepción de las «opciones de salto a salto» son procesadas por el nodo destino, pero es importante tener en cuenta que el nodo destino va a procesar las cabeceras de extensión en el orden estricto en el que hayan sido introducidas en el paquete, esto lo conoce al leer la cabecera siempre tendrá un campo indicando la cabecera siguiente.

En el caso que el campo «cabecera siguiente» sea desconocido o tenga valor 0, el destinatario responderá al emisor con un mensaje ICMP de problema de parámetro, con un código ICMP 1 («encontrado tipo de cabecera siguiente desconocido») y el campo Puntero ICMP conteniendo el desplazamiento del valor desconocido dentro del paquete original.

El tamaño de las cabeceras de extensión para poder ser alineadas con la cabecera IPv6 deberá ser múltipo de 8 octetos.

Las cabeceras de extensión pueden ser del siguiente tipo:

  • Opciones de salto a salto. Aquí incluiremos los Jumbograms hablados antes.
  • Encaminamiento (Tipo 0).
  • Fragmento.
  • Opciones de destino.
  • Autenticación.
  • Seguridad del encapsulado de la carga útil.

Cabecera de IPv6

cabecera_ipv6

La cabecera de IPv6 ha sufrido cambios respecto con la cabecera de IPv4 como ya se ha comentado y la cabecera queda de esta manera:

A continuación pasamos a describir cada uno de los campos de la cabecera IPv6:

  • Versión: 4 bits: Al igual que en IPv4, este campo se representa con un número, en este caso el 6 representado en binario como 0110.
  • Clase de tráfico: 8 bits: Utilizado para identificar y distinguir entre las clases o prioridades del paquete IPv6.
  • Etiquetado de flujo: 20 bits: Utilizado para etiquetar secuencias de paquetes para los cuales se solicita un trato especial por parte de los routers de IPv6.
  • Longitud de la carga útil: 16 bits: Número entero que identifica en octetos el tamaño de todo lo que está fuera de la cabecera, inlcuyendo las cabeceras de extensión.
  • Cabecera siguiente: 8 bits: Identifica la siguiente cabecera a procesar en el desencapsulamiento del paquete.
  • Límite de saltos: 8 bits: Entero que se decremente en 1 cada vez que pasa por un router, al llegar a 0 se descartará dicho paquete.
  • Dirección origen: 128 bits: Dirección IPv6 del nodo donde se origina el paquete.
  • Dirección destino: 128 bits: Dirección IPv6 del nodo donde se origina el paquete.

Nomenclatura de IPv6

Como en cualquier otra tecnología antes de empezar a profundizar en cada uno de los aspectos de IPv6 es necesario definir los conceptos más importantes para que el lector pueda tener una idea clara de lo que significa cada uno de los conceptos utilizados con respecto a IP6.

  • Nodo: Un dispositivo que implemente IPv6.
  • Router: Un nodo que reenvía paquetes que no son ni originados ni dirigidos a él mismo. En este punto tenemos que tener en cuenta que pueden existir nodos con varios interfaces y que puedan reenviar paquetes no dirigidos a ellos mismos; estos nodos tendrán que cumplir las mismas especificaciones que los routers.
  • Host: Cualquier nodo que no es un router.
  • Capa superior: Este concepto identifica el protocolo o medio que utiliza IPv6 como nivel subyacente. Estos protocolos pueden ser TCP, UDP o incluso otros protocolos de capa 3 cuando están siendo tunelizados como IPv4 o incluso IPv6.
  • Enlace: Este concepto identifica el protocolo situado justo debajo de IPv6, como puede ser por ejemplo cualquier tipo de ethernet, PPP, ATM, Frame Relay, etc.
  • Vecinos: Identificamos con este nombre a los nodos conectados en un mismo enlace.
  • Interface: La conexión del nodo al enlace.
  • Dirección: Identificación de IPv6 para un interfaz o conjunto de ellos.
  • Paquete: La cabecera IPv6 más la carga útil del mismo.
  • MTU del enlace: El tamaño máximo del paquete enbytes u octetos que puede ser transportando por el enlace.
  • MTU de camino: Con este concepto identificamos la MTU del enlace mínima en todo el camino entre origen y destino.

Introducción a IPv6

IPv6 es el sucesor del actual IPv4 y su llegada es inevitable, de hecho ya está aquí y ha llegado para quedarse definitivamente.
IPv6 proporciona una serie de cambios y mejoras respecto a IPv4, los cuales recaen en las siguientes características:

  • Direccionamiento extendido.
  • Simplificación del formato de la cabecera.
  • Mejora para el soporte de extensiones y opciones.
  • Etiquetado de flujo.
  • Autenticación y privacidad.
  • Direccionamiento extendido.
  • Direccionamiento extendido.

ipv61Direccionamiento extendido

IPv6 aumenta el espacio de direccionamiento de 32 a 128 bits, lo cual amplia drásticamente el direccionamiento disponible y permite una mayor jerarquía y mejor manejo en las redes que utilicen IPv6.

El direccionamiento de 128 bits en IPv6 permite un número mayor de nodos direccionables y un nuevo concepto de auto-configuración de las mismas.

El routing de multicast también se ve mejorado gracias al campo «scope» en las direcciones de multicast.

En IPv6 se define un nuevo tipo de dirección llamada «anycast» utilizada para el envío a cualquiera dentro de un grupo de nodos.

Tenemos que tener en cuenta que con 128 bits, tal y como dijo Silvia Hagen en su libro «IPv6 Essentials, 2nd Edition» con un ejemplo muy gráfico, sería posible asignarle una dirección IPv6 a cada grano de arena en el planeta:

The address format is extended from 32 bits to 128 bits. This provides an IP address for every grain of sand on the planet.

- Silvia Hagen

Simplificación del formato de la cabecera

La cabecera de IPv4 ha sido modificada, de hecho hay unos campos de la cabecera de IPv4 que o bien han sido extraídos de la cabecera o bien se han hecho opcionales al pasar a IPv6.

El objetivo perseguido al hacer esto ha sido el hacer IPv6 más eficiente al caso más común limitando el coste del ancho de banda para la cabecera IPv6.

Mejora para el soporte de extensiones y opciones

En el diseño de IPv6 ha pesado mucho el hecho que los cambios introducidos en la forma en la que se codifican las opciones de la cabecera IPv6 permitiesen un reenvío más eficiente, reduciendo los límites en la longittud de opciones e introduciendo mayor flexibilidad para introducir nuevas opciones en el futuro.

Etiquetado de flujo

Esta es una característica no existente en IPv4 y por tanto una novedad absoluta en IPv6. En IPv6 se permite que el remitente pueda solicitar un tratamiento especial para paquetes de tráfico que pertenezcan al mismo flujo.

Esta característica es algo similar a la calidad de servicio no estándar o al servicio en tiempo real.

Autenticación y privacidad

Esta característica especificada para IPv6 consiste en extensiones para utilizar autenticación, integridad de los datos y confidencialidad de los datos.