Un paquete IPv6 es la entidad de mensaje más pequeña que se intercambia utilizando el Protocolo de Internet versión 6 (IPv6). Los paquetes constan de información de control para direccionamiento y enrutamiento y una carga útil de datos de usuario. La información de control en los paquetes IPv6 se subdivide en un encabezado fijo obligatorio y encabezados de extensión opcionales. La carga útil de un paquete IPv6 suele ser un datagrama o segmento del protocolo de la capa de transporte de nivel superior , pero en su lugar pueden ser datos para una capa de Internet (por ejemplo, ICMPv6 ) o una capa de enlace (por ejemplo, OSPF ).
Los paquetes IPv6 normalmente se transmiten a través de la capa de enlace (es decir, a través de Ethernet o Wi-Fi ), que encapsula cada paquete en una trama . Los paquetes también se pueden transportar a través de un protocolo de túnel de capa superior , como IPv4 cuando se utilizan tecnologías de transición 6to4 o Teredo .
A diferencia de IPv4, los enrutadores no fragmentan paquetes IPv6 mayores que la unidad máxima de transmisión (MTU), es responsabilidad exclusiva del nodo de origen. IPv6 exige una MTU mínima de 1280 octetos , pero se "recomienda encarecidamente" a los hosts que utilicen Path MTU Discovery para aprovechar MTU superiores al mínimo. [1]
Desde julio de 2017, la Autoridad de Números Asignados de Internet (IANA) es responsable de registrar todos los parámetros IPv6 que se utilizan en los encabezados de los paquetes IPv6. [1]
El encabezado fijo inicia un paquete IPv6 y tiene un tamaño de 40 octetos (320 bits ). [1] Los bytes de los campos multibyte están en el orden de bytes de la red .
Para aumentar el rendimiento, y dado que se supone que la tecnología de capa de enlace y los protocolos de capa de transporte actuales proporcionan suficiente detección de errores, [9] el encabezado no tiene suma de verificación para protegerlo. [1]
Los encabezados de extensión transportan información opcional de la capa de Internet y se colocan entre el encabezado fijo y el encabezado del protocolo de la capa superior. [1] Los encabezados de extensión forman una cadena, utilizando los campos de Encabezado siguiente . El campo Siguiente encabezado en el encabezado fijo indica el tipo del primer encabezado de extensión; el campo Siguiente encabezado del último encabezado de extensión indica el tipo de encabezado de protocolo de capa superior en la carga útil del paquete. Todos los encabezados de extensión tienen un tamaño múltiplo de 8 octetos; algunos encabezados de extensión requieren relleno interno para cumplir con este requisito.
Hay varios encabezados de extensión definidos y es posible que se definan nuevos encabezados de extensión en el futuro. La mayoría de los encabezados de extensión se examinan y procesan en el destino del paquete. Las opciones de salto a salto pueden ser procesadas y modificadas por nodos intermedios y, si están presentes, deben ser la primera extensión. Todos los encabezados de extensión son opcionales y deben aparecer como máximo una vez, excepto la extensión del encabezado Opciones de destino , que puede aparecer dos veces. [1]
Si un nodo no reconoce un encabezado de extensión específico, debe descartar el paquete y enviar un mensaje de problema de parámetro ( ICMPv6 tipo 4, código 1). [1]
Los encabezados de extensión definidos a continuación se enumeran en el orden preferido para el caso en que haya más de un encabezado de extensión después del encabezado fijo.
El valor 59 (Sin encabezado siguiente) en el campo Encabezado siguiente indica que no hay ningún encabezado siguiente después de este, ni siquiera un encabezado de un protocolo de capa superior. Significa que, desde el punto de vista del encabezado, el paquete IPv6 termina justo después: la carga útil debe estar vacía. Sin embargo, aún podría haber datos en la carga útil si la longitud de la carga útil en el primer encabezado del paquete es mayor que la longitud de todos los encabezados de extensión del paquete. Los hosts deben ignorar estos datos, pero los enrutadores los deben pasar sin modificarlos. [1] : 4,7
El encabezado de extensión de Opciones de salto a salto puede ser examinado y modificado por todos los nodos en la ruta del paquete, incluidos los nodos emisores y receptores. (Para la autenticación, los valores de las opciones que pueden cambiar a lo largo de la ruta se ignoran). El encabezado de la extensión Opciones de destino debe ser examinado únicamente por los nodos de destino. Los encabezados de extensión tienen un tamaño mínimo de 8 octetos; si hay más opciones de las que caben en ese espacio, se agregan al encabezado repetidamente bloques de 8 octetos, que contienen opciones y relleno, hasta que todas las opciones estén representadas.
El encabezado de extensión de enrutamiento se utiliza para dirigir un paquete a uno o más nodos intermedios antes de enviarlo a su destino. El encabezado tiene un tamaño mínimo de 8 octetos; Si se necesitan más datos específicos del tipo de los que caben en 4 octetos, se agregan bloques de 8 octetos al encabezado repetidamente, hasta que se coloquen todos los datos específicos del tipo . [1]
Para enviar un paquete que sea más grande que la ruta MTU , el nodo emisor divide el paquete en fragmentos. El encabezado de extensión Fragmento contiene la información necesaria para volver a ensamblar el paquete original (no fragmentado). [1]
El encabezado de autenticación y la carga útil de seguridad encapsulante son parte de IPsec y se usan de manera idéntica en IPv6 e IPv4. [19] [20]
Los encabezados IPv6 fijos y opcionales van seguidos de la carga útil de la capa superior , los datos proporcionados por la capa de transporte, por ejemplo, un segmento TCP o un datagrama UDP . El campo Siguiente encabezado del último encabezado IPv6 indica qué tipo de carga útil contiene este paquete.
El campo de longitud de carga útil de IPv6 (e IPv4 ) tiene un tamaño de 16 bits, capaz de especificar una longitud máxima de65 535 octetos para la carga útil. En la práctica, los hosts determinan la longitud máxima de carga útil utilizando Path MTU Discovery (produciendo la MTU mínima a lo largo de la ruta del remitente al receptor), para evitar tener que fragmentar paquetes. La mayoría de los protocolos de capa de enlace tienen MTU considerablemente más pequeñas que65 535 octetos.
Una característica opcional de IPv6, la opción de carga útil jumbo en un encabezado de extensión de opciones Hop-By-Hop , [8] permite el intercambio de paquetes con cargas útiles de hasta un octeto menos de 4 GB (2 32 − 1 = 4 294 967 295 octetos), utilizando un campo de longitud de 32 bits. Los paquetes con este tipo de cargas útiles se denominan jumbogramas .
Dado que tanto TCP como UDP incluyen campos limitados a 16 bits (longitud, puntero de datos urgentes), la compatibilidad con jumbogramas IPv6 requiere modificaciones en la implementación del protocolo de la capa de transporte. [8] Los jumbogramas solo son relevantes para enlaces que tienen una MTU mayor que65 583 octetos (más de65 535 octetos para la carga útil, más 40 octetos para el encabezado fijo, más 8 octetos para el encabezado de extensión salto a salto ). Sólo unos pocos protocolos de capa de enlace pueden procesar paquetes más grandes que65 535 octetos. [ cita necesaria ]
A diferencia de IPv4, los enrutadores IPv6 nunca fragmentan los paquetes IPv6. Los paquetes que exceden el tamaño de la unidad máxima de transmisión (MTU) del enlace de destino se descartan y esta condición se señala mediante un mensaje ICMPv6 Paquete demasiado grande al nodo de origen, de manera similar al método IPv4 cuando se establece el bit No fragmentar . [1] Se espera que los nodos finales en IPv6 realicen el descubrimiento de MTU de ruta para determinar el tamaño máximo de los paquetes a enviar, y se espera que el protocolo de capa superior limite el tamaño de la carga útil. Si el protocolo de capa superior no puede hacerlo, el host emisor puede usar el encabezado de extensión Fragmento en su lugar.
Cualquier capa de enlace de datos que transmita datos IPv6 debe ser capaz de transmitir un paquete IP que contenga hasta 1280 bytes, por lo que el punto final de envío puede limitar sus paquetes a 1280 bytes y evitar cualquier necesidad de fragmentación o descubrimiento de MTU de ruta.
Un paquete que contiene el primer fragmento de un paquete original (más grande) consta de cinco partes: los encabezados por fragmento (los encabezados originales cruciales que se usan repetidamente en cada fragmento), seguidos por el encabezado de extensión Fragmento que contiene un desplazamiento de cero, luego todos los encabezados de extensión originales restantes, luego el encabezado original de la capa superior (alternativamente, el encabezado ESP) y una parte de la carga útil original. [1] Cada paquete posterior consta de tres partes: los encabezados por fragmento, seguidos por el encabezado de extensión del fragmento y por una parte de la carga útil original identificada mediante un desplazamiento de fragmento.
Los encabezados por fragmento se determinan en función de si el original contiene un encabezado de extensión de enrutamiento o salto a salto . Si ninguno de los dos existe, la parte por fragmento es solo el encabezado fijo. Si el encabezado de extensión de enrutamiento existe, los encabezados por fragmento incluyen el encabezado fijo y todos los encabezados de extensión hasta el de enrutamiento inclusive. Si el encabezado de extensión Hop-by-Hop existe, los encabezados por fragmento constan únicamente del encabezado fijo y el encabezado de extensión Hop-by-Hop .
En cualquier caso, el último encabezado de la parte por fragmento tiene su valor de Siguiente encabezado establecido en 44 para indicar que le sigue un encabezado de extensión de Fragmento . Cada encabezado de extensión de Fragmento tiene su indicador M establecido en 1 (lo que indica que le siguen más fragmentos), excepto el último, cuyo indicador está establecido en 0 . La longitud de cada fragmento es múltiplo de 8 octetos, excepto, potencialmente, el último fragmento.
Históricamente, los encabezados por fragmento se denominaban "parte no fragmentable", en referencia a la posibilidad anterior a 2014 de fragmentar el resto del encabezado. Ahora ningún encabezado es realmente fragmentable. [21]
El nodo receptor vuelve a ensamblar el paquete original recopilando todos los fragmentos y colocando cada fragmento en su desplazamiento indicado y descartando los encabezados de extensión de fragmentos de los paquetes que los transportaban. No es necesario que los paquetes que contienen fragmentos lleguen en secuencia; serán reorganizados por el nodo receptor.
Si no se reciben todos los fragmentos dentro de los 60 segundos posteriores a la recepción del primer paquete con un fragmento, se abandona el reensamblaje del paquete original y se descartan todos los fragmentos. Si se recibió el primer fragmento (que contiene el encabezado fijo) y faltan uno o más, se devuelve un mensaje de tiempo excedido ( ICMPv6 tipo 3, código 1) al nodo que origina el paquete fragmentado.
Cuando el nodo de reensamblaje detecta un fragmento que se superpone con otro fragmento, se cancela el reensamblaje del paquete original y se descartan todos los fragmentos. Opcionalmente, un nodo puede ignorar los duplicados exactos de un fragmento en lugar de tratar los duplicados exactos como superpuestos entre sí. [1]
Los hosts receptores deben hacer lo mejor que puedan para reensamblar datagramas IP fragmentados que, después del reensamblaje, contienen hasta 1500 bytes. A los hosts se les permite intentar reensamblar datagramas fragmentados de más de 1500 bytes, pero también se les permite descartar silenciosamente cualquier datagrama después de que sea evidente que el paquete reensamblado tendría más de 1500 bytes. Por lo tanto, los remitentes deben evitar enviar datagramas IP fragmentados con un tamaño total reensamblado superior a 1500 bytes, a menos que tengan conocimiento de que el receptor es capaz de reensamblar datagramas tan grandes.
Las investigaciones han demostrado que se puede aprovechar el uso de la fragmentación para evadir los controles de seguridad de la red. Como resultado, en 2014 se prohibió la anterior autorización para desbordar la cadena de encabezados IPv6 más allá del primer fragmento para evitar algunos casos de fragmentación muy patológicos. [21] Además, como resultado de la investigación sobre la evasión de Router Advertisement Guard, [22] el uso de la fragmentación con Neighbor Discovery está obsoleto y se desaconseja el uso de la fragmentación con Secure Neighbor Discovery (SEND). [23]
Tipo 0: el mecanismo del mal...