Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

  • IPv4 - 32-разрядный, поэтому тип данных MySQL, который может содержать 4 байта, будет использовать, используя INT UNSIGNED, вместе с INT_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 байтов), однако это будет использовать два поля.

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

адрес 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]

Ответ 7

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