Размер для хранения IPv4, IPv6 адресов в виде строки



каким должен быть идеальный размер для хранения IPv4, IPv6 адресов в виде строки в базе данных MySQL. стоит тип varchar(32) будет достаточно?

583   7  

7 ответов:

предполагая текстовое представление в строке:

  • 15 символов для IPv4 (xxx.xxx.xxx.xxx формат, 12+3 сепараторы)
  • 39 символов (32 + 7 сепараторы) для IPv6

это максимальная длина строки.

альтернативы хранению в виде строки:

  • IPv4 является 32-битным, поэтому тип данных MySQL, который может содержать 4 байта, будет делать, используя INT UNSIGNED общий вместе с INET_ATON и INET_NTOA для обработки преобразования из адреса в номер, а из номера в адрес
SELECT INET_ATON('209.207.224.40');
        -> 3520061480

SELECT INET_NTOA(3520061480);
        -> '209.207.224.40'
  • для IPv6, к сожалению, MySQL не имеет типа данных, который составляет 16 байт, однако можно поместить IPv6 в каноническую форму, а затем разделить их на 2 BIGINT (8 байт), это, однако, будет использовать два поля.

численно IPv4-адрес имеет 32-разрядную длину, а IPv6-адрес имеет 128-разрядную длину. Так что вам нужно хранение по крайней мере 16 байт.

Если" строка", которую вы храните, является кодировкой адреса в байтовой форме, то 16 достаточно.

если вы храните их в виде строк, а не битовых шаблонов:

IPv4 адреса состоят из четырех 3-значных десятичных символов с тремя . разделители, так что только занимает 15 символов, таких как 255.255.255.255.

IPv6-адреса состоят из восьми 4-значных шестнадцатеричных символов с семи : разделители, так что занимает 39 символов, таких как 0123:4567:89ab:cdef:0123:4567:89ab:cdef.

предполагая, что у вас нет никакой сетевой информации (например, идентификатор LL, класс или маска CIDR), IPv4-адрес может содержать до пятнадцати символов (числа 4x3+3 периода), а IPv6-адрес может содержать до 39 символов.

вы можете использовать VARBINARY(16) для хранения IPv6-адреса в двоичном формате.

приложения, которые должны использовать эти данные, могут затем использовать свои реализации inet_pton/ntop для управления этими данными, или вы можете установить UDF, как один в http://labs.watchmouse.com/2009/10/extending-mysql-5-with-ipv6-functions/

адрес ipv6 может быть 46 символов.

ссылка: Отображения IPv4 IPv6-адресов Гибридные двухстековые реализации IPv6/IPv4 распознают специальный класс адресов, IPv4-сопоставленные IPv6-адреса. В этих адресах первые 80 бит равны нулю, следующие 16 бит-единице, а оставшиеся 32 бита-IPv4-адресу. Можно увидеть эти адреса с первыми 96 битами, записанными в стандартном формате IPv6, а остальные 32 бита записаны в обычном десятичном формате обозначение IPv4. Например:: ffff: 192.0.2.128 представляет IPv4-адрес 192.0.2.128. Устаревший формат для IPv4-совместимых IPv6-адресов был:: 192.0.2.128.[61]

кроме того, что уже было сказано, существует локальный IPv6-адрес. Если вы хотите сохранить адрес, чтобы вы могли использовать строку для создания соединений, вам также нужно будет сохранить идентификатор области. В Windows это 16-битное число, в Linux это может быть имя строкового интерфейса, я не нашел максимальной длины имени интерфейса.

Comments

    Ничего не найдено.