IPv6, direcciones para todos

Nota del autor

Este artículo fue inicialmente publicado en el blog de BQ, mibqyyo, y se encontraba aquí enlazado, pero actualmente ya no se encuentra disponible y, para que no desaparezca, reproduzco aquí el contenido completo.

Tengas más o menos conocimientos técnicos es posible que alguna vez hayas oído hablar de las direcciones IP. De manera muy simple podemos decir que una dirección IP es un identificador único de un dispositivo dentro de una red. Tanto tu ADSL como tu smartphone o tablet con tarifa de datos disponen de una de estas direcciones IP, que te identifica en internet.

Cuando interconectamos elementos en red, bien sea un PC, un portátil, un smartphone o una tablet, cada dispositivo recibe una dirección. De esta forma los datos pueden encontrar su camino desde el punto de origen al destino. Y esto es así independientemente de si la red está conectada por cable o de forma inalámbrica. De entre los muchos protocolos de comunicación existentes el conjunto formado por TCP/IP es el que se asentó como base para el funcionamiento de Internet, la red de redes. IP (Internet Protocol) se encarga de transferir los datos en forma de paquetes conmutados. Esto significa que la información se divide en pequeños fragmentos que se separan en el emisor, se envían y vuelven a juntarse en el orden correcto en el receptor. Técnicamente se dice que IP es un protocolo no orientado a la conexión, lo que significa que un mensaje puede ser enviado desde un punto inicial a otro sin asegurarse de que el receptor esté preparado para recibir los datos. Para esta tarea se utiliza TCP (Transmission Control Protocol), que es una capa intermedia que se encarga de que los datos se transmitan de forma fiable entre el emisor y el receptor, permitiendo una comunicación libre de errores.

Para que todo este sistema funcione los paquetes deben conocer su punto de partida y de llegada, que se identificarán mediante su dirección IP. Hasta hace un tiempo se utilizaba IPv4, es decir, Internet Protocol version 4, que es la cuarta versión del protocolo IP y que codifica las direcciones en código binario utilizando 32 bits divididos en 4 octetos. Es decir, se utilizan conjuntos de 32 unos y ceros divididos en 4 grupos de 8, como por ejemplo, 11010101.00011011.10010001.10111011. Como trabajar con estos conjuntos de números tan largos es muy confuso cada octeto se traduce a decimal, con lo que podemos visualizar las direcciones IP de una forma más conocida, siendo la del caso anterior 213.27.145.187.

Pero resultó que conforme internet fue creciendo y más y más dispositivos se fueron interconectando se encontró un gran problema. Y es que, al estar las direcciones formadas por conjuntos de 32 unos y ceros las combinaciones están limitadas a 232 posibilidades, es decir, «sólo» 4.294.967.296 direcciones únicas. Pueden parecer muchas a priori, pero teniendo en cuenta la enorme cantidad de dispositivos conectados a internet, ordenadores, routers, servidores, smartphones, etc. realmente no lo son. Tanto es así, que si no fuera por algunos mecanismos, como la traducción de direcciones de red (Network Address Translation o NAT), ya hace bastante tiempo que se habrían agotado. No quiero detenerme mucho aquí, pero por si tienes curiosidad y no lo conoces la NAT se encarga de traducir múltiples direcciones IP privadas (no visibles desde internet) a una única dirección IP pública (sí visible en internet). Esto lo hace, por ejemplo, el router de tu casa y te permite conectar todos los dispositivos de tu red interna a internet mediante una única IP pública.

Pero esto no fue suficiente. Tal fue el crecimiento de los dispositivos conectados que el 3 de febrero de 2011 la IANA (Internet Assigned Numbers Authority), la entidad encargada de supervisar la asignación global de direcciones IP, entregó el último bloque de direcciones disponibles, unos 33 millones. Esto no significa que ya se estén utilizando todas, sino que globalmente no quedan direcciones sin asignar. Todas están ya en poder de sus correspondientes organismos de asignación regionales.

Esto no cogió por sorpresa a nadie, pues era un hecho que se conocía desde hacía mucho tiempo en base a estimaciones. A este problema, ya presente, debes sumarle, además, el surgimiento del denominado internet de las cosas, que pretende interconectar una vasta variedad de dispositivos para ofrecer nuevos servicios que de otra forma no serían posibles. Entre estos dispositivos se encuentran coches y electrodomésticos.

Pensando en ese problema, y en el futuro, en 1996 se definió IPv6, la sexta versión del Protocolo de Internet. También se lo conoció como IPng (o Internet Protocol next generation) y básicamente la idea es la misma, asignar una dirección única a cada dispositivo de red, sólo que en este caso el direccionamiento se hace en base a conjuntos de 128 bits divididos en 8 grupos de 16. Al igual que antes, trabajar con estos números directamente es muy tedioso y confuso. De hecho, ahora sería muchísimo peor, por lo que ni siquiera se traducen a decimal para trabajar con ellos, sino que se traducen a hexadecimal. De esta forma una dirección IPv6 tiene la forma 2001:0db8:85a3:08d3:1319:8a2e:0370:7334. Como habrás podido deducir, de esta manera se pueden crear muchas más direcciones, en concreto 2128 o, lo que es lo mismo, 340.282.366.920.938.463.463.374.607.431.768.211.456. Más de 340 sextillones de direcciones IP, suficiente para abarcar una amplísima cantidad de dispositivos.

Una curiosidad sobre IPv6 que permite trabajar con algunas de sus direcciones más cómodamente es que si alguno de los grupos de cuatro dígitos es nulo («0000»), éste puede omitirse. Y esto puede hacerse con más de un grupo siempre que sean consecutivos. Así, podemos encontrar direcciones como 2001:0DB8::1428:57ab, o, en el caso característico de la interfaz de loopback (que en IPv4 es 127.0.0.1) simplemente sería ::1.

IPv6, además de una mayor capacidad de direccionamiento también presenta otras nuevas características diferentes a IPv4. Entre ellas está la seguridad, pues incorpora obligatoriamente IPsec (Internet Protocol Security) para el cifrado y la autenticación, cosa que era opcional en IPv4. Como los paquetes son diferentes, se han diseñado las cabeceras para simplificar su procesamiento por parte de los routers, mejorando, por tanto, su eficiencia. En IPv4, además, el tamaño de los paquetes (también llamados datagramas) estaba limitado a 64 KiB (¿qué es eso de KiB?) de carga útil, esto ya no sucede en IPv6, que soporta cargas de hasta 4 GiB, por lo que se los conoce como jumbogramas.

IPv6 también incorpora obligatoriamente Multicast, que era opcional en IPv4, y que es la capacidad de enviar un paquete único a destinos múltiples. Por ello, IPv6 no implementa broadcast (la capacidad de enviar un paquete a todos los nodos del segmento de red), sino que puede conseguir el mismo efecto enviando un paquete al grupo de multicast de enlace-local. Esto implica que la dirección más alta de un segmento de red, anteriormente reservada para broadcast, es una dirección corriente en IPv6.

Tanto IPv4 como IPv6 llevan coexistiendo ya varios años, pero existe otro problema. Y es que el diseño de IPv6 no tiene en cuenta la retrocompatibilidad (o backward compatibility), por lo que ambos modos de direccionamiento no son compatibles entre sí. Es decir, las interfaces con dirección IPv4 no pueden comunicarse directamente con interfaces IPv6. Esto supone un gran problema, pues mientras se realiza la conversión total a IPv6 habrá dispositivos que utilicen cualquiera de los dos tipos de direccionamiento. En un primer momento se utilizaron las que se denominaron como direcciones IPv4 compatibles, y que consistían en direcciones IPv6 pero cuyos 96 primeros bits son 0, de manera que los 32 restantes formasen una dirección IPv4 válida (del estilo a ::208.77.188.166). Los mecanismos de transición a IPv6 actuales ya no utilizan direcciones IPv4 compatibles, sino que han sido sustituidas por otros métodos.

Una de las soluciones más sencillas es utilizar una configuración dual, también llamada Dual Stack o Doble Pila IP, es decir, configurar en el mismo dispositivo tanto direcciones IPv4 como IPv6. De esta manera podrá atender a ambos tipos de peticiones indistintamente, pues muchas veces el equipamiento que tienen las empresas así lo permite aún sin necesitarlo. El problema se presenta cuando hay equipamiento intermedio que no lo soporta, como por ejemplo, los nodos de internet.

Otra solución ampliamente aceptada es utilizar túneles. La idea en este caso es encapsular los paquetes de un protocolo en el otro, permitiendo el tráfico de paquetes IPv6 sobre estructuras de red IPv4 y viceversa. Los dispositivos en los extremos del túnel utilizan dual stack, de manera que puedan extenderse ambos tipos de redes. Algunos mecanismos que se basan en túneles son, por ejemplo, 6to4 o 6over4.

Otro tipo de solución es la utilización de NAT. La idea básica vuelve a ser la misma, traducir varias direcciones IPv4 a direcciones IPv6. Es la solución menos aconsejada, pues el proceso de NAT presenta algunos inconvenientes, como son problemas de escalabilidad, un mayor coste para el proceso de traducción que para el de entunelamiento, o que no todas las aplicaciones son compatibles con NAT. Durante un tiempo se ha utilizado NAPT-PT, que traducía las direcciones a la vez que los puertos a los que iban asociadas, pero finalmente este mecanismo quedó obsoleto en favor de otros como SIIT, TRT o NAT64.

Como conclusión me gustaría mostraros algunos datos y estimaciones. Durante 2014 se espera que el número de teléfonos móviles supere al de la población mundial (más de 7.000 millones). Ya a finales de 2012 el número de dispositivos (de todo tipo) conectados a internet era de unos 8.700 millones. Se espera que este número ascienda hasta 25.000 millones para finales de 2014. Y en 2020 se cree que habrá conectados unos 40.000 millones de dispositivos. Parece que queda mucho tiempo para eso y puede que para entonces hayan cambiado muchas cosas, sin embargo, el futuro está interconectando cosas y este crecimiento se antoja imparable. ¿Os siguen pareciendo muchas las combinaciones de IPv4? Parece que el cambio a IPv6 va a ser inevitable.