Сколько памяти необходимо для хранения ipv4

Обновлено: 05.07.2024

Подсистема оперативной памяти - важнейшая составляющая, от которой зависит производительность сервера и его эффективность. В иерархии хранения оперативная память стоит на втором месте после внутренних кэшей процессоров как по скорости, так и по стоимости хранения единицы информации.
Неэффективное ее использование существенно влияет на производительность, а значит – на отдачу от вложенных средств как на этапе покупки сервера, так и во время всего срока его эксплуатации.

Понятно, что подсистема оперативной памяти просчитывается еще на этапе принятия решения о покупке сервера. Но подчас загодя предсказать ее необходимый объем проблематично. К тому же, объем и состав программного обеспечения, устанавливаемый на сервер, может существенно измениться уже при вводе его в эксплуатацию, не говоря уже об изменениях во времени.

Ревизия и перестройка подсистемы должны проводиться регулярно, поскольку эти мероприятия позволят сохранять эффективность эксплуатации системы. Они могут потребоваться при изменении нагрузки на сервер в результате:

  • изначальных ошибок в оценке необходимых ресурсов;
  • повышения объема выполняемых компанией задач в результате роста;
  • повышения требований к аппаратным ресурсам при обновлении установленного программного обеспечения;
  • ввода новых инструментов, функций или расширении спектра услуг в компании

Основные характеристики подсистемы памяти.

Ряд характеристик необходимо учитывать как при проектировании будущего сервера, так и при его перестройке – апгрейде или восстановлении (ремонте).

Объем оперативной памяти

Сверху объем оперативной памяти сервера ограничен количеством слотов DIMM в системе и максимальным объемом одного модуля того типа, который поддерживается процессорами системы. Снизу – только финансовыми возможностями компании.
В идеале – общий объем оперативной памяти при штатной загрузке системы не должен быть занят более, чем на 75%. Отдельные пики загрузки, если они непродолжительны, не существенно повлияют на производительность. Низкая загруженность системы говорит о неэффективно вложенных средствах. А полная занятость оперативной памяти приводит к процессам вытеснения задач ( swap ), связанных с переносом части данных из оперативной памяти в дисковую и обратно за счет файлов подкачки – что кардинально снижает производительность сервера.

Уровень занятости физической оперативной памяти можно проверить различными встроенными в операционную систему мониторами производительности. Важно! Рассматривать необходимо именно физическую память, без учета файлов подкачки

Тип модулей

Тип модулей DIMM , поддерживаемых системой, жестко определяется типом установленных в сервер процессоров и описан в инструкции по эксплуатации или на сайте производителя. Это касается как собственно типа – DDR 3, DDR 4, буферизации модулей - буферизованная, регистровая, и системы исправления ошибок – ECC

Отдельный класс модулей памяти – LR DIMM , 3DS LRDIMM. Это модули повышенной емкости с оптимизированной за счет внутренних регистров нагрузкой на шину памяти. Так как внутренняя структура модулей этого типа существенно отличается от обычной RDIMM, одновременная установка DIMM разного типа в системе невозможна. Ни в каких сочетаниях.

Тактовая частота шины

Тактовая частота модулей памяти DIMM должна соответствовать максимальной частоте шины, поддерживаемой встроенным в процессор контроллером памяти – то есть, тоже определяется используемым процессором.

В серии Xeon E 5 младший процессор Xeon E 5 v 4 – E 5-2609 v 4 поддерживает частоты шины 1600/1866 МГц, средний E 5-2630 v 4 - 1600/1866/2133 МГц, а более старшие, например E 5-2650 v 4 - 1600/1866/2133/2400 МГц

В серии Xeon Scalable : Bronze 3104 и 3106 поддерживает частоту 2133 МГц, Silver 4108 и 4110 - 2400 МГц, Gold 6130 – 2666 МГц.

В конфигурациях 2 модуля на канал (2 DPC ) и 3 модуля на канал (3 DPC ) серверов на процессорах Xeon E 5 с каждым добавлением DIMM в канал, на ступень уменьшается частота шины. Соответственно, если в канале процессора, поддерживающего шину 2400 МГц установлен 1 DIMM , он работает на полной частоте. Добавляем модуль в тот же канал – они работают на частоте 2133 МГц. Добавляем третий – канал настраивается на частоту 1866 МГц

Процессоры Xeon Scalable позволяют устанавливать до двух модулей DIMM на канал, снижения частоты шины при этом не происходит.

Модули DIMM с частотой большей, чем тактовая частота шины, установленная процессором, могут корректно работать в системе, но не наоборот.

Конфигурация - расположение модулей DIMM в слотах

Особенности работы контроллера (или контроллеров) памяти процессора приводят к тому, что число и карта расположения модулей DIMM в конкретных слотах сервера может сильно повлиять на его производительность. Несбалансированная конфигурация может иметь только 16% от потенциальной пропускной способности шины памяти. И добиться такого ухудшения характеристик можно довольно легко – лишь установив модуль DIMM в соседний слот, или добавив пару модулей в попытке расширить оперативную память и – тем самым – увеличить производительность. Такая существенная разница получается за счет технологии чередования, которую в правильной конфигурации удается реализовать процессору, а в несбалансированной системе – нет. О балансировке памяти смотрите дополнительные материалы.

Ранки

Данные по шине памяти передаются в единицах из 64 бит для всех типов DIMM. Это особенность технологии памяти DDR-SDRAM. Область памяти этой ширины трансформируется на группу чипов DRAM внутри DIMM - каждый отдельный чип отвечает за выдачу или 4 или 8 бит (обозначается как x4 или x8 в кодировке чипа). Такая группа чипов называется ранком. Существуют DIMM с 1, 2 или 4 ранками. DIMM максимальной емкостм - это модули с 4 ранками, но спецификация DDR4 допускает только 8 ранков на канал памяти. Процессор может организовать чередование по ранкам наряду с чередованием по каналам, контроллерам и т.д. (*)

Структуры x4 или x8 модулей DIMM по-разному задействованы в системе обнаружения и исправления ошибок памяти ECC. Именно по этой причине RDIMM типа x4 нельзя смешивать с RDIMM типа x8.

Напряжение питания

Напряжение питания модулей DIMM задано в описании системы/материнской платы. Для современных модулей обычно составляет 1,2 В.

Смешивание модулей с разными характеристиками в одной системе

Какие-то параметры модулей DIMM позволяют смешивать их в одной системе / канале памяти, какие-то - жестко нет.

Например, установка модулей одного типа с разной тактовой частотой допустимо, но при этом все модули будут работать на частоте самого медленного.

Корректное расположение модулей одного типа разной емкости не приведет к снижению производительности

Сочетание модулей с различным количеством ранков при правильной их установке допустимо

Свод правил

В системе должен быть установлен хотя бы один модуль DIMM . Даже в 2-процессорной системе.

Совместимость

  • Все модули DIMMдолжны быть одного типа - DDR4 регистровые с коррекцией ошибок ECC
  • Модули небуферизованной памяти (Unbuffered DIMM, UDIMM) не поддерживаются
  • Смешивание RDIMM, LRDIMM, 3DS LRDIMM в одной системе недопустимо – они не совместимы между собой. Ни в одном канале, ни на одном процессоре, ни на разных процессорах – никак.
  • Установка модулей разных производителей корректна. Важно – чтобы характеристики модулей были совместимы.
  • RDIMMс организацией x4 и x8 несовместимы.
  • Смешивание DIMM с разным количеством ранков в пределах одного канала допустимо
  • Ограничение по числу логических ранков
    • Процессоры Intel Xeon E5 v3, v4
    • XeonE5 v3, v4 поддерживает до 8 ранков на канал, не превышайте это значение. Если необходима установка 3 модулей на канал (3DPC), модули должны быть 1- или 2-ранковыми.
    • Поскольку LRDIMM буферизуется, четырехранковый LRDIMM представляется процессору как двухранковый DIMM - что позволяет устанавливать 3шт LRDIMM на канал не превышая ограничение по ранкам.
    • Процессоры Xeon Scalable
    • Так как процессоры Xeon Scalable позволяют устанавливать только до 2 модулей на канал, ограничение по ранкам для них снято.

    Производительность

    • Последовательно заполняйте банки памяти без пропусков.
    • Распределение по каналам памяти.
      • Процессоры Intel Xeon E5 v3, v4. Процессоры Xeon E5 нижнего диапазона - процессоры Intel Xeon E5 v3 с менее чем 10 ядрами и процессоры E5 v4 с менее чем 12 ядрами имеют только один контроллер памяти. В них все четыре канала памяти подключены к одному контроллеру. В более производительных процессорах встроено два контроллера памяти, каждый из которых управляет двумя каналами.
      • Старайтесь распределить модули памяти так, чтобы задействовать все каналы памяти процессора (4). Каждый канал дает 25% общей полосы пропускания подсистемы памяти. При этом, избегайте несбалансированных конфигураций. (*)
      • Процессоры Xeon Scalable. Процессоры Xeon Scalable имеют 2 встроенных контроллера памяти, каждый из них управляет 3 каналами (всего 6).
      • Старайтесь распределить модули памяти так, чтобы задействовать все каналы памяти процессора Scalable (6). При этом, избегайте несбалансированных конфигураций. (*)
      • Процессоры Intel Xeon E5 v3, v4
      • Для получения максимальной производительности, устанавливайте память в сервер наборами по 4 идентичных модуля на один процессор– таким образом в полной мере будут задействованы все каналы памяти и максимально эффективно использовано чередование. (*)
      • Процессоры Xeon Scalable
      • Для получения максимальной производительности, устанавливайте память в сервер наборами по 6 идентичных модулей на один процессор– таким образом в полной мере будут задействованы все каналы памяти и максимально эффективно использовано чередование. (*)

      (*) Про балансировку и чередование памяти в системах с различными процессорами читайте следующие статьи :

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

      • 15 символов для IPv4 ( xxx.xxx.xxx.xxx формат, 12+3 сепараторы)
      • 39 символов (32 + 7 сепараторы) для IPv6
      • IPv4 является 32-битным, поэтому тип данных MySQL, который может содержать 4 байта, будет делать, используя INT UNSIGNED общий вместе с INET_ATON и INET_NTOA для обработки преобразования из адреса в номер, а из номера в адрес
      • для IPv6, к сожалению, MySQL не имеет типа данных, который составляет 16 байт, однако можно поместить IPv6 в каноническую форму, а затем разделить их на 2 BIGINT (8 байт), это, однако, будет использовать два поля.

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

      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 символов.

      адрес 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 это может быть имя строкового интерфейса, я не нашел максимальной длины имени интерфейса.

      Сколько оперативной памяти нужно серверу?

      В зависимости от функционала сервера и его предназначения, изменяется и используемый объем оперативной памяти. Покупка максимального числа планок наибольшей емкости с целью «про запас» в данном конкретном случае не гарантирует успеха. Существует несколько основных критериев, по которым устанавливаются как верхние, так и нижние границы для размера ОЗУ на серверах. Обо всех тонкостях расчета количества оперативной памяти для сервера, мы поговорим в этой статье.

      Один из основных факторов, оказывающих прямое влияние на требуемый размер ОЗУ – назначение сервера. В разных случаях использования, к нему предъявляются определенные требования. Например, оборудование, используемое для хранения и обработки файлов, (файл-сервер) должен иметь вместительное хранилище для возможности расположения данных, а вот много оперативки ему ни к чему. Для веб-серверов, потребление памяти высчитывается исходя из типа развернутых на нем web-приложений, объемов кэширования, уровня трафика и других факторов. Если речь идет о сборках, заточенных под работу с базой данных, то для вычисления оптимального ОЗУ необходимо знать количество обращающихся пользователей, а также характер (и «вес») запрашиваемых данных и также тип самой базы.

      У любого сервера, помимо основных функций, есть также программное обеспечение, отвечающее за администрирование. Сюда входит комплексные приложения, защищающие от вирусов, DDoS-атак и спама, сама серверная операционная система, отвечающая за интерфейс и функционирование других программ, многие из которых используют много оперативной памяти. Это необходимо учитывать наравне с другими факторами. Для лучшего расчета стоит оценить занятый объем ОЗУ при работе всех приложений одновременно.

      Возможные ограничения

      Просто установить «как можно больше» ОЗУ на сервер не выйдет. Ограничения выставляет и процессор устройства, устанавливающий типы и объемы каждого вида памяти, и количество слотов для планок, и максимально возможную емкость одной устанавливаемой планки.

      Все эти нюансы можно увидеть в спецификациях, сопровождающей сервер. Превысить указанные в документации размеры ОЗУ не получится как минимум по той причине, что излишки не будут поддерживаться устройством. Также велика вероятность, что превышающие допустимую емкость планки не подойдут по техническим характеристикам. Проще говоря, окажутся несовместимы.

      Другой момент – ограничения, выставляемые серверной операционной системой (ОС). Некоторые из них устанавливают четкие границы для возможного минимального, рекомендуемого минимального и максимально возможного объема оперативной памяти. От вида и функций ОС изменяется потребление ОЗУ – иногда оно может быть совсем небольшим.

      Как провести расчеты

      В зависимости от уровня загруженности сервера, изменяется и количество используемой ОЗУ. Если к серверу обращаются редко, то ему вполне требуется немного ОЗУ. Если же серверное оборудование обслуживает одновременно десятки, сотни или тысячи устройств, работая в режиме непрерывной занятости, то совокупная емкость установленных планок должна быть очень велика — в противном случае постоянным спутником станут перебои в работе и значительное замедление взаимодействия.

      Если рассматривать сервер базы данных, то ОЗУ должно соответствовать размерам самой базы в совокупности с ресурсами памяти, затрачиваемыми на администрирование, работу самой ОС и дополнительных индивидуальных потребностей.

      Для файловых серверов расчет достаточно прост: с ОЗУ на 4 Гб можно поддерживать работу порядка 30 пользователей. Соответственно, для каждых новых 30 пользователей следует добавлять по 4 Гб.

      Видеосерверы требуют детального выяснения задач наблюдения. Обычно ОЗУ для данного типа оборудования рассчитывается исходя из количества видеокамер. В среднем на обслуживание 5 камер необходимо 16 Гб оперативки, для 15 камер – уже 24 Гб, для 100 – не менее 64 Гб.

      Сервер 1С, рассчитанный не более чем на 5 пользователей может работать при 8 Гб ОЗУ. Если пользователей 10, то памяти требуется в два раза больше – 16 Гб. Для 20 человек, работающих в 1С лучше использовать не менее 48 Гб ОЗУ, распределённых в связке из двух платформ. Это обеспечивает большую надежность, отсутствие сбоев и замедления.

      Серверы, предназначенные для виртуализации, снабжаются оперативной памятью исходя из суммарных нужд всех виртуальных машин.

      Подводя итог

      Не существует универсальных критериев, по которым можно без предварительных расчетов установить планки ОЗУ в тот или иной вид сервера. Необходимый размер оперативной памяти вычисляется индивидуально для каждой конкретной организации исходя из требований и потребностей пользователей.

      Именно количество пользователей в наибольшей степени влияет на необходимый объем ОЗУ. При излишках она просто не задействуется, что экономически невыгодно, а при недостатке - ОС задействует виртуальную память на накопителях. Это, в свою очередь, приводит к ощутимому замедлению и сбоям в работе.

      Наши специалисты готовы оказать помощь в точном расчете конфигурации исходя из особенностей бизнеса и предполагаемых нагрузок, а также подберут оптимальное серверное решение.

      IPv4 - что это

      Основной целью для пользователей сети интернет является передача и получение данных. При этом мало кто из рядовых посетителей веб-ресурсов задумывается, каким образом тот или иной контент достигает конечной точки именно на вашем устройстве – смартфоне, планшете или ноутбуке. Для передачи информационных данных из точки А в точку Б применяется специальный протокол сетевого взаимодействия. Наибольшее распространение получил протокол интернета версии TCP/IPv4 (Transmission Control Protocol/Internet Protocol).

      Немного истории

      Протоколы управления передачей информации по сетям связи разработаны учеными Винтоном Грей Серфом и Робертом Эллиотом Каном в середине семидесятых годов прошлого столетия по заказу оборонного ведомства США. В то время Пентагон всерьез рассматривал вероятность возникновения глобальной ядерной войны. Стояла задача обеспечения непрерывной передачи данных по сетям связи даже в случае выхода из строя половины оборудования, размещенного в различных точках страны. Существовавшие на тот момент способы трансляции подразумевали соединение между узлами по прямым каналам связи. В случае отказа любого из них передача данных прерывалась. Протокол IPv4 впервые использовали в 1983 году в сети передачи данных ARPANET, явившейся прототипом современного интернета.

      Принцип работы протокола IPv4

      Internet Protocol представляет собой датаграмму, содержит заголовок и полезную нагрузку. Заголовок шифрует адреса источника и назначение информационного пакета, в то время как полезная нагрузка переносит фактические данные. В отличие от сетей прямой коммутации канала, критичных к выходу из строя любого транзитного узла, передача данных с помощью интернет-протокола IPv4 осуществляется пакетным способом. При этом используются разные маршруты передачи ip-пакетов. Допустима ситуация, когда пакеты нижнего уровня достигают конечного узла раньше, чем пакеты верхнего. Некоторые из них теряются во время трансляции. В этом случае посылается повторный запрос, происходит восстановление потерянных фрагментов.

      Каждый сетевой узел в модели TCP/IP имеет собственный IP-адрес. Это обеспечивает гарантированную идентификацию устройств при установке соединения и обмене данными. В то же время отличают два уровня распределения адресов по протоколу TCP/ IPv4 – публичные и частные. Первые уникальны для всех без исключения устройств, осуществляющих обмен данными в общемировой WEB-сети. Например, IP-адрес 8.8.8.8 принадлежит компании Google и является адресом публичного DNS-сервера компании. При построении локальной подсети Ethernet идентификация внутренних устройств передачи данных осуществляется путем назначения собственных ip-адресов для каждой единицы оборудования. Коммутация осуществляется через порты роутера (маршрутизатора), каждому присваивается отдельный сетевой адрес с возможным дополнительным разделением на подсети за счет использования маски IP-адреса.

      Изначально адресация в IP-сетях систематизировалась по классовому принципу путем деления на большие блоки, что делало ее неудобной в использовании как конечными пользователями, так и провайдерами. Ей на смену пришла бесклассовая схема под названием Classless Inter-Domain Routing (CIDR).

      Основной атрибут протокола TCP/IPv4, его адрес, состоит из тридцати двух бит (четырех байт) и записывается четырьмя десятичными числами от 0 до 255, которые разделены точками. Есть альтернативные способы записи (двоичное, десятичное, без точки и т.д.), но они не меняют принципа работы протокола. В стандартном формате запись CIDR производится в виде IP-адреса, следующего за ним символа "/" и числа, обозначающего битовую маску подсети: 13.14.15.0/24. В данной комбинации число 24 означает количество битов в маске подсети, имеющих приоритетное значение. Полный IP-адрес состоит из 32 бит, маской являются старшие 24, соответственно, общее количество возможных адресов в сети составит 32 - 24 = 8 бит (256 IP-адресов). В этом диапазоне описываются сети, состоящие из различного количества доступных адресов путем их вариативной комбинации. Одна большая сеть может быть раздроблена на несколько более мелких подсетей нижнего уровня.

      Айпи4

      Режимы адресации протокола версии IPv4

      Протокол IPv4 поддерживает три режима адресации:

      1. Одноадресный. При использовании данного режима данные передаются только на один сетевой узел, причем каждый из них может являться как отправителем, так и получателем. Поле адреса назначения содержит 32-битный IP-адрес устройства-получателя. Одноадресный режим используется чаще всего при обращении к интернет-протоколу.
      2. Широковещательный. При его использовании все устройства, подключенные к сети с множественным доступом, имеют возможность получения и обработки датаграмм, передаваемых по протоколу TCP/IPv4. Для этого поле ip-адреса назначения включает в себя специальный широковещательный код идентификации.
      3. Многоадресный. Согласно правилам обработки данных по протоколу IPv4, сюда входят адреса в диапазоне от 224.0.0.0 до 239.255.255.255. Режим объединяет два предыдущих, определяется наиболее значимой моделью 1110. В этом пакете адрес назначения содержит специальный код, который начинается с 224.x.x.x и может использоваться более чем одним узлом.

      Для домашних сетевых устройств, будь то компьютер, смартфон или холодильник с функцией контроля через соединение Wi-Fi, назначается один общий ip-адрес. Согласно протоколу IPv4 он присваивается провайдером и закрепляется на уровне сетевого коммуникационного оборудования – роутера. Данный IP-адрес может быть статическим (неизменным) либо динамическим, меняющимся при отключении роутера от сети.

      Протокол IPv4

      Протокол IPv4 в эталонной модели сетевого взаимодействия OSI 7

      Модель OSI описывает общие принципы взаимодействия сетевых устройств по иерархическому признаку, состоящему из семи уровней: физического, канального, сетевого, транспортного, сеансового, представления, прикладного.

      Уровни OSI

      Как видим, протокол интернета TCP/IPv4 относится к третьему по счету уровню, сетевому. На этом уровне модели OSI происходит формирование оптимальных маршрутов и путей передачи данных между устройствами с учетом нагрузки на узлы сети. Здесь же происходит процесс трансляции – преобразования логических сетевых адресов в физические и наоборот. На программно-физическом уровне эту задачу выполняют роутеры, установленные у провайдеров и в конечной точке подключения интернета. Каждый уровень взаимодействует с верхним и нижним в обе стороны, выполняя определенную функцию обработки и передачи данных. Так третий уровень модели OSI, получив закодированную информацию от четвертого, делит ее на фрагменты, добавляя служебную информацию, и передает на второй уровень. Либо наоборот, при поступлении данных со второго сегмента на сетевом уровне происходит обработка и объединение пакетов, их передача на вышестоящий по иерархической цепочке модели OSI.

      Данную модель не зря называют идеальной, так как она описывает общие принципы сетевого взаимодействия. На момент ее появления весь мир уже активно использовал стек протоколов IPv4. Причем модель TCP/IP более точно и правильно описывает существующие процессы передачи данных по сетям взаимодействия.

      Любопытно. Разделением и присвоением IP-адресов занимаются четыре некоммерческих организации, разделенные по региональному принципу: RIPE NCC отвечает за Европу, ARIN действует на территории Америки, APNIC – в Азии и Тихоокеанском регионе, LACNIC – в Латинской Америке и на Карибах. Причем Россию отнесли в данной классификации к европейской RIPE. На самом деле полномочия выдачи ip-адресов делегированы локальным интернет-регистраторам (LIR), коими являются наиболее крупные провайдеры. Именно они работают с конечными пользователями в этом вопросе, в том числе финансово содержат вышестоящего регистратора за счет роялти.

      Заключение

      При всех своих достоинствах протокол интернета IPv4 имеет один критичный недостаток. Количество адресов, созданных с его помощью, не может превысить цифру 4 294 967 296 (минимальный адрес - 0.0.0.0, максимальный - 255.255.255.255). С учетом того, что население земного шара составляет более семи миллиардов человек, а количество всевозможных сетевых устройств растет ежедневно, предельный порог довольно близок. Согласно прогнозу RIPE NCC, в ближайшее время компаниям придется перекупать IP-адреса или ждать, когда они появятся в свободном доступе. Стоимость одного IP-адреса может составить $12-18, при этом минимальный пакет должен состоять не меньше чем из 256 адресов.

      Случаи из опыта разработки различных WEB проектов. Интересные факты, статьи, впечатления. Программирование и все о нем в сфере WEB.

      Как ни странно, но многие разработчики до сих пор хранят ip адрес в базе плейн текстом, что вобщем то совсем непрактично.

      На самом деле адрес IPv4 удобно хранить в виде беззнакового int 32. И в этой кратенькой статье я вам расскажу о том, как это делать и какие неоспоримые преимущества это дает. Я думаю, этот материал будет полезен многим.


      UPD: Написал схожую статью для IPv6, так же советую прочесть: Работа c IPv6 в PHP и MySQL

      Работа в PHP

      Для начала рассмотрим способ преобразования ip в int. В PHP есть функция ip2long:

      ip2long — Конвертирует строку, содержащую (IPv4) Интернет адрес с точками в допустимый адрес

      Возвращает IPv4 адрес или FALSE, если параметр ip_address содержит ошибку.

      То есть возвращает unsigned 32 int. Это то что нам подходит. Но появляется вот какой нюанс, в зависимости от того какой разрядности у нас система, эта функция будет выдавать разные результаты. Вот, к примеру, на 64 битной:

      Собственно, все верно. Так и должно быть. Но вот на 32 разрядной системе это будет выглядеть иначе:

      Этот момент, кстати, отмечен в документации:

      Посему, эту функцию, при работе с базой данных, следует использовать так:

      Кстати о базе данных. Для поля в котором вы будете хранить IP адрес, не забывайте указывать UNSIGNED, иначе все ваши труды по правильному представлению числа в самом PHP пойдут насмарку.

      Обратное преобразование выполняется с помощью функции long2ip. С ней, я думаю, вы сможете разобраться самостоятельно.

      Работа в SQL

      В MySQL есть две встроенные функции

      То есть можно не заморачиваться с приведением адреса IP в скриптах, а возложить эту обязанность на БД. Так например:
      INSERT . VALUES(. INET_ATON('255.255.255.255'), . )
      SELECT . WHERE ip = INET_ATON('255.255.255.255')

      Но в нашем случае, все очень просто:
      SELECT . WHERE ip BETWEEN INET_ATON('158.192.12.0') AND INET_ATON('158.192.94.255')
      И если вы используете индекс по данному полю, то результат вернется практически моментально.

      Или надо получить адрес подсети по маске:
      SELECT . (ip & INET_ATON('255.255.255.0')), .

      Вобщем все что вашей душе угодно :)

      Подведем итог

      Чем же все таки этот метод лучше:

      • в базе данных теперь будет хранится 4 байта INT вместо 15 байт VARCHAR;
      • бОльшая скорость при использовании операций выборки по ip адресу;
      • простой поиск по диапазону;
      • битовые операции с IP адресами.
      • перевод формы представления адреса из строки в число и обратно;
      • отсутствие человеко-понятного отображения значения при просмотре значений через, к примеру, phpMyAdmin.

      Кстати в phpMyAdmin, по крайней мере в последних версиях, есть возможность отображать такие значения в понятном виде автоматически (см. здесь).

      Читайте также: