Ilustración de la tecnología IPv6

Las direcciones IPv4 públicas se asignaron el 25 de noviembre de 2019 y no habrá direcciones adicionales para asignar en el futuro. La mitigación se puede lograr en el corto plazo utilizando la tecnología NAT. A largo plazo, aún será necesario utilizar direcciones IPv6 de 128 bits para reemplazar las direcciones IPv4 de 32 bits. IPv6 tiene 3,4 10^38 direcciones disponibles, lo cual es demasiado para satisfacer la demanda de futuras direcciones IP.

Las direcciones IPv6 no sólo son más largas que las direcciones IPv4, sino que también se diferencian en otros aspectos.

La dirección IPv4 de 32 bits se divide en cuatro segmentos de 8 bits. El valor de cada segmento de 8 bits está entre 0 ~ 255. Cada segmento de 8 bits está separado por ".", que es. "Notación decimal con puntos". Por ejemplo:

192.168.0.1

La dirección IPv6 de 128 bits es 4 veces la dirección IPv4. Si utiliza notación decimal con puntos, habrá 16 números de ocho bits. , la dirección es demasiado larga. Para facilitar su uso, se utiliza la notación hexadecimal, que se divide en 8 segmentos de 16 bits. El valor de cada segmento de 16 bits está entre 0000 y FFFF en números hexadecimales se utiliza ":" entre cada segmento de 16 bits. . Por ejemplo:

2001:1111:0100:000a:0000:00bc:2500:0a0b

Para una fácil comprensión, puede consultar la siguiente tabla de conversión hexadecimal.

Sin embargo, las direcciones IPv6 siguen siendo demasiado largas, incómodas de recordar, mareantes al mirarlas, incómodas de escribir e irregulares. Entonces hay dos reglas de simplificación. La primera regla es:

La dirección IPv6 anterior se puede escribir como: 2001:1111:100:a:0:bc:2500:a0b

Cabe señalar aquí que la El 0 inicial se puede omitir, el 0 al final no se puede omitir, porque esto causará ambigüedad y es imposible determinar si el 0 omitido está antes o después del número.

Si hay una dirección IPv6 con una cadena de 0, por ejemplo:

2001:0000:0000:0000:0000:0000:0000:0003

Se puede abreviar a:

2001:0:0:0:0:0:0:3

En este momento, también puedes usar la segunda regla para simplificar, la segunda regla es:

La dirección anterior también se puede simplificar a:

2001::3

Cabe señalar aquí que dentro de una dirección IPv6, "::" sólo se puede utilizar una vez. También puede surgir ambigüedad si se usa dos o más veces.

Por ejemplo:

2001:0a0c:0000:0000:0021:0000:0000:0077

La forma correcta de escribirlo es:

2001:a0c : :21:0:0:77

2001:a0c:0:0:21::77

Si " :: " se usa dos veces, está mal:

2001: a0c:: 21:: 77

Si hay dos cadenas totalmente 0, no se pueden determinar sus longitudes. Hay varias posibilidades para la dirección incorrecta anterior:

.

2001:0a0c:0000:0021:0000:0000:0000:0077

2001:0a0c:0000:0000:0021:0000:0000:0077

2001: 0a0c :0000:0000:0000:0021:0000:0077

La dirección del segmento de red IPv4 se puede representar mediante una máscara de subred o una barra diagonal. IPv6 solo puede usar el método de barra diagonal para representar la dirección del segmento de red, es decir, agregar una barra diagonal "/" después de la dirección IPv6, seguida de un número decimal para indicar cuántos dígitos anteriores son bits de red. El bit de red es una dirección IPv6 de 64 bits expresada de la siguiente manera:

3001:2222:333:aa:bc::707:9900/64

La dirección del segmento de red correspondiente es :

p>

3001:2222:333:aa::/64

Una dirección IPv6 compuesta exclusivamente de 0 se puede escribir como un par de dos puntos. Cuando el bit de red es 0, representa la dirección predeterminada.

::/0

Cuando el bit de red es de 128 bits, significa dirección no especificada. Cuando al dispositivo no se le asigna una dirección IPv6, utiliza la dirección no especificada como identificador para el intercambio de paquetes.

::/128

Las direcciones IPv6 se dividen en tres tipos según su ámbito de uso y funciones:

En comparación con IPv4, no existe una dirección de transmisión en direcciones IPv6, pero hay una dirección de multidifusión que contiene todos los nodos, que tiene la misma función que la dirección de transmisión en IPv4.

La dirección de unidifusión se subdivide en dirección de unidifusión global, dirección local única y dirección local de enlace.

Una dirección de unidifusión representa la dirección de un único dispositivo. Dirección de unidifusión global significa que esta dirección de unidifusión es globalmente única. En otras palabras, la dirección de unidifusión global es una dirección IPv6 que se puede utilizar en la red pública y se puede enrutar a través de la red, similar a la dirección IP pública de IPv4. Las direcciones IPv6 de unidifusión global son asignadas por la Autoridad de Direcciones de Internet (IANA) a los Registros Regionales de Internet (RIR), que a su vez las asignan a los Proveedores de Servicios de Internet (ISP).

Cuando IANA asigna una dirección IPv6 de 128 bits, al igual que IPv4, también asigna un segmento de red, es decir, un bit de red/subred, y no asigna una dirección de 128 bits. El formato general de una dirección de unidifusión IPv6 es el siguiente:

Los primeros 3 dígitos de la dirección IPv6 de unidifusión global se fijan en 001; los 45 bits del 4 al 48 los asigna la agencia de asignación de direcciones; 16 bits después del bit 48 son el bit de subred de la red, llamado ID de subred; la dirección IPv6 de 64 bits restante es el bit de host, pero se llama ID de interfaz (ID de interfaz).

Debido a que un host puede tener varias interfaces, es más preciso utilizar una dirección IPv6 para representar una interfaz de un host en lugar de un solo host. Al mismo tiempo, una interfaz puede tener varias direcciones IPv6 y también puede tener una dirección IPv4, y el ID de la interfaz es solo uno de varios identificadores para esta interfaz.

Normalmente, una dirección IPv6 global tiene un ID de interfaz de 64 bits y un ID de subred de 16 bits. Una ID de subred de 16 bits se puede dividir en 65536 subredes diferentes. Hay muy pocas redes con tantas subredes, por lo que las direcciones IPv6 de unidifusión global tienen otro formato: el prefijo es n bits, la ID de subred es 64-n bits y la ID de interfaz también es 64 bits. Los dos formatos tampoco son contradictorios.

Convierta los primeros 3 dígitos fijos de la dirección IPv6 de unidifusión global en representación IPv6. Se puede ver que el prefijo de la dirección de unidifusión global es 2000::/3.

La IANA y el RIR asignan prefijos IPv6 de longitud /32 o /35 a los Registros Locales de Internet (LIR). Los LIR suelen ser grandes ISP que asignan direcciones IPv6 con una longitud de prefijo de /48 a cada cliente. Existen algunas excepciones, que asignan prefijos de diferentes longitudes:

Un identificador binario al comienzo de una dirección IPv6 que identifica el tipo de dirección. Por ejemplo: los primeros 3 dígitos de la dirección de unidifusión global son 001.

Además de las direcciones de unidifusión globales, existen otros tipos de direcciones de unidifusión locales, que se utilizan en diferentes escenarios.

¿Qué direcciones unicast locales existen?

Hay 4 tipos de direcciones de unidifusión locales: dirección local única, dirección local de enlace, dirección no especificada y dirección de bucle invertido.

Aunque las direcciones IPv6 abundan, la IANA ha asignado un espacio de direcciones IP privado que se puede utilizar en redes privadas. Este tipo de dirección IPv6 de unidifusión que se puede utilizar por sí sola sin solicitarla se denomina dirección local única. Las direcciones locales únicas solo se pueden usar en redes privadas y no se pueden enrutar globalmente. Diferentes redes privadas pueden reutilizar dichas direcciones. Su función y alcance son los mismos que los de la dirección IP privada IPv4.

Las primeras 7 direcciones locales únicas están fijadas para ser 1111110, una dirección IPv6 con el prefijo FC00::/7. Solía ​​haber una dirección local del sitio, con el prefijo FEC0::/10, que ha sido reemplazada por ULA.

El bit 8 de la dirección local única es especial. Cuando el bit 8 es 0, no está definido, es decir, el prefijo de dirección IPv6 FC00::/8 pertenece al espacio de direcciones reservado. Las direcciones IPv6 utilizadas actualmente por las redes privadas comienzan con 11111101, que es una dirección IPv6 con el prefijo FD00::/8.

La dirección local de enlace de IPv6 es un tipo que no se encuentra en las direcciones IPv4 y es un tipo de dirección IPv6 recientemente definida.

Una dirección local de enlace es una dirección que sólo es válida dentro del enlace. Cuando IPv6 está habilitado, la interfaz de red configurará automáticamente dicha dirección IPv6 para que pueda comunicarse directamente con otros dispositivos en el mismo enlace. Debido a que las direcciones de enlace local solo son válidas localmente en el enlace, estos paquetes no se envían a otros enlaces.

Los primeros 10 bits de la dirección local del enlace están fijos en 1111111010, los siguientes 54 bits están fijos en 0 y los últimos 64 bits son el ID de la interfaz. Es decir, la dirección de enlace local tiene el prefijo FE80::/10 .

Si los primeros 64 bits de la dirección local del enlace son iguales, ¿cómo se puede identificar la interfaz utilizando una ID de interfaz de 64 bits para garantizar que la dirección local del enlace no cause conflictos de dirección IP en el enlace? ? La respuesta es que la interfaz utiliza su propia dirección MAC física para completar el campo ID de la interfaz. La dirección MAC de una interfaz es teóricamente única, por lo que la ID de la interfaz y la dirección local del enlace generadas a partir de la dirección MAC también son únicas.

Convierta la dirección MAC en ID de interfaz utilizando el método de conversión de MAC a EUI64. En pocas palabras, use la dirección MAC de 48 bits de la interfaz. En el medio de la dirección MAC, es decir, después de OUI, inserte un número hexadecimal fijo 0xFFFE y configure la séptima U/L (global/local). bit es 1, que se convierte en una ID de interfaz de 64 bits.

La dirección no especificada es una dirección de prefijo con 128 bits todos 0, abreviada como ::/128, que equivale a 0.0.0.0/32 en IPv4. Esta dirección no se puede asignar a una interfaz. Solo cuando el dispositivo IPv6 no haya obtenido una dirección, la dirección no especificada se utilizará como la dirección IPv6 de origen del paquete de datos.

La dirección de loopback es una dirección de prefijo de 128 bits en la que los primeros 127 bits son todos 0 y el último bit es 1. Se abrevia como: 1/128, que equivale a la dirección de loopback 127.0 .0.1/8 en IPv4. La dirección de bucle invertido representa el nodo en sí y no se puede asignar a una interfaz para su uso. Siempre que el estado de la pila de protocolos del dispositivo sea normal, el dispositivo puede recibir paquetes enviados a la dirección de loopback.

IPv6 define una función arbitraria, implementada a través de una dirección anycast (Anycast Address). Las direcciones anycast se definen en función de funciones, no de formatos de paquetes. IPv6 no define el espacio de direcciones anycast y utiliza el mismo espacio de direcciones que unidifusión. Por lo tanto, es imposible determinar si la dirección es una dirección de unidifusión o una dirección de cualquier difusión.

La unidifusión es uno a uno, la multidifusión es uno a muchos, la transmisión es uno a todos y luego cualquier difusión es el método de comunicación "uno a más cercano".

Se puede asignar una dirección anycast a múltiples dispositivos. El enrutador tendrá múltiples rutas al mismo destino y seleccionará la ruta con el menor costo para el reenvío de datos. En redes grandes, el tráfico se puede enviar al dispositivo más cercano y la transferencia de datos es más eficiente. Y cuando falla el dispositivo más cercano, el enrutador puede señalar la ruta al siguiente enrutador más cercano.

La dirección multicast no identifica un dispositivo, sino un grupo de dispositivos: un grupo multicast (Multicast Group). Un solo dispositivo generalmente envía paquetes de datos de multidifusión, que pueden ser miembros de un grupo de multidifusión u otro host. La dirección de destino del paquete de datos es la dirección de multidifusión.

Un miembro del grupo de multidifusión puede ser un dispositivo o todos los dispositivos de la red. IPv6 no tiene una dirección de transmisión, pero hay un grupo de multidifusión que contiene todos los nodos, que hace lo mismo que la dirección de transmisión: todos los nodos son miembros de este grupo de multidifusión.

Los primeros 8 bits de la dirección de multidifusión son todos 1, seguidos de 4 bits de bandera y luego 4 bits que indican el rango de direcciones. Los últimos 112 bits se utilizan como ID de grupo (ID de grupo) para identificar diferentes grupos de multidifusión. Los primeros 80 bits son 0 y sólo se utilizan los últimos 32 bits.

Entre los bits de bandera de 4 bits, el bit 1 es un bit de bandera reservado, que no se utiliza y utiliza un valor fijo de 0. El segundo bit se utiliza para el punto de encuentro. El punto de encuentro es un concepto de multidifusión y se denomina bit R. Normalmente tiene un valor de 0.

El tercer bit indica si la dirección de multidifusión tiene un prefijo, lo que se denomina bit P. La dirección de multidifusión no tiene prefijo y el valor es 0. En la mayoría de los casos es 0 . El último bit es el bit T. Cuando el valor es 0, indica una dirección de multidifusión permanente definida; cuando el valor es 1, sirve temporalmente como un grupo de multidifusión para algunos dispositivos. Por lo tanto, el grupo de multidifusión utilizado por cada protocolo es una dirección IPv6 que comienza con FF0 y el grupo de multidifusión personalizado comienza con FF1.

La dirección de multidifusión, al igual que la dirección de unidifusión, tiene un rango válido. 4 es el bit de rango que define el rango de uso de la dirección de multidifusión. La tabla de rango de diferentes valores es la siguiente:

El formato de una dirección de multidifusión IPv6 común es que el valor del bit de bandera es 0 y el valor del bit de rango es 2, es decir, la dirección de multidifusión con el prefijo FF02.

El uso de direcciones IPv4 en un entorno de direcciones IPv6 requiere tecnología de conversión para convertir direcciones IPv4 en direcciones IPv6. Por ejemplo, la tecnología 6to4 convierte la dirección IPv4 en un número hexadecimal y luego lo incrusta en los últimos 32 bits de la dirección IPv6.

IPv6 también utiliza ICMP para gestionar la red e implementar funciones de mecanismo de notificación y verificación de errores. El número de protocolo utilizado por ICMP en el protocolo IPv4 es 1, mientras que el valor utilizado por ICMPv6 en el protocolo IPv6 es 58. ICMPv6 también tiene la misma definición de campos de encabezado que ICMP.

La función ping también utiliza mensajes de solicitud de eco y respuesta de eco. Además de esto, existe un nuevo protocolo basado en ICMP: Neighbor Discovery Protocol.

El protocolo de descubrimiento de vecinos (NDP) de IPv6 es equivalente al ARP de IPv4, el descubrimiento de enrutadores de ICMP y la redirección de ICMP. También puede descubrir parámetros como los prefijos de direcciones IPv6 utilizados en la red e implementar la configuración automática de direcciones. El protocolo IPv6 implementa funciones plug-and-play a través de la función NDP:

Los mensajes NDP se reciben y envían dentro del enlace de datos, por lo que los paquetes de datos que encapsulan NDP utilizan la dirección local del enlace IPv6 o el enlace A. dirección de multidifusión dentro del rango. También se ha mejorado la seguridad. El límite de saltos de los paquetes NDP es 255. Si el valor del límite de saltos de un paquete recibido es inferior a 255, entonces el paquete ha pasado por al menos un enrutador, por lo que se descarta. Esto evita que NDP sea atacado o falsificado a través de enlaces no locales.

NDP define 5 tipos de paquetes y los valores del campo de límite de saltos son 255. Si el valor del campo de límite de saltos en el paquete NDP recibido no es 255, el paquete NDP se descartará. Cuando ICMPv6 encapsula estos cinco tipos de mensajes NDP, los campos de codificación son todos 0 y los diferentes tipos de mensajes se identifican mediante valores de tipo:

El enrutador envía periódicamente RA en el enlace donde está ubicado para informar su existencia y configurar todos los parámetros. La dirección de origen del RA para el cual no se recibió la solicitud es la dirección IPv6 de enlace local de la interfaz del enrutador y la dirección de destino es la dirección de multidifusión de todos los nodos ( FF02::1 ).

El host que acaba de conectarse al enlace debe esperar a que una RA descubra el enrutador y los parámetros del enlace. La espera predeterminada de 200 segundos es demasiado larga. Por lo tanto, cuando se activa el host, enviará un RS. La dirección de origen de este mensaje puede ser una dirección no especificada (::) o la dirección IPv6 de enlace local del host. La dirección de destino es la dirección de multidifusión de todos los enrutadores (FF02::2), solicitando al enrutador local del enlace que proporcione cierta información al host.

Solo los enrutadores escuchan la dirección de multidifusión del enrutador local de enlace y, cuando el enrutador recibe un RS, envía un RA en respuesta. Si la dirección de origen del paquete recibido es una dirección de enlace local, la dirección de enlace local se utiliza para unidifusión del paquete. Si la dirección de origen es una dirección no especificada ( :: ), se multidifundirá a todos los nodos ( FF02::1 ).

Cuando el host recibe el RS, agregará la dirección local del enlace del enrutador a su tabla de enrutamiento como dirección de enrutamiento predeterminada. Si hay varias entradas de enrutador predeterminado en la lista de enrutadores, el host debe proporcionar un método para seleccionar el enrutador predeterminado. Se sondea en secuencia toda la lista de enrutadores predeterminados o se selecciona un único enrutador como ruta predeterminada.

Cuando un dispositivo IPv6 se conecta a un enlace por primera vez, puede configurar automáticamente su propia dirección de interfaz. El primer paso en este proceso es determinar la parte de ID de la interfaz de 64 bits y utilizar el método de conversión de MAC a EUI64 para obtener la ID de la interfaz.

Por supuesto, una ID de interfaz es solo la mitad de una dirección IPv6 y requiere un prefijo de 64 bits. Como se mencionó anteriormente, el prefijo local del enlace es 0xFF80::/10. Usarlo como prefijo de 64 bits (0xFF80::/64), más el ID de interfaz convertido, es una dirección IPv6 completa que puede comunicarse con dispositivos en el mismo enlace.

Si un host solo necesita comunicarse con los dispositivos en el enlace, entonces su dirección de enlace local configurada automáticamente es suficiente. Pero si el host necesita comunicarse con dispositivos fuera del enlace, entonces necesita una gama más amplia de direcciones, generalmente una dirección IPv6 global. Hay dos formas de obtener dichas direcciones: configuración automática de direcciones con estado o sin estado.

El uso de un servidor DHCPv6 para asignar direcciones IPv6 se denomina configuración automática de direcciones con estado. El host busca un servidor DHCPv6 según la configuración preconfigurada o recibe un mensaje de anuncio de enrutador con el campo M configurado para obtener un servidor DHCPv6.

Lo que es más interesante es la configuración automática de direcciones sin estado (SLAAC), que no depende del servidor y no requiere configuración manual. Este proceso es muy simple cuando un dispositivo IPv6 está conectado a la red, enviará RS para consultar si hay un enrutador en la red. El RA tiene un campo que le indica al dispositivo IPv6 de qué manera configurar su dirección IPv6. Este campo se llama bit M. Si el bit M está configurado y el valor es 1, significa que el dispositivo configura dinámicamente la dirección IPv6 a través del protocolo DHCPv6; si el bit M no está configurado y el valor es 0, significa que el dispositivo configura la dirección IPv6 a través del protocolo DHCPv6; SLAAC.

El dispositivo IPv6 obtiene uno o más prefijos de enlace del RA recibido, más el ID de interfaz previamente determinado, para obtener una dirección IPv6 globalmente única.

El proceso de los dispositivos IPv6 que realizan SLAAC no requiere intervención manual y no hay ningún servidor DHCP involucrado. El dispositivo completa la configuración por sí solo. En otras palabras, este mecanismo proporciona funcionalidad plug-and-play para redes IPv6.

IPv4 obtiene la dirección MAC a través de ARP. Sin embargo, el protocolo ARP no se puede copiar al entorno IPv6. IPv6 no define una dirección de transmisión. Para resolver el problema de consultar la dirección MAC del dispositivo de destino, IPv6 obtiene la dirección MAC a través de NDP. Los dispositivos IPv6 utilizan NS y NA para implementar consultas y respuestas de direcciones MAC. IPv6 utiliza la dirección de multidifusión del nodo de destino como dirección de destino del NS.

Los primeros 104 bits de la dirección de multidifusión del nodo de destino están fijos en FF02::1:FF, y los últimos 24 bits utilizan los últimos 24 bits del ID de interfaz de la dirección IPv6 de unidifusión de destino. Cuando una interfaz obtiene una dirección IPv6 de unidifusión o anycast, también escuchará la dirección de multidifusión del nodo de destino enviada a la dirección de unidifusión.

Si el nodo de destino es un nodo fuera del enlace, la dirección MAC del enrutador predeterminado se puede obtener a través del mensaje de anuncio del enrutador. Si el nodo de destino está dentro del enlace, el nodo primero buscará en la caché del vecino para ver si ha aprendido la dirección. La caché vecina de IPv6 es similar a la caché ARP de IPv4 y registra la correspondencia entre las direcciones IP y las direcciones MAC.

Si la dirección no está en la caché del vecino, el nodo envía un NS. Después de recibir el mensaje, el nodo de destino conoce la dirección MAC del nodo de origen y responde con el mensaje de anuncio del vecino.

Si el nodo de destino existe y recibió NS, responderá con NA. La dirección de destino de este NA es la dirección de origen del nodo de origen. Después de recibir el NA que responde, el nodo de origen agrega la dirección MAC del nodo de destino a la entrada de la caché del vecino.

Hay otro uso de NA en NDP. Cuando la dirección MAC de un nodo IPv6 cambia, se puede enviar una NA directamente al enlace local sin recibir la NS. Otros dispositivos en el camino anuncian la nueva correspondencia. entre direcciones IPv6 y direcciones MAC. Debido a que el propósito es anunciar a todos los dispositivos en el enlace, no a un dispositivo determinado, la dirección de destino de todos los NA es la dirección de multidifusión de todos los nodos locales del enlace (FF02::1).

Aunque al convertir la dirección MAC en una ID de interfaz, se puede garantizar que la dirección del dispositivo sea única en la mayoría de los casos, también puede haber direcciones MAC duplicadas, por lo que no importa cómo el dispositivo obtenga la dirección. , debe realizar una detección de conflictos de direcciones antes de su uso.

Un nodo que obtiene una dirección utilizará la nueva dirección como dirección temporal. La dirección no se puede utilizar hasta que se complete la detección de conflictos de direcciones. El nodo enviará un NS cuya dirección de destino es la nueva dirección a verificar. La dirección de origen de NS es una dirección no especificada y la dirección de destino es la dirección de multidifusión del nodo de destino.

Si un nodo recibe un NS y la dirección de destino es una dirección ya utilizada por el nodo, enviará un NA siendo la dirección de destino la dirección utilizada. Cuando el nodo de origen recibe la NA, sabe que la dirección está en conflicto y no se puede utilizar.

Existe un riesgo de seguridad con la configuración automática de direcciones sin estado: incluso si un dispositivo se mueve de una subred a otra, su ID de interfaz siempre permanece igual. Luego puede identificar al usuario a través de la ID de la interfaz, inferir la ubicación del usuario, rastrear las actividades y los registros de ubicación del usuario y exponer información de privacidad personal.

Este problema se puede solucionar con direcciones privadas IPv6. La dirección privada es una ID de interfaz generada aleatoriamente. El ID de la interfaz suele cambiar una vez al día y también cuando se obtiene una nueva dirección IPv6.

Pero la dirección del servidor no necesita cambiar con frecuencia. Los nodos que se comunican con el servidor, así como el servidor DNS, deben conocer la ubicación del servidor a través de la dirección estática. Por lo tanto, las direcciones IPv6 configuradas sin estado estándar reservan la dirección "pública ***", y cualquiera que envíe datos al servidor utiliza esta dirección como dirección de destino. Pero cuando el servidor envía datos, utiliza una dirección privada. Es como el número de extensión corta de una empresa. Puedes ver quién te llama, pero los demás no pueden ver tu número.