El protocolo IPv6 (I)
Autor: Ramón Jesús Millán Tejedor
Publicado en PC World nº 174, IDG Communications S.A., 2001
Introducción
Internet es un conglomerado internacional de redes de ordenadores, enlazados por un conjunto común de protocolos tecnicos, conocidos por protocolos TCP/IP, los cuales hacen posible para los usuarios de estas redes de topologías y medios de transmisión muy diferentes, comunicarse y acceder a los servicios que cualesquiera de ellas ofrezca.
Dentro de la pila de protocolos TCP/IP, la capa de red o capa Internet, es la responsable de la comunicación de una máquina a otra, gestionando el movimiento de paquetes procedentes de la capa de transporte, a traves de la red. Los protocolos más importantes dentro de esta capa son: IP (Internet Protocol), ICMP (Internet Control Message Protocol) e IGMP (Internet Group Management Protocol).
El protocolo IP define los mecanismos de la distribución de paquetes no fiable y sin conexión en redes heterogeneas. Por lo tanto, se pueden producir perdidas, duplicaciones y desórdenes de los datagramas, que tendrán que ser tratados en los niveles superiores. Entre las funciones más importantes de IP están:
- Encapsular el paquete procedente de niveles superiores en un datagrama.
- Encaminar dichos datagramas.
La versión actual de IP es la 4, y se conoce por IPv4. El estándar IPv4 está recogido en la RFC 791, que como el resto de RFCs (Request For Comments), pueden encontrarse en el Sitio Web del IETF (Internet Engineering Task Force).
La siguiente generación del protocolo Internet o IPng (Internet Protocol Next Generation) surgió en el seno del IETF en el año 1994, principalmente por la falta de direcciones de IP que predecían un cuello de botella insalvable al crecimiento de la red Internet. El documento final que recoge el estándar IPv6, fue publicado en la RFC 1883 en el año 1996 y las últimas revisiones, principalmente en su cabecera, han tenido lugar durante el año 2000. El nombre formal de este protocolo, es IPv6.
La versión IPv6 puede ser instalada como una actualización de software en los dispositivos de red de Internet e interoperar con la versión actual IPv4. IPv6 está diseñado especialmente para redes de alto rendimiento, como por ejemplo las redes ATM, pero manteniendo la eficiencia en redes de bajo ancho de banda, como por ejemplo en redes inalámbricas. Además, ofrece una plataforma para la nueva funcionalidad de Internet que será necesaria en un futuro inmediato.
La necesidad de migrar a IPv6 está originada por las nuevas tendencias en el mundo actual de las telecomunicaciones, que podemos resumir en:
- La creciente movilidad de los usuarios de Internet, que desean acceder a los mismos servicios en cualquier momento y desde cualquier lugar.
- Las redes domesticas con avanzados sistemas de televigilancia, control y seguridad.
- La convergencia de voz, vídeo y datos, en infraestructuras basadas en IP.
Limitaciones de IPv4
Son muchas las cuestiones que debían ser consideradas en el diseño de IPv6. Por ejemplo, el nuevo protocolo debía ser capaz de soportar grandes redes y ofrecer un sencillo y rápido mecanismo de migración para la base de sistemas IPv4 instalados. En efecto, uno de los problemas de IPv4, es la gran dimensión de las tablas de encaminamiento en la red troncal de Internet, que la hace ineficaz y perjudica considerablemente los tiempos de respuesta. En IPv6 el encaminamiento en la red troncal es más eficiente, debido a una jerarquía de direccionaminento basada en la agregación y a que la fragmentación y defragmentación de los paquetes se realiza extremo a extremo.
Sin embargo, la principal razón que originó la necesidad de IPv6, fue la evidencia de falta de direcciones, derivada del crecimiento de la red Internet, con ritmos superiores al 100% anual. El límite en el espacio de direccionamiento fue agravado además por la falta de coordinación en la delegación de direcciones durante los años 1980s, dejando incluso grandes espacios discontinuos. En IPv6 el espacio de direcciones se incrementa de 32 a 128 bits, soportando más niveles de jerarquías de direccionamiento, un mayor número de nodos direccionables y la autoconfiguración de las direcciones. Se mejora además el direccionamiento multicast y se define el direccionamiento anycast.
No obstante, la falta de direcciones no es igual en todos los puntos de la red; por ejemplo, es casi inapreciable por el momento en Norteamerica, pero en zonas como en Europa y Asia, la situación es crítica. Además, este problema es creciente, debido principalmente al tremendo desarrollo de la telefónica móvil celular y la inminente aparición comercial de la tercera generación de comunicaciones móviles o UMTS (Universal Mobile Telecommunications System). Los móviles se convertirán en dispositivos siempre conectados a Internet y será necesario asignarlos una dirección IP fija y única. El mismo Foro UMTS preve unas necesidades de direcciones IP, de 20.000.000.000 para los dispositivos de los usuarios y de 3.200.000 para los dispositivos de red, en el año 2005.
La solución adoptada por los proveedores de servicios Internet para solventar los problemas de disponibilidad de direcciones IP, ha sido proporcionar a sus clientes direcciones IP privadas, es decir no reconocidas en Internet, mediante mecanismos de traslación de direcciones o NAT (Network Address Translation). Es decir, se usa una sola dirección IP pública para toda una red privada. No obstante, este mecanismo no puede utilizarse en los terminales móviles y, además, muchas aplicaciones son incapaces de ser utilizadas mediante este tipo de direcciones, especialmente las relacionadas con la autentificación y la seguridad de las comunicaciones.
Pero además, IPv4 presenta otros problemas o dificultades que la nueva versión soluciona o mejora. Por ejemplo, IPv4 no está preparado para soportar las nuevas aplicaciones de la red Internet como la transmisión de vídeo y audio en tiempo real, ni mecanismos de seguridad avanzada sobre los datos transmitidos. Para reducir el tiempo de procesamiento de los paquetes, se ha simplificado el formato de la cabecera de IPv4 y se ha introducido el concepto de flujo, consiguiendo que los routers, además de encaminar, puedan conmutar algunos de los paquetes que procesan. Por otro lado, se ha mejorado el mecanismo de codificación de los campos optativos en la cabecera, dando una mayor flexibilidad para la Introducción de nuevas opciones futuras. Finalmente, IPv6 ha mejorado las capacidades de autentificación y privacidad de los datos transmitidos. De esta forma, en IPv6 una cabecera de autentificación garantiza que un paquete procede del origen que realmente se indica, mientras que en IPv4 el paquete podría venir de un origen distinto al indicado en la cabecera.
Como resumen, podemos afirmar que aunque el funcionamiento del protocolo IP ha sido totalmente satisfactorio, las razones que propiciaron la aparición de IPv6 han sido:
- El sorprendente crecimiento del número de direcciones IP en uso.
- La necesidad de transmitir aplicaciones en tiempo real.
- La necesidad de mecanismos de seguridad.
Características principales de IPv6
Como se ha comentado, IPv6 fue diseñado como una evolución natural a IPv4. Es decir, todo lo que funcionaba perfectamente en IPv4 se ha mantenido, lo que no funcionaba se ha eliminado, y se ha tratado de añadir nuevas funciones manteniendo la compatibilidad entre ambos protocolos. Las características principales de IPv6 son:
- Mayor espacio de direcciones.
- Optimización del direccionamiento multicast y aparición del direccionamiento anycast.
- Autoconfiguración de los nodos.
- Seguridad intrínseca en el núcleo del protocolo.
- Calidad de servicio y clases de servicios.
- Paquetes eficientes y extensibles.
- Encaminamiento más eficiente en la red troncal.
- Renumeración y multihoming, que facilita el cambio de proveedor de servicios.
- Características de movilidad.
Cabecera de IPv6
La cabecera de IPv6, descrita principalmente en la RFC 2460, elimina o hace opcionales varios campos de la cabecera de IPv4, consiguiendo una cabecera de tamaño fijo y más simple, con el fin de reducir el tiempo de procesamiento de los paquetes manejados y limitar el coste en ancho de banda de la cabecera de IPv6.
La cabecera de IPv4, mostrada en la Figura 1, tiene una longitud variable mínima de 20 octetos. El bit más significante se numera por 0 a la izquierda, y el menos significante se numera por 31 a la derecha. La forma de transmitir los diferentes bytes, sigue el orden conocido por big endian, es decir, de izquierda a derecha y de arriba abajo según la estructura presentada en la Figura 1. La cabecera consiste en los siguientes campos:
- Versión (4 bits). Es el número de versión de IP, es decir, 4.
- Cabecera (4 bits). Especifica la longitud total de la cabecera en palabras de 32 bits. El valor mínimo y más común es de 5, siendo la longitud de cabecera mínima. Puesto que el campo es de 4 bits, se limita la longitud total de la cabecera a 60 bytes.
- Tipo de servicio (8 bits). Indica la calidad de servicio solicitada por el paquete IP. De los 8 bits, actualmente sólo se utilizan 4, indicando cada uno de ellos: conseguir el retardo mínimo, maximizar caudal, maximizar la fiabilidad, y minimizar el coste monetario. Sólo uno de estos cuatro bits puede estar a 1. Su uso viene descrito en la RFC 1340 y RFC 1349.
- Longitud total (16 bits). Especifica el tamaño total del paquete, incluyendo la cabecera y los datos, en bytes.
- Identificador (16 bits). Es un número único asignado por el dispositivo que envía el paquete, con el fin de que el destinatario pueda reensamblar un paquete fragmentado por los nodos intermedios. Recordemos que la fragmentación es necesaria porque no todas las redes físicas tienen la misma longitud de trama máxima, por lo cual en muchos casos es necesario que los nodos intermedios dividan el datagrama en varios fragmentos. Cada uno de estos fragmentos podrá seguir rutas distintas al resto y, de perderse alguno de los fragmentos, el origen deberá retransmitir el paquete completo.
- Banderas (3 bits). Es un campo para el control de la fragmentación. El primer bit no es utilizado y está siempre puesto a 0. Si el segundo bit es 0, significa que puede haber fragmentación, y si es 1, significa que no puede haber fragmentación. Si el tercer bit es 0, indica que es el último fragmento, y si es 1, indica que aún hay más fragmentos.
- Desplazamiento del fragmento (13 bits). Es utilizado en los paquetes que han sido fragmentados, para posibilitar el reensamblado total del paquete. Su valor indica el número de bloques de 8 bytes (sin contabilizar los bytes de la cabecera) que estaban contenidos en los fragmentos previos. En el primer fragmento, o en un único fragmento, este valor es siempre 0. Tiempo de vida (8 bits). Contiene el tiempo máximo que un paquete puede permanecer en una red. Cada dispositivo por el que pasa el paquete decrementa el valor de este campo en el tiempo que tarda en procesar la cabecera IP, siendo 1 el valor mínimo. Si el valor llega a 0, el paquete es descartado. Esto garantiza que los paquetes no viajan a traves de una red haciendo bucles, incluso si las tablas de encaminamiento son erróneas.
- Protocolo (8 bits). Indica al protocolo de nivel superior al que IP deberá pasar los datos del paquete. Por ejemplo, UDP es 17 y TCP es 6.
- Control de errores de la cabecera (16 bits). Es un campo para controlar los errores únicamente en la cabecera IP, exceptuando este campo.
- Dirección origen (32 bits). Es la dirección del origen del paquete.
- Dirección destino (32 bits). Es la dirección del destino del paquete.
- Opciones (variable). No son requeridas en todos los paquetes.
La cabecera básica de IPv6, mostrada en la Figura 2, tiene una longitud fija de 40 octetos, consistiendo en los siguientes campos:
- Versión (4 bits). Es el número de versión de IP, es decir, 6.
- Clase de tráfico (8 bits). El valor de este campo especifica la clase de tráfico. Los valores de 0-7 están definidos para tráfico de datos con control de la congestión, y de 8-15 para tráfico de vídeo y audio sin control de la congestión.
- Etiqueta del flujo (20 bits). El estándar IPv6 define un flujo como una secuencia de paquetes enviados desde un origen específico a un destino específico. Un flujo se identifica únicamente por la combinación de una dirección fuente y una etiqueta de 20 bits. De este modo, la fuente asigna la misma etiqueta a todos los paquetes que forman parte del mismo flujo. La utilización de esta etiqueta, que identifica una camino a lo largo de la red, posibilita encaminar conmutar en vez de encaminar. Su uso viene descrito en la RFC 1809.
- Longitud del paquete (16 bits). Especifica el tamaño total del paquete, incluyendo la cabecera y los datos, en bytes. Es necesario porque tambien hay campos opcionales en la cabecera.
- Siguiente cabecera (8 bits). Indica el tipo de cabecera que sigue a la cabecera fija de IPv6, por ejemplo, una cabecera TCP/UDP, ICMPv6 o una cabecera IPv6 opcional.
- Límite de saltos (8 bits). Es el número de saltos máximo que le quedan al paquete. El límite de saltos es establecido a un valor máximo por el origen y decrementado en 1 cada vez que un nodo encamina el paquete. Si el límite de saltos es decrementado y toma el valor 0, el paquete es descartado.
- Dirección origen (128 bits). Es la dirección del origen del paquete.
- Dirección destino (128 bits). Es la dirección del destino del paquete.
Como podemos observar, de los 12 campos de la cabecera de IPv4 se ha pasado a 8 campos en IPv6. El motivo fundamental por el que estos campos (tipo de servicio, indicadores, identificación y control de errores) son eliminados, es la innecesaria redundancia; en IPv4 se está facilitando la misma información de diversas formas, como es el caso del campo de control de errores, pues otros mecanismos de encapsulado de capas inferiores, por ejemplo IEEE 802, ya realizan esta función. El campo de desplazamiento de fragmentación de IPv4 ha sido eliminado, porque los paquetes ya no son fragmentados en los nodos intermedios, en IPv6 es un proceso que se produce extremo a extremo. El único campo realmente nuevo en IPv6 es la etiqueta de flujo.
La información opcional a la estrictamente necesaria para encaminar los paquetes de datos, es codificada en cabeceras adicionales que pueden ubicarse entre la cabecera IPv6 y las cabeceras de niveles superiores, como por ejemplo la cabecera TCP/UDP. En la actualidad, hay un pequeño número de tales cabeceras de extensión (opciones de salto por salto, encaminamiento extendido, fragmentación y reensamblado, opciones del destino, autentificación, y encapsulación) estando cada una identificada por un valor distinto del valor del campo siguiente cabecera. Cada paquete IPv6 puede llevar cero, una, o más cabeceras de extensión, cada una identificada por el valor del campo siguiente cabecera de la cabecera que la precede. Las cabeceras de extensión deben de ser procesadas en orden, ya que el contenido y semántica de cada una de ellas indican si se debe o no procesar la siguiente cabecera.
De esta forma, las cabeceras de extensión no son examinadas o procesadas por los nodos intermedios, sólo cuando lleguen al nodo que venga identificado por el campo de dirección de destino de la cabecera IPv6. La única excepción es la cabecera de opciones de salto por salto, que lleva información que debe ser procesada y examinada en todos los nodos por los que pasa el paquete, incluyendo los nodos origen y destino. La cabecera de opciones de salto por salto, cuando este presente, debe seguir inmediatamente a la cabecera IPv6. Su presencia se indica por el valor 0 en el campo de siguiente cabecera de la cabecera IPv6.
Cada cabecera de extensión tiene una longitud múltiplo entero de 8 octetos, con el fin de mantener el alineamiento de 8 octetos en las cabeceras siguientes. La razón de que los distintos campos de la cabecera esten alineados a 64 bits, es que la nueva generación de procesadores, de 64 bits, puedan procesar dichos campos más eficientemente.
Resumiendo, las principales mejoras que ofrece la cabecera IPv6 son:
- Cabecera de tamaño fijo, de 40 bytes.
- Eliminación de campos redundantes en la cabecera, haciendo un total de 8.
- Cabecera básica y de extensión alineadas a un múltiplo entero de 64 bits.
- Procesamiento eficiente de las opciones, sólo en destino y cuando estas se presentan.
- Fragmentación procesada en el origen y el destino de los paquetes, no en los routers.

