cuál debe ser el tamaño ideal para almacenar direcciones IPv4, IPv6 como una cadena en la base de datos MySQL. ¿debería ser suficiente varchar (32)?Tamaño para almacenar direcciones IPv4, IPv6 como una cadena
Respuesta
Suponiendo representación textual en una cadena:
- 15 caracteres para IPv4 (
xxx.xxx.xxx.xxx
formato, 12 + 3 separadores) - 39 characters (32 + 7 separadores) para IPv6
Es la longitud máxima de la cadena.
Alternativas a almacenar como cadena:
- IPv4 es de 32 bits, por lo que un tipo de datos MySQL que puede contener de 4 bytes va a hacer, utilizando
INT UNSIGNED
es común junto conINET_ATON
yINET_NTOA
para manejar la conversión desde la dirección de número y de número a abordar
SELECT INET_ATON('209.207.224.40'); -> 3520061480 SELECT INET_NTOA(3520061480); -> '209.207.224.40'
- Para IPv6, desafortunadamente MySQL no tiene un tipo de datos de 16 bytes, sin embargo, uno puede poner el IPv6 en forma canónica y luego separarlos en 2
BIGINT
(8 bytes); sin embargo, usará dos campos.
Esto es incorrecto. Puede escribir direcciones IPv6 en el formato XXXX: XXXX: XXXX: XXXX: XXXX: XXXX: AAA.BBB.CCC.DDD donde la última parte es una dirección incrustada de estilo ipv4. La longitud es 45, creo? – jcoder
@John: Egh, no, no almacena todos los ceros. Las direcciones asignadas IPV4 se deben normalizar a ':: ffff: aaa.bbb.ccc.ddd'. (Las direcciones asignadas IPv4 son las únicas direcciones que deberían aparecer en esa forma, y las direcciones asignadas IPv4 siempre tienen los primeros 80 bits como ceros). –
@John, podría _escribirlo en binario solamente y tomaría más espacio pero, al igual que su bit IPv4, se puede _computar_ desde la dirección de 128 bits, por lo que no es necesario, especialmente en un DB. – paxdiablo
Numéricamente, una dirección IPv4 tiene una longitud de 32 bits y una dirección IPv6 de 128 bits. Por lo tanto, necesita un almacenamiento de al menos bytes.
Si la "cadena" que almacena es una codificación de la dirección en forma de bytes, entonces 16 es suficiente.
Si usted les está almacenando en forma de cadenas en lugar de patrones de bits: direcciones
IPv4 constará de cuatro caracteres decimales de 3 dígitos con tres separadores .
, por lo que sólo tarda 15 caracteres como 255.255.255.255
.
Las direcciones IPv6 constan de ocho caracteres hexadecimales de 4 dígitos con siete separadores :
, por lo que se necesitan 39 caracteres, como 0123:4567:89ab:cdef:0123:4567:89ab:cdef
.
Suponiendo que no tiene ninguna información de red (como identificador LL, clase o máscara CIDR) adjunto, una dirección IPv4 es de hasta quince caracteres (números 4x3 + 3 períodos) y una dirección IPv6 puede ser hasta 39 caracteres.
Puede usar un VARBINARIO (16) para almacenar una dirección IPv6 en formato binario.
Las aplicaciones que necesitan utilizar estos datos luego pueden utilizar sus implementaciones inet_pton/ntop para manipular estos datos, o puede instalar una UDF como la de http://labs.watchmouse.com/2009/10/extending-mysql-5-with-ipv6-functions/
la dirección IPv6 tal vez 46 caracteres.
referencia: asignada de IPv4 direcciones IPv6 de doble pila implementaciones IPv6/IPv4 e Híbridos reconocen una clase especial de direcciones, las direcciones IPv4 a IPv6. En estas direcciones, los primeros 80 bits son cero, los siguientes 16 bits son uno, y los 32 bits restantes son la dirección IPv4. Se pueden ver estas direcciones con los primeros 96 bits escritos en el formato estándar IPv6, y los 32 bits restantes escritos en la notación de puntos y decimales habitual de IPv4. Por ejemplo, :: ffff: 192.0.2.128 representa la dirección IPv4 192.0.2.128. Un formato obsoleto para direcciones IPv6 compatibles con IPv4 era :: 192.0.2.128. [61]
Además de lo que ya se ha dicho, existe una dirección IPv6 Link-Local. Si desea conservar la dirección para que pueda usar la cadena para crear conexiones, también necesitará mantener la identificación del alcance. En Windows es un número de 16 bits, en Linux puede ser un nombre de interfaz de cadena, no encontré la longitud máxima de un nombre de interfaz.
Sugeriría http: //meta.stackoverflow.com/para este tipo de preguntas – Muhammed
- 1. Representación de direcciones IPv4/IPv6 en Oracle
- 2. Obtener direcciones IPv4 de Dns.GetHostEntry()
- 3. Como apoyar IPv4 y IPv6 en Java
- 4. Libcurl: force ipv4 o ipv6
- 5. Rangos de direcciones IPv6
- 6. Problema Convertir ipv6 a ipv4
- 7. ¿Cómo almacenar tanto IPv4 como IPv6 en una sola columna en SQL Server?
- 8. Calculando todas las direcciones dentro de una subred ... para IPv6
- 9. Cálculos de red IPv4/IPv6 y validación para Java?
- 10. Validar IPv4, IPv6 y nombre de host
- 11. ¿Cómo determinar si una cadena es una dirección IPv4 o IPv6 válida en C#?
- 12. Almacenamiento de direcciones IPv6 en MySQL
- 13. Interconversión de IPv6 a IPv4 en C#
- 14. Cómo admitir conexiones IPv4 e IPv6
- 15. ¿Cómo puedo convertir la dirección IPV6 a la dirección IPV4?
- 16. Función de PHP para validar IPv4 e IPv6 usando regex
- 17. Indica si una cadena de texto es una dirección IPv6 o una dirección IPv4 usando sockets C estándar API
- 18. Cómo convertir una dirección de IPv4 a IPv6
- 19. Comparación del conector IPV4 (sockaddr_in) con el conector IPV6 (sockaddr_in6)
- 20. Limitación de velocidad/prohibición de direcciones IP en IPv6
- 21. Comprobando las direcciones IP
- 22. función inet_aton similar para IPv6
- 23. ¿Cómo puedo unir direcciones IPv6 con una Perl Regex?
- 24. Cómo almacenar una dirección compatible con IPv6 en una base de datos relacional
- 25. Almacenando la dirección IP en la base de datos MySQL (IPv4 e IPv6)
- 26. Almacenar una cadena como UTF8 en C#
- 27. Devolución de direcciones IPv6 del servidor DNS en C#
- 28. ¿Cuáles son las expresiones regulares de Java para hacer coincidir cadenas de IPv4 e IPv6?
- 29. Guía definitiva para comprender cómo formular una dirección IPv6
- 30. IPAddress.Parse() usando el puerto en IPv4
@Col: No hay una buena alternativa en cualquier versión estable de MySQL estable. –
al menos 2 bigints es una alternativa para el ipv6. e ir a convertir de la cadena ipv4 a la cadena ipv6 sobre la marcha, como se supone por la pregunta y las respuestas –
@Col: ¿Cómo es eso mejor? Todavía tiene que convertir en el código de su aplicación, y cualquier ser humano que tenga que sumergirse en la base de datos en sí mismo no puede LEER las direcciones friggin 'porque no hay una implementación integrada de INET_NTOA para IPv6. –