Taille pour stocker IPv4, adresses IPv6 sous forme de chaîne

Quelle devrait être la taille idéale pour stocker IPv4, les adresses IPv6 sous forme de chaîne dans la firebase database MySQL. Varchar (32) devrait-il être suffisant?

En supposant une représentation textuelle dans une chaîne:

  • 15 caractères pour IPv4 (format xxx.xxx.xxx.xxx , 12 + 3 séparateurs)
  • 39 caractères (séparateurs 32 + 7) pour IPv6

Ce sont la longueur maximale de la chaîne.

Alternatives au stockage sous forme de chaîne:

  • IPv4 est de 32 bits, donc un type de données MySQL pouvant contenir 4 octets le fera, utiliser INT UNSIGNED est commun avec INET_ATON et INET_NTOA pour gérer la conversion d’adresse en nombre et de numéro en adresse.
 SELECT INET_ATON('209.207.224.40'); -> 3520061480 SELECT INET_NTOA(3520061480); -> '209.207.224.40' 
  • Pour IPv6, malheureusement, MySQL n’a pas un type de données de 16 octets, cependant, il est possible de placer l’IPv6 dans une forme canonique, puis de les séparer en 2 BIGINT (8 octets), mais cela utilisera deux champs.

Numériquement, une adresse IPv4 est longue de 32 bits et l’adresse IPv6 est longue de 128 bits. Vous avez donc besoin d’un stockage d’au moins 16 octets.

Si la “chaîne” que vous stockez est un encodage de l’adresse sous forme d’octets, alors 16 suffit.

Si vous les stockez en tant que chaînes plutôt que modèles de bits:

Les adresses IPv4 se composent de quatre caractères décimaux à trois chiffres, dont trois . séparateurs, de sorte que ne prend que 15 caractères tels que 255.255.255.255 .

Les adresses IPv6 se composent de huit caractères hexadécimaux à quatre chiffres et de sept séparateurs : il faut donc 39 caractères, tels que 0123:4567:89ab:cdef:0123:4567:89ab:cdef .

En supposant que vous ne disposez d’aucune information réseau (identificateur LL, classe ou masque CIDR, par exemple), une adresse IPv4 peut comporter jusqu’à quinze caractères (chiffres 4×3 + 3 points) et une adresse IPv6 peut comporter jusqu’à 39 caractères.

Vous pouvez utiliser un VARBINARY (16) pour stocker une adresse IPv6 dans un format binary.

Les applications qui doivent utiliser ces données peuvent alors utiliser leurs implémentations inet_pton / ntop pour manipuler ces données, ou vous pouvez installer une fonction définie par l’utilisateur à l’adresse http://labs.watchmouse.com/2009/10/extending-mysql-5 -avec-ipv6-fonctions /

le ipv6 adresse peut-être 46 caractères.

reference: adresses IPv6 mappées IPv4 Les implémentations hybrides IPv6 / IPv4 à double stack reconnaissent une classe spéciale d’adresses, les adresses IPv6 mappées IPv4. Dans ces adresses, les 80 premiers bits sont nuls, les 16 bits suivants sont un et les 32 bits restants sont l’adresse IPv4. On peut voir ces adresses avec les 96 premiers bits écrits au format IPv6 standard, et les 32 bits restants écrits dans la notation habituelle décimale par points de IPv4. Par exemple, :: ffff: 192.0.2.128 représente l’adresse IPv4 192.0.2.128. Un format obsolète pour les adresses IPv6 compatibles IPv4 était :: 192.0.2.128. [61]

Outre ce qui a déjà été dit, il existe une adresse IPv6 Link-Local. Si vous souhaitez conserver l’adresse pour pouvoir utiliser la chaîne pour créer des connexions, vous devez également conserver l’ID de scope. Sous Windows, il s’agit d’un nombre de 16 bits, sous Linux, il peut s’agir d’un nom d’interface de chaîne, je n’ai pas trouvé la longueur maximale d’un nom d’interface.