Tabla de contenidos
Continuemos con la discusión de IPv6, y ahora hablemos sobre su Header. Aunque el agotamiento de direcciones IPv4 fue el detonante principal para el desarrollo de IPv6, la transición fue también una oportunidad para rediseñar el protocolo desde cero e incorporar características que IPv4 no podía ofrecer de forma nativa. Entre las más importantes se encuentran:
Para incorporar todas estas características era necesario construir un nuevo header. No era posible agregar todos estos campos al header IPv4 sin aumentar drásticamente su complejidad y el tiempo de procesamiento en cada router. La solución fue diseñar un header principal fijo y simple, y delegar las funcionalidades opcionales a lo que se conoce como extension headers, que se agregan solo cuando son necesarios.
El proceso de encapsulación de datos en IPv6 sigue exactamente el mismo modelo que en IPv4.
El header IPv6 es un header más simple, no más pequeño. Con 128 bits para la dirección de origen y otros 128 bits para la dirección de destino, es imposible que sea más pequeño que el de IPv4. Lo que sí es más simple es su estructura: tiene un número menor de campos, todos de tamaño fijo, sin opciones variables que obliguen a los routers a hacer procesamiento adicional en cada salto.
El header IPv6 tiene siempre un tamaño fijo de 40 bytes — 320 bits — distribuidos en 8 campos. El header IPv4 mínimo tiene 20 bytes pero puede crecer hasta 60 bytes si se utilizan los campos de opciones, lo que obliga a los routers a verificar el campo Header Length en cada paquete para saber dónde termina el header y dónde empieza el payload. En IPv6 ese problema no existe: el header siempre tiene exactamente 40 bytes.
A continuación analizamos cada campo del header IPv6 y su relación con el header IPv4. Para facilitar la comparación, los campos se agrupan según su equivalencia entre ambos protocolos.
El campo Version como lo vemos en la anterior imagen, tiene un tamaño de 4 bits en ambos headers y cumple exactamente la misma función: indica la versión del protocolo IP al que pertenece el header. En IPv4 el valor de este campo es 0100 (el número 4 en binario) y en IPv6 es 0110 (el número 6 en binario). Es el mismo campo con el mismo nombre y la misma función — solo cambia el valor.
El header IPv6 tiene siempre exactamente 40 bytes. Es fijo porque IPv6 eliminó los campos opcionales que en IPv4 hacían variable el tamaño del header (los campos Options y Padding). En IPv6, las funcionalidades opcionales se implementan mediante extension headers separados que se agregan únicamente cuando son necesarios. Al tener un tamaño de header siempre constante, los routers no necesitan calcular dónde termina el header en cada paquete, lo que acelera el procesamiento.
Ambos indican qué protocolo viene a continuación del header IP, pero Next Header tiene una función adicional en IPv6: cuando se utilizan extension headers, Next Header apunta al primer extension header de la cadena en lugar de apuntar directamente al protocolo de capa de transporte. Cada extension header tiene a su vez su propio campo Next Header que apunta al siguiente header en la cadena. Los valores numéricos que usan ambos campos son los mismos, ya que comparten la tabla de números de protocolo de IANA.
Los extension headers son headers opcionales que se insertan entre el header principal de IPv6 y el header de la capa de transporte cuando se necesita alguna funcionalidad adicional — seguridad (IPsec), enrutamiento de origen, fragmentación, opciones para routers intermedios, etc. En un paquete IPv6 típico no hay ningún extension header: el campo Next Header del header principal apunta directamente a TCP o UDP. Los extension headers se encadenan mediante el campo Next Header de cada uno, formando una cadena que termina cuando se apunta al protocolo de capa de transporte.